dmencu 2.2.16 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/client/client/client.d.ts +4 -1
  2. package/dist/client/client/client.js +165 -271
  3. package/dist/client/unlogged/abrir-formulario.d.ts +1 -8
  4. package/dist/client/unlogged/abrir-formulario.js +7 -48
  5. package/dist/client/unlogged/bypass-formulario.d.ts +2 -2
  6. package/dist/client/unlogged/bypass-formulario.js +26 -14
  7. package/dist/client/unlogged/redux-formulario.d.ts +141 -92
  8. package/dist/client/unlogged/redux-formulario.js +36 -85
  9. package/dist/client/unlogged/render-config.d.ts +52 -0
  10. package/dist/client/unlogged/render-config.js +161 -0
  11. package/dist/client/unlogged/render-formulario.d.ts +139 -0
  12. package/dist/client/unlogged/render-formulario.js +2045 -0
  13. package/dist/client/unlogged/render-formulario.tsx +610 -234
  14. package/dist/client/unlogged/render-general.d.ts +147 -0
  15. package/dist/client/unlogged/render-general.js +254 -0
  16. package/dist/client/unlogged/render-general.tsx +9 -3
  17. package/dist/client/unlogged/render-init.d.ts +17 -0
  18. package/dist/client/unlogged/render-init.js +127 -0
  19. package/dist/client/unlogged/tipos.d.ts +6 -4
  20. package/dist/client/unlogged/tipos.js +1 -1
  21. package/dist/server/server/app-dmencu.d.ts +8 -2
  22. package/dist/server/server/app-dmencu.js +20 -9
  23. package/dist/server/server/procedures-dmencu.d.ts +1 -1
  24. package/dist/server/server/procedures-dmencu.js +24 -21
  25. package/dist/server/server/table-sincronizaciones.js +3 -2
  26. package/dist/server/unlogged/tipos.d.ts +6 -4
  27. package/dist/server/unlogged/tipos.js +1 -1
  28. package/dist/unlogged/unlogged/abrir-formulario.d.ts +1 -8
  29. package/dist/unlogged/unlogged/abrir-formulario.js +7 -48
  30. package/dist/unlogged/unlogged/bypass-formulario.d.ts +2 -2
  31. package/dist/unlogged/unlogged/bypass-formulario.js +26 -14
  32. package/dist/unlogged/unlogged/redux-formulario.d.ts +141 -92
  33. package/dist/unlogged/unlogged/redux-formulario.js +36 -85
  34. package/dist/unlogged/unlogged/render-config.d.ts +52 -0
  35. package/dist/unlogged/unlogged/render-config.js +161 -0
  36. package/dist/unlogged/unlogged/render-formulario.d.ts +57 -10
  37. package/dist/unlogged/unlogged/render-formulario.js +365 -171
  38. package/dist/unlogged/unlogged/render-formulario.tsx +610 -234
  39. package/dist/unlogged/unlogged/render-general.d.ts +10 -0
  40. package/dist/unlogged/unlogged/render-general.js +8 -4
  41. package/dist/unlogged/unlogged/render-general.tsx +9 -3
  42. package/dist/unlogged/unlogged/render-init.d.ts +17 -0
  43. package/dist/unlogged/unlogged/render-init.js +127 -0
  44. package/dist/unlogged/unlogged/tipos.d.ts +6 -4
  45. package/dist/unlogged/unlogged/tipos.js +1 -1
  46. package/dist/unlogged/unlogged/unlogged.js +234 -50
  47. package/package.json +1 -1
@@ -13,12 +13,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
13
13
  if (v !== undefined) module.exports = v;
14
14
  }
15
15
  else if (typeof define === "function" && define.amd) {
16
- define(["require", "exports", "like-ar", "row-validator", "best-globals", "cast-error", "./tipos"], factory);
16
+ define(["require", "exports", "like-ar", "row-validator", "best-globals", "cast-error", "./tipos", "./render-config", "./redux-formulario"], factory);
17
17
  }
