@manticore-labs/nest 0.0.71 → 0.0.73

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 (236) hide show
  1. package/.circleci/config.yml +47 -47
  2. package/.idea/codeStyles/Project.xml +37 -37
  3. package/.idea/codeStyles/codeStyleConfig.xml +4 -4
  4. package/.idea/encodings.xml +3 -3
  5. package/.idea/inspectionProfiles/Project_Default.xml +5 -5
  6. package/.idea/manticore-labs-nest.iml +11 -11
  7. package/.idea/misc.xml +5 -5
  8. package/.idea/modules.xml +7 -7
  9. package/.idea/vcs.xml +5 -5
  10. package/.idea/workspace.xml +77 -399
  11. package/LICENSE +8 -8
  12. package/README.1.md +116 -116
  13. package/README.md +1 -1
  14. package/build/main/index.d.ts +42 -42
  15. package/build/main/index.js +25 -25
  16. package/build/main/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.d.ts +5 -5
  17. package/build/main/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.js +24 -24
  18. package/build/main/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.d.ts +5 -5
  19. package/build/main/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.js +24 -24
  20. package/build/main/lib/auth0/auth0.controller.d.ts +40 -40
  21. package/build/main/lib/auth0/auth0.controller.js +537 -537
  22. package/build/main/lib/auth0/auth0.service.d.ts +69 -69
  23. package/build/main/lib/auth0/auth0.service.js +604 -604
  24. package/build/main/lib/auth0/crear-usuario-dto/crear-usuario-dto.d.ts +5 -5
  25. package/build/main/lib/auth0/crear-usuario-dto/crear-usuario-dto.js +25 -25
  26. package/build/main/lib/auth0/interfaces/busqueda-nombre.d.ts +3 -3
  27. package/build/main/lib/auth0/interfaces/busqueda-nombre.js +2 -2
  28. package/build/main/lib/auth0/interfaces/funciones-seguridad.d.ts +10 -10
  29. package/build/main/lib/auth0/interfaces/funciones-seguridad.js +2 -2
  30. package/build/main/lib/auth0/interfaces/mensajes-controlador.d.ts +5 -5
  31. package/build/main/lib/auth0/interfaces/mensajes-controlador.js +2 -2
  32. package/build/main/lib/auth0/seguridad-jwt-moviles/check-jwt.d.ts +2 -2
  33. package/build/main/lib/auth0/seguridad-jwt-moviles/check-jwt.js +7 -7
  34. package/build/main/lib/expresiones-regulares/letras-espacios-tildes-enie.d.ts +1 -1
  35. package/build/main/lib/expresiones-regulares/letras-espacios-tildes-enie.js +3 -3
  36. package/build/main/lib/funciones-util/buscar-registro.d.ts +1 -1
  37. package/build/main/lib/funciones-util/buscar-registro.js +492 -351
  38. package/build/main/lib/funciones-util/buscar-un-registro-por-id.d.ts +1 -1
  39. package/build/main/lib/funciones-util/buscar-un-registro-por-id.js +25 -25
  40. package/build/main/lib/funciones-util/buscar-where-or.d.ts +1 -1
  41. package/build/main/lib/funciones-util/buscar-where-or.js +33 -33
  42. package/build/main/lib/funciones-util/contar-registros.d.ts +1 -1
  43. package/build/main/lib/funciones-util/contar-registros.js +41 -41
  44. package/build/main/lib/funciones-util/crear-un-registro.d.ts +1 -1
  45. package/build/main/lib/funciones-util/crear-un-registro.js +24 -24
  46. package/build/main/lib/funciones-util/editar-un-registro.d.ts +1 -1
  47. package/build/main/lib/funciones-util/editar-un-registro.js +24 -24
  48. package/build/main/lib/funciones-util/eliminar-uno.d.ts +1 -1
  49. package/build/main/lib/funciones-util/eliminar-uno.js +35 -35
  50. package/build/main/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.d.ts +2 -2
  51. package/build/main/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.js +21 -21
  52. package/build/main/lib/interfaces-util/arreglo-funciones-booleanas.d.ts +4 -4
  53. package/build/main/lib/interfaces-util/arreglo-funciones-booleanas.js +2 -2
  54. package/build/main/lib/interfaces-util/broadcast-join.gateway.d.ts +14 -14
  55. package/build/main/lib/interfaces-util/broadcast-join.gateway.js +2 -2
  56. package/build/main/lib/interfaces-util/campos-a-buscar.d.ts +9 -9
  57. package/build/main/lib/interfaces-util/campos-a-buscar.js +9 -9
  58. package/build/main/lib/interfaces-util/delete-service.d.ts +12 -12
  59. package/build/main/lib/interfaces-util/delete-service.js +2 -2
  60. package/build/main/lib/interfaces-util/dto.d.ts +4 -4
  61. package/build/main/lib/interfaces-util/dto.js +2 -2
  62. package/build/main/lib/interfaces-util/find-where-relations.d.ts +9 -9
  63. package/build/main/lib/interfaces-util/find-where-relations.js +2 -2
  64. package/build/main/lib/interfaces-util/funciones-seguridad.d.ts +13 -13
  65. package/build/main/lib/interfaces-util/funciones-seguridad.js +2 -2
  66. package/build/main/lib/interfaces-util/funciones.gateway.d.ts +5 -5
  67. package/build/main/lib/interfaces-util/funciones.gateway.js +2 -2
  68. package/build/main/lib/interfaces-util/mensajes-controller.d.ts +6 -6
  69. package/build/main/lib/interfaces-util/mensajes-controller.js +2 -2
  70. package/build/main/lib/interfaces-util/politicas-de-seguridad.d.ts +17 -17
  71. package/build/main/lib/interfaces-util/politicas-de-seguridad.js +2 -2
  72. package/build/main/lib/interfaces-util/respuesta-general.gateway.d.ts +5 -5
  73. package/build/main/lib/interfaces-util/respuesta-general.gateway.js +2 -2
  74. package/build/main/lib/menu/entities/menu-entity.d.ts +13 -13
  75. package/build/main/lib/menu/entities/menu-entity.js +93 -93
  76. package/build/main/lib/one-signal/interfaces/funciones-seguridad.d.ts +9 -9
  77. package/build/main/lib/one-signal/interfaces/funciones-seguridad.js +2 -2
  78. package/build/main/lib/one-signal/interfaces/one-signal-device.d.ts +19 -19
  79. package/build/main/lib/one-signal/interfaces/one-signal-device.js +2 -2
  80. package/build/main/lib/one-signal/interfaces/one-signal-notification.d.ts +15 -15
  81. package/build/main/lib/one-signal/interfaces/one-signal-notification.js +2 -2
  82. package/build/main/lib/one-signal/interfaces/one-signal-notifications.d.ts +7 -7
  83. package/build/main/lib/one-signal/interfaces/one-signal-notifications.js +2 -2
  84. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.d.ts +5 -5
  85. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.js +2 -2
  86. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification.d.ts +4 -4
  87. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification.js +2 -2
  88. package/build/main/lib/one-signal/interfaces/one-signal-success.d.ts +3 -3
  89. package/build/main/lib/one-signal/interfaces/one-signal-success.js +2 -2
  90. package/build/main/lib/one-signal/interfaces/one-signal-tags.d.ts +3 -3
  91. package/build/main/lib/one-signal/interfaces/one-signal-tags.js +2 -2
  92. package/build/main/lib/one-signal/interfaces/one-signal-view-devices.d.ts +7 -7
  93. package/build/main/lib/one-signal/interfaces/one-signal-view-devices.js +2 -2
  94. package/build/main/lib/one-signal/one-signal.controller.d.ts +15 -15
  95. package/build/main/lib/one-signal/one-signal.controller.js +250 -250
  96. package/build/main/lib/one-signal/one-signal.service.d.ts +32 -32
  97. package/build/main/lib/one-signal/one-signal.service.js +84 -84
  98. package/build/main/lib/politicas/revisar-si-tiene-nombre-permiso.d.ts +1 -1
  99. package/build/main/lib/politicas/revisar-si-tiene-nombre-permiso.js +9 -9
  100. package/build/main/lib/politicas/revisar-si-tiene-rol.d.ts +1 -1
  101. package/build/main/lib/politicas/revisar-si-tiene-rol.js +9 -9
  102. package/build/main/lib/principal.controller.d.ts +20 -20
  103. package/build/main/lib/principal.controller.js +309 -309
  104. package/build/main/lib/principal.dto.d.ts +5 -5
  105. package/build/main/lib/principal.dto.js +21 -21
  106. package/build/main/lib/principal.entity.d.ts +7 -7
  107. package/build/main/lib/principal.entity.js +42 -42
  108. package/build/main/lib/principal.find-many-options.d.ts +14 -14
  109. package/build/main/lib/principal.find-many-options.js +48 -48
  110. package/build/main/lib/principal.find-many-where-or.d.ts +10 -10
  111. package/build/main/lib/principal.find-many-where-or.js +28 -28
  112. package/build/main/lib/principal.gateway.d.ts +35 -35
  113. package/build/main/lib/principal.gateway.js +399 -399
  114. package/build/main/lib/principal.id.d.ts +3 -3
  115. package/build/main/lib/principal.id.js +16 -16
  116. package/build/main/lib/principal.resolver.d.ts +21 -21
  117. package/build/main/lib/principal.resolver.js +343 -343
  118. package/build/main/lib/principal.service.d.ts +38 -38
  119. package/build/main/lib/principal.service.js +261 -256
  120. package/build/main/lib/seguridad/aplicar-politicas-de-seguridad.d.ts +4 -4
  121. package/build/main/lib/seguridad/aplicar-politicas-de-seguridad.js +16 -16
  122. package/build/main/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.d.ts +3 -3
  123. package/build/main/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.js +30 -30
  124. package/build/main/lib/seguridad/funciones/index.d.ts +6 -6
  125. package/build/main/lib/seguridad/funciones/index.js +12 -12
  126. package/build/main/lib/seguridad/funciones/obtener-reflector-seguridad.d.ts +1 -1
  127. package/build/main/lib/seguridad/funciones/obtener-reflector-seguridad.js +6 -6
  128. package/build/main/lib/seguridad/funciones/obtener-request.d.ts +1 -1
  129. package/build/main/lib/seguridad/funciones/obtener-request.js +6 -6
  130. package/build/main/lib/seguridad/funciones/obtener-response.d.ts +1 -1
  131. package/build/main/lib/seguridad/funciones/obtener-response.js +6 -6
  132. package/build/main/lib/seguridad/funciones/tiene-acceso-permitido.d.ts +2 -2
  133. package/build/main/lib/seguridad/funciones/tiene-acceso-permitido.js +13 -13
  134. package/build/main/lib/seguridad/seguridad.decorator.d.ts +1 -1
  135. package/build/main/lib/seguridad/seguridad.decorator.js +4 -4
  136. package/build/module/index.d.ts +42 -42
  137. package/build/module/index.js +20 -20
  138. package/build/module/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.d.ts +5 -5
  139. package/build/module/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.js +21 -21
  140. package/build/module/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.d.ts +5 -5
  141. package/build/module/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.js +21 -21
  142. package/build/module/lib/auth0/auth0.controller.d.ts +40 -40
  143. package/build/module/lib/auth0/auth0.controller.js +535 -535
  144. package/build/module/lib/auth0/auth0.service.d.ts +69 -69
  145. package/build/module/lib/auth0/auth0.service.js +603 -603
  146. package/build/module/lib/auth0/crear-usuario-dto/crear-usuario-dto.d.ts +5 -5
  147. package/build/module/lib/auth0/crear-usuario-dto/crear-usuario-dto.js +22 -22
  148. package/build/module/lib/auth0/interfaces/busqueda-nombre.d.ts +3 -3
  149. package/build/module/lib/auth0/interfaces/funciones-seguridad.d.ts +10 -10
  150. package/build/module/lib/auth0/interfaces/mensajes-controlador.d.ts +5 -5
  151. package/build/module/lib/auth0/seguridad-jwt-moviles/check-jwt.d.ts +2 -2
  152. package/build/module/lib/auth0/seguridad-jwt-moviles/check-jwt.js +4 -4
  153. package/build/module/lib/expresiones-regulares/letras-espacios-tildes-enie.d.ts +1 -1
  154. package/build/module/lib/expresiones-regulares/letras-espacios-tildes-enie.js +1 -1
  155. package/build/module/lib/funciones-util/buscar-registro.d.ts +1 -1
  156. package/build/module/lib/funciones-util/buscar-registro.js +489 -348
  157. package/build/module/lib/funciones-util/buscar-un-registro-por-id.d.ts +1 -1
  158. package/build/module/lib/funciones-util/buscar-un-registro-por-id.js +22 -22
  159. package/build/module/lib/funciones-util/buscar-where-or.d.ts +1 -1
  160. package/build/module/lib/funciones-util/buscar-where-or.js +30 -30
  161. package/build/module/lib/funciones-util/contar-registros.d.ts +1 -1
  162. package/build/module/lib/funciones-util/contar-registros.js +38 -38
  163. package/build/module/lib/funciones-util/crear-un-registro.d.ts +1 -1
  164. package/build/module/lib/funciones-util/crear-un-registro.js +21 -21
  165. package/build/module/lib/funciones-util/editar-un-registro.d.ts +1 -1
  166. package/build/module/lib/funciones-util/editar-un-registro.js +21 -21
  167. package/build/module/lib/funciones-util/eliminar-uno.d.ts +1 -1
  168. package/build/module/lib/funciones-util/eliminar-uno.js +32 -32
  169. package/build/module/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.d.ts +2 -2
  170. package/build/module/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.js +18 -18
  171. package/build/module/lib/interfaces-util/arreglo-funciones-booleanas.d.ts +4 -4
  172. package/build/module/lib/interfaces-util/broadcast-join.gateway.d.ts +14 -14
  173. package/build/module/lib/interfaces-util/campos-a-buscar.d.ts +9 -9
  174. package/build/module/lib/interfaces-util/campos-a-buscar.js +6 -6
  175. package/build/module/lib/interfaces-util/delete-service.d.ts +12 -12
  176. package/build/module/lib/interfaces-util/dto.d.ts +4 -4
  177. package/build/module/lib/interfaces-util/find-where-relations.d.ts +9 -9
  178. package/build/module/lib/interfaces-util/funciones-seguridad.d.ts +13 -13
  179. package/build/module/lib/interfaces-util/funciones.gateway.d.ts +5 -5
  180. package/build/module/lib/interfaces-util/mensajes-controller.d.ts +6 -6
  181. package/build/module/lib/interfaces-util/politicas-de-seguridad.d.ts +17 -17
  182. package/build/module/lib/interfaces-util/respuesta-general.gateway.d.ts +5 -5
  183. package/build/module/lib/menu/entities/menu-entity.d.ts +13 -13
  184. package/build/module/lib/menu/entities/menu-entity.js +90 -90
  185. package/build/module/lib/one-signal/interfaces/funciones-seguridad.d.ts +9 -9
  186. package/build/module/lib/one-signal/interfaces/one-signal-device.d.ts +19 -19
  187. package/build/module/lib/one-signal/interfaces/one-signal-notification.d.ts +15 -15
  188. package/build/module/lib/one-signal/interfaces/one-signal-notifications.d.ts +7 -7
  189. package/build/module/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.d.ts +5 -5
  190. package/build/module/lib/one-signal/interfaces/one-signal-ok-create-notification.d.ts +4 -4
  191. package/build/module/lib/one-signal/interfaces/one-signal-success.d.ts +3 -3
  192. package/build/module/lib/one-signal/interfaces/one-signal-tags.d.ts +3 -3
  193. package/build/module/lib/one-signal/interfaces/one-signal-view-devices.d.ts +7 -7
  194. package/build/module/lib/one-signal/one-signal.controller.d.ts +15 -15
  195. package/build/module/lib/one-signal/one-signal.controller.js +248 -248
  196. package/build/module/lib/one-signal/one-signal.service.d.ts +32 -32
  197. package/build/module/lib/one-signal/one-signal.service.js +82 -82
  198. package/build/module/lib/politicas/revisar-si-tiene-nombre-permiso.d.ts +1 -1
  199. package/build/module/lib/politicas/revisar-si-tiene-nombre-permiso.js +6 -6
  200. package/build/module/lib/politicas/revisar-si-tiene-rol.d.ts +1 -1
  201. package/build/module/lib/politicas/revisar-si-tiene-rol.js +6 -6
  202. package/build/module/lib/principal.controller.d.ts +20 -20
  203. package/build/module/lib/principal.controller.js +306 -306
  204. package/build/module/lib/principal.dto.d.ts +5 -5
  205. package/build/module/lib/principal.dto.js +18 -18
  206. package/build/module/lib/principal.entity.d.ts +7 -7
  207. package/build/module/lib/principal.entity.js +39 -39
  208. package/build/module/lib/principal.find-many-options.d.ts +14 -14
  209. package/build/module/lib/principal.find-many-options.js +45 -45
  210. package/build/module/lib/principal.find-many-where-or.d.ts +10 -10
  211. package/build/module/lib/principal.find-many-where-or.js +25 -25
  212. package/build/module/lib/principal.gateway.d.ts +35 -35
  213. package/build/module/lib/principal.gateway.js +396 -396
  214. package/build/module/lib/principal.id.d.ts +3 -3
  215. package/build/module/lib/principal.id.js +13 -13
  216. package/build/module/lib/principal.resolver.d.ts +21 -21
  217. package/build/module/lib/principal.resolver.js +340 -340
  218. package/build/module/lib/principal.service.d.ts +38 -38
  219. package/build/module/lib/principal.service.js +258 -253
  220. package/build/module/lib/seguridad/aplicar-politicas-de-seguridad.d.ts +4 -4
  221. package/build/module/lib/seguridad/aplicar-politicas-de-seguridad.js +13 -13
  222. package/build/module/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.d.ts +3 -3
  223. package/build/module/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.js +27 -27
  224. package/build/module/lib/seguridad/funciones/index.d.ts +6 -6
  225. package/build/module/lib/seguridad/funciones/index.js +6 -6
  226. package/build/module/lib/seguridad/funciones/obtener-reflector-seguridad.d.ts +1 -1
  227. package/build/module/lib/seguridad/funciones/obtener-reflector-seguridad.js +3 -3
  228. package/build/module/lib/seguridad/funciones/obtener-request.d.ts +1 -1
  229. package/build/module/lib/seguridad/funciones/obtener-request.js +3 -3
  230. package/build/module/lib/seguridad/funciones/obtener-response.d.ts +1 -1
  231. package/build/module/lib/seguridad/funciones/obtener-response.js +3 -3
  232. package/build/module/lib/seguridad/funciones/tiene-acceso-permitido.d.ts +2 -2
  233. package/build/module/lib/seguridad/funciones/tiene-acceso-permitido.js +10 -10
  234. package/build/module/lib/seguridad/seguridad.decorator.d.ts +1 -1
  235. package/build/module/lib/seguridad/seguridad.decorator.js +2 -2
  236. package/package.json +117 -116