18
18
  })(function (require, exports) {
19
19
  "use strict";
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.calcularPermiteBorrarBF = exports.calcularDisabledBF = exports.calcularActualBF = exports.getFormulariosForValuePkRaiz = exports.buscarFormulariosHijos = exports.getMainFormForVivienda = exports.setCalculoReaNoRea = exports.defOperativo = exports.buscarNoReaEnRespuestas = exports.getFuncionValorar = exports.getFuncionHabilitar = exports.helpersCasilleros = exports.MAXCP = exports.ultimaVaribleVivienda = exports.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO = exports.NO_CAMBIAR__SOLO_TRAER_STATUS = exports.getDatosByPass = exports.intentarBackup = exports.crearEncuesta = exports.MODO_DM_LOCALSTORAGE_KEY = void 0;
21
+ exports.calcularPermiteBorrarBF = exports.calcularDisabledBF = exports.calcularActualBF = exports.getFormulariosForValuePkRaiz = exports.buscarFormulariosHijos = exports.getMainFormForVivienda = exports.setCalculoReaNoRea = exports.defOperativo = exports.buscarNoReaEnRespuestas = exports.getFuncionValorar = exports.getFuncionHabilitar = exports.helpersCasilleros = exports.MAXCP = exports.ultimaVaribleVivienda = exports.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO = exports.NO_CAMBIAR__SOLO_TRAER_STATUS = exports.getDatosByPass = exports.intentarBackup = exports.crearEncuesta = exports.hayDatosByPassAlmacenados = void 0;
22
22
  exports.setCalcularVariables = setCalcularVariables;
23
23
  exports.setCalcularVariablesEspecificasOperativo = setCalcularVariablesEspecificasOperativo;
24
24
  exports.setPersistirDatosByPass = setPersistirDatosByPass;
@@ -59,7 +59,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
59
59
  const best_globals_1 = require("best-globals");
60
60
  const cast_error_1 = require("cast-error");
61
61
  const tipos_1 = require("./tipos");
62
- exports.MODO_DM_LOCALSTORAGE_KEY = 'modo_dm';
62
+ const render_config_1 = require("./render-config");
63
+ const redux_formulario_1 = require("./redux-formulario");
63
64
  var especiales = {};
64
65
  function setCalcularVariables(calcularVariables) {
65
66
  especiales.calcularVariables = calcularVariables;
@@ -68,6 +69,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
68
69
  especiales.calcularVariablesEspecificasOperativo = calcularVariablesEspecificasOperativo;
69
70
  }
70
71
  var datosByPass = {};
72
+ const hayDatosByPassAlmacenados = () => datosByPass && Object.keys(datosByPass).length > 0;
73
+ exports.hayDatosByPassAlmacenados = hayDatosByPassAlmacenados;
74
+ function getRect(element) {
75
+ var rect = { top: 0, left: 0, width: element.offsetWidth, height: element.offsetHeight };
76
+ var current = element;
77
+ while (current != null) {
78
+ rect.top += current.offsetTop;
79
+ rect.left += current.offsetLeft;
80
+ current = current.offsetParent;
81
+ }
82
+ return rect;
83
+ }
71
84
  //@ts-ignore arranca en blanco
72
85
  var estructura = null;
73
86
  let persistirDatosByPassInterno = () => {
@@ -78,16 +91,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
78
91
  }
79
92
  function persistirDatosByPass(dbpp) {
80
93
  return __awaiter(this, void 0, void 0, function* () {
81
- yield persistirDatosByPassInterno(dbpp);
94
+ yield (0, render_config_1.getFormRenderer)().persistirDatos(dbpp);
82
95
  datosByPass.dirty = false;
83
96
  refrescarMarcaDirty();
84
97
  });
85
98
  }
86
99
  const crearEncuesta = (idCarga, callBack) => {
87
- const LAST_AUTO_VALUE_PK_RAIZ = 'proximo_valor_pk_raiz';
88
- const NEXT_AUTO_VALUE_PK_RAIZ = my.getLocalVar(LAST_AUTO_VALUE_PK_RAIZ) || '-1';
100
+ const NEXT_AUTO_VALUE_PK_RAIZ = (0, render_config_1.getFormRenderer)().getUltimoValorPkRaiz() || '-1';
89
101
  const estructura = getEstructura();
90
- my.setLocalVar(LAST_AUTO_VALUE_PK_RAIZ, (Number(NEXT_AUTO_VALUE_PK_RAIZ) - 1).toString());
102
+ (0, render_config_1.getFormRenderer)().setUltimoValorPkRaiz((Number(NEXT_AUTO_VALUE_PK_RAIZ) - 1).toString());
91
103
  datosByPass.respuestas[estructura.uaPpal][NEXT_AUTO_VALUE_PK_RAIZ] = {};
92
104
  datosByPass.informacionHdr[NEXT_AUTO_VALUE_PK_RAIZ] = Object.assign(Object.assign({}, estructura.defaultInformacionHdr), { tem: Object.assign({}, estructura.defaultInformacionHdr.tem) });
93
105
  datosByPass.informacionHdr[NEXT_AUTO_VALUE_PK_RAIZ].tem.carga = idCarga;
@@ -117,7 +129,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
117
129
  exports.intentarBackup = intentarBackup;
118
130
  function setEstructura(estructuraACargar) {
119
131
  var _a;
120
- estructura = estructuraACargar;
132
+ estructura = (0, redux_formulario_1.adaptarEstructura)(estructuraACargar);
121
133
  exports.defOperativo.UAprincipal = (_a = (0, like_ar_1.strict)(estructura.unidades_analisis).find(ua => !!ua.principal)) === null || _a === void 0 ? void 0 : _a.unidad_analisis;
122
134
  exports.defOperativo.defFor = (0, like_ar_1.strict)(estructura.formularios).map(f => ({ hermano: f.casilleros.hermano })).plain();
123
135
  exports.defOperativo.defUA = (0, like_ar_1.strict)(estructura.unidades_analisis).map((uaDef, ua) => ({
@@ -127,8 +139,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
127
139
  })).plain();
128
140
  return estructura;
129
141
  }
130
- function setDatosByPass(dbpp) {
131
- datosByPass = Object.assign(Object.assign({ dirty: false }, dbpp), { feedbackRowValidator: {} });
142
+ function setDatosByPass(nuevoPaquete) {
143
+ datosByPass = Object.assign(Object.assign({ dirty: false }, nuevoPaquete), { feedbackRowValidator: {} });
132
144
  calcularFeedbackHojaDeRuta();
133
145
  }
134
146
  var getDatosByPass = () => datosByPass;
@@ -275,10 +287,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
275
287
  elementoEntero = elemento;
276
288
  if (rectElementoEntero == null) {
277
289
  elementoSuperior = elementoEntero;
278
- rectElementoEntero = myOwn.getRect(elementoEntero);
290
+ rectElementoEntero = getRect(elementoEntero);
279
291
  rectElementoSuperior = rectElementoEntero;
280
292
  }
281
- var rect = myOwn.getRect(elemento);
293
+ var rect = getRect(elemento);
282
294
  if (rectElementoEntero.top + rectElementoEntero.height - rect.top < altoPantalla) {
283
295
  elementoSuperior = elemento;
284
296
  rectElementoSuperior = rect;
@@ -296,7 +308,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
296
308
  var result = {};
297
309
  if (elementoEntero != null) {
298
310
  if (rectElementoEntero == null) {
299
- rectElementoEntero = myOwn.getRect(elementoEntero);
311
+ rectElementoEntero = getRect(elementoEntero);
300
312
  }
301
313
  result.elementoInputVariable = elementoVariableAEnfocar;
302
314
  var top = (rectElementoSuperior !== null && rectElementoSuperior !== void 0 ? rectElementoSuperior : rectElementoEntero).top - MARGEN_SCROLL;
@@ -1124,4 +1136,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1124
1136
  return resultado;
1125
1137
  }
1126
1138
  });
1127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBcUNBLG9EQUVDO0lBRUQsNEZBRUM7SUFrQkQsMERBRUM7SUFFRCxvREFJQztJQXVCRCw0Q0FJQztJQWdCRCxzQ0FVQztJQUVELHdDQU9DO0lBV0QsMERBS0M7SUFFRCw0QkFFQztJQUVELHNDQUVDO0lBa0NELDhDQUlDO0lBTUQsMENBaURDO0lBRUQsZ0ZBdUNDO0lBRUQsNERBb0VDO0lBRUQsMENBUUM7SUFFRCw0Q0FRQztJQWtCRCxnREFDQztJQWNELGdFQXlEQztJQUVELHNEQUdDO0lBRUQsc0RBRUM7SUFFRCwwREFFQztJQUVELG9EQUVDO0lBRUQsOERBTUM7SUFFRCwwREFNQztJQUVELDREQWVDO0lBR0Qsd0NBS0M7SUFvSkQsa0RBZ0JDO0lBRUQsa0RBMEJDO0lBc0hELDBDQWtJQztJQWdDRCxzREFLQztJQUVELHdFQWdGQztJQUVELDREQU1DO0lBTUQsZ0VBaUJDO0lBRUQsNERBU0M7SUF5RkQsMERBZ0dDO0lBanlDRCxxQ0FBdUQ7SUFFdkQsaURBQW9HO0lBRXBHLCtDQUErRDtJQUMvRCwyQ0FBc0M7SUFFdEMsbUNBc0JpQjtJQUVKLFFBQUEsd0JBQXdCLEdBQUcsU0FBUyxDQUFDO0lBRWxELElBQUksVUFBVSxHQUFHLEVBR2hCLENBQUE7SUFDRCxTQUFnQixvQkFBb0IsQ0FBQyxpQkFBeUU7UUFDMUcsVUFBVSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO0lBQ3BELENBQUM7SUFFRCxTQUFnQix3Q0FBd0MsQ0FBQyxxQ0FBNkY7UUFDbEosVUFBVSxDQUFDLHFDQUFxQyxHQUFHLHFDQUFxQyxDQUFBO0lBQzVGLENBQUM7SUFTRCxJQUFJLFdBQVcsR0FBRyxFQUFpQixDQUFBO0lBRW5DLDhCQUE4QjtJQUM5QixJQUFJLFVBQVUsR0FBZSxJQUFrQixDQUFDO0lBRWhELElBQUksMkJBQTJCLEdBQW9ELEdBQUcsRUFBRTtRQUNwRixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7SUFDdkQsQ0FBQyxDQUFBO0lBRUQsU0FBZ0IsdUJBQXVCLENBQUMsdUJBQW9EO1FBQ3hGLDJCQUEyQixHQUFHLHVCQUF1QixDQUFDO0lBQzFELENBQUM7SUFFRCxTQUFzQixvQkFBb0IsQ0FBQyxJQUE2Qjs7WUFDcEUsTUFBTSwyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxXQUFXLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtZQUN6QixtQkFBbUIsRUFBRSxDQUFDO1FBQzFCLENBQUM7S0FBQTtJQUVNLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxRQUF3QyxFQUFFLEVBQUU7UUFDeEYsTUFBTSx1QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQTtRQUN2RCxNQUFNLHVCQUF1QixHQUFnQixFQUFFLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLElBQUksSUFBSSxDQUFBO1FBQzVGLE1BQU0sVUFBVSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsRUFBb0IsQ0FBQztRQUMxRixXQUFXLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLG1DQUM1QyxVQUFVLENBQUMscUJBQXFCLEtBQ25DLEdBQUcsb0JBQU8sVUFBVSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsSUFDakQsQ0FBQztRQUNGLFdBQVcsQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztRQUN4RSwwQkFBMEIsRUFBRSxDQUFDO1FBQzdCLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDbEMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ1gsVUFBVSxFQUFFLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsU0FBUztZQUM1RCxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBZ0I7U0FDbkUsQ0FBQyxDQUNsQixDQUFBLENBQUEsdUVBQXVFO0lBQzVFLENBQUMsQ0FBQTtJQWxCWSxRQUFBLGFBQWEsaUJBa0J6QjtJQUdELFNBQWdCLGdCQUFnQixDQUM1QixnQkFBdUc7UUFFdkcsYUFBYSxHQUFHLGdCQUFnQixDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFJLGFBQWEsR0FBMEYsR0FBRyxFQUFFO1FBQzVHLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQTtJQUNwRCxDQUFDLENBQUE7SUFFTSxJQUFJLGNBQWMsR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1FBQ3pDLElBQUksRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNoRSxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNwRCxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQTBDLENBQUMsQ0FBQTtRQUMzRCxDQUFDO0lBQ0wsQ0FBQyxDQUFBO0lBUlUsUUFBQSxjQUFjLGtCQVF4QjtJQUVELFNBQWdCLGFBQWEsQ0FBQyxpQkFBNkI7O1FBQ3ZELFVBQVUsR0FBRyxpQkFBaUIsQ0FBQztRQUMvQixvQkFBWSxDQUFDLFdBQVcsR0FBRyxNQUFBLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQywwQ0FBRSxlQUFnQixDQUFBO1FBQzVHLG9CQUFZLENBQUMsTUFBTSxHQUFHLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUMxRyxvQkFBWSxDQUFDLEtBQUssR0FBRyxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRSxFQUFFLEVBQUUsS0FBSyxDQUFDLFdBQXlCO1lBQ25DLFNBQVMsRUFBRSxJQUFBLGdCQUFNLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNyQyxNQUFNLEVBQUUsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7U0FDaEcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDWCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQsU0FBZ0IsY0FBYyxDQUFDLElBQW1EO1FBQzlFLFdBQVcsaUNBQ1AsS0FBSyxFQUFFLEtBQUssSUFDVCxJQUFJLEtBQ1Asb0JBQW9CLEVBQUUsRUFBeUMsR0FDbEUsQ0FBQTtRQUNELDBCQUEwQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVNLElBQUksY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQTtJQUFsQyxRQUFBLGNBQWMsa0JBQW9CO0lBRTdDLFNBQVMsV0FBVyxDQUFDLENBQVM7UUFDMUIsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNkLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBZ0IsdUJBQXVCO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7WUFDckYsMEJBQTBCLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUMsb0JBQW9CLENBQUM7SUFDNUMsQ0FBQztJQUVELFNBQWdCLFFBQVE7UUFDcEIsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFBO0lBQzVCLENBQUM7SUFFRCxTQUFnQixhQUFhO1FBQ3pCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFnQ0QsSUFBSSx1QkFBdUIsR0FBRyxFQUE4QyxDQUFDO0lBRTdFLFNBQWdCLGlCQUFpQixDQUFrQyxHQUF3QjtRQUN2Rix5RkFBeUY7UUFDekYsSUFBSSxpQkFBaUIsR0FBeUIsdUJBQXVCLENBQUM7UUFDdEUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNwQyxDQUFDO0lBTUQsU0FBZ0IsZUFBZSxDQUFDLEtBQVksRUFBRSxhQUF1QixFQUFFLGNBQXdCO1FBQzNGLElBQUksb0JBQW9CLEdBQUcsRUFBZ0IsQ0FBQztRQUM1QyxnRUFBZ0U7UUFDaEUsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQXdCLENBQUM7UUFDdEQsSUFBSSxjQUE4QixDQUFDO1FBQ25DLElBQUksU0FBZ0IsQ0FBQztRQUNyQixJQUFJLGVBQWUsR0FBaUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQTtRQUN2SCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxJQUFJLEdBQStFLEVBQUUsQ0FBQztRQUMxRixPQUFPLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLElBQUksS0FBSyxHQUFtQixVQUFVLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsRCxZQUFZLHFCQUFRLFlBQVksQ0FBRSxDQUFDO1lBQ25DLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUN0QyxlQUFlLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQTtRQUNqQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUcsQ0FBQTtZQUNwRCxJQUFJLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkQsSUFBSSxnQkFBZ0IsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQy9FLENBQUM7WUFDRCxJQUFJLFVBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdEMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxrQkFBa0IsR0FBRyxVQUFVLENBQUM7WUFDcEMsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQTtZQUNyRyxVQUFVLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELElBQUksVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNyQixJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNqQixVQUFVLEdBQUcsRUFBZ0IsQ0FBQTtvQkFDN0Isa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFBO29CQUMxRCxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtnQkFDakUsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLFFBQVEsNEJBQTRCLGVBQWUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RHLENBQUM7WUFDTCxDQUFDO1lBQ0QsU0FBUyxLQUFULFNBQVMsR0FBSyxZQUFZLEVBQUM7WUFDM0IscUVBQXFFO1lBQ3JFLGNBQWMsS0FBZCxjQUFjLEdBQUssVUFBVSxFQUFDO1lBQzlCLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLG9CQUFvQixpREFBUSxvQkFBb0IsR0FBSyxVQUFVLEtBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsZ0JBQWdCLEdBQUUsQ0FBQTtZQUM1RyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU87WUFDSCxVQUFVLEVBQUUsb0JBQW9CO1lBQ2hDLDZGQUE2RjtZQUM3RixjQUFjLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxLQUFLO1NBQ25ELENBQUE7SUFDTCxDQUFDO0lBRUQsU0FBZ0Isa0NBQWtDLENBQUMsU0FBb0I7UUFDbkUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUMvRCxJQUFJLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDO1FBQ2hELElBQUksVUFBVSxHQUFHLElBQUEsb0JBQVksRUFBQyxTQUFTLENBQUMsQ0FBQTtRQUN4QyxJQUFJLFlBQVksR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEUsS0FBSyxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQy9CLElBQUksR0FBRyxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDeEMsR0FBRyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7Z0JBQzdCLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQTBCLENBQUM7WUFDNUUsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLHlFQUF5RTtnQkFDekUsU0FBUztZQUNiLENBQUM7WUFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwSCxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ25ELENBQUM7WUFDRCxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNsRCxDQUFDO1lBQ0QsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDMUQsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNoQyxhQUFhO2dCQUNiLFFBQVEsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7Z0JBQ3BFLGFBQWE7Z0JBQ2IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztZQUM3RSxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFnQix3QkFBd0IsQ0FBQyxVQUE4Qjs7UUFDbkUsSUFBSSx3QkFBd0IsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxPQUFPLFVBQVUsRUFBRSxDQUFDO2VBQzdHLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsSUFBSSxRQUFRLEdBQUcsd0JBQXdCLENBQUM7UUFDeEMsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLGFBQWEsQ0FBQztRQUM1RCxJQUFJLGNBQWMsR0FBdUIsSUFBSSxDQUFDLENBQUMscUVBQXFFO1FBQ3BILElBQUksa0JBQWtCLEdBQTRDLElBQUksQ0FBQztRQUN2RSxJQUFJLGdCQUFnQixHQUF1QixJQUFJLENBQUMsQ0FBQyx1RkFBdUY7UUFDeEksSUFBSSxvQkFBb0IsR0FBNEMsSUFBSSxDQUFDO1FBQ3pFLE9BQU8sUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQ0ksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7bUJBQ2pDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzttQkFDdkMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO21CQUN2QyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQzttQkFDaEQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUM7bUJBQ3ZELFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO21CQUM5QyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FDakQsSUFBSSxRQUFRLENBQUMsWUFBWSxHQUFHLENBQUMsRUFDaEMsQ0FBQztnQkFDQyxJQUFJLGdCQUFnQixJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsWUFBWSxHQUFHLFlBQVksRUFBRSxDQUFDO29CQUNuRSxjQUFjLEdBQUcsUUFBUSxDQUFDO2dCQUM5QixDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxjQUFjLElBQUksSUFBSTt3QkFBRSxjQUFjLEdBQUcsUUFBUSxDQUFDO29CQUN0RCxJQUFJLGtCQUFrQixJQUFJLElBQUksRUFBRSxDQUFDO3dCQUM3QixnQkFBZ0IsR0FBRyxjQUFjLENBQUE7d0JBQ2pDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBZSxDQUFDLENBQUE7d0JBQ25ELG9CQUFvQixHQUFHLGtCQUFrQixDQUFDO29CQUM5QyxDQUFDO29CQUNELElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ25DLElBQUksa0JBQWtCLENBQUMsR0FBRyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksRUFBRSxDQUFDO3dCQUMvRSxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7d0JBQzVCLG9CQUFvQixHQUFHLElBQUksQ0FBQztvQkFDaEMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLFFBQVEsR0FBRyxJQUFJLENBQUM7b0JBQ3BCLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7WUFDRCxRQUFRLEdBQUcsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsYUFBYSxtQ0FBSSxJQUFJLENBQUM7UUFDL0MsQ0FBQztRQUNELElBQUksZ0JBQWdCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0IsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLE1BQU0sR0FNTixFQUFFLENBQUM7UUFDUCxJQUFJLGNBQWMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLGtCQUFrQixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUM3QixrQkFBa0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQ3RELENBQUM7WUFDRCxNQUFNLENBQUMscUJBQXFCLEdBQUcsd0JBQXdCLENBQUM7WUFDeEQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsYUFBcEIsb0JBQW9CLGNBQXBCLG9CQUFvQixHQUFJLGtCQUFrQixDQUFDLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQztZQUMzRSxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUNqQixNQUFNLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDbkUsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7WUFDakMsQ0FBQztpQkFBTSxJQUFJLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUM7Z0JBQ2hILE1BQU0sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtZQUMxQixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxTQUFnQixlQUFlLENBQzNCLE1BQW9HLEVBQ3BHLElBQU8sRUFDUCxLQUFhO1FBRWIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQWdCLGdCQUFnQixDQUM1QixNQUFTLEVBQ1QsSUFBTyxFQUNQLEtBQVc7UUFFWCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxnQ0FBZ0MsQ0FBQyxLQUFZO1FBQ2xELElBQUksVUFBVSxDQUFDLDJCQUEyQixJQUFJLENBQUMsQ0FBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsV0FBVyxDQUFBLEVBQUUsQ0FBQztZQUN0RSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsMkJBQTJCLENBQUM7aUJBQ3pDLE9BQU8sQ0FBQyxDQUFDLHFCQUFxQixFQUFFLFlBQVksRUFBRSxFQUFFO2dCQUM3QyxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM5RixJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxZQUFZLEtBQUssRUFBRSxDQUFDO29CQUM1QyxJQUFJLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzt3QkFDakQsVUFBVSxDQUFDLEtBQUssR0FBRyxZQUEwQixDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUMxRCxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQTtRQUNWLENBQUM7SUFDTCxDQUFDO0lBQUEsQ0FBQztJQUdGLFNBQWdCLGtCQUFrQixDQUFDLFFBQWdELEVBQUUsWUFBeUI7SUFDOUcsQ0FBQztJQUVZLFFBQUEsNkJBQTZCLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUE7SUFDdEUsUUFBQSxxQ0FBcUMsR0FBRyxNQUFNLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtJQUVuRyxTQUFTLG1CQUFtQjtRQUN4QixJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBc0IsQ0FBQztRQUM5RSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsSUFBSSxXQUFXLENBQUMsUUFBUSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM5QyxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUM5QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFnQiwwQkFBMEIsQ0FBQyxPQUkxQyxFQUFFLFlBQXlCOztRQUN4QixJQUFJLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQTtRQUM1QixJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDN0MsSUFBSSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLElBQUksZUFBZSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLGFBQWEsR0FBRyxRQUFRLElBQUkscUNBQTZCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVGLElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFBLG9CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUN2RSxJQUFJLFNBQVMsS0FBSyw2Q0FBcUMsSUFBSSxRQUFRLElBQUkscUNBQTZCLEVBQUUsQ0FBQztZQUNuRyxJQUFJLFNBQVMsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDbkIsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixDQUFDO2lCQUFNLElBQUksQ0FBQSxNQUFBLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsMENBQUUsSUFBSSxLQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUMvRyxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDcEIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztZQUNMLENBQUM7WUFDRCx5REFBeUQ7WUFDekQsY0FBYyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQTtZQUNyRixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxhQUFULFNBQVMsY0FBVCxTQUFTLEdBQUksSUFBSSxDQUFDLENBQUMsNEJBQTRCO1lBQzFFLENBQUM7aUJBQU0sQ0FBQztnQkFDSixpQkFBaUIsR0FBRyxNQUFBLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLDBDQUFFLFNBQVMsQ0FBQztZQUNsRSxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksaUJBQXdELENBQUM7UUFDN0QsSUFBSSxRQUFRLElBQUkscUNBQTZCLElBQUksQ0FBQyxjQUFjLElBQUksNkNBQXFDLEtBQUksTUFBQSxXQUFXLENBQUMsY0FBYywwQ0FBRyxRQUFRLENBQUMsQ0FBQSxDQUFDLEVBQUUsQ0FBQztZQUNuSixxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDakQsSUFBSSxVQUFVLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsV0FBVyxDQUFBLEVBQUUsQ0FBQztnQkFDdkQsZUFBZSxDQUFDO29CQUNaLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBQSw4QkFBc0IsRUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztvQkFDeEcsVUFBVTtvQkFDVixjQUFjO29CQUNkLGNBQWMsRUFBRSxRQUFRO29CQUN4QixLQUFLLEVBQUUsS0FBSztpQkFDZixDQUFDLENBQUE7WUFDTixDQUFDO1lBQ0QsV0FBVyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLGNBQWMsQ0FBQztZQUN4RCxjQUFjLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDO1lBQ2hFLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLFdBQVcsR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBQSxvQkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDcEUsZ0NBQWdDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7WUFDN0QsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO1lBQzdCLEdBQUcsQ0FBQztnQkFDQSxpQkFBaUIsR0FBRyxNQUFBLFdBQVcsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsMENBQUUsU0FBUyxDQUFDO1lBQzNFLENBQUMsUUFBUSxhQUFhLElBQUksSUFBSSxJQUFJLGNBQWMsSUFBSSxpQkFBaUIsSUFBSSxJQUFJLElBQUksaUJBQWlCLElBQUksS0FBSyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLG1CQUFtQixFQUFDO1lBQ2hPLElBQUksaUJBQWlCLElBQUksSUFBSSxJQUFJLENBQUEsTUFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQywwQ0FBRSxNQUFNLEtBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2xGLGlCQUFpQixHQUFHLEtBQUssQ0FBQztZQUM5QixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNyRixDQUFDO0lBRUQsU0FBZ0IscUJBQXFCLENBQUMsT0FBc0UsRUFBRSxZQUF5QjtRQUNuSSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsU0FBZ0IscUJBQXFCLENBQUMsT0FBK0QsRUFBRSxZQUF5QjtRQUM1SCxJQUFJLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMvQyxDQUFDO0lBRUQsU0FBZ0IsdUJBQXVCLENBQUMsT0FBNEYsRUFBRSxZQUF5QjtRQUMzSixJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3RELENBQUM7SUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxPQUFnRCxFQUFFLFlBQXlCO1FBQzVHLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxTQUFnQix5QkFBeUIsQ0FBQyxFQUFFLEtBQUssRUFBb0IsRUFBRSxZQUF5QjtRQUM1RixJQUFJLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekgscUJBQXFCLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELDhCQUE4QixDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDM0ssZ0NBQWdDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7SUFDakUsQ0FBQztJQUVELFNBQWdCLHVCQUF1QixDQUFDLEVBQUUsS0FBSyxFQUFvQixFQUFFLFlBQXlCO1FBQzFGLElBQUksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6SCxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDakQsOEJBQThCLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUMzSyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUNqRSxDQUFDO0lBRUQsU0FBZ0Isd0JBQXdCLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUF1QztRQUMvRixJQUFJLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLElBQUksZUFBZSxHQUFpQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFBO1FBQ3ZILElBQUksS0FBSyxHQUFtQixVQUFVLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUUsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQVcsQ0FBQztRQUMvQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdFLGVBQWUsQ0FBQyxlQUFlLENBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEUscUJBQXFCLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELFdBQVcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDOUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztRQUN0RCxtQkFBbUIsRUFBRSxDQUFDO1FBQ3RCLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRSxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxrQ0FBa0MsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUNqRSxDQUFDO0lBR0QsU0FBZ0IsY0FBYyxDQUMxQixHQUFpRCxFQUNqRCxPQUFVO1FBRVYsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCwwRUFBMEU7SUFHN0QsUUFBQSxxQkFBcUIsR0FBRyw0QkFBMEMsQ0FBQztJQUVuRSxRQUFBLEtBQUssR0FBRyxFQUFFLENBQUM7SUFFeEIsY0FBYztJQUVkLElBQUksbUJBQW1CLEdBQThCO1FBQ2pELEtBQUssRUFBRSxPQUFPO1FBQ2QsSUFBSSxFQUFFLE1BQU07UUFDWixHQUFHLEVBQUUsSUFBSTtRQUNULElBQUksRUFBRSxJQUFJO1FBQ1YsR0FBRyxFQUFFLElBQUk7UUFDVCxHQUFHLEVBQUUsSUFBSTtRQUNULElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLElBQUk7UUFDWCxJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxJQUFJO1FBQ1gsS0FBSyxFQUFFLEdBQUc7UUFDVixLQUFLLEVBQUUsR0FBRztLQUNiLENBQUM7SUFFVyxRQUFBLGlCQUFpQixHQUFHO1FBQzdCLFNBQVMsQ0FBQyxXQUFnQjtZQUN0QixJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLENBQUM7WUFDYixDQUFDO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sQ0FBQyxTQUFpQixFQUFFLFdBQW1CLEVBQUUsRUFBVTtZQUN0RCxJQUFJLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLHdCQUF3QixHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQzdFLENBQUM7WUFDRCxPQUFPLFNBQVMsR0FBRyxXQUFXLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksRUFBRTtZQUNGLE1BQU0sQ0FBQyxDQUFNO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUN4QixDQUFDO1lBQ0QsR0FBRztnQkFDQyxPQUFPLG1CQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDL0IsQ0FBQztZQUNELFlBQVksQ0FBQyxDQUFTO2dCQUNsQixJQUFJLGNBQWMsR0FBRyw4REFBOEQsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQzNGLElBQUksS0FBVyxDQUFDO2dCQUNoQixJQUFJLFlBQXFCLENBQUM7Z0JBQzFCLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ2pCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQzt3QkFDRCxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7b0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDWCxZQUFZLEdBQUcsS0FBSyxDQUFDO29CQUN6QixDQUFDO2dCQUNMLENBQUM7Z0JBQUEsQ0FBQztnQkFDRiw0RkFBNEY7Z0JBQzVGLE9BQU8sY0FBYyxJQUFJLFlBQVksQ0FBQTtZQUN6QyxDQUFDO1lBQ0QsY0FBYyxDQUFDLENBQVM7Z0JBQ3BCLElBQUksY0FBYyxHQUFHLHNDQUFzQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDbkUsT0FBTyxjQUFjLENBQUE7WUFDekIsQ0FBQztZQUNELFNBQVMsQ0FBQyxDQUFNO2dCQUNaLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQzt1QkFDMUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQ2xFLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBTTtnQkFDUCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUNsQixDQUFDO1lBQ0QsR0FBRyxDQUFDLENBQVM7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNyQixDQUFDO1lBQ0QscUJBQXFCLENBQUMsSUFBWSxFQUFFLFFBQWdCLEVBQUUsd0JBQWdDO2dCQUNsRixJQUFJLGVBQWUsR0FBRyxDQUFDLEVBQVEsRUFBRSxFQUFRLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxNQUFNLENBQUM7b0JBQ1gsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDcEQsTUFBTSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEIsT0FBTyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDcEMsQ0FBQyxDQUFBO2dCQUNELElBQUksaUJBQWlCLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1RCx1REFBdUQ7Z0JBQ3ZELElBQUksS0FBSyxHQUFHLG1CQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQzlHLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLHVEQUF1RDtnQkFDdkQsSUFBSSxVQUFVLEdBQUcsbUJBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFDbEYsK0NBQStDO2dCQUMvQyxJQUFJLGVBQWUsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLGFBQWEsR0FBRyxlQUFlLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUztnQkFDbkQsT0FBTyxDQUNILElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxJQUFJLFlBQVk7b0JBQ2pELGFBQWEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQjtpQkFDaEQsQ0FBQTtZQUNMLENBQUM7WUFDRCxxSUFBcUk7WUFDckksMklBQTJJO1lBQzNJLCtGQUErRjtZQUMvRixHQUFHO1lBQ0g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dCQW1DSTtTQUNQO0tBQ0osQ0FBQztJQUlGLElBQUksa0JBQWtCLEdBQXdDLEVBQzdELENBQUE7SUFDRCxJQUFJLGdCQUFnQixHQUFzQyxFQUN6RCxDQUFBO0lBRUQsU0FBZ0IsbUJBQW1CLENBQUMsZ0JBQXdCO1FBQ3hELElBQUksU0FBUyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekQsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQVUsT0FBTztZQUNoRyxJQUFJLGVBQWUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsSUFBSSxlQUFlLElBQUksbUJBQW1CLEVBQUUsQ0FBQztnQkFDekMsT0FBTyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoRCxDQUFDO2lCQUFNLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLE9BQU8sQ0FBQTtZQUNsQixDQUFDO2lCQUFNLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxPQUFPLE9BQU8sQ0FBQTtZQUNsQixDQUFDO2lCQUFNLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLE9BQU8sQ0FBQTtZQUNsQixDQUFDO1lBQ0QsT0FBTyw0QkFBNEIsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFNBQWdCLG1CQUFtQixDQUFJLG1CQUE4RTtRQUNqSCxPQUFPLFVBQVUsNEJBQW9DO1lBQ2pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELElBQUksTUFBTSxHQUFHLDRCQUE0QixDQUFDO2dCQUMxQyxJQUFJLENBQUM7b0JBQ0Qsa0VBQWtFO29CQUNsRSxJQUFJLFdBQVcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQztvQkFDekUsbUJBQW1CLENBQUMsNEJBQTRCLENBQUMsR0FBRyxVQUFVLE9BQU87d0JBQ2pFLElBQUksQ0FBQzs0QkFDRCxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLHlCQUFpQixDQUFDLENBQUM7d0JBQ3pELENBQUM7d0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzs0QkFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxFQUFFLDRCQUE0QixFQUFFLElBQUEscUJBQVEsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFBOzRCQUMvRixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzRCQUNyQixNQUFNLEdBQUcsQ0FBQzt3QkFDZCxDQUFDO3dCQUNELE9BQU8sTUFBTSxDQUFDO29CQUNsQixDQUFDLENBQUE7Z0JBQ0wsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLEVBQUUsNEJBQTRCLEVBQUUsSUFBQSxxQkFBUSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7b0JBQ2hHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BCLE1BQU0sR0FBRyxDQUFDO2dCQUNkLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxtQkFBbUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQTtJQUNMLENBQUM7SUFFWSxRQUFBLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDOUQsUUFBQSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBR3ZFLElBQUksWUFBWSxHQUFHLElBQUEsK0JBQWUsRUFBMkIsRUFBRSxtQkFBbUIsRUFBbkIsMkJBQW1CLEVBQUUsaUJBQWlCLEVBQWpCLHlCQUFpQixFQUFFLENBQUMsQ0FBQTtJQUNqRyxJQUFJLHVCQUF1QixHQUFHLENBQUMsb0JBQXdDLEVBQUUsY0FBOEIsRUFBRSxVQUFzQixFQUFFLFdBQWtCLEVBQUUsU0FBaUIsRUFDekgsRUFBRTs7UUFDbEQsSUFBSSxRQUFRLEdBQWtCLElBQUksQ0FBQztRQUNuQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxNQUFNLEdBQWtCLElBQUksQ0FBQztRQUNqQyxJQUFJLFNBQWlCLENBQUM7UUFDdEIsSUFBSSxNQUFNLEdBQWtCLElBQUksQ0FBQztRQUNqQyw0Q0FBNEM7UUFDNUMsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDaEUsS0FBSyxJQUFJLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLHlDQUF5QztnQkFDdEUsSUFBSSxTQUFTLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ3hCLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztvQkFDeEMsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFDaEIsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDZixTQUFTLEdBQUcsUUFBUSxDQUFDO2dCQUN6QixDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO29CQUNwRCxNQUFNLEdBQUcsVUFBVSxDQUFDO29CQUNwQixNQUFNLEdBQUcsU0FBUyxDQUFDO29CQUNuQixTQUFTLEdBQUcsWUFBWSxDQUFDO2dCQUM3QixDQUFDO2dCQUNELElBQUksVUFBVSxDQUFDLFNBQXVCLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDaEQsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFFLG9CQUFvQjtvQkFDeEMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDZixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFBO2dCQUNoQyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDaEIsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDcEIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUEsZ0JBQU0sRUFBQyxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQSxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsZUFBZSxLQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLFlBQVksS0FBSyxFQUFFLENBQUM7Z0JBQ3pFLEtBQUssSUFBSSxlQUFlLElBQUksSUFBQSxnQkFBUSxFQUFDLE1BQUEsVUFBVSxDQUFDLEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxlQUFlLENBQUMsbUNBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDMUUsSUFBSSxNQUFNLEdBQUcsSUFBQSwrQkFBdUIsRUFBQyxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDeEcsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2pCLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO3dCQUMzQixPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQzt3QkFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQTt3QkFDNUIsTUFBTTtvQkFDVixDQUFDO3lCQUFNLENBQUM7d0JBQ0osUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDaEIsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFDaEIsNkJBQTZCO29CQUNqQyxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFDaEMsQ0FBQyxDQUFBO0lBakRVLFFBQUEsdUJBQXVCLDJCQWlEakM7SUFJVSxRQUFBLFlBQVksR0FBaUI7UUFDcEMsT0FBTyxFQUFFLENBQUMsV0FBdUIsRUFBRSxFQUFFO1lBQ2pDLDBCQUEwQjtZQUMxQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxRQUFRLEdBQWtCLElBQUksQ0FBQztZQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxVQUFVLEVBQUUsQ0FBQyxXQUF1QixFQUFFLEVBQUU7WUFDcEMsMEJBQTBCO1lBQzFCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLFdBQVcsR0FBa0IsSUFBSSxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUE7UUFDdEMsQ0FBQztRQUNELFdBQVcsRUFBRSxDQUFDLFdBQXVCLEVBQUUsRUFBRTtZQUNyQywwQkFBMEI7WUFDMUIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLElBQUksTUFBTSxHQUFrQixJQUFJLENBQUM7WUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQTtRQUM1QixDQUFDO1FBQ0QsY0FBYyxFQUFFLENBQUMsV0FBdUIsRUFBRSxFQUFFO1lBQ3hDLDBCQUEwQjtZQUMxQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxTQUFTLEdBQWtCLElBQUksQ0FBQztZQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFBO1FBQ2xDLENBQUM7UUFDRCxXQUFXLEVBQUUsRUFBc0I7UUFDbkMsS0FBSyxFQUFFLEVBQTRHO1FBQ25ILE1BQU0sRUFBRSxFQUFpRjtLQUM1RixDQUFBO0lBQ0QseUdBQXlHO0lBRWxHLElBQUksa0JBQWtCLEdBQUcsQ0FDNUIsT0FBa0YsRUFDbEYsVUFBMkYsRUFDM0YsV0FBa0YsRUFDbEYsY0FBMkYsRUFDN0YsRUFBRTtRQUNBLG9CQUFZLG1DQUNMLG9CQUFZLEtBQ2YsT0FBTztZQUNQLFVBQVU7WUFDVixXQUFXO1lBQ1gsY0FBYyxHQUNqQixDQUFBO0lBQ0wsQ0FBQyxDQUFBO0lBYlUsUUFBQSxrQkFBa0Isc0JBYTVCO0lBS0QsU0FBUyxHQUFHLENBQUMsR0FBMkI7UUFDcEMsb0RBQW9EO1FBQ3BELElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QixvREFBb0Q7UUFDcEQsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLGtCQUFrQixHQUErQixFQUFFLENBQUE7SUFFdkQsU0FBZ0IsZUFBZSxDQUFDLElBTy9COztRQUNHLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBZ0MsRUFBRSxFQUFFOztZQUN4RCxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQzFCLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDakQsVUFBVSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzNELFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDbEQsTUFBQSxtQkFBbUIsQ0FBQyxnQkFBZ0IsMENBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzlGLElBQUksV0FBVyxJQUFJLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNsRCxJQUFJLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLFlBQVksS0FBSyxFQUFFLENBQUM7b0JBQzVFLEtBQUssSUFBSSxHQUFHLElBQUksSUFBQSxnQkFBUSxFQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ25ELEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUMzRCxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFBO1FBRUQsSUFBSSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUN0RixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0MsSUFBSSxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUUsSUFBSSxzQkFBc0IsR0FBRyxJQUFBLDJCQUFtQixFQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLFFBQTZCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNySixJQUFJLFVBQVUsR0FBRyxJQUFBLDJCQUFtQixFQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxRQUE2QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0gsSUFBSSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsZUFBZSxDQUFDO1FBRXpELElBQUksbUJBQW1CLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksT0FBTyxHQUFHLE1BQUEsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLGVBQWUsSUFBSSxjQUFjLENBQUMsMENBQUUsS0FBSyxDQUFDO1lBQzdHLElBQUksZUFBZSxHQUFHLE1BQUEsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLGVBQWUsSUFBSSxPQUFPLENBQUMsMENBQUUsV0FBVyxDQUFBO1lBQ25ILElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN6QixJQUFJLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUMzQyxrRUFBa0U7b0JBQ2xFLElBQUksS0FBSyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUM3RixJQUFJLGNBQWMsSUFBSSxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUEsZ0JBQU0sRUFBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsK0JBQStCO29CQUNuSSxDQUFDO29CQUNELGNBQWMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUN0QyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUM1QixrRUFBa0U7b0JBQ2xFLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQztvQkFDM0IsSUFBSSxjQUFjLElBQUksbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFBLGdCQUFNLEVBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLCtCQUErQjtvQkFDbkksQ0FBQztvQkFDRCxjQUFjLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDdEMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDdkIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckMsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLFlBQVksS0FBSyxFQUFFLENBQUM7Z0JBQzlDLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQWlCLENBQUE7Z0JBQzdELElBQUksVUFBVSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNsRCxJQUFJLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDbEQsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO29CQUM1RSxDQUFDO29CQUNELGNBQWMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3RDLG9EQUFvRDtvQkFDcEQsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDeEMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQ3JGLENBQUM7b0JBQ0YsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFlBQVksQ0FBQTtnQkFDN0MsQ0FBQztnQkFDRCxPQUFPLGFBQWEsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3pDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBZ0IsQ0FBQyxDQUFBO2dCQUN2QyxDQUFDO2dCQUVELFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ3pHLElBQUksTUFBTSxHQUFHLEtBQW1CLENBQUE7Z0JBQ2hDLElBQUksVUFBVSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQy9DLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztvQkFDMUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFDbEQsQ0FBQztvQkFDQyxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3RELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNqQixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDdEQsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQy9ELE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBQSw4QkFBZSxFQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNySCxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQzt3QkFDNUIsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7NEJBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQzs0QkFDbkM7Ozs7O2dEQUtvQjt3QkFDeEIsQ0FBQzs2QkFBTSxDQUFDOzRCQUNKLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQzs0QkFDaEIsTUFBTSxRQUFRLEdBQWUsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQzs0QkFDeEUsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQztnQ0FDMUIsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFXLEdBQUcsQ0FBQyxDQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO2dDQUN0RixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO2dDQUMxQixLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUN6RCxDQUFDOzRCQUNELElBQUksc0JBQXNCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDcEcsSUFBSSxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQzs0QkFDdkIsSUFBSSxxQkFBcUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDbEQsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxDQUFDO2dDQUNqRCxPQUFPLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUMsNERBQTREOzRCQUM5RyxDQUFDOzRCQUNELElBQUksa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7NEJBQzVDLElBQUksaUJBQWlCLEdBQUcsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDOzRCQUMxRixnQkFBZ0IsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ25HLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQzs0QkFDN0QsVUFBVSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQzs0QkFDckUsTUFBQSxtQkFBbUIsQ0FBQyxnQkFBZ0IsMENBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDdEQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FDckgsQ0FBQTt3QkFDTCxDQUFDO29CQUNMLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixVQUFVLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVELENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyx3QkFBd0I7Z0JBQ3RHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDakUsSUFBSSxtQkFBbUIsQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO29CQUMxRCxVQUFVLENBQUMsbUJBQW1CLENBQUMsbUNBQW1DLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQy9FLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLGNBQWMsQ0FBQyxjQUE4QixFQUFFLFVBQXFDLEVBQUUsZUFBaUMsRUFBRSxjQUFxQjtRQUNuSixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxPQUFPLEdBQUcsVUFBVSxZQUFZLEtBQUssQ0FBQztRQUMxQyxJQUFJLFFBQVEsR0FBaUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQXdCLENBQUMsQ0FBQztRQUUvRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSTtnQkFBRSxTQUFTO1lBRXBCLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBbUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFpQixDQUFDO1lBQy9LLElBQUksT0FBTyxtQ0FBZSxjQUFjLEtBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxZQUFZLElBQUksY0FBYyxDQUFDLFVBQVUsR0FBRSxDQUFDO1lBRTVILElBQUksVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQy9CLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELElBQUksVUFBVSxDQUFDLHFDQUFxQyxFQUFFLENBQUM7Z0JBQ25ELFVBQVUsQ0FBQyxxQ0FBcUMsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDOUUsQ0FBQztZQUVELElBQUksS0FBSyxHQUFHLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pHLEtBQUssSUFBSSxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUEwQixDQUFDLENBQUM7Z0JBQ2pELElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ1osY0FBYyxDQUFDLGNBQWMsRUFBRSxTQUF5QixFQUFFLE1BQTBCLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ25HLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxjQUE4QixFQUFFLFNBQWdCO1FBQ2xGLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsR0FBdUIsQ0FBQyxDQUFDLEtBQUssQ0FBcUIsQ0FBQztRQUVySixjQUFjLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEUsY0FBYyxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxTQUFnQiw4QkFBOEIsQ0FDMUMsb0JBQWtHLEVBQ2xHLFdBQW1FLEVBQ25FLFVBQXNCLEVBQ3RCLEVBQW9CLEVBQ3BCLEtBQVksRUFDWixvQkFBZ0MsRUFBRSwrQ0FBK0M7SUFDakYsZUFBa0MsRUFDbEMsSUFBMEI7UUFFMUIsb0NBQW9DO1FBQ3BDLEtBQUssSUFBSSxVQUFVLElBQUksb0JBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEQsSUFBSSxPQUFPLEdBQUcsb0JBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksb0JBQW9CLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELElBQUEsZ0JBQU0sRUFBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO2dCQUN0RSxJQUFJLE9BQU8sR0FBRyx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUMvRSw4QkFBOEIsQ0FDMUIsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsVUFBVSxrQ0FDTCxLQUFLLEtBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLG1EQUN6QixvQkFBb0IsR0FBSyxjQUFjLEtBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEtBQ2hFLFVBQVUsRUFDVixJQUFJLENBQ1AsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQztRQUNELFVBQVU7UUFDVixLQUFLLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsS0FBSyxJQUFJLFVBQVUsSUFBSSxvQkFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNO2dCQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsb0JBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2pILElBQUksVUFBVSxHQUFlLElBQUEsb0JBQVksa0NBQU0sS0FBSyxLQUFFLFVBQVUsSUFBRyxDQUFBO29CQUNuRSxJQUFJLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7b0JBQzNCLEdBQUcsQ0FBQzt3QkFDQSxJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQzt3QkFDN0Isb0JBQW9CLENBQUMsVUFBVSxDQUFDOzRCQUM1QixZQUFZLGlCQUNOLFFBQVEsRUFBRSxLQUFLLElBQUssV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLHNCQUFzQixHQUNwRSxvQkFBb0IsRUFDcEIsSUFBSSxDQUNQLENBQUE7d0JBQ0wsSUFBSSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDbkUsSUFBSSxPQUFtQixDQUFDO3dCQUN4QixJQUFJLGNBQWMsSUFBSSxJQUFJLEVBQUUsQ0FBQzs0QkFDekIsS0FBSyxPQUFPLElBQUksY0FBYyxFQUFFLENBQUM7Z0NBQzdCLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxjQUFjLENBQUMsT0FBTyxDQUFVLENBQUM7Z0NBQ3RFLElBQUksTUFBTSxFQUFFLENBQUM7b0NBQ1QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQVUsQ0FBQztvQ0FDdkQsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBVSxDQUFDO29DQUNqRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0NBQ2hDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQ0FDNUIsQ0FBQzs0QkFDTCxDQUFDO3dCQUNMLENBQUM7b0JBQ0wsQ0FBQyxRQUFRLGdCQUFnQixJQUFJLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUMzRCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ2pDLCtFQUErRTtvQkFDbkYsQ0FBQyxDQUFDLENBQUE7b0JBQ0YsSUFBSSxVQUFVLEdBQUcsS0FBSyxHQUFHLFVBQXdCLENBQUE7b0JBQ2pELElBQUksd0JBQXdCLEdBQUcsSUFBQSw4QkFBc0IsRUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztvQkFDMUYsSUFBSSxVQUFVLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7d0JBQ2hGLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELHdCQUF3QixFQUFFLENBQUMsQ0FBQTtvQkFDcEcsQ0FBQztvQkFDRCxJQUFJLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUMxRyxJQUFJLGFBQWEsR0FDYixzQkFBc0I7d0JBQ2xCLHNCQUFzQixDQUFDLG1DQUFtQzt3QkFDMUQsc0JBQXNCLENBQUMsbUNBQW1DLElBQUksVUFBVSxDQUFDLENBQUM7d0JBQzFFLElBQUk7d0JBQ0osQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQzs0QkFDbEIsSUFBSTs0QkFDSixDQUFDLENBQUMsT0FBTyxDQUFBO29CQUNyQixJQUFJLFNBQVMsRUFBRSxDQUFDO3dCQUNaLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxhQUFhLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDakUsQ0FBQzt5QkFBTSxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDakMsOENBQThDO29CQUNsRCxDQUFDO2dCQUNMLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQWdCLHdCQUF3QixDQUFDLGNBQStCLEVBQUUsTUFBc0I7UUFDNUYsNEVBQTRFO1FBQzVFLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxjQUFjLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sSUFBSSxzQkFBc0IsR0FBRyxDQUFDLFdBQXdCLEVBQWdCLEVBQUU7UUFDM0UsT0FBTyxXQUFXLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUE7SUFDbEUsQ0FBQyxDQUFBO0lBRlUsUUFBQSxzQkFBc0IsMEJBRWhDO0lBRUQsU0FBZ0IsMEJBQTBCO1FBQ3RDLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDL0UsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFhLEVBQUUsR0FBUSxFQUFFLEVBQUU7Z0JBQzFDLElBQUksbUJBQW1CLEdBQUcsSUFBQSw4QkFBc0IsRUFBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEQsT0FBTyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFBO1lBQy9GLENBQUMsQ0FBQTtZQUVELGtIQUFrSDtZQUNsSCxJQUFJLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ3hFLElBQUEsb0JBQVUsRUFBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO2dCQUN0RSxJQUFJLE9BQU8sR0FBRyx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUMvRSxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxlQUFlLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFO29CQUM1SyxJQUFJLFNBQVMsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQWUsQ0FBQTtvQkFDekUsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDaEQsQ0FBQyxDQUFDLENBQUE7WUFDTixDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQWdCLHdCQUF3QixDQUNwQyxvQkFBa0csRUFDbEcsV0FBbUUsRUFDbkUsU0FBb0IsRUFDcEIsVUFBc0IsRUFDdEIsSUFBMEI7UUFFMUIsSUFBSSxLQUFLLHFCQUFlLFNBQVMsQ0FBRSxDQUFDO1FBQ3BDLDhCQUE4QixDQUFDLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsb0JBQVksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0ksQ0FBQztJQUVELFNBQVMsZ0JBQWdCLENBQUMsVUFBc0IsRUFBRSxTQUFvQixFQUFFLElBQTBCO1FBQzlGLElBQUksYUFBNEIsQ0FBQztRQUNqQyxxQkFBcUI7UUFDckIsSUFBSSxVQUFVLEdBQWlFLEVBQUUsQ0FBQTtRQUNqRix3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFGLFdBQVcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBYyxFQUFFLE9BQW1CLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaE8sV0FBVyxDQUFDLG9CQUFvQixtQ0FBUSxXQUFXLENBQUMsb0JBQW9CLEdBQUssVUFBVSxDQUFFLENBQUM7UUFDMUYsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLG1DQUMxRSxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FDakYsdUJBQXVCLENBQ3RCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxDQUNiLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFTSxJQUFJLHNCQUFzQixHQUFHLENBQUMsWUFBc0MsRUFBRSxnQkFBZ0MsRUFBRSxFQUFFLEVBQUU7O1FBQy9HLElBQUksWUFBWSxFQUFFLENBQUM7WUFDZixLQUFLLElBQUksU0FBUyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMvRSxJQUFJLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQzFCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQSxNQUFBLFNBQVMsQ0FBQyxLQUFLLDBDQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQWlCLENBQUM7b0JBQzlHLElBQUksUUFBUSxFQUFFLENBQUM7d0JBQ1gsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDN0IsSUFBQSw4QkFBc0IsRUFBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQ3BELENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQyxDQUFBO0lBYlUsUUFBQSxzQkFBc0IsMEJBYWhDO0lBRU0sSUFBSSw0QkFBNEIsR0FBRyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtRQUNuRSxJQUFJLHNCQUFzQixHQUFHLElBQUEsOEJBQXNCLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFDakUsSUFBSSxhQUFhLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzdDLElBQUEsOEJBQXNCLEVBQUMsc0JBQXNCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDOUQsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQyxDQUFBO0lBTFUsUUFBQSw0QkFBNEIsZ0NBS3RDO0lBRU0sSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLHNCQUE0RCxFQUFFLGFBQXFCLEVBQUUsU0FBd0IsRUFBRSxVQUF3QixFQUFFLENBQWEsRUFBRSxFQUFFLENBQ3JMLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtRQUNyQixzQkFBc0IsQ0FBQyx3QkFBd0I7UUFDL0Msc0JBQXNCLENBQUMsd0JBQXdCLElBQUksVUFBVTtRQUM3RCxDQUFDO1lBQ0QsYUFBYSxJQUFJLElBQUEsdUJBQVEsRUFDckIsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLEVBQzFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FDdEM7UUFDRCxDQUFDO1lBQ0QsU0FBUyxJQUFJLGFBQWEsQ0FDN0IsQ0FBQTtJQVhNLFFBQUEsZ0JBQWdCLG9CQVd0QjtJQUVFLElBQUksa0JBQWtCLEdBQUcsQ0FDNUIsc0JBQTRELEVBQzVELDJCQUF5RSxFQUN6RSxhQUFxQixFQUNyQixVQUF3QixFQUN4QixDQUFhLEVBQ2YsRUFBRTtRQUNBLElBQUksMkJBQTJCLElBQUksMkJBQTJCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN6RSxJQUFJLGtCQUFrQixHQUFHLElBQUEsMkJBQW1CLEVBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUM5RyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdHLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7Z0JBQzVCLENBQUMsc0JBQXNCLENBQUMsd0JBQXdCLElBQUksVUFBVTtvQkFDMUQsSUFBQSw4QkFBc0IsRUFBQyxzQkFBc0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FDL0Y7Z0JBQ0QsYUFBYSxJQUFJLElBQUEsdUJBQVEsRUFDckIsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLEVBQzFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FDdEMsQ0FBQyxDQUFBO1FBQ1YsQ0FBQztJQUNMLENBQUMsQ0FBQTtJQXBCVSxRQUFBLGtCQUFrQixzQkFvQjVCO0lBRU0sSUFBSSx1QkFBdUIsR0FBRyxDQUFDLHNCQUE0RCxFQUFFLFVBQXdCLEVBQUUsRUFBRSxDQUM1SCxDQUFDLENBQUMsc0JBQXNCO1FBQ3BCLHNCQUFzQixDQUFDLHdCQUF3QixJQUFJLFVBQVUsQ0FBQyxDQUFBO0lBRjNELFFBQUEsdUJBQXVCLDJCQUVvQztJQVd0RSxTQUFnQix1QkFBdUIsQ0FDbkMsU0FBb0IsRUFDcEIsb0JBQWtHLEVBQ2xHLFVBQXNCO1FBRXRCLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsb0JBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDNUQsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxvQkFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM1RCxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLG9CQUFZLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3JFLElBQUksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsb0JBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDckUsSUFBSSxhQUFhLEdBQUcsSUFBQSxvQ0FBNEIsRUFBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUN6RixJQUFJLDZCQUE2QixHQUFHLFVBQVUsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFBLDhCQUFzQixFQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdEosSUFBSSwyQkFBMkIsR0FBRyxVQUFVLENBQUMsMkJBQTJCLENBQUM7UUFDekUsSUFBSSxnQkFBZ0IsR0FBRyxJQUFBLGdCQUFNLEVBQUMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUU7O1lBQ3pFLElBQUksZUFBZSxHQUFHLDZCQUE2QixJQUFJLENBQUMsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLHdCQUF3QixJQUFJLDZCQUE2QixDQUFDLG1CQUFtQixDQUFDLENBQUE7WUFDdEssSUFBSSx3QkFBd0IsR0FBRywyQkFBMkIsSUFBSSwyQkFBMkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQTBCLENBQUMsQ0FBQztZQUMxSSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO2dCQUMzQixVQUFVLEdBQUcsTUFBQSxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ2pFLEVBQUUsQ0FBQyxlQUFlLElBQUksMkJBQTJCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUEwQixDQUFDLENBQUMsZUFBZSxDQUFDLDBDQUFFLFdBQVcsQ0FBQztZQUN4SSxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzdGLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3RELENBQUMsd0JBQXdCLENBQUMsQ0FBQztvQkFDdkIsQ0FBQyxJQUFBLDBCQUFrQixFQUNmLDZCQUE2QixFQUM3QiwyQkFBMkIsRUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFxQixDQUFDLEVBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUM5QixlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsQ0FDbEU7b0JBQ0QsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUNmLENBQUMsSUFBQSwwQkFBa0IsRUFDZiw2QkFBNkIsRUFDN0IsMkJBQTJCLEVBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFDOUIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO2dDQUN4QyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7Z0NBQ3JFLFVBQVUsRUFBRSw2QkFBNkIsQ0FBQyxtQkFBb0I7Z0NBQzlELEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUs7NkJBQzFCLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQWdCOzRCQUN6QyxDQUFDO2dDQUNELGVBQWUsQ0FBQztvQ0FDWixDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7b0NBQ3JFLFVBQVUsRUFBRSw2QkFBNkIsQ0FBQyxtQkFBb0I7aUNBQ3hELENBQUMsQ0FBQyxVQUFVLENBQzdCO3dCQUNELENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN2QixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLElBQUksV0FBVyxHQUF3RTtZQUNuRixRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7WUFDdkMsZUFBZSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFO1lBQzlDLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRTtZQUMzQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7WUFDdEMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFO1lBQzdDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRTtTQUN0QyxDQUFBO1FBQ0QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osSUFBSSxVQUFVLEdBQWtCLElBQUksQ0FBQztRQUNyQyxLQUFLLElBQUksUUFBUSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDcEMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUMvQixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUN2QyxHQUFHLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDckMsVUFBVSxHQUFHLE9BQU8sQ0FBQztZQUN6QixDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksVUFBVSxJQUFJLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLFVBQVUsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNwRixJQUFJLEtBQUssQ0FBQywrQ0FBK0MsRUFBRSxDQUFDO2dCQUN4RCxVQUFVLEdBQUcsY0FBYyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixVQUFVLEdBQUcsWUFBWSxDQUFDO1lBQzlCLENBQUM7UUFDTCxDQUFDO1FBRUQsd0NBQXdDO1FBQ3hDLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDL0csSUFBSSxhQUE0QixDQUFDO1FBQ2pDLElBQUksZ0JBQWdCLEdBQWtCLE9BQU8sQ0FBQztRQUM5QyxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNsQixnQkFBZ0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBO1lBQ3JELHFFQUFxRTtZQUNyRSxhQUFhLEdBQUcsZ0JBQWdCLENBQUE7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDSixhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUNuRCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQXFCO1lBQzlCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsTUFBTTtZQUNOLFFBQVE7WUFDUixTQUFTO1lBQ1QsV0FBVztTQUNkLENBQUE7UUFDRCxPQUFPLFNBQVMsQ0FBQTtJQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRSb3dWYWxpZGF0b3IsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSwgT3BjaW9uZXNSb3dWYWxpZGF0b3IsIEZlZWRiYWNrIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7IGRhdGUsIGNvbXBhcmVGb3JPcmRlciwgY29hbGVzY2UgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IGV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLFxyXG4gICAgRm9yUGssIEZvclBrUmFpeixcclxuICAgIElkRmluLCBJZEZvcm11bGFyaW8sIElkUHJlZ3VudGEsIElkVGFyZWEsIElkVmFyaWFibGUsXHJcbiAgICBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBVbmlkYWRBbmFsaXNpcyxcclxuICAgIEZvcm11bGFyaW8sXHJcbiAgICBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLFxyXG4gICAgSWRFbmMsXHJcbiAgICBEZWZPcGVyYXRpdm8sXHJcbiAgICBpdGVyYXRvcixcclxuICAgIENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYW1wb1BrLFxyXG4gICAgSWRDYXJnYSxcclxuICAgIENhcmdhLFxyXG4gICAgQ2FtcG9Qa1JhaXosXHJcbiAgICBWYWx1ZVBrUmFpelxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcblxyXG5leHBvcnQgY29uc3QgTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZID0gJ21vZG9fZG0nO1xyXG5cclxudmFyIGVzcGVjaWFsZXMgPSB7fSBhcyB7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlcz86IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZFxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bz86IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZFxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlcyhjYWxjdWxhclZhcmlhYmxlczogKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB2b2lkKSB7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzID0gY2FsY3VsYXJWYXJpYWJsZXNcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8oY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bzogKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB2b2lkKSB7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8gPSBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvXHJcbn1cclxuXHJcbnR5cGUgRGF0b3NCeVBhc3MgPSBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHtcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7ICAvLyBubyBzZSBwZXJzaXN0ZVxyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfVxyXG4gICAgZGlydHk6IGJvb2xlYW5cclxufTtcclxuXHJcbnZhciBkYXRvc0J5UGFzcyA9IHt9IGFzIERhdG9zQnlQYXNzXHJcblxyXG4vL0B0cy1pZ25vcmUgYXJyYW5jYSBlbiBibGFuY29cclxudmFyIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmEgPSBudWxsIGFzIEVzdHJ1Y3R1cmE7XHJcblxyXG5sZXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vOiAoZGJwcDogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpID0+IFByb21pc2U8YW55PiA9ICgpID0+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcigncGVyc2lzdGlyRGF0b3NCeVBhc3MgU0lOIERFRklOSVInKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MocGVyc2lzdGlyRGF0b3NCeVBhc3NGdW46IHR5cGVvZiBwZXJzaXN0aXJEYXRvc0J5UGFzcykge1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vID0gcGVyc2lzdGlyRGF0b3NCeVBhc3NGdW47XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYnBwOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcykge1xyXG4gICAgYXdhaXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vKGRicHApO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBmYWxzZVxyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXJFbmN1ZXN0YSA9IChpZENhcmdhOiBJZENhcmdhLCBjYWxsQmFjazogKGZvclBrUmFpejogRm9yUGtSYWl6KSA9PiB2b2lkKSA9PiB7XHJcbiAgICBjb25zdCBMQVNUX0FVVE9fVkFMVUVfUEtfUkFJWiA9ICdwcm94aW1vX3ZhbG9yX3BrX3JhaXonXHJcbiAgICBjb25zdCBORVhUX0FVVE9fVkFMVUVfUEtfUkFJWjogVmFsdWVQa1JhaXogPSBteS5nZXRMb2NhbFZhcihMQVNUX0FVVE9fVkFMVUVfUEtfUkFJWikgfHwgJy0xJ1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIG15LnNldExvY2FsVmFyKExBU1RfQVVUT19WQUxVRV9QS19SQUlaLCAoTnVtYmVyKE5FWFRfQVVUT19WQUxVRV9QS19SQUlaKSAtIDEpLnRvU3RyaW5nKCkpO1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVpdID0ge30gYXMgUmVzcHVlc3Rhc1JhaXo7XHJcbiAgICBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltORVhUX0FVVE9fVkFMVUVfUEtfUkFJWl0gPSB7XHJcbiAgICAgICAgLi4uZXN0cnVjdHVyYS5kZWZhdWx0SW5mb3JtYWNpb25IZHIsXHJcbiAgICAgICAgdGVtOiB7IC4uLmVzdHJ1Y3R1cmEuZGVmYXVsdEluZm9ybWFjaW9uSGRyLnRlbSB9XHJcbiAgICB9O1xyXG4gICAgZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVpdLnRlbS5jYXJnYSA9IGlkQ2FyZ2E7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpLnRoZW4oXHJcbiAgICAgICAgKCkgPT4gY2FsbEJhY2soe1xyXG4gICAgICAgICAgICBmb3JtdWxhcmlvOiBlc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkci50YXJlYS5tYWluX2Zvcm0sXHJcbiAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBOdW1iZXIoTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVopIGFzIFZhbHVlUGtSYWl6XHJcbiAgICAgICAgfSBhcyBGb3JQa1JhaXopXHJcbiAgICApLy9ubyBxdWl0YXIgZWwgY2FzdGVvIHBvcnF1ZSB2aWVuZSBjb21vIHRleHRvIHkgbmVjZXNpdG8gcXVlIHNlYSBuw7ptZXJvXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RW5jb2xhckJhY2t1cChcclxuICAgIGVuY29sYXJCYWNrdXBGdW46ICh0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXMpID0+IHZvaWRcclxuKSB7XHJcbiAgICBlbmNvbGFyQmFja3VwID0gZW5jb2xhckJhY2t1cEZ1blxyXG59XHJcblxyXG5sZXQgZW5jb2xhckJhY2t1cDogKHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZvclBrUmFpejogRm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejogUmVzcHVlc3RhcykgPT4gdm9pZCA9ICgpID0+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIlNJTiBFU1BFQ0lGSUNBUiBlbmNvbGFyQmFja3VwXCIpXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgaW50ZW50YXJCYWNrdXAgPSAoZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpXHJcbiAgICB2YXIgdG9rZW4gPSBkYXRvc0J5UGFzcy50b2tlbjtcclxuICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5vIGhheSB0b2tlbiwgbm8gc2UgcHVkbyBoYWNlciBlbCBiYWNrdXBcIilcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUFDYXJnYXI6IEVzdHJ1Y3R1cmEpIHtcclxuICAgIGVzdHJ1Y3R1cmEgPSBlc3RydWN0dXJhQUNhcmdhcjtcclxuICAgIGRlZk9wZXJhdGl2by5VQXByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKHVhID0+ICEhdWEucHJpbmNpcGFsKT8udW5pZGFkX2FuYWxpc2lzIVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZkZvciA9IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5tYXAoZiA9PiAoeyBoZXJtYW5vOiBmLmNhc2lsbGVyb3MuaGVybWFubyB9KSkucGxhaW4oKVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZlVBID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLm1hcCgodWFEZWYsIHVhKSA9PiAoe1xyXG4gICAgICAgIHBrOiB1YURlZi5wa19hZ3JlZ2FkYSBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIGluY2x1aWRhczogbGlrZUFyKHVhRGVmLmhpamFzKS5rZXlzKCksXHJcbiAgICAgICAgaWRzRm9yOiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGYgPT4gZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YSkua2V5cygpXHJcbiAgICB9KSkucGxhaW4oKVxyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXREYXRvc0J5UGFzcyhkYnBwOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHsgZGlydHk/OiBib29sZWFuIH0pIHtcclxuICAgIGRhdG9zQnlQYXNzID0ge1xyXG4gICAgICAgIGRpcnR5OiBmYWxzZSxcclxuICAgICAgICAuLi5kYnBwLFxyXG4gICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7fSBhcyBEYXRvc0J5UGFzc1tcImZlZWRiYWNrUm93VmFsaWRhdG9yXCJdXHJcbiAgICB9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldERhdG9zQnlQYXNzID0gKCkgPT4gZGF0b3NCeVBhc3NcclxuXHJcbmZ1bmN0aW9uIG9iamV0b1ZhY2lvKG86IG9iamVjdCkge1xyXG4gICAgZm9yICh2YXIgayBpbiBvKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpIHtcclxuICAgIGlmICghZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgfHwgb2JqZXRvVmFjaW8oZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpKSB7XHJcbiAgICAgICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERpcnR5KCkge1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmRpcnR5XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFc3RydWN0dXJhKCkge1xyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbnR5cGUgRWxlbWVudG9zUmVnaXN0cmFibGVzID0gSFRNTERpdkVsZW1lbnQgfCBIVE1MQnV0dG9uRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG50eXBlIERpcmVjdEZ1bmN0aW9uPFQsIFJlc3VsdD4gPSAocmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGVsZW1lbnRvOiBULFxyXG4gICAgZmVlZGJhY2tBbGw6IHtcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH0sXHJcbiAgICBlc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbikgPT4gUmVzdWx0XHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7XHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBhbnk+LFxyXG4gICAgdmFyaWFibGU/OiBJZFZhcmlhYmxlLFxyXG4gICAgZm9yUGs/OiBGb3JQayxcclxufSAmICh7XHJcbiAgICBwcm9wOiBrZXlvZiBUXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIFRba2V5b2YgVF0+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgbGEgcHJvcChlcnR5KSBkZWwgZWxlbWVudG9cclxufSB8IHtcclxuICAgIGF0dHI6IHN0cmluZ1xyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIGF0dHIoaWJ1dG8pXHJcbn0gfCB7XHJcbiAgICBzdHlsZToga2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvblxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIHN0eWxlXHJcbn0gfCB7XHJcbiAgICBkaXJlY3Q6IHRydWVcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgdm9pZD4gLy8gTGEgZnVuY2nDs24gdmEgYSB0b2NhciBkaXJlY3RhbWVudGUgZWwgZWxlbWVudG8geSBoYWNlciB0b2RvIGxvIHF1ZSB0ZW5nYSBxdWUgaGFjZXJcclxufSlcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50b3M8VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7IFtpZDogc3RyaW5nXTogUmVnaXN0cm9FbGVtZW50bzxUPiAmIHsgZWxlbWVudG8/OiBUIH0gfTtcclxuXHJcbnZhciByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbCA9IHt9IGFzIFJlZ2lzdHJvRWxlbWVudG9zPEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0cmFyRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4oZGVmOiBSZWdpc3Ryb0VsZW1lbnRvPFQ+KSB7XHJcbiAgICAvLyBAdHMtaWdub3JlIFPDrSwgcG9kcsOtYSBzZXIgcXVlIGxvcyB0aXBvcyBkZSBUIHNlYW4gZGlzdGludG9zLCBwZXJvIHZhbiBhIHNlciBjb2hlcmVudGVzXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3M6IFJlZ2lzdHJvRWxlbWVudG9zPFQ+ID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICByZWdpc3Ryb0VsZW1lbnRvc1tkZWYuaWRdID0gZGVmO1xyXG59XHJcblxyXG50eXBlIFJlc3B1ZXN0YXNGb3JQa0NvbXVuID0geyByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpejogRm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMgfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazogRm9yUGspOiBSZXNwdWVzdGFzRm9yUGtDb211blxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOiBGb3JQaywgY29uQXVtZW50YWRhczogdHJ1ZSwgYWdyZWdhclNpRmFsdGE/OiBib29sZWFuKTogUmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzIH1cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazogRm9yUGssIGNvbkF1bWVudGFkYXM/OiBib29sZWFuLCBhZ3JlZ2FyU2lGYWx0YT86IGJvb2xlYW4pOiBSZXNwdWVzdGFzRm9yUGtDb211biAmIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXM/OiBSZXNwdWVzdGFzIH0ge1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0ge30gYXMgUmVzcHVlc3RhcztcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbG8gcXVlIHNvYnJhciBkZSByZXNwdWVzdGFzIG5vIG1lIGltcG9ydGEuLi5cclxuICAgIHZhciByZXNwdWVzdGFzID0gZGF0b3NCeVBhc3MucmVzcHVlc3RhcyBhcyBSZXNwdWVzdGFzO1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpejtcclxuICAgIHZhciBmb3JQa1JhaXo6IEZvclBrO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpczogSWRVbmlkYWRBbmFsaXNpcyB8IHVuZGVmaW5lZCA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNcclxuICAgIHZhciBmb3JQa0FwaWxhZGEgPSBmb3JQaztcclxuICAgIHZhciBwaWxhOiBbdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzLCB1YURlZjogVW5pZGFkQW5hbGlzaXMsIGZvclBrOiBGb3JQa11bXSA9IFtdO1xyXG4gICAgd2hpbGUgKHVuaWRhZF9hbmFsaXNpcykge1xyXG4gICAgICAgIHZhciB1YURlZjogVW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgcGlsYS5wdXNoKFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdKTtcclxuICAgICAgICBmb3JQa0FwaWxhZGEgPSB7IC4uLmZvclBrQXBpbGFkYSB9O1xyXG4gICAgICAgIGRlbGV0ZSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdXHJcbiAgICAgICAgdW5pZGFkX2FuYWxpc2lzID0gdWFEZWYucGFkcmVcclxuICAgIH1cclxuICAgIHdoaWxlIChwaWxhLmxlbmd0aCkge1xyXG4gICAgICAgIFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdID0gcGlsYS5wb3AoKSFcclxuICAgICAgICB2YXIgdmFsb3JQa09Qb3NpY2lvbiA9IGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICAgICAgaWYgKHZhbG9yUGtPUG9zaWNpb24gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFsdGEgdW4gdmFsb3IgcGFyYSAke0pTT04uc3RyaW5naWZ5KHVhRGVmLnBrX2FncmVnYWRhKX1gKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXNwdWVzdGFzQW50ZXJpb3IgPSByZXNwdWVzdGFzO1xyXG4gICAgICAgIGxldCBwb3NpY2lvbiA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5ID8gdmFsb3JQa09Qb3NpY2lvbiAtIDEgOiB2YWxvclBrT1Bvc2ljaW9uXHJcbiAgICAgICAgcmVzcHVlc3RhcyA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl07XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoYWdyZWdhclNpRmFsdGEpIHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSB7fSBhcyBSZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzQW50ZXJpb3JbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl0gPSByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGV4aXN0ZSBlbCBlbGVtZW50byAnJHtwb3NpY2lvbn0nIGVuIGxhIHVuaWRhZF9hbmFsaXNpcyAnJHt1bmlkYWRfYW5hbGlzaXN9J2ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvclBrUmFpeiB8fD0gZm9yUGtBcGlsYWRhO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU8OpIHF1ZSBlcyByYcOteiBwb3IgY8OzbW8gZXN0b3kgcmV2b2x2aWVuZG8gbGEgcGlsYVxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6IHx8PSByZXNwdWVzdGFzO1xyXG4gICAgICAgIGlmIChjb25BdW1lbnRhZGFzKSB7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0geyAuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3RhcywgW3VhRGVmLnBrX2FncmVnYWRhXTogdmFsb3JQa09Qb3NpY2lvbiB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXNwdWVzdGFzLCByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFPDqSBxdWUgbGEgcGlsYSB0aWVuZSBhbCBtZW5vcyB1biBlbGVtZW50byBwb3IgbG8gdGFudG8gZXN0byBlc3TDoSBsbGVubyBzZWd1cm8uIFxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOiB1YURlZlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1JhaXo6IEZvclBrUmFpeikge1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXMgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1JhaXosIHRydWUpXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3MgPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHZhciBwbGFpbkZvclBrID0gdG9QbGFpbkZvclBrKGZvclBrUmFpeilcclxuICAgIHZhciByb3dWYWxpZGF0b3IgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXTtcclxuICAgIGZvciAodmFyIGlkIGluIHJlZ2lzdHJvRWxlbWVudG9zKSB7XHJcbiAgICAgICAgdmFyIGRlZiA9IHJlZ2lzdHJvRWxlbWVudG9zW2lkXTtcclxuICAgICAgICBpZiAoZGVmLmVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyhkZWYuZWxlbWVudG8pKSB7XHJcbiAgICAgICAgICAgICAgICBkZWYuZWxlbWVudG8gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkZWYuZWxlbWVudG8pIHtcclxuICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVmLmlkKSBhcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVmLmVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCVVNDQU5ETyBlbCBlbGVtZW50byByZWdpc3RyYWRvICcsaWQsJ25vIGVzdMOhIGVuIGVsIERPTScpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWYuZnVuKHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByb3dWYWxpZGF0b3IsIGRlZi5lbGVtZW50bywgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIGlmICgncHJvcCcgaW4gZGVmKSB7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYucHJvcCwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgnYXR0cicgaW4gZGVmKSB7XHJcbiAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5hdHRyLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCdzdHlsZScgaW4gZGVmKSB7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLnN0eWxlLCBkZWYuc3R5bGUsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyb3dWYWxpZGF0b3IuYWN0dWFsKSB7XHJcbiAgICAgICAgdmFyIHsgdG9wLCBib3R0b20gfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2Fkbyhyb3dWYWxpZGF0b3IuYWN0dWFsKTtcclxuICAgICAgICBpZiAodG9wICE9IG51bGwgJiYgYm90dG9tICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKS5lbFRvcFZpc2liaWxpemFyID0gdG9wO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJykuZWxCb3R0b21WaXNpYmlsaXphciA9IGJvdHRvbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oaWRWYXJpYWJsZTogSWRWYXJpYWJsZSB8IElkRmluKSB7XHJcbiAgICB2YXIgZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRWYXJpYWJsZSA9PSAnZmluJyA/IGBib3Rvbi12b2x2ZXItMmAgOiBgdmFyLSR7aWRWYXJpYWJsZX1gKVxyXG4gICAgICAgIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkVmFyaWFibGUpO1xyXG4gICAgdmFyIGVsZW1lbnRvID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgdmFyIE1BUkdFTl9TQ1JPTEwgPSA2NDtcclxuICAgIHZhciBhbHRvUGFudGFsbGEgPSB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjcgLSBNQVJHRU5fU0NST0xMO1xyXG4gICAgdmFyIGVsZW1lbnRvRW50ZXJvOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBlbnRhciBlbnRlcm8gZW4gcGFudGFsbGEsIGRlZmluZSBlbCBib3R0b21cclxuICAgIHZhciByZWN0RWxlbWVudG9FbnRlcm86IFJldHVyblR5cGU8dHlwZW9mIG15T3duLmdldFJlY3Q+IHwgbnVsbCA9IG51bGw7XHJcbiAgICB2YXIgZWxlbWVudG9TdXBlcmlvcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgbW9zdHJhcnNlIGRlc2RlIGFycmliYSBhdW5xdWUgbm8gZW50cmUgZW50ZXJvLCBkZWZpbmUgZWwgdG9wXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvU3VwZXJpb3I6IFJldHVyblR5cGU8dHlwZW9mIG15T3duLmdldFJlY3Q+IHwgbnVsbCA9IG51bGw7XHJcbiAgICB3aGlsZSAoZWxlbWVudG8gIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygndmFyaWFibGUnKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdtdWx0aXBsZScpXHJcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ByZWd1bnRhJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnY29uanVudG9wcmVndW50YXMnKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8nKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdib3RvbmZvcm11bGFyaW8nKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdib3Rvbi12b2x2ZXInKVxyXG4gICAgICAgICAgICApICYmIGVsZW1lbnRvLm9mZnNldEhlaWdodCA+IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCAmJiBlbGVtZW50by5jbGllbnRIZWlnaHQgPCBhbHRvUGFudGFsbGEpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudG9FbnRlcm8gPT0gbnVsbCkgZWxlbWVudG9FbnRlcm8gPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgIGlmIChyZWN0RWxlbWVudG9FbnRlcm8gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50b0VudGVyb1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b0VudGVybyA9IG15T3duLmdldFJlY3QoZWxlbWVudG9FbnRlcm8hKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b1N1cGVyaW9yID0gcmVjdEVsZW1lbnRvRW50ZXJvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCAtIHJlY3QudG9wIDwgYWx0b1BhbnRhbGxhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b1N1cGVyaW9yID0gcmVjdDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRvID0gZWxlbWVudG8/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChlbGVtZW50b1N1cGVyaW9yID09IG51bGwpIHtcclxuICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm87XHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0OiB7XHJcbiAgICAgICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPzogSFRNTEVsZW1lbnQgfCBudWxsXHJcbiAgICAgICAgdG9wPzogbnVtYmVyIHwgbnVsbFxyXG4gICAgICAgIGJvdHRvbT86IG51bWJlciB8IG51bGxcclxuICAgICAgICBlbmZvY2Fkbz86IGJvb2xlYW4gfCBudWxsXHJcbiAgICAgICAgZGVzZW5mb3F1ZT86IHN0cmluZyB8IG51bGxcclxuICAgIH0gPSB7fTtcclxuICAgIGlmIChlbGVtZW50b0VudGVybyAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJlY3RFbGVtZW50b0VudGVybyA9IG15T3duLmdldFJlY3QoZWxlbWVudG9FbnRlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5lbGVtZW50b0lucHV0VmFyaWFibGUgPSBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXI7XHJcbiAgICAgICAgdmFyIHRvcCA9IChyZWN0RWxlbWVudG9TdXBlcmlvciA/PyByZWN0RWxlbWVudG9FbnRlcm8pLnRvcCAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICAgICAgcmVzdWx0LnRvcCA9IHRvcDtcclxuICAgICAgICByZXN1bHQuYm90dG9tID0gcmVjdEVsZW1lbnRvRW50ZXJvLnRvcCArIHJlY3RFbGVtZW50b0VudGVyby5oZWlnaHQ7XHJcbiAgICAgICAgaWYgKHRvcCA8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApIHtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWUgPSAnYXJyaWJhJztcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY3RFbGVtZW50b0VudGVyby50b3AgKyByZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIGFsdG9QYW50YWxsYSkge1xyXG4gICAgICAgICAgICByZXN1bHQuZGVzZW5mb3F1ZSA9ICdhYmFqbyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0LmVuZm9jYWRvID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRBdHRyRGlzdGludG88TiBleHRlbmRzIHN0cmluZz4oXHJcbiAgICBvYmpldG86IHsgc2V0QXR0cmlidXRlOiAobmFtZTogTiwgdmFsb3I6IHN0cmluZykgPT4gdm9pZCwgZ2V0QXR0cmlidXRlOiAobmFtZTogTikgPT4gc3RyaW5nIHwgbnVsbCB9LFxyXG4gICAgbmFtZTogTixcclxuICAgIHZhbG9yOiBzdHJpbmdcclxuKSB7XHJcbiAgICBpZiAob2JqZXRvICYmIG9iamV0by5nZXRBdHRyaWJ1dGUobmFtZSkgIT0gdmFsb3IpIHtcclxuICAgICAgICBvYmpldG8uc2V0QXR0cmlidXRlKG5hbWUsIHZhbG9yKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFZhbG9yRGlzdGludG88VCBleHRlbmRzIHt9LCBOIGV4dGVuZHMga2V5b2YgVD4oXHJcbiAgICBvYmpldG86IFQsXHJcbiAgICBuYW1lOiBOLFxyXG4gICAgdmFsb3I6IFRbTl1cclxuKSB7XHJcbiAgICBpZiAob2JqZXRvW25hbWVdICE9IHZhbG9yKSB7XHJcbiAgICAgICAgb2JqZXRvW25hbWVdID0gdmFsb3I7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrOiBGb3JQaykge1xyXG4gICAgaWYgKGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvICYmICFkYXRvc0J5UGFzcz8uc29sb0xlY3R1cmEpIHtcclxuICAgICAgICB2YXIgeyByZXNwdWVzdGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgICAgIGxpa2VBcihlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbylcclxuICAgICAgICAgICAgLmZvckVhY2goKGNvbmZpZ0JvdG9uRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzcFVBID0gcmVzcHVlc3Rhc1tlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tpZEZvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcFVBICE9IG51bGwgJiYgcmVzcFVBIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZ0JvdG9uRm9ybXVsYXJpby5oYWJpbGl0YXJfYWdyZWdhcl9saXN0bykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzWyckQi4nICsgaWRGb3JtdWxhcmlvIGFzIElkVmFyaWFibGVdID0gJ29rJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9pZF9wcmVndW50YShfcGF5bG9hZDogeyBwcmVndW50YTogSWRQcmVndW50YSwgZm9yUGs6IEZvclBrIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTID0gU3ltYm9sKCdOT19DQU1CSUFSX1NPTE9fVFJBRVJfU1RBVFVTJylcclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gPSBTeW1ib2woJ05PX0NBTUJJQVJfVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTycpXHJcblxyXG5mdW5jdGlvbiByZWZyZXNjYXJNYXJjYURpcnR5KCkge1xyXG4gICAgdmFyIGJvdG9uR3JhYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWJ1dHRvblwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIGlmIChib3RvbkdyYWJhcikge1xyXG4gICAgICAgIGlmIChib3RvbkdyYWJhci5kaXNhYmxlZCAhPT0gIWRhdG9zQnlQYXNzLmRpcnR5KSB7XHJcbiAgICAgICAgICAgIGJvdG9uR3JhYmFyLmRpc2FibGVkID0gIWRhdG9zQnlQYXNzLmRpcnR5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhKHBheWxvYWQ6IHtcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgdHlwZW9mIE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLFxyXG4gICAgcmVzcHVlc3RhOiBWYWxvciB8IHR5cGVvZiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPXHJcbn0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETydcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGEsIHZhcmlhYmxlIH0gPSBwYXlsb2FkO1xyXG4gICAgdmFyIHsgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXMgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dO1xyXG4gICAgdmFyIHJlY2VudE1vZGlmaWVkID0gZmFsc2U7XHJcbiAgICB2YXIgdmFsb3JBbnRlcmlvciA9IHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTID8gcmVzcHVlc3Rhc1t2YXJpYWJsZV0gOiBudWxsO1xyXG4gICAgdmFyIGZlZWRiYWNrUm93ID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKGZvclBrKV1cclxuICAgIGlmIChyZXNwdWVzdGEgIT09IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMpIHtcclxuICAgICAgICBpZiAocmVzcHVlc3RhID09PSAnJykge1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yLnZhcmlhYmxlc1t2YXJpYWJsZV0/LnRpcG8gPT0gJ251bWVybycpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGEgPSBOdW1iZXIocmVzcHVlc3RhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzaSBlcyB1biBmYWxzeSAoMCA9PSBmYWxzZSkgdGVuZ28gcXVlIGNvbXBhcmFyIGNvbiAhPT1cclxuICAgICAgICByZWNlbnRNb2RpZmllZCA9IHJlc3B1ZXN0YSA/IHZhbG9yQW50ZXJpb3IgIT0gcmVzcHVlc3RhIDogdmFsb3JBbnRlcmlvciAhPT0gcmVzcHVlc3RhXHJcbiAgICAgICAgaWYgKHJlY2VudE1vZGlmaWVkKSB7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyaWFibGVdID0gcmVzcHVlc3RhID8/IG51bGw7IC8vIGNhbWJpbyB1bmRlZmluZWQgcG9yIG51bGxcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3ZhcmlhYmxlXT8uc2lndWllbnRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBzaWd1aWVudGVWYXJpYWJsZTogSWRWYXJpYWJsZSB8IElkRmluIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICAgIGlmICh2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyAmJiAocmVjZW50TW9kaWZpZWQgfHwgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyAmJiBmZWVkYmFja1Jvdy5hdXRvSW5ncmVzYWRhcz8uW3ZhcmlhYmxlXSkpIHtcclxuICAgICAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICAgICAgaWYgKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFkYXRvc0J5UGFzcz8uc29sb0xlY3R1cmEpIHtcclxuICAgICAgICAgICAgdmVyaWZpY2FyU29ydGVvKHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW86IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVBY3R1YWw6IHZhcmlhYmxlLFxyXG4gICAgICAgICAgICAgICAgZm9yUGs6IGZvclBrXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZGF0b3NCeVBhc3MuZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHsgYXV0b0luZ3Jlc286IHRydWUgfSk7XHJcbiAgICAgICAgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3NpZ3VpZW50ZVZhcmlhYmxlXT8uc2lndWllbnRlO1xyXG4gICAgICAgIH0gd2hpbGUgKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlID09IG51bGwgJiYgZmVlZGJhY2tSb3cuZmVlZGJhY2tbdmFyaWFibGVdPy5lc3RhZG8gPT0gJ3ZhbGlkYScpIHtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSAnZmluJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyByZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsOiBmZWVkYmFja1Jvdy5hY3R1YWwgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfbm90YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCB0YXJlYTogSWRUYXJlYSwgbm90YTogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIHRhcmVhLCBub3RhIH0gPSBwYXlsb2FkO1xyXG4gICAgY29uc29sZS5sb2coXCJGQUxUQSAvLyBUT0RPXCIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl92aXNpdGEocGF5bG9hZDogeyBmb3JQa1JhaXo6IEZvclBrUmFpeiwgb2JzZXJ2YWNpb25lczogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIG9ic2VydmFjaW9uZXMgfSA9IHBheWxvYWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fbW9kaWZpY2FyX3Zpc2l0YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCBpbmRleDogbnVtYmVyLCBvcGNpb246IGtleW9mIFZpc2l0YSwgdmFsb3I6IHN0cmluZyB8IG51bGwgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCwgb3BjaW9uLCB2YWxvciB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfdmlzaXRhKHBheWxvYWQ6IHsgZm9yUGtSYWl6OiBGb3JQa1JhaXosIGluZGV4OiBudW1iZXIgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8oeyBmb3JQayB9OiB7IGZvclBrOiBGb3JQayB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHsgZm9yUGsgfTogeyBmb3JQazogRm9yUGsgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgdmFyIHsgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oeyBmb3JQaywgZm9yUGtQYWRyZSB9OiB7IGZvclBrOiBGb3JQaywgZm9yUGtQYWRyZTogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMgfCB1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgdWFEZWY6IFVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGluZGV4ID0gZm9yUGtbdWFEZWYucGtfYWdyZWdhZGFdIGFzIG51bWJlcjtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXM6IHJlc3B1ZXN0YXNQYWRyZSB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrUGFkcmUsIHRydWUsIHRydWUpO1xyXG4gICAgKHJlc3B1ZXN0YXNQYWRyZVt1bmlkYWRfYW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXSkuc3BsaWNlKGluZGV4IC0gMSwgMSk7XHJcbiAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHRydWU7XHJcbiAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgeyBhdXRvSW5ncmVzbzogdHJ1ZSB9KTtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrUGFkcmUpO1xyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1BhZHJlKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEJ5UGFzczxULCBSPihcclxuICAgIGZ1bjogKHBheWxvYWQ6IFQsIGRhdG9zOiB0eXBlb2YgZGF0b3NCeVBhc3MpID0+IFIsXHJcbiAgICBwYXlsb2FkOiBUXHJcbikge1xyXG4gICAgcmV0dXJuIGZ1bihwYXlsb2FkLCBkYXRvc0J5UGFzcyk7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHVsdGltYVZhcmlibGVWaXZpZW5kYSA9ICdOT19FU1RBX0RFRklOSURBX0FVTi8vVE9ETycgYXMgSWRWYXJpYWJsZTtcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhDUCA9IDIwO1xyXG5cclxuLyogUkVEVUNFUlMgKi9cclxuXHJcbnZhciByZWVtcGxhem9zSGFiaWxpdGFyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgZmFsc2U6ICdmYWxzZScsXHJcbiAgICB0cnVlOiAndHJ1ZScsXHJcbiAgICBcIj1cIjogJz09JyxcclxuICAgIFwiPD5cIjogJyE9JyxcclxuICAgIFwiJlwiOiAnJiYnLFxyXG4gICAgXCJ8XCI6ICd8fCcsXHJcbiAgICBcIk9SXCI6ICd8fCcsXHJcbiAgICBcIkFORFwiOiAnJiYnLFxyXG4gICAgXCJvclwiOiAnfHwnLFxyXG4gICAgXCJhbmRcIjogJyYmJyxcclxuICAgIFwibm90XCI6ICchJyxcclxuICAgIFwiTk9UXCI6ICchJyxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzQ2FzaWxsZXJvcyA9IHtcclxuICAgIG51bGwyemVybyhwb3NpYmxlTnVsbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHBvc2libGVOdWxsID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb3NpYmxlTnVsbDtcclxuICAgIH0sXHJcbiAgICBkaXYwZXJyKG51bWVyYWRvcjogbnVtYmVyLCBkZW5vbWluYWRvcjogbnVtYmVyLCBwazogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGRlbm9taW5hZG9yID09IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIgKyBwayArIFwiIGRpdmlzaW9uIHBvciBjZXJvIGRlIFwiICsgbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvciAvIGRlbm9taW5hZG9yO1xyXG4gICAgfSxcclxuICAgIGZ1bnM6IHtcclxuICAgICAgICBibGFuY28oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSAwICYmICF4XHJcbiAgICAgICAgfSxcclxuICAgICAgICBob3koKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvZGF5KCkudG9EbXkoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmVjaGFfdmFsaWRhKHg6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG8gPSAvXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtkLCBtLCB5XSA9IHguc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBuZXcgRGF0ZShgJHt5fS8ke219LyR7ZH1gKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8oMTl8MjApXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG9cclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggIT09IHVuZGVmaW5lZCAmJiB4ICE9PSBudWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSkgfHwgeC5sZW5ndGggIT09IDApXHJcbiAgICAgICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCBPYmplY3Qua2V5cyh4KS5sZW5ndGggIT09IDApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCA9PSAtOVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyKHg6IG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4geCAlIDIgPT0gMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6IG51bWJlciwgbWVzQW5uaW86IHN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIG1lc2VzRGlmZXJlbmNpYSA9IChkMTogRGF0ZSwgZDI6IERhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMF0pKVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzTWVzQW5uaW8gPSBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksIDEpXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBSZWFsRGF0ZSBlcyBEYXRlIHkgc2UgcHVlZGUgcmVzdGFyXHJcbiAgICAgICAgICAgIHZhciBkaWZlcmVuY2lhTWVzZXMgPSBtZXNlc0RpZmVyZW5jaWEobmFjaW1pZW50bywgdG9kYXkpO1xyXG4gICAgICAgICAgICB2YXIgZWRhZERlY2ltYWxlcyA9IGRpZmVyZW5jaWFNZXNlcyAvIDEyOyAvL2VqIDM2LjVcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoZWRhZERlY2ltYWxlcykgPT0gZWRhZCB8fCAvL21pc21hIGVkYWRcclxuICAgICAgICAgICAgICAgIGVkYWREZWNpbWFsZXMgPT0gZWRhZCArIDEgLy9tZXMgZGUgdG9sZXJhbmNpYVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvL2NvcGlhcl9jYW1wb191YV9yYW1hKHJlc3B1ZXN0YXNPcmlnZW46UmVzcHVlc3Rhc1tdLCBwb3NpY2lvbjpudW1iZXIsIHZhcmlhYmxlT3JpZ2VuOiBJZFZhcmlhYmxlLCBjYW1pbm86c3RyaW5nLCBjb25kaWNpb246Ym9vbGVhbil7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj8ocmVzcHVlc3Rhc09yaWdlbiAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV1bYCR7Y2FtaW5vfWBdW3ZhcmlhYmxlT3JpZ2VuXSk6bnVsbFxyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/ZXZhbChgcmVzcHVlc3Rhc09yaWdlblske3Bvc2ljaW9uLTF9XS5gK2NhbWlubysnLicrdmFyaWFibGVPcmlnZW4pOm51bGw7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLypcclxuICAgICAgICBkYm86e1xyXG4gICAgICAgICAgICBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCBkYXRvOnN0cmluZyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmIGluZm9ybWFkbyh4cGVyc29uYXMpICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXVtkYXRvXT8geHBlcnNvbmFzW3Blci0xXVtkYXRvXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVkYWRmYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdlZGFkJylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlaW5kaXZpZHVhbChlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISFwZXJzb25hc1twZXItMV1bJ2VudHJlYWluZCddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZW1pZW1icm8oZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2Nvbnl1Z2VzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hc1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHhwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0yKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvamVmZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0xKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFyZW50ZXNjb2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwncDQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXhvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISF4cGVyc29uYXMgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdLnNleG8/IHhwZXJzb25hc1twZXItMV1bJ3NleG8nXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNpdGNvbnlqZWZlKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLDEsJ3A1JylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKi9cclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBib29sZWFuO1xyXG50eXBlIEZ1bmNpb25WYWxvcmFyID0gKHZhbG9yZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IGFueTtcclxudmFyIGZ1bmNpb25lc0hhYmlsaXRhcjogeyBba2V5OiBzdHJpbmddOiBGdW5jaW9uSGFiaWxpdGFyIH0gPSB7XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6IHsgW2tleTogc3RyaW5nXTogRnVuY2lvblZhbG9yYXIgfSA9IHtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1pbmlDb21waWxhZG9yU1FsSnMoZXhwcmVzaW9uQ2FzaVNRTDogc3RyaW5nKSB7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csICcgJyk7XHJcbiAgICB2YXIgY3VlcnBvID0gZXhwcmVzaW9uLnJlcGxhY2UoL1xcYmlzIGRpc3RpbmN0IGZyb21cXGIvZ2ksICchPScpLnJlcGxhY2UoL1xcYi4rP1xcYi9nLCBmdW5jdGlvbiAoZWxUb2tlbikge1xyXG4gICAgICAgIHZhciBlbFRva2VuVHJpbWVhZG8gPSBlbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZiAoZWxUb2tlblRyaW1lYWRvIGluIHJlZW1wbGF6b3NIYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZW1wbGF6b3NIYWJpbGl0YXJbZWxUb2tlblRyaW1lYWRvXTtcclxuICAgICAgICB9IGVsc2UgaWYgKC9eXFxkK1xcLj9cXGQqJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfSBlbHNlIGlmICgvXlxcVyskLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9IGVsc2UgaWYgKC9eXFxzKyQvLnRlc3QoZWxUb2tlbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLicgKyBlbFRva2VuICsgJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOiB7IFtrZXk6IHN0cmluZ106ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBUIH0pIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kczogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdKSB7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGN1ZXJwbyA9IG1pbmlDb21waWxhZG9yU1FsSnMobm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxGdW4gPSBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJyArIGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdID0gZnVuY3Rpb24gKHZhbG9yZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJuYWxGdW4odmFsb3JlcywgaGVscGVyc0Nhc2lsbGVyb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgRUpFQ1VDQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLCBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLCBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3VlcnBvKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25IYWJpbGl0YXIgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc0hhYmlsaXRhcik7XHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uVmFsb3JhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzVmFsb3Jhcik7XHJcblxyXG5cclxudmFyIHJvd1ZhbGlkYXRvciA9IGdldFJvd1ZhbGlkYXRvcjxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+KHsgZ2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXIgfSlcclxuZXhwb3J0IHZhciBidXNjYXJOb1JlYUVuUmVzcHVlc3RhcyA9ICh1bmlkYWRlc0FSZWNvcnJlclBybTogSWRVbmlkYWRBbmFsaXNpc1tdLCB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsIG5vUmVhc1RhcmVhOiBhbnlbXSwgbm9tYk5vUmVhOiBzdHJpbmcpXHJcbiAgICA6IHsgbnJjb2RpZ286IHN0cmluZyB8IG51bGwsIGVzdmFsb3I6IGJvb2xlYW4gfSA9PiB7XHJcbiAgICB2YXIgbnJjb2RpZ286IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdmFyIGVzdmFsb3IgPSBmYWxzZTtcclxuICAgIHZhciBydmFsb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdmFyIHJ2YXJpYWJsZTogc3RyaW5nO1xyXG4gICAgdmFyIHJub3JlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAvLyB2YXIgcmVzdWx0PXtucmNvZDpTdHJpbmcsIGVzdmFsOkJvb2xlYW59O1xyXG4gICAgaWYgKHVuaWRhZGVzQVJlY29ycmVyUHJtLmluY2x1ZGVzKHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcykpIHtcclxuICAgICAgICBmb3IgKGxldCBub1JlYSBvZiBub1JlYXNUYXJlYSkgeyAvL2VzdHJ1Y3R1cmEubm9SZWFzLCBlc3RydWN0dXJhLm5vUmVhc1N1cFxyXG4gICAgICAgICAgICBpZiAobm9tYk5vUmVhID09ICdub19yZWEnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyB2YXJpYWJsZSwgdmFsb3IsIG5vX3JlYSB9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWEgPSBub19yZWE7XHJcbiAgICAgICAgICAgICAgICBydmFsb3IgPSB2YWxvcjtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZSA9IHZhcmlhYmxlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHsgdmFyaWFibGVfc3VwLCB2YWxvcl9zdXAsIG5vX3JlYV9zdXAgfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhID0gbm9fcmVhX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YWxvciA9IHZhbG9yX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZSA9IHZhcmlhYmxlX3N1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tydmFyaWFibGUgYXMgSWRWYXJpYWJsZV0gPT0gcnZhbG9yKSB7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbyA9IHJub3JlYTsgIC8vbm9fcmVhLCBub19yZWFfc3VwXHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG5yY29kaWdvLCBlc3ZhbG9yIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGVzdmFsb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IHVhIG9mIChsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpKSkge1xyXG4gICAgICAgIGlmICh1YT8udW5pZGFkX2FuYWxpc2lzICYmIHJlc3B1ZXN0YXNbdWEudW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlc3B1ZXN0YXNIaWphcyBvZiBpdGVyYXRvcihyZXNwdWVzdGFzW3VhPy51bmlkYWRfYW5hbGlzaXNdID8/IFtdKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKHVuaWRhZGVzQVJlY29ycmVyUHJtLCB1YSwgcmVzcHVlc3Rhc0hpamFzLCBub1JlYXNUYXJlYSwgbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZXN2YWxvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvID0gcmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3IgPSByZXN1bHQuZXN2YWxvcjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBucmNvZGlnbywgZXN2YWxvciB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IG5yY29kaWdvLCBlc3ZhbG9yIH1cclxufVxyXG5cclxuXHJcblxyXG5leHBvcnQgdmFyIGRlZk9wZXJhdGl2bzogRGVmT3BlcmF0aXZvID0ge1xyXG4gICAgZXNOb1JlYTogKF9yZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kTm9SZWEsIGVzTm9SZWEgfTtcclxuICAgIH0sXHJcbiAgICBlc05vUmVhU3VwOiAoX3Jlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHtcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhU3VwOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICByZXR1cm4geyBjb2ROb1JlYVN1cCwgZXNOb1JlYVN1cCB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGE6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kUmVhLCBlc1JlYSB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYVN1cDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kUmVhU3VwLCBlc1JlYVN1cCB9XHJcbiAgICB9LFxyXG4gICAgVUFwcmluY2lwYWw6ICcnIGFzIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBkZWZVQToge30gYXMgeyBbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTogeyBwazogSWRWYXJpYWJsZSwgaW5jbHVpZGFzOiBJZFVuaWRhZEFuYWxpc2lzW10sIGlkc0ZvcjogSWRGb3JtdWxhcmlvW10gfSB9LFxyXG4gICAgZGVmRm9yOiB7fSBhcyB7IFtmIGluIElkRm9ybXVsYXJpb106IHsvKmFyYm9sVUE6SWRVbmlkYWRBbmFsaXNpc1tdLCAqLyBoZXJtYW5vPzogdHJ1ZSB9IH1cclxufVxyXG4vLy8vLyBBQkFKTyBkZSBlc3RhIGzDrW5lYSBubyBwdWVkZSBoYWJlciBvdHJvcyBub21icmVzIGRlIHZhcmlhYmxlcyBvIGZvcm11bGFyaW9zIG8gY2FzaWxsZXJvcyBlbiBnZW5lcmFsXHJcblxyXG5leHBvcnQgdmFyIHNldENhbGN1bG9SZWFOb1JlYSA9IChcclxuICAgIGVzTm9SZWE6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZE5vUmVhOiBzdHJpbmcgfCBudWxsLCBlc05vUmVhOiBib29sZWFuIH0sXHJcbiAgICBlc05vUmVhU3VwOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2ROb1JlYVN1cDogc3RyaW5nIHwgbnVsbCwgZXNOb1JlYVN1cDogYm9vbGVhbiB9LFxyXG4gICAgZXNSZWFsaXphZGE6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZFJlYTogbnVtYmVyIHwgbnVsbCwgZXNSZWE6IGJvb2xlYW4gfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2RSZWFTdXA6IG51bWJlciB8IG51bGwsIGVzUmVhU3VwOiBib29sZWFuIH1cclxuKSA9PiB7XHJcbiAgICBkZWZPcGVyYXRpdm8gPSB7XHJcbiAgICAgICAgLi4uZGVmT3BlcmF0aXZvLFxyXG4gICAgICAgIGVzTm9SZWEsXHJcbiAgICAgICAgZXNOb1JlYVN1cCxcclxuICAgICAgICBlc1JlYWxpemFkYSxcclxuICAgICAgICBlc1JlYWxpemFkYVN1cFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG50eXBlIFBlcnNvbmEgPSB7IHAxOiBzdHJpbmcsIHAyOiBudW1iZXIsIHAzOiBudW1iZXIsIHA0OiBudW1iZXIgfCBudWxsLCBwNTogMSB8IG51bGwsIHA2OiAxIHwgbnVsbCB9XHJcblxyXG5mdW5jdGlvbiBudW0obnVtOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTogbnVtYmVyIHtcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIGlmIChpc05hTihudW0gLSAwKSkgcmV0dXJuIDA7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICByZXR1cm4gbnVtIC0gMDtcclxufVxyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczogeyBbayBpbiBzdHJpbmddOiBib29sZWFuIH0gPSB7fVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmaWNhclNvcnRlbyhvcHRzOiB7XHJcbiAgICBjb25maWd1cmFjaW9uU29ydGVvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXHJcbiAgICByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXpcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHZhcmlhYmxlQWN0dWFsOiBJZFZhcmlhYmxlXHJcblxyXG59KSB7XHJcbiAgICBjb25zdCByZXNldGVhclNvcnRlbyA9IChvcHRzOiB7IHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMgfSkgPT4ge1xyXG4gICAgICAgIHZhciB7IHJlc3B1ZXN0YXMgfSA9IG9wdHM7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gPSBudWxsO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXSA9IG51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID0gbnVsbDtcclxuICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpID0+IHJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdID0gbnVsbCk7XHJcbiAgICAgICAgaWYgKCd2YXJfbGV0cmEnIGluIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAmJiByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwZXIgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB7IGNvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXogfSA9IG9wdHM7XHJcbiAgICB2YXIgaWRFbmMgPSBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdO1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgdmFyIGV4cHJfaW5jb21wbGV0aXR1ZF9mdW4gPSBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvIGFzIHVua25vd24gYXMgbnVtYmVyXS5leHByKTtcclxuICAgIHZhciBmaWx0cm9fZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmZpbHRyb19qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pbyBhcyB1bmtub3duIGFzIG51bWJlcl0uZXhwcik7XHJcbiAgICB2YXIgdW5pZGFkQW5hbGlzaXMgPSBjb25maWd1cmFjaW9uU29ydGVvLnVuaWRhZF9hbmFsaXNpcztcclxuXHJcbiAgICBpZiAoY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLmluY2x1ZGVzKHZhcmlhYmxlQWN0dWFsKSkge1xyXG4gICAgICAgIHZhciB1YVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKSA9PiB1YS51bmlkYWRfYW5hbGlzaXMgPT0gdW5pZGFkQW5hbGlzaXMpPy5wYWRyZTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKSA9PiB1YS51bmlkYWRfYW5hbGlzaXMgPT0gdWFQYWRyZSk/LnBrX2FncmVnYWRhXHJcbiAgICAgICAgaWYgKGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIpIHtcclxuICAgICAgICAgICAgaWYgKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV0pIHtcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBwa0FncmVnYWRhUGFkcmUgZXhpc3RlIGUgaW5kaWNhIGxhIHBvc2ljaW9uIGRlbCBwYWRyZVxyXG4gICAgICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV1bTnVtYmVyKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3BrQWdyZWdhZGFQYWRyZV0pIC0gMV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY3R1YWwgIT0gY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdID0gbGlrZUFyKHBhZHJlW3VuaWRhZEFuYWxpc2lzXSB8fCBbXSkuYXJyYXkoKS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHsgcmVzcHVlc3RhczogcGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodWFQYWRyZSAmJiByZXNwdWVzdGFzUmFpeikge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIHBrQWdyZWdhZGFQYWRyZSBleGlzdGUgZSBpbmRpY2EgbGEgcG9zaWNpb24gZGVsIHBhZHJlXHJcbiAgICAgICAgICAgICAgICB2YXIgcGFkcmUgPSByZXNwdWVzdGFzUmFpejtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSBsaWtlQXIocGFkcmVbdW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5hcnJheSgpLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oeyByZXNwdWVzdGFzOiBwYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXVxyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdICE9IDEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSByZXNwdWVzdGFzVUEubGVuZ3RoICsgMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oeyByZXNwdWVzdGFzIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjYW50aWRhZFRvdGFsID0gTnVtYmVyKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0pO1xyXG4gICAgICAgICAgICBpZiAoY2FudGlkYWRUb3RhbCA8IHJlc3B1ZXN0YXNVQS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvYmxlIGFzaWduYWNpw7NuIHBhcmEgcXVlIGxvIGNhcmd1ZSBlbiByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzVUEuZmlsdGVyKChwLCBpKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5zb21lKChwYXJhbSkgPT4gcFtwYXJhbV0gfHwgaSA8PSBjYW50aWRhZFRvdGFsIC0gMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSA9IHJlc3B1ZXN0YXNVQVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlIChjYW50aWRhZFRvdGFsID4gcmVzcHVlc3Rhc1VBLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLnB1c2goe30gYXMgUmVzcHVlc3RhcylcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIocCA9PiBleHByX2luY29tcGxldGl0dWRfZnVuKHApKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciB2YXIkcDAgPSBcIiRwMFwiIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSA9PSAxICYmXHJcbiAgICAgICAgICAgICAgICAhcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gJiZcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5pbmNvbXBsZXRhc10gPT0gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHZhciBzb3J0ZWFyID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwID0+IGZpbHRyb19mdW4ocCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnRlYXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZvckVhY2goKHBlciwgaSkgPT4gcGVyW3ZhciRwMF0gPSBpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5vcmRlbi5wdXNoKHsgdmFyaWFibGU6IHZhciRwMCwgb3JkZW46IDEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7IGNvbHVtbjogZWxlbS52YXJpYWJsZSwgb3JkZXI6IGVsZW0ub3JkZW4gfSkpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2ljaW9uU29ydGVhZGEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWd1cmFjaW9uU29ydGVvLm1ldG9kbyA9PSAnaGFzaCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOTyBJTVBMRU1FTlRBRE8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypwb3NpY2lvblNvcnRlYWRhPShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9jb2VmLnJlZHVjZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN1bSwgcGFpcik9PnN1bSArIGRhdG9zVml2aWVuZGEudGVtW3BhaXIudmFyXSAqIHBhaXIuY29lZiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAlIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLmRpdmlzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSAlIHNvcnRlYXIubGVuZ3RoKi9cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV0cmEgPSAnQSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhckxldHJhOiBJZFZhcmlhYmxlID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2xldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5maW5kKChfcGVyLCBpKSA9PiBpID09IHBlcnNvbmFbdmFyJHAwXSBhcyBudW1iZXIgLSAxKSFbdmFyTGV0cmFdID0gbGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hW3ZhckxldHJhXSA9IGxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0cmEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxldHJhLmNoYXJDb2RlQXQoMCkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGFBbGVhdG9yaWFNaWVtYnJvcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnRhYmxhLm1hcCgobGlzdGEpID0+IGxpc3RhLnNwbGl0KCcnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN0byA9IGlkRW5jICUgMTA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5hVGFibGFBbGVhdG9yaWEgPSByZXN0byA/IHJlc3RvIC0gMSA6IDk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3J0ZWFyLmxlbmd0aCA+IHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNwbGljZSh0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCkgLy9kZXNjYXJ0byBjYW5kaWRhdG9zIHNpIHNvbiBtw6FzIHF1ZSBsbyBxdWUgcGVybWl0ZSBsYSB0YWJsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxhVGFibGFBbGVhdG9yaWEgPSBzb3J0ZWFyLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYVNlbGVjY2lvbmFkYSA9IHRhYmxhQWxlYXRvcmlhTWllbWJyb3NbZmlsYVRhYmxhQWxlYXRvcmlhXVtjb2x1bW5hVGFibGFBbGVhdG9yaWFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpY2lvblNvcnRlYWRhID0gcmVzcHVlc3Rhc1VBLmZpbmRJbmRleCgocDogUmVzcHVlc3RhcykgPT4gcFt2YXJMZXRyYV0gPT0gbGV0cmFTZWxlY2Npb25hZGEpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gPSBwb3NpY2lvblNvcnRlYWRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc10gPSBzb3J0ZWFyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF0gPSByZXNwdWVzdGFzVUFbcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gYXMgbnVtYmVyIC0gMV1bbW9zdHJhci5zb3VyY2VdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSA9IHJlc3B1ZXN0YXNVQS5sZW5ndGggfHwgbnVsbDsgLy9ubyBxdWVyZW1vcyBlbCB2YWxvciAwXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBXSA9ICdvayc7XHJcbiAgICAgICAgICAgIGlmIChjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWxdID0gJ29rJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYmFycmVyU3ViQXJib2wocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBub2RvQWN0dWFsOiBSZXNwdWVzdGFzIHwgUmVzcHVlc3Rhc1tdLCB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMsIGZvclBrQWN1bXVsYWRvOiBGb3JQaykge1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGVzQXJyYXkgPSBub2RvQWN0dWFsIGluc3RhbmNlb2YgQXJyYXk7XHJcbiAgICB2YXIgY29uanVudG86IFJlc3B1ZXN0YXNbXSA9IGVzQXJyYXkgPyBub2RvQWN0dWFsIGFzIFJlc3B1ZXN0YXNbXSA6IFtub2RvQWN0dWFsIGFzIFJlc3B1ZXN0YXNdO1xyXG4gICAgXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbmp1bnRvLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHJlc3AgPSBjb25qdW50b1tpXTtcclxuICAgICAgICBpZiAoIXJlc3ApIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICB2YXIgbnVtID0gZXNBcnJheSA/IGkgKyAxIDogKGZvclBrQWN1bXVsYWRvW3VhRGVmLnBrX2FncmVnYWRhXSB8fCAxKTtcclxuICAgICAgICB2YXIgaWRGb3JtdWxhcmlvID0gT2JqZWN0LmtleXMoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmluZChrZXkgPT4gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1trZXkgYXMgSWRGb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PT0gdW5pZGFkX2FuYWxpc2lzKSBhcyBJZEZvcm11bGFyaW87XHJcbiAgICAgICAgdmFyIG1pRm9yUGs6IEZvclBrID0geyAuLi5mb3JQa0FjdW11bGFkbywgW3VhRGVmLnBrX2FncmVnYWRhXTogbnVtLCBmb3JtdWxhcmlvOiBpZEZvcm11bGFyaW8gfHwgZm9yUGtBY3VtdWxhZG8uZm9ybXVsYXJpbyB9O1xyXG5cclxuICAgICAgICBpZiAoZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcykge1xyXG4gICAgICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKHJlc3B1ZXN0YXNSYWl6LCBtaUZvclBrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bykge1xyXG4gICAgICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8ocmVzcHVlc3Rhc1JhaXosIG1pRm9yUGspO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhpamFzID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbHRlcih1ID0+IHUucGFkcmUgPT09IHVuaWRhZF9hbmFsaXNpcykua2V5cygpO1xyXG4gICAgICAgIGZvciAodmFyIHVhSGlqYSBvZiBoaWphcykge1xyXG4gICAgICAgICAgICB2YXIgaGlqYXNSZXNwID0gcmVzcFt1YUhpamEgYXMgSWRVbmlkYWRBbmFsaXNpc107XHJcbiAgICAgICAgICAgIGlmIChoaWphc1Jlc3ApIHtcclxuICAgICAgICAgICAgICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBoaWphc1Jlc3AgYXMgUmVzcHVlc3Rhc1tdLCB1YUhpamEgYXMgSWRVbmlkYWRBbmFsaXNpcywgbWlGb3JQayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXo6IEZvclBrKSB7XHJcbiAgICB2YXIgdWFQcGFsID0gT2JqZWN0LmtleXMoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZChrZXkgPT4gIWVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNba2V5IGFzIElkVW5pZGFkQW5hbGlzaXNdLnBhZHJlKSBhcyBJZFVuaWRhZEFuYWxpc2lzO1xyXG4gICAgXHJcbiAgICBiYXJyZXJTdWJBcmJvbChyZXNwdWVzdGFzUmFpeiwgcmVzcHVlc3Rhc1JhaXosIHVhUHBhbCwgZm9yUGtSYWl6KTtcclxuICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpeiwgdWFQcGFsLCBmb3JQa1JhaXopO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczogeyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOiBJbmZvRm9ybXVsYXJpbyB9LFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcclxuICAgIFVBOiBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsIC8vIGluY2x1eWVuIGxhIGRlIHRvZG9zIGxvcyBwYWRyZXMgeSBhbnNlc3Ryb3MsXHJcbiAgICByZXNwdWVzdGFzUGFkcmU6IFJlc3B1ZXN0YXMgfCBudWxsLFxyXG4gICAgb3B0czogT3BjaW9uZXNSb3dWYWxpZGF0b3IsXHJcbikge1xyXG4gICAgLy8gcmVjb3JyaWVuZCBVQSBwZXJzb25hcyB5IG1hc2NvdGFzXHJcbiAgICBmb3IgKHZhciBVQWluY2x1aWRhIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaW5jbHVpZGFzKSB7XHJcbiAgICAgICAgdmFyIHBrTnVldmEgPSBkZWZPcGVyYXRpdm8uZGVmVUFbVUFpbmNsdWlkYV0ucGs7XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1tVQWluY2x1aWRhXTtcclxuICAgICAgICBsaWtlQXIoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXNIaWpvLCB2YWxvclBrT1Bvc2ljaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICAgICAgICAgICAgICBmb3JtdWxhcmlvcyxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWpvLFxyXG4gICAgICAgICAgICAgICAgVUFpbmNsdWlkYSxcclxuICAgICAgICAgICAgICAgIHsgLi4uZm9yUGssIFtwa051ZXZhXTogdmFsb3JQayB9LFxyXG4gICAgICAgICAgICAgICAgeyAuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3Rhc0hpam8sIFtwa051ZXZhXTogdmFsb3JQayB9LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgLy8gUzEgLCBBMVxyXG4gICAgZm9yICh2YXIgZXNIZXJtYW5vIG9mIFt0cnVlLCBmYWxzZV0pIHtcclxuICAgICAgICBmb3IgKHZhciBmb3JtdWxhcmlvIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaWRzRm9yKSBpZiAoISFlc0hlcm1hbm8gPT0gISFkZWZPcGVyYXRpdm8uZGVmRm9yW2Zvcm11bGFyaW9dLmhlcm1hbm8pIHtcclxuICAgICAgICAgICAgdmFyIHBsYWluRm9yUGs6IFBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoeyAuLi5mb3JQaywgZm9ybXVsYXJpbyB9KVxyXG4gICAgICAgICAgICB2YXIgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcyA9IDEwO1xyXG4gICAgICAgICAgICB2YXIgdmFyQXV0b0luZ3Jlc2FkYXMgPSBbXTtcclxuICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGh1Ym9BdXRvaW5ncmVzb3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdID1cclxuICAgICAgICAgICAgICAgICAgICByb3dWYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbWFyY2FGaW46ICdmaW4nLCAuLi5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdmFyIHsgcmVzdW1lbiwgYXV0b0luZ3Jlc2FkYXMgfSA9IGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhck5hbWU6IElkVmFyaWFibGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0b0luZ3Jlc2FkYXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyTmFtZSBpbiBhdXRvSW5ncmVzYWRhcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FtYmlvID0gcmVzcHVlc3Rhc1t2YXJOYW1lXSAhPT0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW1iaW8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5wdXNoKHZhck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVib0F1dG9pbmdyZXNvcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUgKGh1Ym9BdXRvaW5ncmVzb3MgJiYgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcy0tID4gMCk7XHJcbiAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLmZvckVhY2goX3Zhcm5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10uZXN0YWRvc1tfdmFybmFtZSBhcyBJZFZhcmlhYmxlXSA9ICdhY3R1YWwnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB2YXIgQkZfdmFybmFtZSA9ICckQi4nICsgZm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhciBmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgICAgICAgICBpZiAoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYV0pIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gaGF5IGNvbmZpZ3VyYWNpb24gZGUgc29ydGVvIHBhcmEgZWwgZm9ybXVsYXJpbyAke2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VtZW5Pck51bGwgPVxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgJiZcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsID09IEJGX3Zhcm5hbWUgP1xyXG4gICAgICAgICAgICAgICAgICAgICdvaydcclxuICAgICAgICAgICAgICAgICAgICA6IHJlc3VtZW4gPT0gJ3ZhY2lvJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiByZXN1bWVuXHJcbiAgICAgICAgICAgIGlmIChlc0hlcm1hbm8pIHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsID09ICdvaycgPyAnb2snIDogbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwdWVzdGFzUGFkcmUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgLy9yZXNwdWVzdGFzUGFkcmVbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KG51bWJlck9yU3RyaW5nOiBudW1iZXIgfCBzdHJpbmcsIG9iamVjdDogb2JqZWN0IHwgYW55W10pOiAobnVtYmVyIHwgc3RyaW5nKSB7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzdG95IHVzYW5kbyBpc05hTiBwYXJhIHZlciBzaSBlcyBvIG5vIHVuIG7Dum1lcm8gc3VtYWJsZVxyXG4gICAgaWYgKGlzTmFOKG51bWJlck9yU3RyaW5nKSkge1xyXG4gICAgICAgIHJldHVybiBudW1iZXJPclN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiBOdW1iZXIobnVtYmVyT3JTdHJpbmcpICsgKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5ID8gMSA6IDApO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldE1haW5Gb3JtRm9yVml2aWVuZGEgPSAodmFsdWVQa1JhaXo6IFZhbHVlUGtSYWl6KTogSWRGb3JtdWxhcmlvID0+IHtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkclt2YWx1ZVBrUmFpel0udGFyZWEubWFpbl9mb3JtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpIHtcclxuICAgIGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodWFEZWYgPT4gIXVhRGVmLnBhZHJlKS5mb3JFYWNoKHVhRGVmID0+IHtcclxuICAgICAgICB2YXIgZXNQcmluY2lwYWwgPSAoZjogRm9ybXVsYXJpbywgZW5jOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZvcm11bGFyaW9QcmluY2lwYWwgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGVuYyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtdWxhcmlvUHJpbmNpcGFsID8gZm9ybXVsYXJpb1ByaW5jaXBhbCA9PSBmLmlkX2Nhc2lsbGVybyA6IGYuZm9ybXVsYXJpb19wcmluY2lwYWxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vYWPDoSBoYXkgcXVlIHNhbml0aXphciBwb3JxdWUgZXZpZGVudGVtZW50ZSBwdWVkZSB2ZW5pciBjb24gaGFzaHMgZGUgZW5jdWVzdGFzIHNpbiBpbmZvIGVsIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNcclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW3VhRGVmLnVuaWRhZF9hbmFsaXNpc11cclxuICAgICAgICBiZWluZ0FycmF5KGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzLCB2YWxvclBrT1Bvc2ljaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmID0+IGYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFEZWYudW5pZGFkX2FuYWxpc2lzICYmIGVzUHJpbmNpcGFsKGYuY2FzaWxsZXJvcywgdmFsb3JQayBhcyBudW1iZXIpKS5mb3JFYWNoKChfZGVmRiwgZm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHsgZm9ybXVsYXJpbywgW3VhRGVmLnBrX2FncmVnYWRhXTogdmFsb3JQayB9IGFzIEZvclBrUmFpelxyXG4gICAgICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzLCBmb3JQa1JhaXosIHt9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOiB7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106IEluZm9Gb3JtdWxhcmlvIH0sXHJcbiAgICBmb3JQa1JhaXo6IEZvclBrUmFpeixcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXHJcbiAgICBvcHRzOiBPcGNpb25lc1Jvd1ZhbGlkYXRvclxyXG4pIHtcclxuICAgIHZhciBmb3JQazogRm9yUGsgPSB7IC4uLmZvclBrUmFpeiB9O1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGZlZWRiYWNrUm93VmFsaWRhdG9yLCBmb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsLCBmb3JQaywgcmVzcHVlc3RhcywgbnVsbCwgb3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhczogUmVzcHVlc3RhcywgZm9yUGtSYWl6OiBGb3JQa1JhaXosIG9wdHM6IE9wY2lvbmVzUm93VmFsaWRhdG9yKSB7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbztcclxuICAgIC8vIEB0cy1pZ25vcmUgUGFydGlhbFxyXG4gICAgdmFyIG51ZXZvc1Jvd3M6IHsgW3ggaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBJZEZpbj4gfSA9IHt9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEobnVldm9zUm93cywgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgZm9yUGtSYWl6LCByZXNwdWVzdGFzLCBvcHRzKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0gbGlrZUFyKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9mZWVkYmFjazogYW55LCBwbGFpblBrOiBQbGFpbkZvclBrKSA9PiBKU09OLnBhcnNlKHBsYWluUGspW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gIT0gZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pLnBsYWluKCk7XHJcbiAgICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IHsgLi4uZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIC4uLm51ZXZvc1Jvd3MgfTtcclxuICAgIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXSA9IHtcclxuICAgICAgICAuLi5kYXRvc0J5UGFzcy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXVtmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0sXHJcbiAgICAgICAgLi4uY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICAgICAgICAgIGZvclBrUmFpeixcclxuICAgICAgICAgICAgbnVldm9zUm93cyxcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1xyXG4gICAgICAgIClcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyA9IChpZEZvcm11bGFyaW86IElkRm9ybXVsYXJpbyB8IHVuZGVmaW5lZCwgZm9ybXNGZWVkYmFjazogSWRGb3JtdWxhcmlvW10gPSBbXSkgPT4ge1xyXG4gICAgaWYgKGlkRm9ybXVsYXJpbykge1xyXG4gICAgICAgIGZvciAobGV0IGNhc2lsbGVybyBvZiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb10uY2FzaWxsZXJvcy5jYXNpbGxlcm9zKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXNpbGxlcm8udGlwb2MgPT0gJ0JGJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1IaWpvID0gKGNhc2lsbGVyby5zYWx0bz8uc3RhcnRzV2l0aCgnRjonKSA/IGNhc2lsbGVyby5zYWx0byA6ICdGOicgKyBjYXNpbGxlcm8uc2FsdG8pIGFzIElkRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtSGlqbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1zRmVlZGJhY2sucHVzaChmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhmb3JtSGlqbywgZm9ybXNGZWVkYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybXNGZWVkYmFjaztcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6ID0gKHZhbHVlUGtSYWl6OiBWYWx1ZVBrUmFpeikgPT4ge1xyXG4gICAgdmFyIG1haW5Gb3JtRm9yVmFsdWVQa1JhaXogPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKHZhbHVlUGtSYWl6KTtcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gW21haW5Gb3JtRm9yVmFsdWVQa1JhaXpdO1xyXG4gICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhtYWluRm9ybUZvclZhbHVlUGtSYWl6LCBmb3Jtc0ZlZWRiYWNrKTtcclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyQWN0dWFsQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLCBudW1FbGVtZW50b1VBOiBudW1iZXIsIG51bUFjdHVhbDogbnVtYmVyIHwgbnVsbCwgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvLCByOiBSZXNwdWVzdGFzKSA9PlxyXG4gICAgISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmXHJcbiAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpb1xyXG4gICAgICAgID9cclxuICAgICAgICBudW1FbGVtZW50b1VBID09IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDpcclxuICAgICAgICBudW1BY3R1YWwgPT0gbnVtRWxlbWVudG9VQVxyXG4gICAgKVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckRpc2FibGVkQkYgPSAoXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsXHJcbiAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW86IENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8gfCBudWxsLFxyXG4gICAgbnVtRWxlbWVudG9VQTogbnVtYmVyLFxyXG4gICAgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvLFxyXG4gICAgcjogUmVzcHVlc3Rhc1xyXG4pID0+IHtcclxuICAgIGlmIChoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKSB7XHJcbiAgICAgICAgdmFyIGV4cHJfaGFiaWxpdGFyX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLmV4cHJfaGFiaWxpdGFyX2JvdG9uX2pzKTtcclxuICAgICAgICByZXR1cm4gIWV4cHJfaGFiaWxpdGFyX2Z1bihyW2hhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXNdW251bUVsZW1lbnRvVUEgLSAxXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8gfHxcclxuICAgICAgICAgICAgICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MoY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwpLmluY2x1ZGVzKGZvcm11bGFyaW8pXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgbnVtRWxlbWVudG9VQSAhPSBjb2FsZXNjZShcclxuICAgICAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgICAgICkpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLCBmb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8pID0+XHJcbiAgICAhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvKVxyXG5cclxudHlwZSBSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbyxcclxuICAgIHJlc3VtZW5Fc3RhZG9TdXA6IFJlc3VtZW5Fc3RhZG8sXHJcbiAgICBjb2RSZWE6IG51bWJlciB8IG51bGwsXHJcbiAgICBjb2ROb1JlYTogc3RyaW5nIHwgbnVsbCxcclxuICAgIGNvZFJlYVN1cDogbnVtYmVyIHwgbnVsbFxyXG4gICAgY29kTm9SZWFTdXA6IHN0cmluZyB8IG51bGwsXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzXHJcbik6IFJlc3VsdGFkb1Jlc3VtZW4ge1xyXG4gICAgdmFyIHsgY29kUmVhLCBlc1JlYSB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgeyBjb2ROb1JlYSwgZXNOb1JlYSB9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWEocmVzcHVlc3RhcylcclxuICAgIHZhciB7IGNvZFJlYVN1cCwgZXNSZWFTdXAgfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYVN1cChyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHsgY29kTm9SZWFTdXAsIGVzTm9SZWFTdXAgfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXooZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgdmFyIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldXHJcbiAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICB2YXIgZmVlZEJhY2tWaXZpZW5kYSA9IGxpa2VBcihmZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfcm93LCBwbGFpblBrKSA9PiB7XHJcbiAgICAgICAgdmFyIHRpZW5lSW5kaXZpZHVhbCA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvICYmICEhKGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlKVxyXG4gICAgICAgIHZhciB0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUgPSBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW0pTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyBhcyBJZEZvcm11bGFyaW9dO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhID0gbnVsbDtcclxuICAgICAgICBpZiAodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlKSB7XHJcbiAgICAgICAgICAgIHBrQWdyZWdhZGEgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEsIF9pZFVBKSA9PlxyXG4gICAgICAgICAgICAgICAgdWEudW5pZGFkX2FuYWxpc2lzID09IGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8gYXMgSWRGb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXMpPy5wa19hZ3JlZ2FkYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocGxhaW5QaylbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSA9PSBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSAmJlxyXG4gICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLmluY2x1ZGVzKEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbykgJiZcclxuICAgICAgICAgICAgKHRpZW5lQm90b25EZXNIYWJpbGl0YWJsZSA/XHJcbiAgICAgICAgICAgICAgICAhY2FsY3VsYXJEaXNhYmxlZEJGKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspW3BrQWdyZWdhZGEgYXMgQ2FtcG9Qa10sXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNGb3JQayhKU09OLnBhcnNlKHBsYWluUGspLCB0cnVlKS5yZXNwdWVzdGFzQXVtZW50YWRhc1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOiB0aWVuZUluZGl2aWR1YWwgP1xyXG4gICAgICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykucGVyc29uYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmNvblJlYUhvZ2FyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuaG9nYXIgPyByZXNwdWVzdGFzRm9yUGsoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhcmlvOiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2dhcjogSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBGb3JQaykucmVzcHVlc3RhcyA6IHt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBGb3JQaykucmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICA6IHRydWUpXHJcbiAgICB9KS5hcnJheSgpO1xyXG4gICAgdmFyIHByaW9yaWRhZGVzOiB7IFtrZXkgaW4gUmVzdW1lbkVzdGFkb106IHsgcHJpb3JpZGFkOiBudW1iZXIsIGNhbnRpZGFkOiBudW1iZXIgfSB9ID0ge1xyXG4gICAgICAgICdubyByZWEnOiB7IHByaW9yaWRhZDogMSwgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAnY29uIHByb2JsZW1hcyc6IHsgcHJpb3JpZGFkOiAyLCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdpbmNvbXBsZXRvJzogeyBwcmlvcmlkYWQ6IDMsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ3ZhY2lvJzogeyBwcmlvcmlkYWQ6IDQsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ2NpdGEgcGFjdGFkYSc6IHsgcHJpb3JpZGFkOiA1LCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdvayc6IHsgcHJpb3JpZGFkOiA2LCBjYW50aWRhZDogMCB9XHJcbiAgICB9XHJcbiAgICB2YXIgbWluID0gNjtcclxuICAgIHZhciBtaW5SZXN1bWVuOiBSZXN1bWVuRXN0YWRvID0gJ29rJztcclxuICAgIGZvciAodmFyIGZlZWRiYWNrIG9mIGZlZWRCYWNrVml2aWVuZGEpIHtcclxuICAgICAgICB2YXIgcmVzdW1lbiA9IGZlZWRiYWNrLnJlc3VtZW47XHJcbiAgICAgICAgcHJpb3JpZGFkZXNbcmVzdW1lbl0uY2FudGlkYWQrKztcclxuICAgICAgICBpZiAocHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkIDwgbWluKSB7XHJcbiAgICAgICAgICAgIG1pbiA9IHByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDtcclxuICAgICAgICAgICAgbWluUmVzdW1lbiA9IHJlc3VtZW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG1pblJlc3VtZW4gPT0gJ3ZhY2lvJyAmJiBwcmlvcmlkYWRlc1snb2snXS5jYW50aWRhZCB8fCBtaW5SZXN1bWVuID09ICdpbmNvbXBsZXRvJykge1xyXG4gICAgICAgIGlmIChmYWxzZSAvKnJlc3B1ZXN0YXNbc3AxXT09MiAmJiByZXNwdWVzdGFzW3NwNl09PW51bGwqLykge1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuID0gJ2NpdGEgcGFjdGFkYSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWluUmVzdW1lbiA9ICdpbmNvbXBsZXRvJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9UT0RPIEFSUkVHTEFSIEVTVEUgSE9SUk9SLCBHRU5FUkFMSVpBUlxyXG4gICAgdmFyIHRhcmVhID0gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gYXMgdW5rbm93biBhcyBJZEVuY10udGFyZWEudGFyZWE7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbztcclxuICAgIHZhciByZXN1bWVuRXN0YWRvU3VwOiBSZXN1bWVuRXN0YWRvID0gJ3ZhY2lvJztcclxuICAgIGlmICh0YXJlYSA9PSAnc3VwZScpIHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwID0gZXNOb1JlYVN1cCA/ICdubyByZWEnIDogbWluUmVzdW1lblxyXG4gICAgICAgIC8vcGFyYSBxdWUgY29sb3JlZSBiaWVuIGVuIGxhIGhkciBkZWwgRE0gKGx1ZWdvIGVuIGJiZGQgbm8gc2UgZ3VhcmRhKVxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSByZXN1bWVuRXN0YWRvU3VwXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSBlc05vUmVhID8gJ25vIHJlYScgOiBtaW5SZXN1bWVuXHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0YWRvOiBSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8sXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkb1N1cCxcclxuICAgICAgICBjb2RSZWEsXHJcbiAgICAgICAgY29kTm9SZWEsXHJcbiAgICAgICAgY29kUmVhU3VwLFxyXG4gICAgICAgIGNvZE5vUmVhU3VwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0YWRvXHJcbn1cclxuIl19
1139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBc0NBLG9EQUVDO0lBRUQsNEZBRUM7SUFzQ0QsMERBRUM7SUFFRCxvREFJQztJQXNCRCw0Q0FJQztJQWdCRCxzQ0FVQztJQUVELHdDQVVDO0lBV0QsMERBS0M7SUFFRCw0QkFFQztJQUVELHNDQUVDO0lBa0NELDhDQUlDO0lBTUQsMENBaURDO0lBRUQsZ0ZBdUNDO0lBRUQsNERBb0VDO0lBRUQsMENBUUM7SUFFRCw0Q0FRQztJQWtCRCxnREFDQztJQWNELGdFQXlEQztJQUVELHNEQUdDO0lBRUQsc0RBRUM7SUFFRCwwREFFQztJQUVELG9EQUVDO0lBRUQsOERBTUM7SUFFRCwwREFNQztJQUVELDREQWVDO0lBR0Qsd0NBS0M7SUFvSkQsa0RBZ0JDO0lBRUQsa0RBMEJDO0lBc0hELDBDQWtJQztJQWdDRCxzREFLQztJQUVELHdFQWdGQztJQUVELDREQU1DO0lBTUQsZ0VBaUJDO0lBRUQsNERBU0M7SUF5RkQsMERBZ0dDO0lBeHpDRCxxQ0FBdUQ7SUFFdkQsaURBQW9HO0lBRXBHLCtDQUErRDtJQUMvRCwyQ0FBc0M7SUFFdEMsbUNBc0JpQjtJQUVqQixtREFBa0Q7SUFDbEQseURBQXVEO0lBRXZELElBQUksVUFBVSxHQUFHLEVBR2hCLENBQUE7SUFDRCxTQUFnQixvQkFBb0IsQ0FBQyxpQkFBeUU7UUFDMUcsVUFBVSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO0lBQ3BELENBQUM7SUFFRCxTQUFnQix3Q0FBd0MsQ0FBQyxxQ0FBNkY7UUFDbEosVUFBVSxDQUFDLHFDQUFxQyxHQUFHLHFDQUFxQyxDQUFBO0lBQzVGLENBQUM7SUFTRCxJQUFJLFdBQVcsR0FBRyxFQUFpQixDQUFBO0lBRTVCLE1BQU0seUJBQXlC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LHFFQUFxRTtZQUNyRSxhQUFhLEdBQUcsZ0JBQWdCLENBQUE7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDSixhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUNuRCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQXFCO1lBQzlCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsTUFBTTtZQUNOLFFBQVE7WUFDUixTQUFTO1lBQ1QsV0FBVztTQUNkLENBQUE7UUFDRCxPQUFPLFNBQVMsQ0FBQTtJQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRSb3dWYWxpZGF0b3IsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSwgT3BjaW9uZXNSb3dWYWxpZGF0b3IsIEZlZWRiYWNrIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7IGRhdGUsIGNvbXBhcmVGb3JPcmRlciwgY29hbGVzY2UgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IGV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLFxyXG4gICAgRm9yUGssIEZvclBrUmFpeixcclxuICAgIElkRmluLCBJZEZvcm11bGFyaW8sIElkUHJlZ3VudGEsIElkVGFyZWEsIElkVmFyaWFibGUsXHJcbiAgICBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBVbmlkYWRBbmFsaXNpcyxcclxuICAgIEZvcm11bGFyaW8sXHJcbiAgICBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLFxyXG4gICAgSWRFbmMsXHJcbiAgICBEZWZPcGVyYXRpdm8sXHJcbiAgICBpdGVyYXRvcixcclxuICAgIENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYW1wb1BrLFxyXG4gICAgSWRDYXJnYSxcclxuICAgIENhcmdhLFxyXG4gICAgQ2FtcG9Qa1JhaXosXHJcbiAgICBWYWx1ZVBrUmFpelxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRGb3JtUmVuZGVyZXIgfSBmcm9tIFwiLi9yZW5kZXItY29uZmlnXCI7XHJcbmltcG9ydCB7IGFkYXB0YXJFc3RydWN0dXJhIH0gZnJvbSBcIi4vcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5cclxudmFyIGVzcGVjaWFsZXMgPSB7fSBhcyB7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlcz86IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZFxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bz86IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZFxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlcyhjYWxjdWxhclZhcmlhYmxlczogKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB2b2lkKSB7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzID0gY2FsY3VsYXJWYXJpYWJsZXNcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8oY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bzogKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB2b2lkKSB7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8gPSBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvXHJcbn1cclxuXHJcbnR5cGUgRGF0b3NCeVBhc3MgPSBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHtcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7ICAvLyBubyBzZSBwZXJzaXN0ZVxyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfVxyXG4gICAgZGlydHk6IGJvb2xlYW5cclxufTtcclxuXHJcbnZhciBkYXRvc0J5UGFzcyA9IHt9IGFzIERhdG9zQnlQYXNzXHJcblxyXG5leHBvcnQgY29uc3QgaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcyA9ICgpID0+IGRhdG9zQnlQYXNzICYmIE9iamVjdC5rZXlzKGRhdG9zQnlQYXNzKS5sZW5ndGggPiAwXHJcblxyXG5pbnRlcmZhY2UgUmVjdCB7XHJcbiAgICB0b3A6IG51bWJlcjtcclxuICAgIGxlZnQ6IG51bWJlcjtcclxuICAgIHdpZHRoOiBudW1iZXI7XHJcbiAgICBoZWlnaHQ6IG51bWJlcjtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UmVjdChlbGVtZW50OiBIVE1MRWxlbWVudCk6IFJlY3Qge1xyXG4gICAgdmFyIHJlY3Q6IFJlY3QgPSB7IHRvcDogMCwgbGVmdDogMCwgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGgsIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHQgfTtcclxuICAgIHZhciBjdXJyZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIHJlY3QudG9wICs9IGN1cnJlbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgIHJlY3QubGVmdCArPSBjdXJyZW50Lm9mZnNldExlZnQ7XHJcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQub2Zmc2V0UGFyZW50IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiByZWN0O1xyXG59XHJcblxyXG4vL0B0cy1pZ25vcmUgYXJyYW5jYSBlbiBibGFuY29cclxudmFyIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmEgPSBudWxsIGFzIEVzdHJ1Y3R1cmE7XHJcblxyXG5sZXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vOiAoZGJwcDogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpID0+IFByb21pc2U8YW55PiA9ICgpID0+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcigncGVyc2lzdGlyRGF0b3NCeVBhc3MgU0lOIERFRklOSVInKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MocGVyc2lzdGlyRGF0b3NCeVBhc3NGdW46IHR5cGVvZiBwZXJzaXN0aXJEYXRvc0J5UGFzcykge1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vID0gcGVyc2lzdGlyRGF0b3NCeVBhc3NGdW47XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYnBwOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcykge1xyXG4gICAgYXdhaXQgZ2V0Rm9ybVJlbmRlcmVyKCkucGVyc2lzdGlyRGF0b3MoZGJwcCk7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGZhbHNlXHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhckVuY3Vlc3RhID0gKGlkQ2FyZ2E6IElkQ2FyZ2EsIGNhbGxCYWNrOiAoZm9yUGtSYWl6OiBGb3JQa1JhaXopID0+IHZvaWQpID0+IHtcclxuICAgIGNvbnN0IE5FWFRfQVVUT19WQUxVRV9QS19SQUlaID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0VWx0aW1vVmFsb3JQa1JhaXooKSB8fCAnLTEnO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIGdldEZvcm1SZW5kZXJlcigpLnNldFVsdGltb1ZhbG9yUGtSYWl6KChOdW1iZXIoTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVopIC0gMSkudG9TdHJpbmcoKSk7XHJcbiAgICBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXVtORVhUX0FVVE9fVkFMVUVfUEtfUkFJWiBhcyB1bmtub3duIGFzIElkRW5jXSA9IHt9IGFzIFJlc3B1ZXN0YXNSYWl6O1xyXG4gICAgZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVogYXMgdW5rbm93biBhcyBJZEVuY10gPSB7XHJcbiAgICAgICAgLi4uZXN0cnVjdHVyYS5kZWZhdWx0SW5mb3JtYWNpb25IZHIsXHJcbiAgICAgICAgdGVtOiB7IC4uLmVzdHJ1Y3R1cmEuZGVmYXVsdEluZm9ybWFjaW9uSGRyLnRlbSB9XHJcbiAgICB9O1xyXG4gICAgZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVogYXMgdW5rbm93biBhcyBJZEVuY10udGVtLmNhcmdhID0gaWRDYXJnYTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcykudGhlbihcclxuICAgICAgICAoKSA9PiBjYWxsQmFjayh7XHJcbiAgICAgICAgICAgIGZvcm11bGFyaW86IGVzdHJ1Y3R1cmEuZGVmYXVsdEluZm9ybWFjaW9uSGRyLnRhcmVhLm1haW5fZm9ybSxcclxuICAgICAgICAgICAgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IE51bWJlcihORVhUX0FVVE9fVkFMVUVfUEtfUkFJWikgYXMgVmFsdWVQa1JhaXpcclxuICAgICAgICB9IGFzIEZvclBrUmFpeilcclxuICAgICkvL25vIHF1aXRhciBlbCBjYXN0ZW8gcG9ycXVlIHZpZW5lIGNvbW8gdGV4dG8geSBuZWNlc2l0byBxdWUgc2VhIG7Dum1lcm9cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFbmNvbGFyQmFja3VwKFxyXG4gICAgZW5jb2xhckJhY2t1cEZ1bjogKHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZvclBrUmFpejogRm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejogUmVzcHVlc3RhcykgPT4gdm9pZFxyXG4pIHtcclxuICAgIGVuY29sYXJCYWNrdXAgPSBlbmNvbGFyQmFja3VwRnVuXHJcbn1cclxuXHJcbmxldCBlbmNvbGFyQmFja3VwOiAodG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCwgZm9yUGtSYWl6OiBGb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzKSA9PiB2b2lkID0gKCkgPT4ge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU0lOIEVTUEVDSUZJQ0FSIGVuY29sYXJCYWNrdXBcIilcclxufVxyXG5cclxuZXhwb3J0IHZhciBpbnRlbnRhckJhY2t1cCA9IChmb3JQazogRm9yUGspID0+IHtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSlcclxuICAgIHZhciB0b2tlbiA9IGRhdG9zQnlQYXNzLnRva2VuO1xyXG4gICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgZW5jb2xhckJhY2t1cCh0b2tlbiwgZm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpeik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwibm8gaGF5IHRva2VuLCBubyBzZSBwdWRvIGhhY2VyIGVsIGJhY2t1cFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RXN0cnVjdHVyYShlc3RydWN0dXJhQUNhcmdhcjogRXN0cnVjdHVyYSkge1xyXG4gICAgZXN0cnVjdHVyYSA9IGFkYXB0YXJFc3RydWN0dXJhKGVzdHJ1Y3R1cmFBQ2FyZ2FyKTtcclxuICAgIGRlZk9wZXJhdGl2by5VQXByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKHVhID0+ICEhdWEucHJpbmNpcGFsKT8udW5pZGFkX2FuYWxpc2lzIVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZkZvciA9IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5tYXAoZiA9PiAoeyBoZXJtYW5vOiBmLmNhc2lsbGVyb3MuaGVybWFubyB9KSkucGxhaW4oKVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZlVBID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLm1hcCgodWFEZWYsIHVhKSA9PiAoe1xyXG4gICAgICAgIHBrOiB1YURlZi5wa19hZ3JlZ2FkYSBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIGluY2x1aWRhczogbGlrZUFyKHVhRGVmLmhpamFzKS5rZXlzKCksXHJcbiAgICAgICAgaWRzRm9yOiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGYgPT4gZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YSkua2V5cygpXHJcbiAgICB9KSkucGxhaW4oKVxyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXREYXRvc0J5UGFzcyhcclxuICAgIG51ZXZvUGFxdWV0ZTogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7IGRpcnR5PzogYm9vbGVhbiB9XHJcbikge1xyXG4gICAgZGF0b3NCeVBhc3MgPSB7XHJcbiAgICAgICAgZGlydHk6IGZhbHNlLFxyXG4gICAgICAgIC4uLm51ZXZvUGFxdWV0ZSxcclxuICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjoge30gYXMgRGF0b3NCeVBhc3NbXCJmZWVkYmFja1Jvd1ZhbGlkYXRvclwiXVxyXG4gICAgfTtcclxuXHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldERhdG9zQnlQYXNzID0gKCkgPT4gZGF0b3NCeVBhc3NcclxuXHJcbmZ1bmN0aW9uIG9iamV0b1ZhY2lvKG86IG9iamVjdCkge1xyXG4gICAgZm9yICh2YXIgayBpbiBvKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpIHtcclxuICAgIGlmICghZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgfHwgb2JqZXRvVmFjaW8oZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpKSB7XHJcbiAgICAgICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERpcnR5KCkge1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmRpcnR5XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFc3RydWN0dXJhKCkge1xyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbnR5cGUgRWxlbWVudG9zUmVnaXN0cmFibGVzID0gSFRNTERpdkVsZW1lbnQgfCBIVE1MQnV0dG9uRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG50eXBlIERpcmVjdEZ1bmN0aW9uPFQsIFJlc3VsdD4gPSAocmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGVsZW1lbnRvOiBULFxyXG4gICAgZmVlZGJhY2tBbGw6IHtcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH0sXHJcbiAgICBlc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbikgPT4gUmVzdWx0XHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7XHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBhbnk+LFxyXG4gICAgdmFyaWFibGU/OiBJZFZhcmlhYmxlLFxyXG4gICAgZm9yUGs/OiBGb3JQayxcclxufSAmICh7XHJcbiAgICBwcm9wOiBrZXlvZiBUXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIFRba2V5b2YgVF0+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgbGEgcHJvcChlcnR5KSBkZWwgZWxlbWVudG9cclxufSB8IHtcclxuICAgIGF0dHI6IHN0cmluZ1xyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIGF0dHIoaWJ1dG8pXHJcbn0gfCB7XHJcbiAgICBzdHlsZToga2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvblxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIHN0eWxlXHJcbn0gfCB7XHJcbiAgICBkaXJlY3Q6IHRydWVcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgdm9pZD4gLy8gTGEgZnVuY2nDs24gdmEgYSB0b2NhciBkaXJlY3RhbWVudGUgZWwgZWxlbWVudG8geSBoYWNlciB0b2RvIGxvIHF1ZSB0ZW5nYSBxdWUgaGFjZXJcclxufSlcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50b3M8VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7IFtpZDogc3RyaW5nXTogUmVnaXN0cm9FbGVtZW50bzxUPiAmIHsgZWxlbWVudG8/OiBUIH0gfTtcclxuXHJcbnZhciByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbCA9IHt9IGFzIFJlZ2lzdHJvRWxlbWVudG9zPEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0cmFyRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4oZGVmOiBSZWdpc3Ryb0VsZW1lbnRvPFQ+KSB7XHJcbiAgICAvLyBAdHMtaWdub3JlIFPDrSwgcG9kcsOtYSBzZXIgcXVlIGxvcyB0aXBvcyBkZSBUIHNlYW4gZGlzdGludG9zLCBwZXJvIHZhbiBhIHNlciBjb2hlcmVudGVzXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3M6IFJlZ2lzdHJvRWxlbWVudG9zPFQ+ID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICByZWdpc3Ryb0VsZW1lbnRvc1tkZWYuaWRdID0gZGVmO1xyXG59XHJcblxyXG50eXBlIFJlc3B1ZXN0YXNGb3JQa0NvbXVuID0geyByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpejogRm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMgfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazogRm9yUGspOiBSZXNwdWVzdGFzRm9yUGtDb211blxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOiBGb3JQaywgY29uQXVtZW50YWRhczogdHJ1ZSwgYWdyZWdhclNpRmFsdGE/OiBib29sZWFuKTogUmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzIH1cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazogRm9yUGssIGNvbkF1bWVudGFkYXM/OiBib29sZWFuLCBhZ3JlZ2FyU2lGYWx0YT86IGJvb2xlYW4pOiBSZXNwdWVzdGFzRm9yUGtDb211biAmIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXM/OiBSZXNwdWVzdGFzIH0ge1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0ge30gYXMgUmVzcHVlc3RhcztcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbG8gcXVlIHNvYnJhciBkZSByZXNwdWVzdGFzIG5vIG1lIGltcG9ydGEuLi5cclxuICAgIHZhciByZXNwdWVzdGFzID0gZGF0b3NCeVBhc3MucmVzcHVlc3RhcyBhcyBSZXNwdWVzdGFzO1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpejtcclxuICAgIHZhciBmb3JQa1JhaXo6IEZvclBrO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpczogSWRVbmlkYWRBbmFsaXNpcyB8IHVuZGVmaW5lZCA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNcclxuICAgIHZhciBmb3JQa0FwaWxhZGEgPSBmb3JQaztcclxuICAgIHZhciBwaWxhOiBbdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzLCB1YURlZjogVW5pZGFkQW5hbGlzaXMsIGZvclBrOiBGb3JQa11bXSA9IFtdO1xyXG4gICAgd2hpbGUgKHVuaWRhZF9hbmFsaXNpcykge1xyXG4gICAgICAgIHZhciB1YURlZjogVW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgcGlsYS5wdXNoKFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdKTtcclxuICAgICAgICBmb3JQa0FwaWxhZGEgPSB7IC4uLmZvclBrQXBpbGFkYSB9O1xyXG4gICAgICAgIGRlbGV0ZSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdXHJcbiAgICAgICAgdW5pZGFkX2FuYWxpc2lzID0gdWFEZWYucGFkcmVcclxuICAgIH1cclxuICAgIHdoaWxlIChwaWxhLmxlbmd0aCkge1xyXG4gICAgICAgIFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdID0gcGlsYS5wb3AoKSFcclxuICAgICAgICB2YXIgdmFsb3JQa09Qb3NpY2lvbiA9IGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICAgICAgaWYgKHZhbG9yUGtPUG9zaWNpb24gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFsdGEgdW4gdmFsb3IgcGFyYSAke0pTT04uc3RyaW5naWZ5KHVhRGVmLnBrX2FncmVnYWRhKX1gKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXNwdWVzdGFzQW50ZXJpb3IgPSByZXNwdWVzdGFzO1xyXG4gICAgICAgIGxldCBwb3NpY2lvbiA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5ID8gdmFsb3JQa09Qb3NpY2lvbiAtIDEgOiB2YWxvclBrT1Bvc2ljaW9uXHJcbiAgICAgICAgcmVzcHVlc3RhcyA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl07XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoYWdyZWdhclNpRmFsdGEpIHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSB7fSBhcyBSZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzQW50ZXJpb3JbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl0gPSByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGV4aXN0ZSBlbCBlbGVtZW50byAnJHtwb3NpY2lvbn0nIGVuIGxhIHVuaWRhZF9hbmFsaXNpcyAnJHt1bmlkYWRfYW5hbGlzaXN9J2ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvclBrUmFpeiB8fD0gZm9yUGtBcGlsYWRhO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU8OpIHF1ZSBlcyByYcOteiBwb3IgY8OzbW8gZXN0b3kgcmV2b2x2aWVuZG8gbGEgcGlsYVxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6IHx8PSByZXNwdWVzdGFzO1xyXG4gICAgICAgIGlmIChjb25BdW1lbnRhZGFzKSB7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0geyAuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3RhcywgW3VhRGVmLnBrX2FncmVnYWRhXTogdmFsb3JQa09Qb3NpY2lvbiB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXNwdWVzdGFzLCByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFPDqSBxdWUgbGEgcGlsYSB0aWVuZSBhbCBtZW5vcyB1biBlbGVtZW50byBwb3IgbG8gdGFudG8gZXN0byBlc3TDoSBsbGVubyBzZWd1cm8uIFxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOiB1YURlZlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1JhaXo6IEZvclBrUmFpeikge1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXMgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1JhaXosIHRydWUpXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3MgPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHZhciBwbGFpbkZvclBrID0gdG9QbGFpbkZvclBrKGZvclBrUmFpeilcclxuICAgIHZhciByb3dWYWxpZGF0b3IgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXTtcclxuICAgIGZvciAodmFyIGlkIGluIHJlZ2lzdHJvRWxlbWVudG9zKSB7XHJcbiAgICAgICAgdmFyIGRlZiA9IHJlZ2lzdHJvRWxlbWVudG9zW2lkXTtcclxuICAgICAgICBpZiAoZGVmLmVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyhkZWYuZWxlbWVudG8pKSB7XHJcbiAgICAgICAgICAgICAgICBkZWYuZWxlbWVudG8gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkZWYuZWxlbWVudG8pIHtcclxuICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVmLmlkKSBhcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVmLmVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCVVNDQU5ETyBlbCBlbGVtZW50byByZWdpc3RyYWRvICcsaWQsJ25vIGVzdMOhIGVuIGVsIERPTScpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWYuZnVuKHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByb3dWYWxpZGF0b3IsIGRlZi5lbGVtZW50bywgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIGlmICgncHJvcCcgaW4gZGVmKSB7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYucHJvcCwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgnYXR0cicgaW4gZGVmKSB7XHJcbiAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5hdHRyLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCdzdHlsZScgaW4gZGVmKSB7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLnN0eWxlLCBkZWYuc3R5bGUsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyb3dWYWxpZGF0b3IuYWN0dWFsKSB7XHJcbiAgICAgICAgdmFyIHsgdG9wLCBib3R0b20gfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2Fkbyhyb3dWYWxpZGF0b3IuYWN0dWFsKTtcclxuICAgICAgICBpZiAodG9wICE9IG51bGwgJiYgYm90dG9tICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKS5lbFRvcFZpc2liaWxpemFyID0gdG9wO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJykuZWxCb3R0b21WaXNpYmlsaXphciA9IGJvdHRvbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oaWRWYXJpYWJsZTogSWRWYXJpYWJsZSB8IElkRmluKSB7XHJcbiAgICB2YXIgZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRWYXJpYWJsZSA9PSAnZmluJyA/IGBib3Rvbi12b2x2ZXItMmAgOiBgdmFyLSR7aWRWYXJpYWJsZX1gKVxyXG4gICAgICAgIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkVmFyaWFibGUpO1xyXG4gICAgdmFyIGVsZW1lbnRvID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgdmFyIE1BUkdFTl9TQ1JPTEwgPSA2NDtcclxuICAgIHZhciBhbHRvUGFudGFsbGEgPSB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjcgLSBNQVJHRU5fU0NST0xMO1xyXG4gICAgdmFyIGVsZW1lbnRvRW50ZXJvOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBlbnRhciBlbnRlcm8gZW4gcGFudGFsbGEsIGRlZmluZSBlbCBib3R0b21cclxuICAgIHZhciByZWN0RWxlbWVudG9FbnRlcm86IFJlY3QgfCBudWxsID0gbnVsbDtcclxuICAgIHZhciBlbGVtZW50b1N1cGVyaW9yOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBtb3N0cmFyc2UgZGVzZGUgYXJyaWJhIGF1bnF1ZSBubyBlbnRyZSBlbnRlcm8sIGRlZmluZSBlbCB0b3BcclxuICAgIHZhciByZWN0RWxlbWVudG9TdXBlcmlvcjogUmVjdHwgbnVsbCA9IG51bGw7XHJcbiAgICB3aGlsZSAoZWxlbWVudG8gIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygndmFyaWFibGUnKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdtdWx0aXBsZScpXHJcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ByZWd1bnRhJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnY29uanVudG9wcmVndW50YXMnKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8nKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdib3RvbmZvcm11bGFyaW8nKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdib3Rvbi12b2x2ZXInKVxyXG4gICAgICAgICAgICApICYmIGVsZW1lbnRvLm9mZnNldEhlaWdodCA+IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCAmJiBlbGVtZW50by5jbGllbnRIZWlnaHQgPCBhbHRvUGFudGFsbGEpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudG9FbnRlcm8gPT0gbnVsbCkgZWxlbWVudG9FbnRlcm8gPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgIGlmIChyZWN0RWxlbWVudG9FbnRlcm8gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50b0VudGVyb1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b0VudGVybyA9IGdldFJlY3QoZWxlbWVudG9FbnRlcm8hKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b1N1cGVyaW9yID0gcmVjdEVsZW1lbnRvRW50ZXJvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBnZXRSZWN0KGVsZW1lbnRvKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCAtIHJlY3QudG9wIDwgYWx0b1BhbnRhbGxhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b1N1cGVyaW9yID0gcmVjdDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRvID0gZWxlbWVudG8/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChlbGVtZW50b1N1cGVyaW9yID09IG51bGwpIHtcclxuICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm87XHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0OiB7XHJcbiAgICAgICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPzogSFRNTEVsZW1lbnQgfCBudWxsXHJcbiAgICAgICAgdG9wPzogbnVtYmVyIHwgbnVsbFxyXG4gICAgICAgIGJvdHRvbT86IG51bWJlciB8IG51bGxcclxuICAgICAgICBlbmZvY2Fkbz86IGJvb2xlYW4gfCBudWxsXHJcbiAgICAgICAgZGVzZW5mb3F1ZT86IHN0cmluZyB8IG51bGxcclxuICAgIH0gPSB7fTtcclxuICAgIGlmIChlbGVtZW50b0VudGVybyAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJlY3RFbGVtZW50b0VudGVybyA9IGdldFJlY3QoZWxlbWVudG9FbnRlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5lbGVtZW50b0lucHV0VmFyaWFibGUgPSBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXI7XHJcbiAgICAgICAgdmFyIHRvcCA9IChyZWN0RWxlbWVudG9TdXBlcmlvciA/PyByZWN0RWxlbWVudG9FbnRlcm8pLnRvcCAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICAgICAgcmVzdWx0LnRvcCA9IHRvcDtcclxuICAgICAgICByZXN1bHQuYm90dG9tID0gcmVjdEVsZW1lbnRvRW50ZXJvLnRvcCArIHJlY3RFbGVtZW50b0VudGVyby5oZWlnaHQ7XHJcbiAgICAgICAgaWYgKHRvcCA8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApIHtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWUgPSAnYXJyaWJhJztcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY3RFbGVtZW50b0VudGVyby50b3AgKyByZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIGFsdG9QYW50YWxsYSkge1xyXG4gICAgICAgICAgICByZXN1bHQuZGVzZW5mb3F1ZSA9ICdhYmFqbyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0LmVuZm9jYWRvID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRBdHRyRGlzdGludG88TiBleHRlbmRzIHN0cmluZz4oXHJcbiAgICBvYmpldG86IHsgc2V0QXR0cmlidXRlOiAobmFtZTogTiwgdmFsb3I6IHN0cmluZykgPT4gdm9pZCwgZ2V0QXR0cmlidXRlOiAobmFtZTogTikgPT4gc3RyaW5nIHwgbnVsbCB9LFxyXG4gICAgbmFtZTogTixcclxuICAgIHZhbG9yOiBzdHJpbmdcclxuKSB7XHJcbiAgICBpZiAob2JqZXRvICYmIG9iamV0by5nZXRBdHRyaWJ1dGUobmFtZSkgIT0gdmFsb3IpIHtcclxuICAgICAgICBvYmpldG8uc2V0QXR0cmlidXRlKG5hbWUsIHZhbG9yKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFZhbG9yRGlzdGludG88VCBleHRlbmRzIHt9LCBOIGV4dGVuZHMga2V5b2YgVD4oXHJcbiAgICBvYmpldG86IFQsXHJcbiAgICBuYW1lOiBOLFxyXG4gICAgdmFsb3I6IFRbTl1cclxuKSB7XHJcbiAgICBpZiAob2JqZXRvW25hbWVdICE9IHZhbG9yKSB7XHJcbiAgICAgICAgb2JqZXRvW25hbWVdID0gdmFsb3I7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrOiBGb3JQaykge1xyXG4gICAgaWYgKGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvICYmICFkYXRvc0J5UGFzcz8uc29sb0xlY3R1cmEpIHtcclxuICAgICAgICB2YXIgeyByZXNwdWVzdGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgICAgIGxpa2VBcihlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbylcclxuICAgICAgICAgICAgLmZvckVhY2goKGNvbmZpZ0JvdG9uRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzcFVBID0gcmVzcHVlc3Rhc1tlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tpZEZvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcFVBICE9IG51bGwgJiYgcmVzcFVBIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZ0JvdG9uRm9ybXVsYXJpby5oYWJpbGl0YXJfYWdyZWdhcl9saXN0bykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzWyckQi4nICsgaWRGb3JtdWxhcmlvIGFzIElkVmFyaWFibGVdID0gJ29rJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9pZF9wcmVndW50YShfcGF5bG9hZDogeyBwcmVndW50YTogSWRQcmVndW50YSwgZm9yUGs6IEZvclBrIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTID0gU3ltYm9sKCdOT19DQU1CSUFSX1NPTE9fVFJBRVJfU1RBVFVTJylcclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gPSBTeW1ib2woJ05PX0NBTUJJQVJfVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTycpXHJcblxyXG5mdW5jdGlvbiByZWZyZXNjYXJNYXJjYURpcnR5KCkge1xyXG4gICAgdmFyIGJvdG9uR3JhYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWJ1dHRvblwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIGlmIChib3RvbkdyYWJhcikge1xyXG4gICAgICAgIGlmIChib3RvbkdyYWJhci5kaXNhYmxlZCAhPT0gIWRhdG9zQnlQYXNzLmRpcnR5KSB7XHJcbiAgICAgICAgICAgIGJvdG9uR3JhYmFyLmRpc2FibGVkID0gIWRhdG9zQnlQYXNzLmRpcnR5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhKHBheWxvYWQ6IHtcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgdHlwZW9mIE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLFxyXG4gICAgcmVzcHVlc3RhOiBWYWxvciB8IHR5cGVvZiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPXHJcbn0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETydcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGEsIHZhcmlhYmxlIH0gPSBwYXlsb2FkO1xyXG4gICAgdmFyIHsgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXMgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dO1xyXG4gICAgdmFyIHJlY2VudE1vZGlmaWVkID0gZmFsc2U7XHJcbiAgICB2YXIgdmFsb3JBbnRlcmlvciA9IHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTID8gcmVzcHVlc3Rhc1t2YXJpYWJsZV0gOiBudWxsO1xyXG4gICAgdmFyIGZlZWRiYWNrUm93ID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKGZvclBrKV1cclxuICAgIGlmIChyZXNwdWVzdGEgIT09IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMpIHtcclxuICAgICAgICBpZiAocmVzcHVlc3RhID09PSAnJykge1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yLnZhcmlhYmxlc1t2YXJpYWJsZV0/LnRpcG8gPT0gJ251bWVybycpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGEgPSBOdW1iZXIocmVzcHVlc3RhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzaSBlcyB1biBmYWxzeSAoMCA9PSBmYWxzZSkgdGVuZ28gcXVlIGNvbXBhcmFyIGNvbiAhPT1cclxuICAgICAgICByZWNlbnRNb2RpZmllZCA9IHJlc3B1ZXN0YSA/IHZhbG9yQW50ZXJpb3IgIT0gcmVzcHVlc3RhIDogdmFsb3JBbnRlcmlvciAhPT0gcmVzcHVlc3RhXHJcbiAgICAgICAgaWYgKHJlY2VudE1vZGlmaWVkKSB7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyaWFibGVdID0gcmVzcHVlc3RhID8/IG51bGw7IC8vIGNhbWJpbyB1bmRlZmluZWQgcG9yIG51bGxcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3ZhcmlhYmxlXT8uc2lndWllbnRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBzaWd1aWVudGVWYXJpYWJsZTogSWRWYXJpYWJsZSB8IElkRmluIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICAgIGlmICh2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyAmJiAocmVjZW50TW9kaWZpZWQgfHwgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyAmJiBmZWVkYmFja1Jvdy5hdXRvSW5ncmVzYWRhcz8uW3ZhcmlhYmxlXSkpIHtcclxuICAgICAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICAgICAgaWYgKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFkYXRvc0J5UGFzcz8uc29sb0xlY3R1cmEpIHtcclxuICAgICAgICAgICAgdmVyaWZpY2FyU29ydGVvKHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW86IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVBY3R1YWw6IHZhcmlhYmxlLFxyXG4gICAgICAgICAgICAgICAgZm9yUGs6IGZvclBrXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZGF0b3NCeVBhc3MuZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHsgYXV0b0luZ3Jlc286IHRydWUgfSk7XHJcbiAgICAgICAgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3NpZ3VpZW50ZVZhcmlhYmxlXT8uc2lndWllbnRlO1xyXG4gICAgICAgIH0gd2hpbGUgKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlID09IG51bGwgJiYgZmVlZGJhY2tSb3cuZmVlZGJhY2tbdmFyaWFibGVdPy5lc3RhZG8gPT0gJ3ZhbGlkYScpIHtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSAnZmluJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyByZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsOiBmZWVkYmFja1Jvdy5hY3R1YWwgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfbm90YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCB0YXJlYTogSWRUYXJlYSwgbm90YTogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIHRhcmVhLCBub3RhIH0gPSBwYXlsb2FkO1xyXG4gICAgY29uc29sZS5sb2coXCJGQUxUQSAvLyBUT0RPXCIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl92aXNpdGEocGF5bG9hZDogeyBmb3JQa1JhaXo6IEZvclBrUmFpeiwgb2JzZXJ2YWNpb25lczogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIG9ic2VydmFjaW9uZXMgfSA9IHBheWxvYWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fbW9kaWZpY2FyX3Zpc2l0YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCBpbmRleDogbnVtYmVyLCBvcGNpb246IGtleW9mIFZpc2l0YSwgdmFsb3I6IHN0cmluZyB8IG51bGwgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCwgb3BjaW9uLCB2YWxvciB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfdmlzaXRhKHBheWxvYWQ6IHsgZm9yUGtSYWl6OiBGb3JQa1JhaXosIGluZGV4OiBudW1iZXIgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8oeyBmb3JQayB9OiB7IGZvclBrOiBGb3JQayB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHsgZm9yUGsgfTogeyBmb3JQazogRm9yUGsgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgdmFyIHsgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oeyBmb3JQaywgZm9yUGtQYWRyZSB9OiB7IGZvclBrOiBGb3JQaywgZm9yUGtQYWRyZTogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMgfCB1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgdWFEZWY6IFVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGluZGV4ID0gZm9yUGtbdWFEZWYucGtfYWdyZWdhZGFdIGFzIG51bWJlcjtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXM6IHJlc3B1ZXN0YXNQYWRyZSB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrUGFkcmUsIHRydWUsIHRydWUpO1xyXG4gICAgKHJlc3B1ZXN0YXNQYWRyZVt1bmlkYWRfYW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXSkuc3BsaWNlKGluZGV4IC0gMSwgMSk7XHJcbiAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHRydWU7XHJcbiAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgeyBhdXRvSW5ncmVzbzogdHJ1ZSB9KTtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrUGFkcmUpO1xyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1BhZHJlKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEJ5UGFzczxULCBSPihcclxuICAgIGZ1bjogKHBheWxvYWQ6IFQsIGRhdG9zOiB0eXBlb2YgZGF0b3NCeVBhc3MpID0+IFIsXHJcbiAgICBwYXlsb2FkOiBUXHJcbikge1xyXG4gICAgcmV0dXJuIGZ1bihwYXlsb2FkLCBkYXRvc0J5UGFzcyk7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHVsdGltYVZhcmlibGVWaXZpZW5kYSA9ICdOT19FU1RBX0RFRklOSURBX0FVTi8vVE9ETycgYXMgSWRWYXJpYWJsZTtcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhDUCA9IDIwO1xyXG5cclxuLyogUkVEVUNFUlMgKi9cclxuXHJcbnZhciByZWVtcGxhem9zSGFiaWxpdGFyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgZmFsc2U6ICdmYWxzZScsXHJcbiAgICB0cnVlOiAndHJ1ZScsXHJcbiAgICBcIj1cIjogJz09JyxcclxuICAgIFwiPD5cIjogJyE9JyxcclxuICAgIFwiJlwiOiAnJiYnLFxyXG4gICAgXCJ8XCI6ICd8fCcsXHJcbiAgICBcIk9SXCI6ICd8fCcsXHJcbiAgICBcIkFORFwiOiAnJiYnLFxyXG4gICAgXCJvclwiOiAnfHwnLFxyXG4gICAgXCJhbmRcIjogJyYmJyxcclxuICAgIFwibm90XCI6ICchJyxcclxuICAgIFwiTk9UXCI6ICchJyxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzQ2FzaWxsZXJvcyA9IHtcclxuICAgIG51bGwyemVybyhwb3NpYmxlTnVsbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHBvc2libGVOdWxsID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb3NpYmxlTnVsbDtcclxuICAgIH0sXHJcbiAgICBkaXYwZXJyKG51bWVyYWRvcjogbnVtYmVyLCBkZW5vbWluYWRvcjogbnVtYmVyLCBwazogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGRlbm9taW5hZG9yID09IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIgKyBwayArIFwiIGRpdmlzaW9uIHBvciBjZXJvIGRlIFwiICsgbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvciAvIGRlbm9taW5hZG9yO1xyXG4gICAgfSxcclxuICAgIGZ1bnM6IHtcclxuICAgICAgICBibGFuY28oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSAwICYmICF4XHJcbiAgICAgICAgfSxcclxuICAgICAgICBob3koKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvZGF5KCkudG9EbXkoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmVjaGFfdmFsaWRhKHg6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG8gPSAvXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtkLCBtLCB5XSA9IHguc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBuZXcgRGF0ZShgJHt5fS8ke219LyR7ZH1gKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8oMTl8MjApXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG9cclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggIT09IHVuZGVmaW5lZCAmJiB4ICE9PSBudWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSkgfHwgeC5sZW5ndGggIT09IDApXHJcbiAgICAgICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCBPYmplY3Qua2V5cyh4KS5sZW5ndGggIT09IDApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCA9PSAtOVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyKHg6IG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4geCAlIDIgPT0gMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6IG51bWJlciwgbWVzQW5uaW86IHN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIG1lc2VzRGlmZXJlbmNpYSA9IChkMTogRGF0ZSwgZDI6IERhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMF0pKVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzTWVzQW5uaW8gPSBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksIDEpXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBSZWFsRGF0ZSBlcyBEYXRlIHkgc2UgcHVlZGUgcmVzdGFyXHJcbiAgICAgICAgICAgIHZhciBkaWZlcmVuY2lhTWVzZXMgPSBtZXNlc0RpZmVyZW5jaWEobmFjaW1pZW50bywgdG9kYXkpO1xyXG4gICAgICAgICAgICB2YXIgZWRhZERlY2ltYWxlcyA9IGRpZmVyZW5jaWFNZXNlcyAvIDEyOyAvL2VqIDM2LjVcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoZWRhZERlY2ltYWxlcykgPT0gZWRhZCB8fCAvL21pc21hIGVkYWRcclxuICAgICAgICAgICAgICAgIGVkYWREZWNpbWFsZXMgPT0gZWRhZCArIDEgLy9tZXMgZGUgdG9sZXJhbmNpYVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvL2NvcGlhcl9jYW1wb191YV9yYW1hKHJlc3B1ZXN0YXNPcmlnZW46UmVzcHVlc3Rhc1tdLCBwb3NpY2lvbjpudW1iZXIsIHZhcmlhYmxlT3JpZ2VuOiBJZFZhcmlhYmxlLCBjYW1pbm86c3RyaW5nLCBjb25kaWNpb246Ym9vbGVhbil7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj8ocmVzcHVlc3Rhc09yaWdlbiAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV1bYCR7Y2FtaW5vfWBdW3ZhcmlhYmxlT3JpZ2VuXSk6bnVsbFxyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/ZXZhbChgcmVzcHVlc3Rhc09yaWdlblske3Bvc2ljaW9uLTF9XS5gK2NhbWlubysnLicrdmFyaWFibGVPcmlnZW4pOm51bGw7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLypcclxuICAgICAgICBkYm86e1xyXG4gICAgICAgICAgICBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCBkYXRvOnN0cmluZyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmIGluZm9ybWFkbyh4cGVyc29uYXMpICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXVtkYXRvXT8geHBlcnNvbmFzW3Blci0xXVtkYXRvXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVkYWRmYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdlZGFkJylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlaW5kaXZpZHVhbChlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISFwZXJzb25hc1twZXItMV1bJ2VudHJlYWluZCddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZW1pZW1icm8oZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2Nvbnl1Z2VzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hc1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHhwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0yKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvamVmZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0xKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFyZW50ZXNjb2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwncDQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXhvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISF4cGVyc29uYXMgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdLnNleG8/IHhwZXJzb25hc1twZXItMV1bJ3NleG8nXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNpdGNvbnlqZWZlKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLDEsJ3A1JylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKi9cclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBib29sZWFuO1xyXG50eXBlIEZ1bmNpb25WYWxvcmFyID0gKHZhbG9yZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IGFueTtcclxudmFyIGZ1bmNpb25lc0hhYmlsaXRhcjogeyBba2V5OiBzdHJpbmddOiBGdW5jaW9uSGFiaWxpdGFyIH0gPSB7XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6IHsgW2tleTogc3RyaW5nXTogRnVuY2lvblZhbG9yYXIgfSA9IHtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1pbmlDb21waWxhZG9yU1FsSnMoZXhwcmVzaW9uQ2FzaVNRTDogc3RyaW5nKSB7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csICcgJyk7XHJcbiAgICB2YXIgY3VlcnBvID0gZXhwcmVzaW9uLnJlcGxhY2UoL1xcYmlzIGRpc3RpbmN0IGZyb21cXGIvZ2ksICchPScpLnJlcGxhY2UoL1xcYi4rP1xcYi9nLCBmdW5jdGlvbiAoZWxUb2tlbikge1xyXG4gICAgICAgIHZhciBlbFRva2VuVHJpbWVhZG8gPSBlbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZiAoZWxUb2tlblRyaW1lYWRvIGluIHJlZW1wbGF6b3NIYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZW1wbGF6b3NIYWJpbGl0YXJbZWxUb2tlblRyaW1lYWRvXTtcclxuICAgICAgICB9IGVsc2UgaWYgKC9eXFxkK1xcLj9cXGQqJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfSBlbHNlIGlmICgvXlxcVyskLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9IGVsc2UgaWYgKC9eXFxzKyQvLnRlc3QoZWxUb2tlbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLicgKyBlbFRva2VuICsgJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOiB7IFtrZXk6IHN0cmluZ106ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBUIH0pIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kczogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdKSB7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGN1ZXJwbyA9IG1pbmlDb21waWxhZG9yU1FsSnMobm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxGdW4gPSBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJyArIGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdID0gZnVuY3Rpb24gKHZhbG9yZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJuYWxGdW4odmFsb3JlcywgaGVscGVyc0Nhc2lsbGVyb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgRUpFQ1VDQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLCBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLCBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3VlcnBvKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25IYWJpbGl0YXIgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc0hhYmlsaXRhcik7XHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uVmFsb3JhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzVmFsb3Jhcik7XHJcblxyXG5cclxudmFyIHJvd1ZhbGlkYXRvciA9IGdldFJvd1ZhbGlkYXRvcjxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+KHsgZ2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXIgfSlcclxuZXhwb3J0IHZhciBidXNjYXJOb1JlYUVuUmVzcHVlc3RhcyA9ICh1bmlkYWRlc0FSZWNvcnJlclBybTogSWRVbmlkYWRBbmFsaXNpc1tdLCB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsIG5vUmVhc1RhcmVhOiBhbnlbXSwgbm9tYk5vUmVhOiBzdHJpbmcpXHJcbiAgICA6IHsgbnJjb2RpZ286IHN0cmluZyB8IG51bGwsIGVzdmFsb3I6IGJvb2xlYW4gfSA9PiB7XHJcbiAgICB2YXIgbnJjb2RpZ286IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdmFyIGVzdmFsb3IgPSBmYWxzZTtcclxuICAgIHZhciBydmFsb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdmFyIHJ2YXJpYWJsZTogc3RyaW5nO1xyXG4gICAgdmFyIHJub3JlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAvLyB2YXIgcmVzdWx0PXtucmNvZDpTdHJpbmcsIGVzdmFsOkJvb2xlYW59O1xyXG4gICAgaWYgKHVuaWRhZGVzQVJlY29ycmVyUHJtLmluY2x1ZGVzKHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcykpIHtcclxuICAgICAgICBmb3IgKGxldCBub1JlYSBvZiBub1JlYXNUYXJlYSkgeyAvL2VzdHJ1Y3R1cmEubm9SZWFzLCBlc3RydWN0dXJhLm5vUmVhc1N1cFxyXG4gICAgICAgICAgICBpZiAobm9tYk5vUmVhID09ICdub19yZWEnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyB2YXJpYWJsZSwgdmFsb3IsIG5vX3JlYSB9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWEgPSBub19yZWE7XHJcbiAgICAgICAgICAgICAgICBydmFsb3IgPSB2YWxvcjtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZSA9IHZhcmlhYmxlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHsgdmFyaWFibGVfc3VwLCB2YWxvcl9zdXAsIG5vX3JlYV9zdXAgfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhID0gbm9fcmVhX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YWxvciA9IHZhbG9yX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZSA9IHZhcmlhYmxlX3N1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tydmFyaWFibGUgYXMgSWRWYXJpYWJsZV0gPT0gcnZhbG9yKSB7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbyA9IHJub3JlYTsgIC8vbm9fcmVhLCBub19yZWFfc3VwXHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG5yY29kaWdvLCBlc3ZhbG9yIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGVzdmFsb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IHVhIG9mIChsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpKSkge1xyXG4gICAgICAgIGlmICh1YT8udW5pZGFkX2FuYWxpc2lzICYmIHJlc3B1ZXN0YXNbdWEudW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlc3B1ZXN0YXNIaWphcyBvZiBpdGVyYXRvcihyZXNwdWVzdGFzW3VhPy51bmlkYWRfYW5hbGlzaXNdID8/IFtdKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKHVuaWRhZGVzQVJlY29ycmVyUHJtLCB1YSwgcmVzcHVlc3Rhc0hpamFzLCBub1JlYXNUYXJlYSwgbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZXN2YWxvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvID0gcmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3IgPSByZXN1bHQuZXN2YWxvcjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBucmNvZGlnbywgZXN2YWxvciB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IG5yY29kaWdvLCBlc3ZhbG9yIH1cclxufVxyXG5cclxuXHJcblxyXG5leHBvcnQgdmFyIGRlZk9wZXJhdGl2bzogRGVmT3BlcmF0aXZvID0ge1xyXG4gICAgZXNOb1JlYTogKF9yZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kTm9SZWEsIGVzTm9SZWEgfTtcclxuICAgIH0sXHJcbiAgICBlc05vUmVhU3VwOiAoX3Jlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHtcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhU3VwOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICByZXR1cm4geyBjb2ROb1JlYVN1cCwgZXNOb1JlYVN1cCB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGE6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kUmVhLCBlc1JlYSB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYVN1cDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kUmVhU3VwLCBlc1JlYVN1cCB9XHJcbiAgICB9LFxyXG4gICAgVUFwcmluY2lwYWw6ICcnIGFzIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBkZWZVQToge30gYXMgeyBbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTogeyBwazogSWRWYXJpYWJsZSwgaW5jbHVpZGFzOiBJZFVuaWRhZEFuYWxpc2lzW10sIGlkc0ZvcjogSWRGb3JtdWxhcmlvW10gfSB9LFxyXG4gICAgZGVmRm9yOiB7fSBhcyB7IFtmIGluIElkRm9ybXVsYXJpb106IHsvKmFyYm9sVUE6SWRVbmlkYWRBbmFsaXNpc1tdLCAqLyBoZXJtYW5vPzogdHJ1ZSB9IH1cclxufVxyXG4vLy8vLyBBQkFKTyBkZSBlc3RhIGzDrW5lYSBubyBwdWVkZSBoYWJlciBvdHJvcyBub21icmVzIGRlIHZhcmlhYmxlcyBvIGZvcm11bGFyaW9zIG8gY2FzaWxsZXJvcyBlbiBnZW5lcmFsXHJcblxyXG5leHBvcnQgdmFyIHNldENhbGN1bG9SZWFOb1JlYSA9IChcclxuICAgIGVzTm9SZWE6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZE5vUmVhOiBzdHJpbmcgfCBudWxsLCBlc05vUmVhOiBib29sZWFuIH0sXHJcbiAgICBlc05vUmVhU3VwOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2ROb1JlYVN1cDogc3RyaW5nIHwgbnVsbCwgZXNOb1JlYVN1cDogYm9vbGVhbiB9LFxyXG4gICAgZXNSZWFsaXphZGE6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZFJlYTogbnVtYmVyIHwgbnVsbCwgZXNSZWE6IGJvb2xlYW4gfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2RSZWFTdXA6IG51bWJlciB8IG51bGwsIGVzUmVhU3VwOiBib29sZWFuIH1cclxuKSA9PiB7XHJcbiAgICBkZWZPcGVyYXRpdm8gPSB7XHJcbiAgICAgICAgLi4uZGVmT3BlcmF0aXZvLFxyXG4gICAgICAgIGVzTm9SZWEsXHJcbiAgICAgICAgZXNOb1JlYVN1cCxcclxuICAgICAgICBlc1JlYWxpemFkYSxcclxuICAgICAgICBlc1JlYWxpemFkYVN1cFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG50eXBlIFBlcnNvbmEgPSB7IHAxOiBzdHJpbmcsIHAyOiBudW1iZXIsIHAzOiBudW1iZXIsIHA0OiBudW1iZXIgfCBudWxsLCBwNTogMSB8IG51bGwsIHA2OiAxIHwgbnVsbCB9XHJcblxyXG5mdW5jdGlvbiBudW0obnVtOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTogbnVtYmVyIHtcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIGlmIChpc05hTihudW0gLSAwKSkgcmV0dXJuIDA7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICByZXR1cm4gbnVtIC0gMDtcclxufVxyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczogeyBbayBpbiBzdHJpbmddOiBib29sZWFuIH0gPSB7fVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmaWNhclNvcnRlbyhvcHRzOiB7XHJcbiAgICBjb25maWd1cmFjaW9uU29ydGVvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXHJcbiAgICByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXpcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHZhcmlhYmxlQWN0dWFsOiBJZFZhcmlhYmxlXHJcblxyXG59KSB7XHJcbiAgICBjb25zdCByZXNldGVhclNvcnRlbyA9IChvcHRzOiB7IHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMgfSkgPT4ge1xyXG4gICAgICAgIHZhciB7IHJlc3B1ZXN0YXMgfSA9IG9wdHM7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gPSBudWxsO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXSA9IG51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID0gbnVsbDtcclxuICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpID0+IHJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdID0gbnVsbCk7XHJcbiAgICAgICAgaWYgKCd2YXJfbGV0cmEnIGluIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAmJiByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwZXIgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB7IGNvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXogfSA9IG9wdHM7XHJcbiAgICB2YXIgaWRFbmMgPSBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdO1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgdmFyIGV4cHJfaW5jb21wbGV0aXR1ZF9mdW4gPSBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvIGFzIHVua25vd24gYXMgbnVtYmVyXS5leHByKTtcclxuICAgIHZhciBmaWx0cm9fZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmZpbHRyb19qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pbyBhcyB1bmtub3duIGFzIG51bWJlcl0uZXhwcik7XHJcbiAgICB2YXIgdW5pZGFkQW5hbGlzaXMgPSBjb25maWd1cmFjaW9uU29ydGVvLnVuaWRhZF9hbmFsaXNpcztcclxuXHJcbiAgICBpZiAoY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLmluY2x1ZGVzKHZhcmlhYmxlQWN0dWFsKSkge1xyXG4gICAgICAgIHZhciB1YVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKSA9PiB1YS51bmlkYWRfYW5hbGlzaXMgPT0gdW5pZGFkQW5hbGlzaXMpPy5wYWRyZTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKSA9PiB1YS51bmlkYWRfYW5hbGlzaXMgPT0gdWFQYWRyZSk/LnBrX2FncmVnYWRhXHJcbiAgICAgICAgaWYgKGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIpIHtcclxuICAgICAgICAgICAgaWYgKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV0pIHtcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBwa0FncmVnYWRhUGFkcmUgZXhpc3RlIGUgaW5kaWNhIGxhIHBvc2ljaW9uIGRlbCBwYWRyZVxyXG4gICAgICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV1bTnVtYmVyKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3BrQWdyZWdhZGFQYWRyZV0pIC0gMV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY3R1YWwgIT0gY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdID0gbGlrZUFyKHBhZHJlW3VuaWRhZEFuYWxpc2lzXSB8fCBbXSkuYXJyYXkoKS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHsgcmVzcHVlc3RhczogcGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodWFQYWRyZSAmJiByZXNwdWVzdGFzUmFpeikge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIHBrQWdyZWdhZGFQYWRyZSBleGlzdGUgZSBpbmRpY2EgbGEgcG9zaWNpb24gZGVsIHBhZHJlXHJcbiAgICAgICAgICAgICAgICB2YXIgcGFkcmUgPSByZXNwdWVzdGFzUmFpejtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSBsaWtlQXIocGFkcmVbdW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5hcnJheSgpLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oeyByZXNwdWVzdGFzOiBwYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXVxyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdICE9IDEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSByZXNwdWVzdGFzVUEubGVuZ3RoICsgMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oeyByZXNwdWVzdGFzIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjYW50aWRhZFRvdGFsID0gTnVtYmVyKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0pO1xyXG4gICAgICAgICAgICBpZiAoY2FudGlkYWRUb3RhbCA8IHJlc3B1ZXN0YXNVQS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvYmxlIGFzaWduYWNpw7NuIHBhcmEgcXVlIGxvIGNhcmd1ZSBlbiByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzVUEuZmlsdGVyKChwLCBpKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5zb21lKChwYXJhbSkgPT4gcFtwYXJhbV0gfHwgaSA8PSBjYW50aWRhZFRvdGFsIC0gMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSA9IHJlc3B1ZXN0YXNVQVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlIChjYW50aWRhZFRvdGFsID4gcmVzcHVlc3Rhc1VBLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLnB1c2goe30gYXMgUmVzcHVlc3RhcylcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIocCA9PiBleHByX2luY29tcGxldGl0dWRfZnVuKHApKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciB2YXIkcDAgPSBcIiRwMFwiIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSA9PSAxICYmXHJcbiAgICAgICAgICAgICAgICAhcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gJiZcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5pbmNvbXBsZXRhc10gPT0gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHZhciBzb3J0ZWFyID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwID0+IGZpbHRyb19mdW4ocCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnRlYXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZvckVhY2goKHBlciwgaSkgPT4gcGVyW3ZhciRwMF0gPSBpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5vcmRlbi5wdXNoKHsgdmFyaWFibGU6IHZhciRwMCwgb3JkZW46IDEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7IGNvbHVtbjogZWxlbS52YXJpYWJsZSwgb3JkZXI6IGVsZW0ub3JkZW4gfSkpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2ljaW9uU29ydGVhZGEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWd1cmFjaW9uU29ydGVvLm1ldG9kbyA9PSAnaGFzaCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOTyBJTVBMRU1FTlRBRE8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypwb3NpY2lvblNvcnRlYWRhPShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9jb2VmLnJlZHVjZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN1bSwgcGFpcik9PnN1bSArIGRhdG9zVml2aWVuZGEudGVtW3BhaXIudmFyXSAqIHBhaXIuY29lZiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAlIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLmRpdmlzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSAlIHNvcnRlYXIubGVuZ3RoKi9cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV0cmEgPSAnQSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhckxldHJhOiBJZFZhcmlhYmxlID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2xldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5maW5kKChfcGVyLCBpKSA9PiBpID09IHBlcnNvbmFbdmFyJHAwXSBhcyBudW1iZXIgLSAxKSFbdmFyTGV0cmFdID0gbGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hW3ZhckxldHJhXSA9IGxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0cmEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxldHJhLmNoYXJDb2RlQXQoMCkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGFBbGVhdG9yaWFNaWVtYnJvcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnRhYmxhLm1hcCgobGlzdGEpID0+IGxpc3RhLnNwbGl0KCcnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN0byA9IGlkRW5jICUgMTA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5hVGFibGFBbGVhdG9yaWEgPSByZXN0byA/IHJlc3RvIC0gMSA6IDk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3J0ZWFyLmxlbmd0aCA+IHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNwbGljZSh0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCkgLy9kZXNjYXJ0byBjYW5kaWRhdG9zIHNpIHNvbiBtw6FzIHF1ZSBsbyBxdWUgcGVybWl0ZSBsYSB0YWJsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxhVGFibGFBbGVhdG9yaWEgPSBzb3J0ZWFyLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYVNlbGVjY2lvbmFkYSA9IHRhYmxhQWxlYXRvcmlhTWllbWJyb3NbZmlsYVRhYmxhQWxlYXRvcmlhXVtjb2x1bW5hVGFibGFBbGVhdG9yaWFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpY2lvblNvcnRlYWRhID0gcmVzcHVlc3Rhc1VBLmZpbmRJbmRleCgocDogUmVzcHVlc3RhcykgPT4gcFt2YXJMZXRyYV0gPT0gbGV0cmFTZWxlY2Npb25hZGEpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gPSBwb3NpY2lvblNvcnRlYWRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc10gPSBzb3J0ZWFyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF0gPSByZXNwdWVzdGFzVUFbcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gYXMgbnVtYmVyIC0gMV1bbW9zdHJhci5zb3VyY2VdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSA9IHJlc3B1ZXN0YXNVQS5sZW5ndGggfHwgbnVsbDsgLy9ubyBxdWVyZW1vcyBlbCB2YWxvciAwXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBXSA9ICdvayc7XHJcbiAgICAgICAgICAgIGlmIChjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWxdID0gJ29rJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYmFycmVyU3ViQXJib2wocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBub2RvQWN0dWFsOiBSZXNwdWVzdGFzIHwgUmVzcHVlc3Rhc1tdLCB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMsIGZvclBrQWN1bXVsYWRvOiBGb3JQaykge1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGVzQXJyYXkgPSBub2RvQWN0dWFsIGluc3RhbmNlb2YgQXJyYXk7XHJcbiAgICB2YXIgY29uanVudG86IFJlc3B1ZXN0YXNbXSA9IGVzQXJyYXkgPyBub2RvQWN0dWFsIGFzIFJlc3B1ZXN0YXNbXSA6IFtub2RvQWN0dWFsIGFzIFJlc3B1ZXN0YXNdO1xyXG4gICAgXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbmp1bnRvLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHJlc3AgPSBjb25qdW50b1tpXTtcclxuICAgICAgICBpZiAoIXJlc3ApIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICB2YXIgbnVtID0gZXNBcnJheSA/IGkgKyAxIDogKGZvclBrQWN1bXVsYWRvW3VhRGVmLnBrX2FncmVnYWRhXSB8fCAxKTtcclxuICAgICAgICB2YXIgaWRGb3JtdWxhcmlvID0gT2JqZWN0LmtleXMoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmluZChrZXkgPT4gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1trZXkgYXMgSWRGb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PT0gdW5pZGFkX2FuYWxpc2lzKSBhcyBJZEZvcm11bGFyaW87XHJcbiAgICAgICAgdmFyIG1pRm9yUGs6IEZvclBrID0geyAuLi5mb3JQa0FjdW11bGFkbywgW3VhRGVmLnBrX2FncmVnYWRhXTogbnVtLCBmb3JtdWxhcmlvOiBpZEZvcm11bGFyaW8gfHwgZm9yUGtBY3VtdWxhZG8uZm9ybXVsYXJpbyB9O1xyXG5cclxuICAgICAgICBpZiAoZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcykge1xyXG4gICAgICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKHJlc3B1ZXN0YXNSYWl6LCBtaUZvclBrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bykge1xyXG4gICAgICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8ocmVzcHVlc3Rhc1JhaXosIG1pRm9yUGspO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhpamFzID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbHRlcih1ID0+IHUucGFkcmUgPT09IHVuaWRhZF9hbmFsaXNpcykua2V5cygpO1xyXG4gICAgICAgIGZvciAodmFyIHVhSGlqYSBvZiBoaWphcykge1xyXG4gICAgICAgICAgICB2YXIgaGlqYXNSZXNwID0gcmVzcFt1YUhpamEgYXMgSWRVbmlkYWRBbmFsaXNpc107XHJcbiAgICAgICAgICAgIGlmIChoaWphc1Jlc3ApIHtcclxuICAgICAgICAgICAgICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBoaWphc1Jlc3AgYXMgUmVzcHVlc3Rhc1tdLCB1YUhpamEgYXMgSWRVbmlkYWRBbmFsaXNpcywgbWlGb3JQayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXo6IEZvclBrKSB7XHJcbiAgICB2YXIgdWFQcGFsID0gT2JqZWN0LmtleXMoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZChrZXkgPT4gIWVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNba2V5IGFzIElkVW5pZGFkQW5hbGlzaXNdLnBhZHJlKSBhcyBJZFVuaWRhZEFuYWxpc2lzO1xyXG4gICAgXHJcbiAgICBiYXJyZXJTdWJBcmJvbChyZXNwdWVzdGFzUmFpeiwgcmVzcHVlc3Rhc1JhaXosIHVhUHBhbCwgZm9yUGtSYWl6KTtcclxuICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpeiwgdWFQcGFsLCBmb3JQa1JhaXopO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczogeyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOiBJbmZvRm9ybXVsYXJpbyB9LFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcclxuICAgIFVBOiBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsIC8vIGluY2x1eWVuIGxhIGRlIHRvZG9zIGxvcyBwYWRyZXMgeSBhbnNlc3Ryb3MsXHJcbiAgICByZXNwdWVzdGFzUGFkcmU6IFJlc3B1ZXN0YXMgfCBudWxsLFxyXG4gICAgb3B0czogT3BjaW9uZXNSb3dWYWxpZGF0b3IsXHJcbikge1xyXG4gICAgLy8gcmVjb3JyaWVuZCBVQSBwZXJzb25hcyB5IG1hc2NvdGFzXHJcbiAgICBmb3IgKHZhciBVQWluY2x1aWRhIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaW5jbHVpZGFzKSB7XHJcbiAgICAgICAgdmFyIHBrTnVldmEgPSBkZWZPcGVyYXRpdm8uZGVmVUFbVUFpbmNsdWlkYV0ucGs7XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1tVQWluY2x1aWRhXTtcclxuICAgICAgICBsaWtlQXIoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXNIaWpvLCB2YWxvclBrT1Bvc2ljaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICAgICAgICAgICAgICBmb3JtdWxhcmlvcyxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWpvLFxyXG4gICAgICAgICAgICAgICAgVUFpbmNsdWlkYSxcclxuICAgICAgICAgICAgICAgIHsgLi4uZm9yUGssIFtwa051ZXZhXTogdmFsb3JQayB9LFxyXG4gICAgICAgICAgICAgICAgeyAuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3Rhc0hpam8sIFtwa051ZXZhXTogdmFsb3JQayB9LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgLy8gUzEgLCBBMVxyXG4gICAgZm9yICh2YXIgZXNIZXJtYW5vIG9mIFt0cnVlLCBmYWxzZV0pIHtcclxuICAgICAgICBmb3IgKHZhciBmb3JtdWxhcmlvIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaWRzRm9yKSBpZiAoISFlc0hlcm1hbm8gPT0gISFkZWZPcGVyYXRpdm8uZGVmRm9yW2Zvcm11bGFyaW9dLmhlcm1hbm8pIHtcclxuICAgICAgICAgICAgdmFyIHBsYWluRm9yUGs6IFBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoeyAuLi5mb3JQaywgZm9ybXVsYXJpbyB9KVxyXG4gICAgICAgICAgICB2YXIgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcyA9IDEwO1xyXG4gICAgICAgICAgICB2YXIgdmFyQXV0b0luZ3Jlc2FkYXMgPSBbXTtcclxuICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGh1Ym9BdXRvaW5ncmVzb3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdID1cclxuICAgICAgICAgICAgICAgICAgICByb3dWYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbWFyY2FGaW46ICdmaW4nLCAuLi5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdmFyIHsgcmVzdW1lbiwgYXV0b0luZ3Jlc2FkYXMgfSA9IGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhck5hbWU6IElkVmFyaWFibGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0b0luZ3Jlc2FkYXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyTmFtZSBpbiBhdXRvSW5ncmVzYWRhcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FtYmlvID0gcmVzcHVlc3Rhc1t2YXJOYW1lXSAhPT0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW1iaW8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5wdXNoKHZhck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVib0F1dG9pbmdyZXNvcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUgKGh1Ym9BdXRvaW5ncmVzb3MgJiYgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcy0tID4gMCk7XHJcbiAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLmZvckVhY2goX3Zhcm5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10uZXN0YWRvc1tfdmFybmFtZSBhcyBJZFZhcmlhYmxlXSA9ICdhY3R1YWwnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB2YXIgQkZfdmFybmFtZSA9ICckQi4nICsgZm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhciBmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgICAgICAgICBpZiAoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYV0pIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gaGF5IGNvbmZpZ3VyYWNpb24gZGUgc29ydGVvIHBhcmEgZWwgZm9ybXVsYXJpbyAke2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VtZW5Pck51bGwgPVxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgJiZcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsID09IEJGX3Zhcm5hbWUgP1xyXG4gICAgICAgICAgICAgICAgICAgICdvaydcclxuICAgICAgICAgICAgICAgICAgICA6IHJlc3VtZW4gPT0gJ3ZhY2lvJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiByZXN1bWVuXHJcbiAgICAgICAgICAgIGlmIChlc0hlcm1hbm8pIHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsID09ICdvaycgPyAnb2snIDogbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwdWVzdGFzUGFkcmUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgLy9yZXNwdWVzdGFzUGFkcmVbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KG51bWJlck9yU3RyaW5nOiBudW1iZXIgfCBzdHJpbmcsIG9iamVjdDogb2JqZWN0IHwgYW55W10pOiAobnVtYmVyIHwgc3RyaW5nKSB7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzdG95IHVzYW5kbyBpc05hTiBwYXJhIHZlciBzaSBlcyBvIG5vIHVuIG7Dum1lcm8gc3VtYWJsZVxyXG4gICAgaWYgKGlzTmFOKG51bWJlck9yU3RyaW5nKSkge1xyXG4gICAgICAgIHJldHVybiBudW1iZXJPclN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiBOdW1iZXIobnVtYmVyT3JTdHJpbmcpICsgKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5ID8gMSA6IDApO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldE1haW5Gb3JtRm9yVml2aWVuZGEgPSAodmFsdWVQa1JhaXo6IFZhbHVlUGtSYWl6KTogSWRGb3JtdWxhcmlvID0+IHtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkclt2YWx1ZVBrUmFpel0udGFyZWEubWFpbl9mb3JtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpIHtcclxuICAgIGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodWFEZWYgPT4gIXVhRGVmLnBhZHJlKS5mb3JFYWNoKHVhRGVmID0+IHtcclxuICAgICAgICB2YXIgZXNQcmluY2lwYWwgPSAoZjogRm9ybXVsYXJpbywgZW5jOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZvcm11bGFyaW9QcmluY2lwYWwgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGVuYyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtdWxhcmlvUHJpbmNpcGFsID8gZm9ybXVsYXJpb1ByaW5jaXBhbCA9PSBmLmlkX2Nhc2lsbGVybyA6IGYuZm9ybXVsYXJpb19wcmluY2lwYWxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vYWPDoSBoYXkgcXVlIHNhbml0aXphciBwb3JxdWUgZXZpZGVudGVtZW50ZSBwdWVkZSB2ZW5pciBjb24gaGFzaHMgZGUgZW5jdWVzdGFzIHNpbiBpbmZvIGVsIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNcclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW3VhRGVmLnVuaWRhZF9hbmFsaXNpc11cclxuICAgICAgICBiZWluZ0FycmF5KGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzLCB2YWxvclBrT1Bvc2ljaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmID0+IGYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFEZWYudW5pZGFkX2FuYWxpc2lzICYmIGVzUHJpbmNpcGFsKGYuY2FzaWxsZXJvcywgdmFsb3JQayBhcyBudW1iZXIpKS5mb3JFYWNoKChfZGVmRiwgZm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHsgZm9ybXVsYXJpbywgW3VhRGVmLnBrX2FncmVnYWRhXTogdmFsb3JQayB9IGFzIEZvclBrUmFpelxyXG4gICAgICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzLCBmb3JQa1JhaXosIHt9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOiB7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106IEluZm9Gb3JtdWxhcmlvIH0sXHJcbiAgICBmb3JQa1JhaXo6IEZvclBrUmFpeixcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXHJcbiAgICBvcHRzOiBPcGNpb25lc1Jvd1ZhbGlkYXRvclxyXG4pIHtcclxuICAgIHZhciBmb3JQazogRm9yUGsgPSB7IC4uLmZvclBrUmFpeiB9O1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGZlZWRiYWNrUm93VmFsaWRhdG9yLCBmb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsLCBmb3JQaywgcmVzcHVlc3RhcywgbnVsbCwgb3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhczogUmVzcHVlc3RhcywgZm9yUGtSYWl6OiBGb3JQa1JhaXosIG9wdHM6IE9wY2lvbmVzUm93VmFsaWRhdG9yKSB7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbztcclxuICAgIC8vIEB0cy1pZ25vcmUgUGFydGlhbFxyXG4gICAgdmFyIG51ZXZvc1Jvd3M6IHsgW3ggaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBJZEZpbj4gfSA9IHt9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEobnVldm9zUm93cywgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgZm9yUGtSYWl6LCByZXNwdWVzdGFzLCBvcHRzKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0gbGlrZUFyKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9mZWVkYmFjazogYW55LCBwbGFpblBrOiBQbGFpbkZvclBrKSA9PiBKU09OLnBhcnNlKHBsYWluUGspW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gIT0gZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pLnBsYWluKCk7XHJcbiAgICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IHsgLi4uZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIC4uLm51ZXZvc1Jvd3MgfTtcclxuICAgIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXSA9IHtcclxuICAgICAgICAuLi5kYXRvc0J5UGFzcy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXVtmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0sXHJcbiAgICAgICAgLi4uY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICAgICAgICAgIGZvclBrUmFpeixcclxuICAgICAgICAgICAgbnVldm9zUm93cyxcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1xyXG4gICAgICAgIClcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyA9IChpZEZvcm11bGFyaW86IElkRm9ybXVsYXJpbyB8IHVuZGVmaW5lZCwgZm9ybXNGZWVkYmFjazogSWRGb3JtdWxhcmlvW10gPSBbXSkgPT4ge1xyXG4gICAgaWYgKGlkRm9ybXVsYXJpbykge1xyXG4gICAgICAgIGZvciAobGV0IGNhc2lsbGVybyBvZiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb10uY2FzaWxsZXJvcy5jYXNpbGxlcm9zKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXNpbGxlcm8udGlwb2MgPT0gJ0JGJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1IaWpvID0gKGNhc2lsbGVyby5zYWx0bz8uc3RhcnRzV2l0aCgnRjonKSA/IGNhc2lsbGVyby5zYWx0byA6ICdGOicgKyBjYXNpbGxlcm8uc2FsdG8pIGFzIElkRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtSGlqbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1zRmVlZGJhY2sucHVzaChmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhmb3JtSGlqbywgZm9ybXNGZWVkYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybXNGZWVkYmFjaztcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6ID0gKHZhbHVlUGtSYWl6OiBWYWx1ZVBrUmFpeikgPT4ge1xyXG4gICAgdmFyIG1haW5Gb3JtRm9yVmFsdWVQa1JhaXogPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKHZhbHVlUGtSYWl6KTtcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gW21haW5Gb3JtRm9yVmFsdWVQa1JhaXpdO1xyXG4gICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhtYWluRm9ybUZvclZhbHVlUGtSYWl6LCBmb3Jtc0ZlZWRiYWNrKTtcclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyQWN0dWFsQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLCBudW1FbGVtZW50b1VBOiBudW1iZXIsIG51bUFjdHVhbDogbnVtYmVyIHwgbnVsbCwgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvLCByOiBSZXNwdWVzdGFzKSA9PlxyXG4gICAgISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmXHJcbiAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpb1xyXG4gICAgICAgID9cclxuICAgICAgICBudW1FbGVtZW50b1VBID09IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDpcclxuICAgICAgICBudW1BY3R1YWwgPT0gbnVtRWxlbWVudG9VQVxyXG4gICAgKVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckRpc2FibGVkQkYgPSAoXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsXHJcbiAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW86IENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8gfCBudWxsLFxyXG4gICAgbnVtRWxlbWVudG9VQTogbnVtYmVyLFxyXG4gICAgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvLFxyXG4gICAgcjogUmVzcHVlc3Rhc1xyXG4pID0+IHtcclxuICAgIGlmIChoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKSB7XHJcbiAgICAgICAgdmFyIGV4cHJfaGFiaWxpdGFyX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLmV4cHJfaGFiaWxpdGFyX2JvdG9uX2pzKTtcclxuICAgICAgICByZXR1cm4gIWV4cHJfaGFiaWxpdGFyX2Z1bihyW2hhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXNdW251bUVsZW1lbnRvVUEgLSAxXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8gfHxcclxuICAgICAgICAgICAgICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MoY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwpLmluY2x1ZGVzKGZvcm11bGFyaW8pXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgbnVtRWxlbWVudG9VQSAhPSBjb2FsZXNjZShcclxuICAgICAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgICAgICkpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLCBmb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8pID0+XHJcbiAgICAhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvKVxyXG5cclxudHlwZSBSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbyxcclxuICAgIHJlc3VtZW5Fc3RhZG9TdXA6IFJlc3VtZW5Fc3RhZG8sXHJcbiAgICBjb2RSZWE6IG51bWJlciB8IG51bGwsXHJcbiAgICBjb2ROb1JlYTogc3RyaW5nIHwgbnVsbCxcclxuICAgIGNvZFJlYVN1cDogbnVtYmVyIHwgbnVsbFxyXG4gICAgY29kTm9SZWFTdXA6IHN0cmluZyB8IG51bGwsXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzXHJcbik6IFJlc3VsdGFkb1Jlc3VtZW4ge1xyXG4gICAgdmFyIHsgY29kUmVhLCBlc1JlYSB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgeyBjb2ROb1JlYSwgZXNOb1JlYSB9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWEocmVzcHVlc3RhcylcclxuICAgIHZhciB7IGNvZFJlYVN1cCwgZXNSZWFTdXAgfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYVN1cChyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHsgY29kTm9SZWFTdXAsIGVzTm9SZWFTdXAgfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXooZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgdmFyIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldXHJcbiAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICB2YXIgZmVlZEJhY2tWaXZpZW5kYSA9IGxpa2VBcihmZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfcm93LCBwbGFpblBrKSA9PiB7XHJcbiAgICAgICAgdmFyIHRpZW5lSW5kaXZpZHVhbCA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvICYmICEhKGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlKVxyXG4gICAgICAgIHZhciB0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUgPSBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW0pTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyBhcyBJZEZvcm11bGFyaW9dO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhID0gbnVsbDtcclxuICAgICAgICBpZiAodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlKSB7XHJcbiAgICAgICAgICAgIHBrQWdyZWdhZGEgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEsIF9pZFVBKSA9PlxyXG4gICAgICAgICAgICAgICAgdWEudW5pZGFkX2FuYWxpc2lzID09IGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8gYXMgSWRGb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXMpPy5wa19hZ3JlZ2FkYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocGxhaW5QaylbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSA9PSBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSAmJlxyXG4gICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLmluY2x1ZGVzKEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbykgJiZcclxuICAgICAgICAgICAgKHRpZW5lQm90b25EZXNIYWJpbGl0YWJsZSA/XHJcbiAgICAgICAgICAgICAgICAhY2FsY3VsYXJEaXNhYmxlZEJGKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspW3BrQWdyZWdhZGEgYXMgQ2FtcG9Qa10sXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNGb3JQayhKU09OLnBhcnNlKHBsYWluUGspLCB0cnVlKS5yZXNwdWVzdGFzQXVtZW50YWRhc1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOiB0aWVuZUluZGl2aWR1YWwgP1xyXG4gICAgICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykucGVyc29uYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmNvblJlYUhvZ2FyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuaG9nYXIgPyByZXNwdWVzdGFzRm9yUGsoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhcmlvOiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2dhcjogSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBGb3JQaykucmVzcHVlc3RhcyA6IHt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBGb3JQaykucmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICA6IHRydWUpXHJcbiAgICB9KS5hcnJheSgpO1xyXG4gICAgdmFyIHByaW9yaWRhZGVzOiB7IFtrZXkgaW4gUmVzdW1lbkVzdGFkb106IHsgcHJpb3JpZGFkOiBudW1iZXIsIGNhbnRpZGFkOiBudW1iZXIgfSB9ID0ge1xyXG4gICAgICAgICdubyByZWEnOiB7IHByaW9yaWRhZDogMSwgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAnY29uIHByb2JsZW1hcyc6IHsgcHJpb3JpZGFkOiAyLCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdpbmNvbXBsZXRvJzogeyBwcmlvcmlkYWQ6IDMsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ3ZhY2lvJzogeyBwcmlvcmlkYWQ6IDQsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ2NpdGEgcGFjdGFkYSc6IHsgcHJpb3JpZGFkOiA1LCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdvayc6IHsgcHJpb3JpZGFkOiA2LCBjYW50aWRhZDogMCB9XHJcbiAgICB9XHJcbiAgICB2YXIgbWluID0gNjtcclxuICAgIHZhciBtaW5SZXN1bWVuOiBSZXN1bWVuRXN0YWRvID0gJ29rJztcclxuICAgIGZvciAodmFyIGZlZWRiYWNrIG9mIGZlZWRCYWNrVml2aWVuZGEpIHtcclxuICAgICAgICB2YXIgcmVzdW1lbiA9IGZlZWRiYWNrLnJlc3VtZW47XHJcbiAgICAgICAgcHJpb3JpZGFkZXNbcmVzdW1lbl0uY2FudGlkYWQrKztcclxuICAgICAgICBpZiAocHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkIDwgbWluKSB7XHJcbiAgICAgICAgICAgIG1pbiA9IHByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDtcclxuICAgICAgICAgICAgbWluUmVzdW1lbiA9IHJlc3VtZW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG1pblJlc3VtZW4gPT0gJ3ZhY2lvJyAmJiBwcmlvcmlkYWRlc1snb2snXS5jYW50aWRhZCB8fCBtaW5SZXN1bWVuID09ICdpbmNvbXBsZXRvJykge1xyXG4gICAgICAgIGlmIChmYWxzZSAvKnJlc3B1ZXN0YXNbc3AxXT09MiAmJiByZXNwdWVzdGFzW3NwNl09PW51bGwqLykge1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuID0gJ2NpdGEgcGFjdGFkYSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWluUmVzdW1lbiA9ICdpbmNvbXBsZXRvJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9UT0RPIEFSUkVHTEFSIEVTVEUgSE9SUk9SLCBHRU5FUkFMSVpBUlxyXG4gICAgdmFyIHRhcmVhID0gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gYXMgdW5rbm93biBhcyBJZEVuY10udGFyZWEudGFyZWE7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbztcclxuICAgIHZhciByZXN1bWVuRXN0YWRvU3VwOiBSZXN1bWVuRXN0YWRvID0gJ3ZhY2lvJztcclxuICAgIGlmICh0YXJlYSA9PSAnc3VwZScpIHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwID0gZXNOb1JlYVN1cCA/ICdubyByZWEnIDogbWluUmVzdW1lblxyXG4gICAgICAgIC8vcGFyYSBxdWUgY29sb3JlZSBiaWVuIGVuIGxhIGhkciBkZWwgRE0gKGx1ZWdvIGVuIGJiZGQgbm8gc2UgZ3VhcmRhKVxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSByZXN1bWVuRXN0YWRvU3VwXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSBlc05vUmVhID8gJ25vIHJlYScgOiBtaW5SZXN1bWVuXHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0YWRvOiBSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8sXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkb1N1cCxcclxuICAgICAgICBjb2RSZWEsXHJcbiAgICAgICAgY29kTm9SZWEsXHJcbiAgICAgICAgY29kUmVhU3VwLFxyXG4gICAgICAgIGNvZE5vUmVhU3VwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0YWRvXHJcbn1cclxuIl19