@@ -1,536 +1,536 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __param = (this && this.__param) || function (paramIndex, decorator) {
8
- return function (target, key) { decorator(target, key, paramIndex); }
9
- };
10
- import { ActualizarUsuarioCuentaDto } from './actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto';
11
- import { BadRequestException, Body, Controller, HttpCode, Post, InternalServerErrorException, Param, Response, Request, Query, Get } from '@nestjs/common';
12
- import { validate } from 'class-validator';
13
- import { ActualizarUsuarioDto } from './actualizar-usuario-dto/actualizar-usuario-dto';
14
- import { aplicarPoliticasDeSeguridad } from '../seguridad/aplicar-politicas-de-seguridad';
15
- import { mergeMap } from 'rxjs/operators';
16
- import { from, of } from 'rxjs';
17
- import { CrearUsuarioDto } from './crear-usuario-dto/crear-usuario-dto';
18
- let PrincipalAuth0Controller = class PrincipalAuth0Controller {
19
- constructor(_funcionesSeguridad, _auth0Service, _mensajes = {
20
- mensajeProcesoInicial: 'Proceso inicial completado exitosamente.',
21
- mensajeCuentaActualizada: 'Cuenta actualizada.',
22
- mensajeCuentaYCorreoActualizado: 'Cuenta actualizada. Revise su correo para confirmar su email.'
23
- }, debug = true, skip = 0, take = 30, contexto) {
24
- this._funcionesSeguridad = _funcionesSeguridad;
25
- this._auth0Service = _auth0Service;
26
- this._mensajes = _mensajes;
27
- this.debug = debug;
28
- this.skip = skip;
29
- this.take = take;
30
- this.contexto = contexto;
31
- }
32
- async refreshToken(token) {
33
- return this._auth0Service.refreshToken(token);
34
- }
35
- async actualizarUsuarioPorPrimeraVez(email, name, user_id, request, response) {
36
- const actualizacionUsuario = new ActualizarUsuarioDto();
37
- actualizacionUsuario.name = name;
38
- actualizacionUsuario.email = email;
39
- actualizacionUsuario.user_id = user_id;
40
- const errores = await validate(actualizacionUsuario);
41
- const hayErrores = errores.length > 0;
42
- if (hayErrores) {
43
- if (this.debug) {
44
- console.error('Error de validacion', errores);
45
- }
46
- throw new BadRequestException('No envia parametros');
47
- }
48
- else {
49
- const tipoPoliticaSeguridad = {
50
- web: {
51
- request,
52
- response
53
- }
54
- };
55
- const objetoPoliticasDeSeguridad = {
56
- funciones: this._funcionesSeguridad.updateUserForTheFirstTime ? this._funcionesSeguridad.updateUserForTheFirstTime : []
57
- };
58
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
59
- puedeRealizarAccion$
60
- .pipe(mergeMap((puedeRealizarAccion) => {
61
- if (puedeRealizarAccion) {
62
- return from(this.actualizarUsuarioPorPrimeraVezAccion(actualizacionUsuario));
63
- }
64
- else {
65
- return of({ error: 403, mensaje: 'No tiene permisos' });
66
- }
67
- }))
68
- .subscribe((respuesta) => {
69
- if (respuesta.error) {
70
- return response.status(respuesta.error).send(respuesta);
71
- }
72
- else {
73
- return response.send(respuesta);
74
- }
75
- }, (error) => {
76
- if (this.debug) {
77
- console.error('Error', error);
78
- }
79
- return response.status(500).json({ error: 500, mensaje: 'Error del servidor' });
80
- });
81
- }
82
- }
83
- async actualizarUsuarioPorPrimeraVezAccion(actualizacionUsuario) {
84
- const objetoActualizar = {
85
- email: actualizacionUsuario.email
86
- };
87
- objetoActualizar.user_metadata = {
88
- name: actualizacionUsuario.name,
89
- roles: [1]
90
- };
91
- const respuestaUsuarioActualizado = await this._auth0Service
92
- .findOneByIdAndUpdate(actualizacionUsuario.user_id, objetoActualizar);
93
- if (respuestaUsuarioActualizado.error) {
94
- return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
95
- }
96
- else {
97
- const respuestaEmailVerification = await this._auth0Service
98
- .sendEmailVerification(actualizacionUsuario.user_id);
99
- if (!respuestaEmailVerification.error) {
100
- const respuestaCambioPassword = await this._auth0Service
101
- .changePassword(actualizacionUsuario.email);
102
- if (respuestaCambioPassword.error) {
103
- return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
104
- }
105
- else {
106
- return new Promise(r => r({ mensaje: this._mensajes.mensajeProcesoInicial }));
107
- }
108
- }
109
- else {
110
- return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
111
- }
112
- }
113
- }
114
- async actualizarCuenta(email, name, user_id, request, response) {
115
- const actualizacionUsuario = new ActualizarUsuarioCuentaDto();
116
- actualizacionUsuario.name = name;
117
- actualizacionUsuario.email = email;
118
- actualizacionUsuario.user_id = user_id;
119
- const errores = await validate(actualizacionUsuario);
120
- const hayErrores = errores.length > 0;
121
- if (hayErrores) {
122
- if (this.debug) {
123
- console.error('Error de validacion', errores);
124
- }
125
- throw new BadRequestException('No envia parametros');
126
- }
127
- else {
128
- const tipoPoliticaSeguridad = {
129
- web: {
130
- request,
131
- response
132
- }
133
- };
134
- const objetoPoliticasDeSeguridad = {
135
- funciones: this._funcionesSeguridad.updateAccount ? this._funcionesSeguridad.updateAccount : []
136
- };
137
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
138
- puedeRealizarAccion$
139
- .pipe(mergeMap((puedeRealizarAccion) => {
140
- if (puedeRealizarAccion) {
141
- return from(this.actualizarCuentaAccion(actualizacionUsuario));
142
- }
143
- else {
144
- return of({ error: 403, mensaje: 'No tiene permisos' });
145
- }
146
- }))
147
- .subscribe((respuesta) => {
148
- if (respuesta.error) {
149
- return response.status(respuesta.error).send(respuesta);
150
- }
151
- else {
152
- return response.send(respuesta);
153
- }
154
- }, (error) => {
155
- if (this.debug) {
156
- console.error('Error', error);
157
- }
158
- return response.status(500).json({ error: 500, mensaje: 'Error del servidor' });
159
- });
160
- }
161
- }
162
- async actualizarCuentaAccion(actualizacionUsuario) {
163
- const objetoActualizar = {};
164
- if (actualizacionUsuario.email) {
165
- objetoActualizar.email = actualizacionUsuario.email;
166
- }
167
- if (actualizacionUsuario.name) {
168
- objetoActualizar.user_metadata = {
169
- name: actualizacionUsuario.name
170
- };
171
- }
172
- const respuestaUsuarioActualizado = await this._auth0Service
173
- .findOneByIdAndUpdate(actualizacionUsuario.user_id, objetoActualizar);
174
- if (respuestaUsuarioActualizado.error) {
175
- return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
176
- }
177
- else {
178
- if (objetoActualizar.email) {
179
- const respuestaEmailVerification = await this._auth0Service
180
- .sendEmailVerification(actualizacionUsuario.user_id);
181
- if (respuestaEmailVerification.error) {
182
- return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
183
- }
184
- else {
185
- return { mensaje: this._mensajes.mensajeCuentaYCorreoActualizado };
186
- }
187
- }
188
- else {
189
- return { mensaje: this._mensajes.mensajeCuentaActualizada };
190
- }
191
- }
192
- }
193
- async findAll(criterioBusqueda, request, response) {
194
- const tipoPoliticaSeguridad = {
195
- web: {
196
- request,
197
- response
198
- }
199
- };
200
- const objetoPoliticasDeSeguridad = {
201
- funciones: this._funcionesSeguridad.findMany ? this._funcionesSeguridad.findMany : []
202
- };
203
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
204
- puedeRealizarAccion$
205
- .pipe(mergeMap((puedeRealizarAccion) => {
206
- if (puedeRealizarAccion) {
207
- let existeErrorEnConvertirAJSON = false;
208
- const criterioBusquedaNoEsUnObjeto = typeof criterioBusqueda !== 'object';
209
- if (criterioBusquedaNoEsUnObjeto) {
210
- try {
211
- criterioBusqueda = JSON.parse(criterioBusqueda);
212
- }
213
- catch (e) {
214
- if (this.debug) {
215
- console.error('Error en parseo JSON', e);
216
- }
217
- existeErrorEnConvertirAJSON = true;
218
- }
219
- }
220
- criterioBusqueda = existeErrorEnConvertirAJSON ? undefined : criterioBusqueda;
221
- return from(this._auth0Service.find(criterioBusqueda));
222
- }
223
- else {
224
- return of({ error: 403, mensaje: 'No tiene permisos' });
225
- }
226
- }))
227
- .subscribe((respuesta) => {
228
- if (respuesta.error) {
229
- return response.status(respuesta.error).send(respuesta);
230
- }
231
- else {
232
- return response.send(respuesta);
233
- }
234
- }, (error) => {
235
- if (this.debug) {
236
- console.error('Error', error);
237
- }
238
- return response.status(500).send('Error del servidor');
239
- });
240
- }
241
- async createOne(nuevoUsuario, datosUsuario, request, response) {
242
- const crearUsuario = new CrearUsuarioDto();
243
- crearUsuario.name = nuevoUsuario.name;
244
- crearUsuario.email = nuevoUsuario.email;
245
- crearUsuario.username = nuevoUsuario.username;
246
- const errores = await validate(crearUsuario);
247
- const nuevoDatoUsuario = new this._auth0Service.datosUsuarioDto();
248
- Object
249
- .keys(datosUsuario)
250
- .forEach((nombrePropiedad) => {
251
- nuevoDatoUsuario[nombrePropiedad] = datosUsuario[nombrePropiedad];
252
- });
253
- nuevoDatoUsuario.user_id = 'a';
254
- const erroresDatosUsuario = await validate(nuevoDatoUsuario);
255
- const hayErrores = errores.length > 0 || erroresDatosUsuario.length > 0;
256
- if (hayErrores) {
257
- if (this.debug) {
258
- console.error('Error de validacion', errores, erroresDatosUsuario);
259
- }
260
- throw new BadRequestException('No envia parametros');
261
- }
262
- else {
263
- const tipoPoliticaSeguridad = {
264
- web: {
265
- request,
266
- response
267
- }
268
- };
269
- const objetoPoliticasDeSeguridad = {
270
- funciones: this._funcionesSeguridad.create ? this._funcionesSeguridad.create : []
271
- };
272
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
273
- puedeRealizarAccion$
274
- .pipe(mergeMap((puedeRealizarAccion) => {
275
- if (puedeRealizarAccion) {
276
- return from(this._auth0Service.create(this.generarUsuario(crearUsuario)));
277
- }
278
- else {
279
- return of({ error: 403, mensaje: 'No tiene permisos' });
280
- }
281
- }))
282
- .subscribe(async (respuesta) => {
283
- try {
284
- if (respuesta.error) {
285
- return response.status(respuesta.error).send(respuesta);
286
- }
287
- else {
288
- if (this._auth0Service._datosUsuarioService && this._auth0Service.datosUsuarioDto) {
289
- const respuestaAuth0 = respuesta;
290
- nuevoDatoUsuario.user_id = respuestaAuth0.user_id;
291
- const respuestaDatosUsuario = await this._auth0Service._datosUsuarioService.create(nuevoDatoUsuario);
292
- if (respuestaDatosUsuario.error) {
293
- if (this.debug) {
294
- console.error('No se pudo crear el registro en la tabla de Datos usuario');
295
- }
296
- return response.status(500)
297
- .json({
298
- mensaje: 'Se creo el usuario en Auth0 pero no se creo el usuario en DatoUsuario. Error del servidor.',
299
- data: respuestaAuth0
300
- });
301
- }
302
- else {
303
- respuestaAuth0.usuario = respuestaDatosUsuario;
304
- return response.send(respuestaAuth0);
305
- }
306
- }
307
- else {
308
- if (this.debug) {
309
- console.info('No se tiene datos de usuario service y dto, no se crea el registro en Datos usuario');
310
- }
311
- return response.send(respuesta);
312
- }
313
- }
314
- }
315
- catch (e) {
316
- if (this.debug) {
317
- console.error('Error', e);
318
- }
319
- return response.status(500).send('Error del servidor');
320
- }
321
- }, (error) => {
322
- if (this.debug) {
323
- console.error('Error', error);
324
- }
325
- return response.status(500).send('Error del servidor');
326
- });
327
- }
328
- }
329
- generarUsuario(nuevoUsuario) {
330
- return {
331
- username: nuevoUsuario.username.toString(),
332
- password: `A${nuevoUsuario.username}a-`,
333
- connection: 'Username-Password-Authentication',
334
- name: nuevoUsuario.name,
335
- email: nuevoUsuario.email,
336
- user_metadata: {
337
- name: nuevoUsuario.name
338
- }
339
- };
340
- }
341
- findWhereOr(criterioBusqueda, request, response) {
342
- const tipoPoliticaSeguridad = {
343
- web: {
344
- request,
345
- response
346
- }
347
- };
348
- const objetoPoliticasDeSeguridad = {
349
- funciones: this._funcionesSeguridad.findWhereOr ? this._funcionesSeguridad.findWhereOr : []
350
- };
351
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
352
- puedeRealizarAccion$
353
- .pipe(mergeMap((puedeRealizarAccion) => {
354
- if (puedeRealizarAccion) {
355
- return from(this.buscarUsuarioFindWhereOr(criterioBusqueda));
356
- }
357
- else {
358
- return of({ error: 403, mensaje: 'No tiene permisos' });
359
- }
360
- }))
361
- .subscribe((respuesta) => {
362
- if (respuesta.error) {
363
- return response.status(respuesta.error).send(respuesta);
364
- }
365
- else {
366
- return response.send(respuesta);
367
- }
368
- }, (error) => {
369
- if (this.debug) {
370
- console.error('Error', error);
371
- }
372
- return response.status(500).send('Error del servidor');
373
- });
374
- }
375
- buscarUsuarioFindWhereOr(criterioBusqueda) {
376
- let camposUsuario;
377
- try {
378
- camposUsuario = JSON.parse(criterioBusqueda);
379
- }
380
- catch (e) {
381
- console.error('Error: ', e);
382
- }
383
- if (camposUsuario) {
384
- return this._auth0Service.findWhereOr(camposUsuario.camposABuscar);
385
- }
386
- else {
387
- return of({ mensaje: 'Error en enviar parametros.', error: 400 });
388
- }
389
- }
390
- findAllDatosUsuario(criterioBusqueda, request, response) {
391
- const tipoPoliticaSeguridad = {
392
- web: {
393
- request,
394
- response
395
- }
396
- };
397
- const objetoPoliticasDeSeguridad = {
398
- funciones: this._funcionesSeguridad.findAll ? this._funcionesSeguridad.findAll : []
399
- };
400
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
401
- puedeRealizarAccion$
402
- .pipe(mergeMap((puedeRealizarAccion) => {
403
- if (puedeRealizarAccion) {
404
- return from(this._auth0Service.findAll(criterioBusqueda, this.skip, this.take));
405
- }
406
- else {
407
- return of({ error: 403, mensaje: 'No tiene permisos' });
408
- }
409
- }))
410
- .subscribe((respuesta) => {
411
- if (respuesta.error) {
412
- return response.status(respuesta.error).send(respuesta);
413
- }
414
- else {
415
- return response.send(respuesta);
416
- }
417
- }, (error) => {
418
- if (this.debug) {
419
- console.error('Error', error);
420
- }
421
- return response.status(500).send('Error del servidor');
422
- });
423
- }
424
- async findOneById(id, request, response) {
425
- const tipoPoliticaSeguridad = {
426
- web: {
427
- request,
428
- response
429
- }
430
- };
431
- const objetoPoliticasDeSeguridad = {
432
- funciones: this._funcionesSeguridad.findOne ? this._funcionesSeguridad.findOne : []
433
- };
434
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
435
- puedeRealizarAccion$
436
- .pipe(mergeMap((puedeRealizarAccion) => {
437
- if (puedeRealizarAccion) {
438
- return from(this._auth0Service.findOne(id));
439
- }
440
- else {
441
- return of({ error: 403, mensaje: 'No tiene permisos' });
442
- }
443
- }))
444
- .subscribe((respuesta) => {
445
- if (respuesta.error) {
446
- return response.status(respuesta.error).send(respuesta);
447
- }
448
- else {
449
- return response.send(respuesta);
450
- }
451
- }, (error) => {
452
- if (this.debug) {
453
- console.error('Error', error);
454
- }
455
- return response.status(500).send('Error del servidor');
456
- });
457
- }
458
- login(username, password) {
459
- return this._auth0Service.login(username, password);
460
- }
461
- requestChangePasswordByEmail(email, connection) {
462
- return this._auth0Service.requestChangePasswordByEmail(email, connection);
463
- }
464
- };
465
- __decorate([
466
- HttpCode(200),
467
- Post('token'),
468
- __param(0, Body('token'))
469
- ], PrincipalAuth0Controller.prototype, "refreshToken", null);
470
- __decorate([
471
- HttpCode(200),
472
- Post('actualizarUsuarioPorPrimeraVez'),
473
- __param(0, Body('email')),
474
- __param(1, Body('name')),
475
- __param(2, Body('user_id')),
476
- __param(3, Request()),
477
- __param(4, Response())
478
- ], PrincipalAuth0Controller.prototype, "actualizarUsuarioPorPrimeraVez", null);
479
- __decorate([
480
- HttpCode(200),
481
- Post('actualizarCuenta'),
482
- __param(0, Body('email')),
483
- __param(1, Body('name')),
484
- __param(2, Body('user_id')),
485
- __param(3, Request()),
486
- __param(4, Response())
487
- ], PrincipalAuth0Controller.prototype, "actualizarCuenta", null);
488
- __decorate([
489
- HttpCode(200),
490
- Get(''),
491
- __param(0, Query('criterioBusqueda')),
492
- __param(1, Request()),
493
- __param(2, Response())
494
- ], PrincipalAuth0Controller.prototype, "findAll", null);
495
- __decorate([
496
- HttpCode(200),
497
- Post(''),
498
- __param(0, Body('datosAuth0')),
499
- __param(1, Body('datosUsuario')),
500
- __param(2, Request()),
501
- __param(3, Response())
502
- ], PrincipalAuth0Controller.prototype, "createOne", null);
503
- __decorate([
504
- Get('findWhereOrDatosUsuario'),
505
- __param(0, Query('criterioBusqueda')),
506
- __param(1, Request()),
507
- __param(2, Response())
508
- ], PrincipalAuth0Controller.prototype, "findWhereOr", null);
509
- __decorate([
510
- Get('findAllDatosUsuario'),
511
- __param(0, Query('criterioBusqueda')),
512
- __param(1, Request()),
513
- __param(2, Response())
514
- ], PrincipalAuth0Controller.prototype, "findAllDatosUsuario", null);
515
- __decorate([
516
- HttpCode(200),
517
- Get(':id'),
518
- __param(0, Param('id')),
519
- __param(1, Request()),
520
- __param(2, Response())
521
- ], PrincipalAuth0Controller.prototype, "findOneById", null);
522
- __decorate([
523
- Post('login'),
524
- __param(0, Body('username')),
525
- __param(1, Body('password'))
526
- ], PrincipalAuth0Controller.prototype, "login", null);
527
- __decorate([
528
- Post('requestChangePasswordByEmail'),
529
- __param(0, Body('email')),
530
- __param(1, Body('connection'))
531
- ], PrincipalAuth0Controller.prototype, "requestChangePasswordByEmail", null);
532
- PrincipalAuth0Controller = __decorate([
533
- Controller('auth0')
534
- ], PrincipalAuth0Controller);
535
- export { PrincipalAuth0Controller };
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { ActualizarUsuarioCuentaDto } from './actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto';
11
+ import { BadRequestException, Body, Controller, HttpCode, Post, InternalServerErrorException, Param, Response, Request, Query, Get } from '@nestjs/common';
12
+ import { validate } from 'class-validator';
13
+ import { ActualizarUsuarioDto } from './actualizar-usuario-dto/actualizar-usuario-dto';
14
+ import { aplicarPoliticasDeSeguridad } from '../seguridad/aplicar-politicas-de-seguridad';
15
+ import { mergeMap } from 'rxjs/operators';
16
+ import { from, of } from 'rxjs';
17
+ import { CrearUsuarioDto } from './crear-usuario-dto/crear-usuario-dto';
18
+ let PrincipalAuth0Controller = class PrincipalAuth0Controller {
19
+ constructor(_funcionesSeguridad, _auth0Service, _mensajes = {
20
+ mensajeProcesoInicial: 'Proceso inicial completado exitosamente.',
21
+ mensajeCuentaActualizada: 'Cuenta actualizada.',
22
+ mensajeCuentaYCorreoActualizado: 'Cuenta actualizada. Revise su correo para confirmar su email.'
23
+ }, debug = true, skip = 0, take = 30, contexto) {
24
+ this._funcionesSeguridad = _funcionesSeguridad;
25
+ this._auth0Service = _auth0Service;
26
+ this._mensajes = _mensajes;
27
+ this.debug = debug;
28
+ this.skip = skip;
29
+ this.take = take;
30
+ this.contexto = contexto;
31
+ }
32
+ async refreshToken(token) {
33
+ return this._auth0Service.refreshToken(token);
34
+ }
35
+ async actualizarUsuarioPorPrimeraVez(email, name, user_id, request, response) {
36
+ const actualizacionUsuario = new ActualizarUsuarioDto();
37
+ actualizacionUsuario.name = name;
38
+ actualizacionUsuario.email = email;
39
+ actualizacionUsuario.user_id = user_id;
40
+ const errores = await validate(actualizacionUsuario);
41
+ const hayErrores = errores.length > 0;
42
+ if (hayErrores) {
43
+ if (this.debug) {
44
+ console.error('Error de validacion', errores);
45
+ }
46
+ throw new BadRequestException('No envia parametros');
47
+ }
48
+ else {
49
+ const tipoPoliticaSeguridad = {
50
+ web: {
51
+ request,
52
+ response
53
+ }
54
+ };
55
+ const objetoPoliticasDeSeguridad = {
56
+ funciones: this._funcionesSeguridad.updateUserForTheFirstTime ? this._funcionesSeguridad.updateUserForTheFirstTime : []
57
+ };
58
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
59
+ puedeRealizarAccion$
60
+ .pipe(mergeMap((puedeRealizarAccion) => {
61
+ if (puedeRealizarAccion) {
62
+ return from(this.actualizarUsuarioPorPrimeraVezAccion(actualizacionUsuario));
63
+ }
64
+ else {
65
+ return of({ error: 403, mensaje: 'No tiene permisos' });
66
+ }
67
+ }))
68
+ .subscribe((respuesta) => {
69
+ if (respuesta.error) {
70
+ return response.status(respuesta.error).send(respuesta);
71
+ }
72
+ else {
73
+ return response.send(respuesta);
74
+ }
75
+ }, (error) => {
76
+ if (this.debug) {
77
+ console.error('Error', error);
78
+ }
79
+ return response.status(500).json({ error: 500, mensaje: 'Error del servidor' });
80
+ });
81
+ }
82
+ }
83
+ async actualizarUsuarioPorPrimeraVezAccion(actualizacionUsuario) {
84
+ const objetoActualizar = {
85
+ email: actualizacionUsuario.email
86
+ };
87
+ objetoActualizar.user_metadata = {
88
+ name: actualizacionUsuario.name,
89
+ roles: [1]
90
+ };
91
+ const respuestaUsuarioActualizado = await this._auth0Service
92
+ .findOneByIdAndUpdate(actualizacionUsuario.user_id, objetoActualizar);
93
+ if (respuestaUsuarioActualizado.error) {
94
+ return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
95
+ }
96
+ else {
97
+ const respuestaEmailVerification = await this._auth0Service
98
+ .sendEmailVerification(actualizacionUsuario.user_id);
99
+ if (!respuestaEmailVerification.error) {
100
+ const respuestaCambioPassword = await this._auth0Service
101
+ .changePassword(actualizacionUsuario.email);
102
+ if (respuestaCambioPassword.error) {
103
+ return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
104
+ }
105
+ else {
106
+ return new Promise(r => r({ mensaje: this._mensajes.mensajeProcesoInicial }));
107
+ }
108
+ }
109
+ else {
110
+ return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
111
+ }
112
+ }
113
+ }
114
+ async actualizarCuenta(email, name, user_id, request, response) {
115
+ const actualizacionUsuario = new ActualizarUsuarioCuentaDto();
116
+ actualizacionUsuario.name = name;
117
+ actualizacionUsuario.email = email;
118
+ actualizacionUsuario.user_id = user_id;
119
+ const errores = await validate(actualizacionUsuario);
120
+ const hayErrores = errores.length > 0;
121
+ if (hayErrores) {
122
+ if (this.debug) {
123
+ console.error('Error de validacion', errores);
124
+ }
125
+ throw new BadRequestException('No envia parametros');
126
+ }
127
+ else {
128
+ const tipoPoliticaSeguridad = {
129
+ web: {
130
+ request,
131
+ response
132
+ }
133
+ };
134
+ const objetoPoliticasDeSeguridad = {
135
+ funciones: this._funcionesSeguridad.updateAccount ? this._funcionesSeguridad.updateAccount : []
136
+ };
137
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
138
+ puedeRealizarAccion$
139
+ .pipe(mergeMap((puedeRealizarAccion) => {
140
+ if (puedeRealizarAccion) {
141
+ return from(this.actualizarCuentaAccion(actualizacionUsuario));
142
+ }
143
+ else {
144
+ return of({ error: 403, mensaje: 'No tiene permisos' });
145
+ }
146
+ }))
147
+ .subscribe((respuesta) => {
148
+ if (respuesta.error) {
149
+ return response.status(respuesta.error).send(respuesta);
150
+ }
151
+ else {
152
+ return response.send(respuesta);
153
+ }
154
+ }, (error) => {
155
+ if (this.debug) {
156
+ console.error('Error', error);
157
+ }
158
+ return response.status(500).json({ error: 500, mensaje: 'Error del servidor' });
159
+ });
160
+ }
161
+ }
162
+ async actualizarCuentaAccion(actualizacionUsuario) {
163
+ const objetoActualizar = {};
164
+ if (actualizacionUsuario.email) {
165
+ objetoActualizar.email = actualizacionUsuario.email;
166
+ }
167
+ if (actualizacionUsuario.name) {
168
+ objetoActualizar.user_metadata = {
169
+ name: actualizacionUsuario.name
170
+ };
171
+ }
172
+ const respuestaUsuarioActualizado = await this._auth0Service
173
+ .findOneByIdAndUpdate(actualizacionUsuario.user_id, objetoActualizar);
174
+ if (respuestaUsuarioActualizado.error) {
175
+ return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
176
+ }
177
+ else {
178
+ if (objetoActualizar.email) {
179
+ const respuestaEmailVerification = await this._auth0Service
180
+ .sendEmailVerification(actualizacionUsuario.user_id);
181
+ if (respuestaEmailVerification.error) {
182
+ return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
183
+ }
184
+ else {
185
+ return { mensaje: this._mensajes.mensajeCuentaYCorreoActualizado };
186
+ }
187
+ }
188
+ else {
189
+ return { mensaje: this._mensajes.mensajeCuentaActualizada };
190
+ }
191
+ }
192
+ }
193
+ async findAll(criterioBusqueda, request, response) {
194
+ const tipoPoliticaSeguridad = {
195
+ web: {
196
+ request,
197
+ response
198
+ }
199
+ };
200
+ const objetoPoliticasDeSeguridad = {
201
+ funciones: this._funcionesSeguridad.findMany ? this._funcionesSeguridad.findMany : []
202
+ };
203
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
204
+ puedeRealizarAccion$
205
+ .pipe(mergeMap((puedeRealizarAccion) => {
206
+ if (puedeRealizarAccion) {
207
+ let existeErrorEnConvertirAJSON = false;
208
+ const criterioBusquedaNoEsUnObjeto = typeof criterioBusqueda !== 'object';
209
+ if (criterioBusquedaNoEsUnObjeto) {
210
+ try {
211
+ criterioBusqueda = JSON.parse(criterioBusqueda);
212
+ }
213
+ catch (e) {
214
+ if (this.debug) {
215
+ console.error('Error en parseo JSON', e);
216
+ }
217
+ existeErrorEnConvertirAJSON = true;
218
+ }
219
+ }
220
+ criterioBusqueda = existeErrorEnConvertirAJSON ? undefined : criterioBusqueda;
221
+ return from(this._auth0Service.find(criterioBusqueda));
222
+ }
223
+ else {
224
+ return of({ error: 403, mensaje: 'No tiene permisos' });
225
+ }
226
+ }))
227
+ .subscribe((respuesta) => {
228
+ if (respuesta.error) {
229
+ return response.status(respuesta.error).send(respuesta);
230
+ }
231
+ else {
232
+ return response.send(respuesta);
233
+ }
234
+ }, (error) => {
235
+ if (this.debug) {
236
+ console.error('Error', error);
237
+ }
238
+ return response.status(500).send('Error del servidor');
239
+ });
240
+ }
241
+ async createOne(nuevoUsuario, datosUsuario, request, response) {
242
+ const crearUsuario = new CrearUsuarioDto();
243
+ crearUsuario.name = nuevoUsuario.name;
244
+ crearUsuario.email = nuevoUsuario.email;
245
+ crearUsuario.username = nuevoUsuario.username;
246
+ const errores = await validate(crearUsuario);
247
+ const nuevoDatoUsuario = new this._auth0Service.datosUsuarioDto();
248
+ Object
249
+ .keys(datosUsuario)
250
+ .forEach((nombrePropiedad) => {
251
+ nuevoDatoUsuario[nombrePropiedad] = datosUsuario[nombrePropiedad];
252
+ });
253
+ nuevoDatoUsuario.user_id = 'a';
254
+ const erroresDatosUsuario = await validate(nuevoDatoUsuario);
255
+ const hayErrores = errores.length > 0 || erroresDatosUsuario.length > 0;
256
+ if (hayErrores) {
257
+ if (this.debug) {
258
+ console.error('Error de validacion', errores, erroresDatosUsuario);
259
+ }
260
+ throw new BadRequestException('No envia parametros');
261
+ }
262
+ else {
263
+ const tipoPoliticaSeguridad = {
264
+ web: {
265
+ request,
266
+ response
267
+ }
268
+ };
269
+ const objetoPoliticasDeSeguridad = {
270
+ funciones: this._funcionesSeguridad.create ? this._funcionesSeguridad.create : []
271
+ };
272
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
273
+ puedeRealizarAccion$
274
+ .pipe(mergeMap((puedeRealizarAccion) => {
275
+ if (puedeRealizarAccion) {
276
+ return from(this._auth0Service.create(this.generarUsuario(crearUsuario)));
277
+ }
278
+ else {
279
+ return of({ error: 403, mensaje: 'No tiene permisos' });
280
+ }
281
+ }))
282
+ .subscribe(async (respuesta) => {
283
+ try {
284
+ if (respuesta.error) {
285
+ return response.status(respuesta.error).send(respuesta);
286
+ }
287
+ else {
288
+ if (this._auth0Service._datosUsuarioService && this._auth0Service.datosUsuarioDto) {
289
+ const respuestaAuth0 = respuesta;
290
+ nuevoDatoUsuario.user_id = respuestaAuth0.user_id;
291
+ const respuestaDatosUsuario = await this._auth0Service._datosUsuarioService.create(nuevoDatoUsuario);
292
+ if (respuestaDatosUsuario.error) {
293
+ if (this.debug) {
294
+ console.error('No se pudo crear el registro en la tabla de Datos usuario');
295
+ }
296
+ return response.status(500)
297
+ .json({
298
+ mensaje: 'Se creo el usuario en Auth0 pero no se creo el usuario en DatoUsuario. Error del servidor.',
299
+ data: respuestaAuth0
300
+ });
301
+ }
302
+ else {
303
+ respuestaAuth0.usuario = respuestaDatosUsuario;
304
+ return response.send(respuestaAuth0);
305
+ }
306
+ }
307
+ else {
308
+ if (this.debug) {
309
+ console.info('No se tiene datos de usuario service y dto, no se crea el registro en Datos usuario');
310
+ }
311
+ return response.send(respuesta);
312
+ }
313
+ }
314
+ }
315
+ catch (e) {
316
+ if (this.debug) {
317
+ console.error('Error', e);
318
+ }
319
+ return response.status(500).send('Error del servidor');
320
+ }
321
+ }, (error) => {
322
+ if (this.debug) {
323
+ console.error('Error', error);
324
+ }
325
+ return response.status(500).send('Error del servidor');
326
+ });
327
+ }
328
+ }
329
+ generarUsuario(nuevoUsuario) {
330
+ return {
331
+ username: nuevoUsuario.username.toString(),
332
+ password: `A${nuevoUsuario.username}a-`,
333
+ connection: 'Username-Password-Authentication',
334
+ name: nuevoUsuario.name,
335
+ email: nuevoUsuario.email,
336
+ user_metadata: {
337
+ name: nuevoUsuario.name
338
+ }
339
+ };
340
+ }
341
+ findWhereOr(criterioBusqueda, request, response) {
342
+ const tipoPoliticaSeguridad = {
343
+ web: {
344
+ request,
345
+ response
346
+ }
347
+ };
348
+ const objetoPoliticasDeSeguridad = {
349
+ funciones: this._funcionesSeguridad.findWhereOr ? this._funcionesSeguridad.findWhereOr : []
350
+ };
351
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
352
+ puedeRealizarAccion$
353
+ .pipe(mergeMap((puedeRealizarAccion) => {
354
+ if (puedeRealizarAccion) {
355
+ return from(this.buscarUsuarioFindWhereOr(criterioBusqueda));
356
+ }
357
+ else {
358
+ return of({ error: 403, mensaje: 'No tiene permisos' });
359
+ }
360
+ }))
361
+ .subscribe((respuesta) => {
362
+ if (respuesta.error) {
363
+ return response.status(respuesta.error).send(respuesta);
364
+ }
365
+ else {
366
+ return response.send(respuesta);
367
+ }
368
+ }, (error) => {
369
+ if (this.debug) {
370
+ console.error('Error', error);
371
+ }
372
+ return response.status(500).send('Error del servidor');
373
+ });
374
+ }
375
+ buscarUsuarioFindWhereOr(criterioBusqueda) {
376
+ let camposUsuario;
377
+ try {
378
+ camposUsuario = JSON.parse(criterioBusqueda);
379
+ }
380
+ catch (e) {
381
+ console.error('Error: ', e);
382
+ }
383
+ if (camposUsuario) {
384
+ return this._auth0Service.findWhereOr(camposUsuario.camposABuscar);
385
+ }
386
+ else {
387
+ return of({ mensaje: 'Error en enviar parametros.', error: 400 });
388
+ }
389
+ }
390
+ findAllDatosUsuario(criterioBusqueda, request, response) {
391
+ const tipoPoliticaSeguridad = {
392
+ web: {
393
+ request,
394
+ response
395
+ }
396
+ };
397
+ const objetoPoliticasDeSeguridad = {
398
+ funciones: this._funcionesSeguridad.findAll ? this._funcionesSeguridad.findAll : []
399
+ };
400
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
401
+ puedeRealizarAccion$
402
+ .pipe(mergeMap((puedeRealizarAccion) => {
403
+ if (puedeRealizarAccion) {
404
+ return from(this._auth0Service.findAll(criterioBusqueda, this.skip, this.take));
405
+ }
406
+ else {
407
+ return of({ error: 403, mensaje: 'No tiene permisos' });
408
+ }
409
+ }))
410
+ .subscribe((respuesta) => {
411
+ if (respuesta.error) {
412
+ return response.status(respuesta.error).send(respuesta);
413
+ }
414
+ else {
415
+ return response.send(respuesta);
416
+ }
417
+ }, (error) => {
418
+ if (this.debug) {
419
+ console.error('Error', error);
420
+ }
421
+ return response.status(500).send('Error del servidor');
422
+ });
423
+ }
424
+ async findOneById(id, request, response) {
425
+ const tipoPoliticaSeguridad = {
426
+ web: {
427
+ request,
428
+ response
429
+ }
430
+ };
431
+ const objetoPoliticasDeSeguridad = {
432
+ funciones: this._funcionesSeguridad.findOne ? this._funcionesSeguridad.findOne : []
433
+ };
434
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
435
+ puedeRealizarAccion$
436
+ .pipe(mergeMap((puedeRealizarAccion) => {
437
+ if (puedeRealizarAccion) {
438
+ return from(this._auth0Service.findOne(id));
439
+ }
440
+ else {
441
+ return of({ error: 403, mensaje: 'No tiene permisos' });
442
+ }
443
+ }))
444
+ .subscribe((respuesta) => {
445
+ if (respuesta.error) {
446
+ return response.status(respuesta.error).send(respuesta);
447
+ }
448
+ else {
449
+ return response.send(respuesta);
450
+ }
451
+ }, (error) => {
452
+ if (this.debug) {
453
+ console.error('Error', error);
454
+ }
455
+ return response.status(500).send('Error del servidor');
456
+ });
457
+ }
458
+ login(username, password) {
459
+ return this._auth0Service.login(username, password);
460
+ }
461
+ requestChangePasswordByEmail(email, connection) {
462
+ return this._auth0Service.requestChangePasswordByEmail(email, connection);
463
+ }
464
+ };
465
+ __decorate([
466
+ HttpCode(200),
467
+ Post('token'),
468
+ __param(0, Body('token'))
469
+ ], PrincipalAuth0Controller.prototype, "refreshToken", null);
470
+ __decorate([
471
+ HttpCode(200),
472
+ Post('actualizarUsuarioPorPrimeraVez'),
473
+ __param(0, Body('email')),
474
+ __param(1, Body('name')),
475
+ __param(2, Body('user_id')),
476
+ __param(3, Request()),
477
+ __param(4, Response())
478
+ ], PrincipalAuth0Controller.prototype, "actualizarUsuarioPorPrimeraVez", null);
479
+ __decorate([
480
+ HttpCode(200),
481
+ Post('actualizarCuenta'),
482
+ __param(0, Body('email')),
483
+ __param(1, Body('name')),
484
+ __param(2, Body('user_id')),
485
+ __param(3, Request()),
486
+ __param(4, Response())
487
+ ], PrincipalAuth0Controller.prototype, "actualizarCuenta", null);
488
+ __decorate([
489
+ HttpCode(200),
490
+ Get(''),
491
+ __param(0, Query('criterioBusqueda')),
492
+ __param(1, Request()),
493
+ __param(2, Response())
494
+ ], PrincipalAuth0Controller.prototype, "findAll", null);
495
+ __decorate([
496
+ HttpCode(200),
497
+ Post(''),
498
+ __param(0, Body('datosAuth0')),
499
+ __param(1, Body('datosUsuario')),
500
+ __param(2, Request()),
501
+ __param(3, Response())
502
+ ], PrincipalAuth0Controller.prototype, "createOne", null);
503
+ __decorate([
504
+ Get('findWhereOrDatosUsuario'),
505
+ __param(0, Query('criterioBusqueda')),
506
+ __param(1, Request()),
507
+ __param(2, Response())
508
+ ], PrincipalAuth0Controller.prototype, "findWhereOr", null);
509
+ __decorate([
510
+ Get('findAllDatosUsuario'),
511
+ __param(0, Query('criterioBusqueda')),
512
+ __param(1, Request()),
513
+ __param(2, Response())
514
+ ], PrincipalAuth0Controller.prototype, "findAllDatosUsuario", null);
515
+ __decorate([
516
+ HttpCode(200),
517
+ Get(':id'),
518
+ __param(0, Param('id')),
519
+ __param(1, Request()),
520
+ __param(2, Response())
521
+ ], PrincipalAuth0Controller.prototype, "findOneById", null);
522
+ __decorate([
523
+ Post('login'),
524
+ __param(0, Body('username')),
525
+ __param(1, Body('password'))
526
+ ], PrincipalAuth0Controller.prototype, "login", null);
527
+ __decorate([
528
+ Post('requestChangePasswordByEmail'),
529
+ __param(0, Body('email')),
530
+ __param(1, Body('connection'))
531
+ ], PrincipalAuth0Controller.prototype, "requestChangePasswordByEmail", null);
532
+ PrincipalAuth0Controller = __decorate([
533
+ Controller('auth0')
534
+ ], PrincipalAuth0Controller);
535
+ export { PrincipalAuth0Controller };
536
536
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aDAuY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYXV0aDAvYXV0aDAuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUMzRyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLElBQUksRUFDSixVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksRUFDSiw0QkFBNEIsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUNuRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQU12RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBT3hFLElBQXNCLHdCQUF3QixHQUE5QztJQUNFLFlBQ21CLG1CQUE0QyxFQUM1QyxhQUEwQyxFQUMxQyxZQUFzQztRQUNyRCxxQkFBcUIsRUFBRSwwQ0FBMEM7UUFDakUsd0JBQXdCLEVBQUUscUJBQXFCO1FBQy9DLCtCQUErQixFQUFFLCtEQUErRDtLQUNqRyxFQUNnQixRQUFpQixJQUFJLEVBQ3JCLE9BQWUsQ0FBQyxFQUNoQixPQUFlLEVBQUUsRUFDeEIsUUFBYTtRQVZOLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBeUI7UUFDNUMsa0JBQWEsR0FBYixhQUFhLENBQTZCO1FBQzFDLGNBQVMsR0FBVCxTQUFTLENBSXpCO1FBQ2dCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUN4QixhQUFRLEdBQVIsUUFBUSxDQUFLO0lBQ3pCLENBQUM7SUFLRCxLQUFLLENBQUMsWUFBWSxDQUNELEtBQUs7UUFDcEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBS0QsS0FBSyxDQUFDLDhCQUE4QixDQUFnQixLQUFLLEVBQ04sSUFBSSxFQUNELE9BQU8sRUFDYixPQUFPLEVBQ04sUUFBUTtRQUN2RCxNQUFNLG9CQUFvQixHQUF5QixJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDOUUsb0JBQW9CLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQyxvQkFBb0IsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25DLG9CQUFvQixDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNyRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQy9DO1lBQ0QsTUFBTSxJQUFJLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDdEQ7YUFBTTtZQUVMLE1BQU0scUJBQXFCLEdBQXlCO2dCQUNsRCxHQUFHLEVBQUU7b0JBQ0gsT0FBTztvQkFDUCxRQUFRO2lCQUNUO2FBQ0YsQ0FBQztZQUVGLE1BQU0sMEJBQTBCLEdBQThCO2dCQUM1RCxTQUFTLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDeEgsQ0FBQztZQUVGLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUMscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTNILG9CQUFvQjtpQkFDakIsSUFBSSxDQUNILFFBQVEsQ0FDTixDQUFDLG1CQUFtQixFQUFFLEVBQUU7Z0JBQ3RCLElBQUksbUJBQW1CLEVBQUU7b0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7aUJBQzlFO3FCQUFNO29CQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2lCQUN6RDtZQUNILENBQUMsQ0FDRixDQUNGO2lCQUNBLFNBQVMsQ0FDUixDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNaLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtvQkFDbkIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3pEO3FCQUFNO29CQUNMLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDakM7WUFFSCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDUixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQy9CO2dCQUNELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFDbEYsQ0FBQyxDQUNGLENBQUM7U0FHTDtJQUNILENBQUM7SUFHRCxLQUFLLENBQUMsb0NBQW9DLENBQUMsb0JBQTBDO1FBQ25GLE1BQU0sZ0JBQWdCLEdBQVE7WUFDNUIsS0FBSyxFQUFFLG9CQUFvQixDQUFDLEtBQUs7U0FDbEMsQ0FBQztRQUNGLGdCQUFnQixDQUFDLGFBQWEsR0FBRztZQUMvQixJQUFJLEVBQUUsb0JBQW9CLENBQUMsSUFBSTtZQUMvQixLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDWCxDQUFDO1FBRUYsTUFBTSwyQkFBMkIsR0FBUSxNQUFNLElBQUksQ0FBQyxhQUFhO2FBQzlELG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXhFLElBQUksMkJBQTJCLENBQUMsS0FBSyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztTQUN4RjthQUFNO1lBQ0wsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhO2lCQUN4RCxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFO2dCQUNyQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWE7cUJBQ3JELGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUMsSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLEVBQUU7b0JBQ2pDLE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztpQkFDeEY7cUJBQU07b0JBQ0wsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMvRTthQUNGO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQzthQUN4RjtTQUNGO0lBQ0gsQ0FBQztJQUlELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBZ0IsS0FBSyxFQUNOLElBQUksRUFDRCxPQUFPLEVBQ2IsT0FBTyxFQUNOLFFBQVE7UUFDekMsTUFBTSxvQkFBb0IsR0FBK0IsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1FBQzFGLG9CQUFvQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakMsb0JBQW9CLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQyxvQkFBb0IsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDckQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUMvQztZQUNELE1BQU0sSUFBSSxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3REO2FBQU07WUFDTCxNQUFNLHFCQUFxQixHQUF5QjtnQkFDbEQsR0FBRyxFQUFFO29CQUNILE9BQU87b0JBQ1AsUUFBUTtpQkFDVDthQUNGLENBQUM7WUFFRixNQUFNLDBCQUEwQixHQUE4QjtnQkFDNUQsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDaEcsQ0FBQztZQUVGLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUMscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTNILG9CQUFvQjtpQkFDakIsSUFBSSxDQUNILFFBQVEsQ0FDTixDQUFDLG1CQUFtQixFQUFFLEVBQUU7Z0JBQ3RCLElBQUksbUJBQW1CLEVBQUU7b0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7aUJBQ2hFO3FCQUFNO29CQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2lCQUN6RDtZQUNILENBQUMsQ0FDRixDQUNGO2lCQUNBLFNBQVMsQ0FDUixDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNaLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtvQkFDbkIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3pEO3FCQUFNO29CQUNMLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDakM7WUFFSCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDUixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQy9CO2dCQUNELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFDbEYsQ0FBQyxDQUNGLENBQUM7U0FDTDtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsb0JBQWdEO1FBQzNFLE1BQU0sZ0JBQWdCLEdBQVEsRUFBRSxDQUFDO1FBRWpDLElBQUksb0JBQW9CLENBQUMsS0FBSyxFQUFFO1lBQzlCLGdCQUFnQixDQUFDLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7U0FDckQ7UUFFRCxJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRTtZQUM3QixnQkFBZ0IsQ0FBQyxhQUFhLEdBQUc7Z0JBQy9CLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxJQUFJO2FBQ2hDLENBQUM7U0FDSDtRQUVELE1BQU0sMkJBQTJCLEdBQVEsTUFBTSxJQUFJLENBQUMsYUFBYTthQUM5RCxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RSxJQUFJLDJCQUEyQixDQUFDLEtBQUssRUFBRTtZQUNyQyxPQUFPLElBQUksNEJBQTRCLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7U0FDeEY7YUFBTTtZQUNMLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFO2dCQUMxQixNQUFNLDBCQUEwQixHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWE7cUJBQ3hELHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLDBCQUEwQixDQUFDLEtBQUssRUFBRTtvQkFDcEMsT0FBTyxJQUFJLDRCQUE0QixDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO2lCQUN4RjtxQkFBTTtvQkFDTCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsK0JBQStCLEVBQUUsQ0FBQztpQkFDcEU7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEVBQUUsQ0FBQzthQUM3RDtTQUVGO0lBQ0gsQ0FBQztJQUtELEtBQUssQ0FBQyxPQUFPLENBQ2dCLGdCQUF3QixFQUN4QyxPQUFPLEVBQ04sUUFBUTtRQUdwQixNQUFNLHFCQUFxQixHQUF5QjtZQUNsRCxHQUFHLEVBQUU7Z0JBQ0gsT0FBTztnQkFDUCxRQUFRO2FBQ1Q7U0FDRixDQUFDO1FBRUYsTUFBTSwwQkFBMEIsR0FBOEI7WUFDNUQsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDdEYsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUMscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNILG9CQUFvQjthQUNqQixJQUFJLENBQ0gsUUFBUSxDQUNOLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUN0QixJQUFJLG1CQUFtQixFQUFFO2dCQUV2QixJQUFJLDJCQUEyQixHQUFHLEtBQUssQ0FBQztnQkFDeEMsTUFBTSw0QkFBNEIsR0FBRyxPQUFPLGdCQUFnQixLQUFLLFFBQVEsQ0FBQztnQkFDMUUsSUFBSSw0QkFBNEIsRUFBRTtvQkFDaEMsSUFBSTt3QkFDRixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7cUJBQ2pEO29CQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUNWLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTs0QkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxDQUFDO3lCQUMxQzt3QkFDRCwyQkFBMkIsR0FBRyxJQUFJLENBQUM7cUJBQ3BDO2lCQUNGO2dCQUVELGdCQUFnQixHQUFHLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO2dCQUU5RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7YUFDeEQ7aUJBQU07Z0JBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7YUFDekQ7UUFDSCxDQUFDLENBQ0YsQ0FDRjthQUNBLFNBQVMsQ0FDUixDQUFDLFNBQWMsRUFBRSxFQUFFO1lBQ2pCLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtnQkFDbkIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDekQ7aUJBQU07Z0JBQ0wsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2pDO1FBRUgsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDL0I7WUFDRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUNGLENBQUM7SUFDTixDQUFDO0lBSUQsS0FBSyxDQUFDLFNBQVMsQ0FDTyxZQUE2QixFQUMzQixZQUFpQixFQUM1QixPQUFPLEVBQ04sUUFBUTtRQUVwQixNQUFNLFlBQVksR0FBb0IsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM1RCxZQUFZLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDdEMsWUFBWSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQ3hDLFlBQVksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxNQUFNLGdCQUFnQixHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNsRSxNQUFNO2FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUNsQixPQUFPLENBQ04sQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUNsQixnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUNGLENBQUM7UUFDSixnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQy9CLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU3RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7YUFDcEU7WUFDRCxNQUFNLElBQUksbUJBQW1CLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBQ0wsTUFBTSxxQkFBcUIsR0FBeUI7Z0JBQ2xELEdBQUcsRUFBRTtvQkFDSCxPQUFPO29CQUNQLFFBQVE7aUJBQ1Q7YUFDRixDQUFDO1lBRUYsTUFBTSwwQkFBMEIsR0FBOEI7Z0JBQzVELFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQ2xGLENBQUM7WUFFRixNQUFNLG9CQUFvQixHQUFHLDJCQUEyQixDQUFDLHFCQUFxQixFQUFFLDBCQUEwQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUUzSCxvQkFBb0I7aUJBQ2pCLElBQUksQ0FDSCxRQUFRLENBQ04sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO2dCQUN0QixJQUFJLG1CQUFtQixFQUFFO29CQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0U7cUJBQU07b0JBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ3pEO1lBQ0gsQ0FBQyxDQUNGLENBQ0Y7aUJBQ0EsU0FBUyxDQUNSLEtBQUssRUFBRSxTQUFjLEVBQUUsRUFBRTtnQkFDdkIsSUFBSTtvQkFDRixJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7d0JBQ25CLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUN6RDt5QkFBTTt3QkFDTCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUU7NEJBQ2pGLE1BQU0sY0FBYyxHQUFHLFNBQTBCLENBQUM7NEJBQ2xELGdCQUFnQixDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDOzRCQUNsRCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs0QkFDckcsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUU7Z0NBQy9CLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQ0FDZCxPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7aUNBQzVFO2dDQUNELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7cUNBQ3hCLElBQUksQ0FBQztvQ0FDSixPQUFPLEVBQUUsNEZBQTRGO29DQUNyRyxJQUFJLEVBQUUsY0FBYztpQ0FDckIsQ0FBQyxDQUFDOzZCQUNOO2lDQUFNO2dDQUNMLGNBQWMsQ0FBQyxPQUFPLEdBQUcscUJBQXFCLENBQUM7Z0NBQy9DLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzs2QkFDdEM7eUJBRUY7NkJBQU07NEJBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dDQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMscUZBQXFGLENBQUMsQ0FBQzs2QkFDckc7NEJBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3lCQUNqQztxQkFDRjtpQkFDRjtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQzNCO29CQUNELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztpQkFDeEQ7WUFFSCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDUixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQy9CO2dCQUNELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQ0YsQ0FBQztTQUNMO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxZQUE2QjtRQUMxQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQzFDLFFBQVEsRUFBRSxJQUFJLFlBQVksQ0FBQyxRQUFRLElBQUk7WUFDdkMsVUFBVSxFQUFFLGtDQUFrQztZQUM5QyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO1lBQ3pCLGFBQWEsRUFBRTtnQkFDYixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7YUFDeEI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUdELFdBQVcsQ0FDa0IsZ0JBQXdCLEVBQ3hDLE9BQU8sRUFDTixRQUFRO1FBR3BCLE1BQU0scUJBQXFCLEdBQXlCO1lBQ2xELEdBQUcsRUFBRTtnQkFDSCxPQUFPO2dCQUNQLFFBQVE7YUFDVDtTQUNGLENBQUM7UUFFRixNQUFNLDBCQUEwQixHQUE4QjtZQUM1RCxTQUFTLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUM1RixDQUFDO1FBRUYsTUFBTSxvQkFBb0IsR0FBRywyQkFBMkIsQ0FBQyxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0gsb0JBQW9CO2FBQ2pCLElBQUksQ0FDSCxRQUFRLENBQ04sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQ3RCLElBQUksbUJBQW1CLEVBQUU7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7YUFDOUQ7aUJBQU07Z0JBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7YUFDekQ7UUFDSCxDQUFDLENBQ0YsQ0FDRjthQUNBLFNBQVMsQ0FDUixDQUFDLFNBQWMsRUFBRSxFQUFFO1lBQ2pCLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtnQkFDbkIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDekQ7aUJBQU07Z0JBQ0wsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2pDO1FBQ0gsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDL0I7WUFDRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUNGLENBQUM7SUFDTixDQUFDO0lBRUQsd0JBQXdCLENBQUMsZ0JBQXdCO1FBQy9DLElBQUksYUFBMEQsQ0FBQztRQUMvRCxJQUFJO1lBQ0YsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQWdELENBQUM7U0FDN0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxhQUFhLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDcEU7YUFBTTtZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztJQUlELG1CQUFtQixDQUNVLGdCQUFzQyxFQUN0RCxPQUFPLEVBQ04sUUFBUTtRQUdwQixNQUFNLHFCQUFxQixHQUF5QjtZQUNsRCxHQUFHLEVBQUU7Z0JBQ0gsT0FBTztnQkFDUCxRQUFRO2FBQ1Q7U0FDRixDQUFDO1FBRUYsTUFBTSwwQkFBMEIsR0FBOEI7WUFDNUQsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDcEYsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUMscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNILG9CQUFvQjthQUNqQixJQUFJLENBQ0gsUUFBUSxDQUNOLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUN0QixJQUFJLG1CQUFtQixFQUFFO2dCQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ2pGO2lCQUFNO2dCQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2FBQ3pEO1FBQ0gsQ0FBQyxDQUNGLENBQ0Y7YUFDQSxTQUFTLENBQ1IsQ0FBQyxTQUFjLEVBQUUsRUFBRTtZQUNqQixJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ25CLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3pEO2lCQUFNO2dCQUNMLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNqQztRQUNILENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQy9CO1lBQ0QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUlELEtBQUssQ0FBQyxXQUFXLENBQ0YsRUFBRSxFQUNKLE9BQU8sRUFDTixRQUFRO1FBR3BCLE1BQU0scUJBQXFCLEdBQXlCO1lBQ2xELEdBQUcsRUFBRTtnQkFDSCxPQUFPO2dCQUNQLFFBQVE7YUFDVDtTQUNGLENBQUM7UUFFRixNQUFNLDBCQUEwQixHQUE4QjtZQUM1RCxTQUFTLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUNwRixDQUFDO1FBRUYsTUFBTSxvQkFBb0IsR0FBRywyQkFBMkIsQ0FBQyxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0gsb0JBQW9CO2FBQ2pCLElBQUksQ0FDSCxRQUFRLENBQ04sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQ3RCLElBQUksbUJBQW1CLEVBQUU7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDN0M7aUJBQU07Z0JBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7YUFDekQ7UUFDSCxDQUFDLENBQ0YsQ0FDRjthQUNBLFNBQVMsQ0FDUixDQUFDLFNBQWMsRUFBRSxFQUFFO1lBQ2pCLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtnQkFDbkIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDekQ7aUJBQU07Z0JBQ0wsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2pDO1FBRUgsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDL0I7WUFDRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUNGLENBQUM7SUFDTixDQUFDO0lBSUQsS0FBSyxDQUNlLFFBQVEsRUFDUixRQUFRO1FBRTFCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFHRCw0QkFBNEIsQ0FDWCxLQUFLLEVBQ0EsVUFBVTtRQUU5QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Q0FFRixDQUFBO0FBdmpCQztJQUZDLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFDYixJQUFJLENBQUMsT0FBTyxDQUFDO0lBRVgsV0FBQSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7NERBRWY7QUFLRDtJQUZDLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFDYixJQUFJLENBQUMsZ0NBQWdDLENBQUM7SUFDRCxXQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNiLFdBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ1osV0FBQSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDZixXQUFBLE9BQU8sRUFBRSxDQUFBO0lBQ1QsV0FBQSxRQUFRLEVBQUUsQ0FBQTs4RUEwRC9DO0FBb0NEO0lBRkMsUUFBUSxDQUFDLEdBQUcsQ0FBQztJQUNiLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNELFdBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2IsV0FBQSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDWixXQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNmLFdBQUEsT0FBTyxFQUFFLENBQUE7SUFDVCxXQUFBLFFBQVEsRUFBRSxDQUFBO2dFQXVEakM7QUFzQ0Q7SUFGQyxRQUFRLENBQUMsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUVMLFdBQUEsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDekIsV0FBQSxPQUFPLEVBQUUsQ0FBQTtJQUNULFdBQUEsUUFBUSxFQUFFLENBQUE7dURBNERaO0FBSUQ7SUFGQyxRQUFRLENBQUMsR0FBRyxDQUFDO0lBQ2IsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUVOLFdBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ2xCLFdBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3BCLFdBQUEsT0FBTyxFQUFFLENBQUE7SUFDVCxXQUFBLFFBQVEsRUFBRSxDQUFBO3lEQWlHWjtBQWdCRDtJQURDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQztJQUU1QixXQUFBLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQ3pCLFdBQUEsT0FBTyxFQUFFLENBQUE7SUFDVCxXQUFBLFFBQVEsRUFBRSxDQUFBOzJEQTJDWjtBQWtCRDtJQURDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztJQUV4QixXQUFBLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQ3pCLFdBQUEsT0FBTyxFQUFFLENBQUE7SUFDVCxXQUFBLFFBQVEsRUFBRSxDQUFBO21FQTJDWjtBQUlEO0lBRkMsUUFBUSxDQUFDLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFFUixXQUFBLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNYLFdBQUEsT0FBTyxFQUFFLENBQUE7SUFDVCxXQUFBLFFBQVEsRUFBRSxDQUFBOzJEQTRDWjtBQUlEO0lBREMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUVYLFdBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2hCLFdBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO3FEQUdsQjtBQUdEO0lBREMsSUFBSSxDQUFDLDhCQUE4QixDQUFDO0lBRWxDLFdBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2IsV0FBQSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7NEVBR3BCO0FBdmtCbUIsd0JBQXdCO0lBRDdDLFVBQVUsQ0FBQyxPQUFPLENBQUM7R0FDRSx3QkFBd0IsQ0F5a0I3QztTQXprQnFCLHdCQUF3QiJ9