@provoly/dashboard 0.11.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 (1765) hide show
  1. package/README.md +5 -0
  2. package/admin/admin-routing.module.d.ts +9 -0
  3. package/admin/admin.module.d.ts +87 -0
  4. package/admin/components/admin-abac-rules/admin-abac-rules-edit/admin-abac-rules-edit.component.d.ts +14 -0
  5. package/admin/components/admin-abac-rules/admin-abac-rules-form/admin-abac-rules-form.component.d.ts +29 -0
  6. package/admin/components/admin-abac-rules/admin-abac-rules-new/admin-abac-rules-new.component.d.ts +12 -0
  7. package/admin/components/admin-abac-rules/admin-abac-rules-view/admin-abac-rules-view.component.d.ts +13 -0
  8. package/admin/components/admin-abac-rules/admin-abac-rules.component.d.ts +18 -0
  9. package/admin/components/admin-abac-rules/components/attribute-condition/attribute-condition.component.d.ts +26 -0
  10. package/admin/components/admin-abac-rules/components/composed-condition/composed-condition.component.d.ts +29 -0
  11. package/admin/components/admin-abac-rules/components/metadata-condition/metadata-condition.component.d.ts +28 -0
  12. package/admin/components/admin-abac-rules/components/select-attribute/select-attribute.component.d.ts +17 -0
  13. package/admin/components/admin-abac-rules/components/select-metadata/select-metadata.component.d.ts +14 -0
  14. package/admin/components/admin-abac-rules/store/abac-rules.actions.d.ts +147 -0
  15. package/admin/components/admin-abac-rules/store/abac-rules.effects.d.ts +67 -0
  16. package/admin/components/admin-abac-rules/store/abac-rules.model.d.ts +44 -0
  17. package/admin/components/admin-abac-rules/store/abac-rules.reducer.d.ts +10 -0
  18. package/admin/components/admin-abac-rules/store/abac-rules.selectors.d.ts +14 -0
  19. package/admin/components/admin-abac-rules/store/abac-rules.service.d.ts +21 -0
  20. package/admin/components/admin-classes/admin-classes-customize/admin-classes-customize.component.d.ts +32 -0
  21. package/admin/components/admin-classes/admin-classes-customize/symbol/admin-classes-customize-symbol.component.d.ts +46 -0
  22. package/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.d.ts +41 -0
  23. package/admin/components/admin-classes/admin-classes-edit/admin-classes-edit.component.d.ts +16 -0
  24. package/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.d.ts +26 -0
  25. package/admin/components/admin-classes/admin-classes-new/admin-classes-new.component.d.ts +5 -0
  26. package/admin/components/admin-classes/admin-classes-select/admin-classes-select.component.d.ts +24 -0
  27. package/admin/components/admin-classes/admin-classes-view/admin-attributes-edit/admin-attributes-edit.component.d.ts +17 -0
  28. package/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.d.ts +43 -0
  29. package/admin/components/admin-classes/admin-classes-view/admin-attributes-new/admin-attributes-new.component.d.ts +17 -0
  30. package/admin/components/admin-classes/admin-classes-view/admin-attributes-select/admin-attributes-select.component.d.ts +27 -0
  31. package/admin/components/admin-classes/admin-classes-view/admin-classes-view.component.d.ts +44 -0
  32. package/admin/components/admin-classes/admin-classes.component.d.ts +25 -0
  33. package/admin/components/admin-classes/store/admin-class.actions.d.ts +143 -0
  34. package/admin/components/admin-classes/store/admin-class.effects.d.ts +81 -0
  35. package/admin/components/admin-classes/store/admin-class.reducer.d.ts +11 -0
  36. package/admin/components/admin-classes/store/admin-class.selectors.d.ts +12 -0
  37. package/admin/components/admin-dataset/admin-dataset.component.d.ts +32 -0
  38. package/admin/components/admin-dataset/admin-edit-dataset/admin-edit-dataset.component.d.ts +15 -0
  39. package/admin/components/admin-dataset/admin-new-dataset/admin-new-dataset.component.d.ts +5 -0
  40. package/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.d.ts +36 -0
  41. package/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.d.ts +34 -0
  42. package/admin/components/admin-dataset/store/admin-dataset.actions.d.ts +59 -0
  43. package/admin/components/admin-dataset/store/admin-dataset.effects.d.ts +30 -0
  44. package/admin/components/admin-dataset/store/admin-dataset.reducer.d.ts +6 -0
  45. package/admin/components/admin-dataset/store/admin-dataset.selector.d.ts +5 -0
  46. package/admin/components/admin-environment/admin-environment-form/admin-environment-form.component.d.ts +35 -0
  47. package/admin/components/admin-environment/admin-environment-new/admin-environment-new.component.d.ts +5 -0
  48. package/admin/components/admin-environment/admin-environment-select/admin-environment-select.component.d.ts +24 -0
  49. package/admin/components/admin-environment/admin-environment-update/admin-environment-update.component.d.ts +15 -0
  50. package/admin/components/admin-environment/admin-environment.component.d.ts +20 -0
  51. package/admin/components/admin-environment/store/environment.actions.d.ts +82 -0
  52. package/admin/components/admin-environment/store/environment.effects.d.ts +44 -0
  53. package/admin/components/admin-environment/store/environment.reducer.d.ts +9 -0
  54. package/admin/components/admin-environment/store/environment.selectors.d.ts +8 -0
  55. package/admin/components/admin-fields/admin-fields-edit/admin-fields-edit.component.d.ts +15 -0
  56. package/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.d.ts +30 -0
  57. package/admin/components/admin-fields/admin-fields-new/admin-fields-new.component.d.ts +5 -0
  58. package/admin/components/admin-fields/admin-fields-select/admin-fields-select.component.d.ts +28 -0
  59. package/admin/components/admin-fields/admin-fields.component.d.ts +19 -0
  60. package/admin/components/admin-fields/store/admin-fields.model.d.ts +4 -0
  61. package/admin/components/admin-fields/store/fields.actions.d.ts +47 -0
  62. package/admin/components/admin-fields/store/fields.effects.d.ts +36 -0
  63. package/admin/components/admin-fields/store/fields.reducer.d.ts +8 -0
  64. package/admin/components/admin-fields/store/fields.selectors.d.ts +7 -0
  65. package/admin/components/admin-layout/admin-layout.component.d.ts +24 -0
  66. package/admin/components/admin-links/admin-links-new/admin-links-new.component.d.ts +33 -0
  67. package/admin/components/admin-links/admin-links.component.d.ts +19 -0
  68. package/admin/components/admin-links/store/links.actions.d.ts +31 -0
  69. package/admin/components/admin-links/store/links.effects.d.ts +28 -0
  70. package/admin/components/admin-links/store/links.reducer.d.ts +8 -0
  71. package/admin/components/admin-links/store/links.selectors.d.ts +5 -0
  72. package/admin/components/admin-menu/admin-menu.component.d.ts +14 -0
  73. package/admin/components/admin-metadata/admin-edit-metadata/admin-edit-metadata.component.d.ts +16 -0
  74. package/admin/components/admin-metadata/admin-metadata.component.d.ts +24 -0
  75. package/admin/components/admin-metadata/admin-new-metadata/admin-new-metadata.component.d.ts +10 -0
  76. package/admin/components/admin-metadata/admin-select-metadata/admin-select-metadata.component.d.ts +23 -0
  77. package/admin/components/admin-metadata/shared/form-metadata/form-metadata.component.d.ts +36 -0
  78. package/admin/components/admin-metadata/shared/list-metadata/list-metadata.module.d.ts +11 -0
  79. package/admin/components/admin-metadata/shared/list-metadata/pry-list-metadata.component.d.ts +40 -0
  80. package/admin/components/admin-metadata/store/metadata.action.d.ts +56 -0
  81. package/admin/components/admin-metadata/store/metadata.effects.d.ts +36 -0
  82. package/admin/components/admin-metadata/store/metadata.reducer.d.ts +13 -0
  83. package/admin/components/admin-metadata/store/metadata.selector.d.ts +10 -0
  84. package/admin/components/admin-metadata-rules/admin-edit-metadata-rules/admin-edit-metadata-rules.component.d.ts +12 -0
  85. package/admin/components/admin-metadata-rules/admin-metadata-rules.component.d.ts +35 -0
  86. package/admin/components/admin-metadata-rules/admin-new-metadata-rules/admin-new-metadata-rules.component.d.ts +5 -0
  87. package/admin/components/admin-metadata-rules/admin-select-metadata-rules/admin-select-metadata-rules.component.d.ts +23 -0
  88. package/admin/components/admin-metadata-rules/shared/admin-form-metadata-rules/admin-form-metadata-rules.component.d.ts +41 -0
  89. package/admin/components/admin-metadata-rules/store/metadata-rules.actions.d.ts +49 -0
  90. package/admin/components/admin-metadata-rules/store/metadata-rules.effects.d.ts +39 -0
  91. package/admin/components/admin-metadata-rules/store/metadata-rules.reducer.d.ts +11 -0
  92. package/admin/components/admin-metadata-rules/store/metadata-rules.selectors.d.ts +7 -0
  93. package/admin/components/admin-metadata-user/admin-metadata-user.component.d.ts +25 -0
  94. package/admin/components/admin-metadata-user/admin-user-edit-metadata/admin-user-edit-metadata.component.d.ts +17 -0
  95. package/admin/components/admin-metadata-user/admin-user-new-metadata/admin-user-new-metadata.component.d.ts +10 -0
  96. package/admin/components/admin-metadata-user/admin-user-select-metadata/admin-user-select-metadata.component.d.ts +23 -0
  97. package/admin/components/admin-metadata-user/store/admin-metadata-user.action.d.ts +84 -0
  98. package/admin/components/admin-metadata-user/store/admin-metadata-user.effects.d.ts +48 -0
  99. package/admin/components/admin-metadata-user/store/admin-metadata-user.reducer.d.ts +11 -0
  100. package/admin/components/admin-metadata-user/store/admin-metadata-user.selector.d.ts +14 -0
  101. package/admin/components/admin-predicates/admin-predicates-form/admin-predicates-form.component.d.ts +34 -0
  102. package/admin/components/admin-predicates/admin-predicates-new/admin-predicates-new.component.d.ts +5 -0
  103. package/admin/components/admin-predicates/admin-predicates-select/admin-predicates-select.component.d.ts +22 -0
  104. package/admin/components/admin-predicates/admin-predicates-update/admin-predicates-update.component.d.ts +16 -0
  105. package/admin/components/admin-predicates/admin-predicates.component.d.ts +19 -0
  106. package/admin/components/admin-predicates/store/predicates.actions.d.ts +46 -0
  107. package/admin/components/admin-predicates/store/predicates.effects.d.ts +33 -0
  108. package/admin/components/admin-predicates/store/predicates.reducer.d.ts +9 -0
  109. package/admin/components/admin-predicates/store/predicates.selectors.d.ts +8 -0
  110. package/admin/components/admin-relation-types/admin-relation-types-modal/admin-relation-types-modal.component.d.ts +32 -0
  111. package/admin/components/admin-relation-types/admin-relation-types-select/admin-relation-types-select.component.d.ts +19 -0
  112. package/admin/components/admin-relation-types/admin-relation-types.component.d.ts +15 -0
  113. package/admin/components/admin-title/admin-title.component.d.ts +15 -0
  114. package/admin/components/admin-user/admin-user-select/admin-user-select.component.d.ts +35 -0
  115. package/admin/components/admin-user/admin-user.component.d.ts +18 -0
  116. package/admin/components/admin-user/store/admin-user.action.d.ts +76 -0
  117. package/admin/components/admin-user/store/admin-user.effects.d.ts +43 -0
  118. package/admin/components/admin-user/store/admin-user.reducer.d.ts +10 -0
  119. package/admin/components/admin-user/store/admin-user.selector.d.ts +8 -0
  120. package/admin/components/admin.component.d.ts +17 -0
  121. package/admin/i18n/en.translations.d.ts +327 -0
  122. package/admin/i18n/fr.translations.d.ts +328 -0
  123. package/admin/index.d.ts +5 -0
  124. package/admin/public-api.d.ts +1 -0
  125. package/admin/store/admin.actions.d.ts +41 -0
  126. package/admin/store/admin.effects.d.ts +34 -0
  127. package/admin/store/admin.reducer.d.ts +13 -0
  128. package/admin/store/admin.selectors.d.ts +13 -0
  129. package/admin/store/admin.service.d.ts +45 -0
  130. package/assets/backgrounds/chart.svg +684 -0
  131. package/assets/backgrounds/detail.svg +27 -0
  132. package/assets/backgrounds/graph.svg +1775 -0
  133. package/assets/backgrounds/iframe.svg +799 -0
  134. package/assets/backgrounds/img_processus.png +0 -0
  135. package/assets/backgrounds/map.svg +154 -0
  136. package/assets/backgrounds/placeholder.png +0 -0
  137. package/assets/backgrounds/table.svg +48 -0
  138. package/assets/backgrounds/template.svg +26 -0
  139. package/assets/backgrounds/tile.svg +26 -0
  140. package/assets/fonts/ubuntu-latin-bold.woff2 +0 -0
  141. package/assets/fonts/ubuntu-latin-medium.woff2 +0 -0
  142. package/assets/fonts/ubuntu-latin-regular.woff2 +0 -0
  143. package/assets/svgs/add.svg +4 -0
  144. package/assets/svgs/add_column.svg +5 -0
  145. package/assets/svgs/admin-fill.svg +5 -0
  146. package/assets/svgs/admin.svg +8 -0
  147. package/assets/svgs/ads_click.svg +5 -0
  148. package/assets/svgs/apps.svg +5 -0
  149. package/assets/svgs/area_chart.svg +19 -0
  150. package/assets/svgs/arrow_back.svg +4 -0
  151. package/assets/svgs/arrow_right.svg +6 -0
  152. package/assets/svgs/auto_graph.svg +12 -0
  153. package/assets/svgs/bar_chart.svg +18 -0
  154. package/assets/svgs/bubble-chart-line.svg +18 -0
  155. package/assets/svgs/bulles.svg +5 -0
  156. package/assets/svgs/chart.svg +5 -0
  157. package/assets/svgs/chat-settings.svg +5 -0
  158. package/assets/svgs/check.svg +4 -0
  159. package/assets/svgs/checkbox-circle.svg +6 -0
  160. package/assets/svgs/chevron_bottom.svg +6 -0
  161. package/assets/svgs/chevron_bottom_rounded.svg +5 -0
  162. package/assets/svgs/chevron_left.svg +6 -0
  163. package/assets/svgs/chevron_right.svg +6 -0
  164. package/assets/svgs/chevron_top.svg +3 -0
  165. package/assets/svgs/chevron_top_rounded.svg +5 -0
  166. package/assets/svgs/click.svg +4 -0
  167. package/assets/svgs/close.svg +5 -0
  168. package/assets/svgs/control.svg +5 -0
  169. package/assets/svgs/control_point.svg +5 -0
  170. package/assets/svgs/danger.svg +5 -0
  171. package/assets/svgs/data.svg +5 -0
  172. package/assets/svgs/data_usage.svg +5 -0
  173. package/assets/svgs/dataset.svg +0 -0
  174. package/assets/svgs/default-restitution.svg +6 -0
  175. package/assets/svgs/default.svg +28 -0
  176. package/assets/svgs/delete.svg +5 -0
  177. package/assets/svgs/detail.svg +5 -0
  178. package/assets/svgs/donut_large.svg +14 -0
  179. package/assets/svgs/download.svg +4 -0
  180. package/assets/svgs/drag_indicator.svg +5 -0
  181. package/assets/svgs/edit.svg +5 -0
  182. package/assets/svgs/edit_off.svg +5 -0
  183. package/assets/svgs/epingle.svg +6 -0
  184. package/assets/svgs/event-fill.svg +5 -0
  185. package/assets/svgs/event.svg +5 -0
  186. package/assets/svgs/exposure_neg_1.svg +4 -0
  187. package/assets/svgs/exposure_plus_1.svg +4 -0
  188. package/assets/svgs/eye-arrow-down.svg +14 -0
  189. package/assets/svgs/eye-arrow-up.svg +14 -0
  190. package/assets/svgs/eye.svg +5 -0
  191. package/assets/svgs/file_download.svg +5 -0
  192. package/assets/svgs/file_upload.svg +5 -0
  193. package/assets/svgs/fleche_bas.svg +4 -0
  194. package/assets/svgs/fleche_haut.svg +4 -0
  195. package/assets/svgs/frequentation.svg +4 -0
  196. package/assets/svgs/fullscreen.svg +4 -0
  197. package/assets/svgs/globe.svg +5 -0
  198. package/assets/svgs/graph.svg +20 -0
  199. package/assets/svgs/grid_1_2_horizontal.svg +4 -0
  200. package/assets/svgs/grid_1_2_vertical.svg +4 -0
  201. package/assets/svgs/grid_1_3_horizontal.svg +5 -0
  202. package/assets/svgs/grid_1_3_vertical.svg +5 -0
  203. package/assets/svgs/grid_1_4.svg +6 -0
  204. package/assets/svgs/grid_2_gauche_1_droite.svg +5 -0
  205. package/assets/svgs/grid_composition_libre.svg +7 -0
  206. package/assets/svgs/grid_full.svg +3 -0
  207. package/assets/svgs/grid_view.svg +4 -0
  208. package/assets/svgs/heart-add-line.svg +5 -0
  209. package/assets/svgs/heart-fill.svg +5 -0
  210. package/assets/svgs/highlight_alt.svg +5 -0
  211. package/assets/svgs/history-line.svg +5 -0
  212. package/assets/svgs/home-fill.svg +5 -0
  213. package/assets/svgs/home-fill_old.svg +4 -0
  214. package/assets/svgs/home-line.svg +12 -0
  215. package/assets/svgs/home-line_old.svg +5 -0
  216. package/assets/svgs/home.svg +12 -0
  217. package/assets/svgs/iframe.svg +11 -0
  218. package/assets/svgs/image.svg +6 -0
  219. package/assets/svgs/info.svg +8 -0
  220. package/assets/svgs/information-point.svg +5 -0
  221. package/assets/svgs/lasso.svg +5 -0
  222. package/assets/svgs/launch.svg +5 -0
  223. package/assets/svgs/legend.svg +4 -0
  224. package/assets/svgs/library_add.svg +5 -0
  225. package/assets/svgs/links_line.svg +5 -0
  226. package/assets/svgs/map.svg +8 -0
  227. package/assets/svgs/marqueur.svg +5 -0
  228. package/assets/svgs/mode_clic.svg +5 -0
  229. package/assets/svgs/more_horiz.svg +5 -0
  230. package/assets/svgs/more_vertical.svg +5 -0
  231. package/assets/svgs/move.svg +5 -0
  232. package/assets/svgs/noise_aware.svg +12 -0
  233. package/assets/svgs/north_east.svg +6 -0
  234. package/assets/svgs/north_west.svg +6 -0
  235. package/assets/svgs/notification-4-line.svg +5 -0
  236. package/assets/svgs/notification.svg +5 -0
  237. package/assets/svgs/notifications.svg +5 -0
  238. package/assets/svgs/picture-in-picture.svg +7 -0
  239. package/assets/svgs/place.svg +5 -0
  240. package/assets/svgs/post_add.svg +8 -0
  241. package/assets/svgs/presentation-fill.svg +4 -0
  242. package/assets/svgs/presentation.svg +5 -0
  243. package/assets/svgs/private.svg +10 -0
  244. package/assets/svgs/pry_recherche.svg +81 -0
  245. package/assets/svgs/pry_recherche_pas_de_resultat.svg +81 -0
  246. package/assets/svgs/public.svg +16 -0
  247. package/assets/svgs/published_with_changes.svg +5 -0
  248. package/assets/svgs/question-line.svg +5 -0
  249. package/assets/svgs/radar_chart.svg +11 -0
  250. package/assets/svgs/rectangle.svg +5 -0
  251. package/assets/svgs/remove.svg +4 -0
  252. package/assets/svgs/renamed.svg +6 -0
  253. package/assets/svgs/reset.svg +4 -0
  254. package/assets/svgs/resize.svg +4 -0
  255. package/assets/svgs/restitution-fill.svg +11 -0
  256. package/assets/svgs/restitution.svg +15 -0
  257. package/assets/svgs/restricted.svg +18 -0
  258. package/assets/svgs/rotate-lock-line.svg +5 -0
  259. package/assets/svgs/save-fill.svg +4 -0
  260. package/assets/svgs/save-line.svg +5 -0
  261. package/assets/svgs/screenshot-fill.svg +5 -0
  262. package/assets/svgs/search-criteria.svg +5 -0
  263. package/assets/svgs/search-fill.svg +5 -0
  264. package/assets/svgs/search-line.svg +5 -0
  265. package/assets/svgs/search.svg +4 -0
  266. package/assets/svgs/settings_applications.svg +12 -0
  267. package/assets/svgs/share.svg +5 -0
  268. package/assets/svgs/share_location.svg +20 -0
  269. package/assets/svgs/shield-lock.svg +7 -0
  270. package/assets/svgs/show_chart.svg +12 -0
  271. package/assets/svgs/south_east.svg +6 -0
  272. package/assets/svgs/south_west.svg +6 -0
  273. package/assets/svgs/stack-fill.svg +5 -0
  274. package/assets/svgs/stack-line.svg +5 -0
  275. package/assets/svgs/stop.svg +5 -0
  276. package/assets/svgs/supervision.svg +13 -0
  277. package/assets/svgs/svg.svg +5 -0
  278. package/assets/svgs/synchro.svg +5 -0
  279. package/assets/svgs/table.svg +5 -0
  280. package/assets/svgs/table_chart.svg +18 -0
  281. package/assets/svgs/tags.svg +11 -0
  282. package/assets/svgs/tile.svg +12 -0
  283. package/assets/svgs/toc.svg +20 -0
  284. package/assets/svgs/transformation-fill.svg +21 -0
  285. package/assets/svgs/transformation.svg +20 -0
  286. package/assets/svgs/tune.svg +5 -0
  287. package/assets/svgs/unpublished.svg +5 -0
  288. package/assets/svgs/upload.svg +4 -0
  289. package/assets/svgs/user.svg +5 -0
  290. package/assets/svgs/warning-triangle.svg +5 -0
  291. package/assets/svgs/warning.svg +5 -0
  292. package/assets/svgs/zoom.svg +6 -0
  293. package/components/card/card.component.d.ts +69 -0
  294. package/components/card/card.module.d.ts +10 -0
  295. package/components/card/index.d.ts +5 -0
  296. package/components/card/public-api.d.ts +2 -0
  297. package/components/checkbox/checkbox.component.d.ts +20 -0
  298. package/components/checkbox/checkbox.module.d.ts +9 -0
  299. package/components/checkbox/index.d.ts +5 -0
  300. package/components/checkbox/public-api.d.ts +2 -0
  301. package/components/expand-panel/expand-panel.component.d.ts +14 -0
  302. package/components/expand-panel/expand-panel.module.d.ts +7 -0
  303. package/components/expand-panel/index.d.ts +5 -0
  304. package/components/expand-panel/public-api.d.ts +2 -0
  305. package/components/filter/filter.module.d.ts +7 -0
  306. package/components/filter/filter.pipe.d.ts +7 -0
  307. package/components/filter/index.d.ts +5 -0
  308. package/components/filter/public-api.d.ts +2 -0
  309. package/components/sinceDate/index.d.ts +5 -0
  310. package/components/sinceDate/public-api.d.ts +2 -0
  311. package/components/sinceDate/sinceDate.module.d.ts +7 -0
  312. package/components/sinceDate/sinceDate.pipe.d.ts +11 -0
  313. package/components/stepper/index.d.ts +5 -0
  314. package/components/stepper/public-api.d.ts +4 -0
  315. package/components/stepper/step/step.component.d.ts +15 -0
  316. package/components/stepper/step-title.directive.d.ts +8 -0
  317. package/components/stepper/stepper.component.d.ts +28 -0
  318. package/components/stepper/stepper.module.d.ts +10 -0
  319. package/dataset/components/dataset-card/dataset-card.component.d.ts +10 -0
  320. package/dataset/components/dataset-detail/dataset-detail.component.d.ts +29 -0
  321. package/dataset/components/dataset.component.d.ts +17 -0
  322. package/dataset/dataset.module.d.ts +17 -0
  323. package/dataset/i18n/en.translations.d.ts +33 -0
  324. package/dataset/i18n/fr.translations.d.ts +38 -0
  325. package/dataset/index.d.ts +5 -0
  326. package/dataset/public-api.d.ts +5 -0
  327. package/dataset/style/_o-pry-dataset-card.scss +29 -0
  328. package/dataset/style/_o-pry-dataset-detail.scss +55 -0
  329. package/dataset/style/_o-pry-dataset.scss +31 -0
  330. package/dataset/style/css.component.d.ts +5 -0
  331. package/esm2022/admin/admin-routing.module.mjs +567 -0
  332. package/esm2022/admin/admin.module.mjs +366 -0
  333. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-edit/admin-abac-rules-edit.component.mjs +50 -0
  334. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-form/admin-abac-rules-form.component.mjs +57 -0
  335. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-new/admin-abac-rules-new.component.mjs +34 -0
  336. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-view/admin-abac-rules-view.component.mjs +54 -0
  337. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules.component.mjs +47 -0
  338. package/esm2022/admin/components/admin-abac-rules/components/attribute-condition/attribute-condition.component.mjs +81 -0
  339. package/esm2022/admin/components/admin-abac-rules/components/composed-condition/composed-condition.component.mjs +66 -0
  340. package/esm2022/admin/components/admin-abac-rules/components/metadata-condition/metadata-condition.component.mjs +69 -0
  341. package/esm2022/admin/components/admin-abac-rules/components/select-attribute/select-attribute.component.mjs +29 -0
  342. package/esm2022/admin/components/admin-abac-rules/components/select-metadata/select-metadata.component.mjs +24 -0
  343. package/esm2022/admin/components/admin-abac-rules/store/abac-rules.actions.mjs +28 -0
  344. package/esm2022/admin/components/admin-abac-rules/store/abac-rules.effects.mjs +78 -0
  345. package/esm2022/admin/components/admin-abac-rules/store/abac-rules.model.mjs +20 -0
  346. package/esm2022/admin/components/admin-abac-rules/store/abac-rules.reducer.mjs +110 -0
  347. package/esm2022/admin/components/admin-abac-rules/store/abac-rules.selectors.mjs +29 -0
  348. package/esm2022/admin/components/admin-abac-rules/store/abac-rules.service.mjs +161 -0
  349. package/esm2022/admin/components/admin-classes/admin-classes-customize/admin-classes-customize.component.mjs +92 -0
  350. package/esm2022/admin/components/admin-classes/admin-classes-customize/symbol/admin-classes-customize-symbol.component.mjs +146 -0
  351. package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +127 -0
  352. package/esm2022/admin/components/admin-classes/admin-classes-edit/admin-classes-edit.component.mjs +26 -0
  353. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +91 -0
  354. package/esm2022/admin/components/admin-classes/admin-classes-new/admin-classes-new.component.mjs +13 -0
  355. package/esm2022/admin/components/admin-classes/admin-classes-select/admin-classes-select.component.mjs +107 -0
  356. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-edit/admin-attributes-edit.component.mjs +30 -0
  357. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +151 -0
  358. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-new/admin-attributes-new.component.mjs +30 -0
  359. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-select/admin-attributes-select.component.mjs +81 -0
  360. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-classes-view.component.mjs +183 -0
  361. package/esm2022/admin/components/admin-classes/admin-classes.component.mjs +70 -0
  362. package/esm2022/admin/components/admin-classes/store/admin-class.actions.mjs +32 -0
  363. package/esm2022/admin/components/admin-classes/store/admin-class.effects.mjs +139 -0
  364. package/esm2022/admin/components/admin-classes/store/admin-class.reducer.mjs +43 -0
  365. package/esm2022/admin/components/admin-classes/store/admin-class.selectors.mjs +23 -0
  366. package/esm2022/admin/components/admin-dataset/admin-dataset.component.mjs +79 -0
  367. package/esm2022/admin/components/admin-dataset/admin-edit-dataset/admin-edit-dataset.component.mjs +26 -0
  368. package/esm2022/admin/components/admin-dataset/admin-new-dataset/admin-new-dataset.component.mjs +13 -0
  369. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +155 -0
  370. package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +98 -0
  371. package/esm2022/admin/components/admin-dataset/store/admin-dataset.actions.mjs +14 -0
  372. package/esm2022/admin/components/admin-dataset/store/admin-dataset.effects.mjs +34 -0
  373. package/esm2022/admin/components/admin-dataset/store/admin-dataset.reducer.mjs +11 -0
  374. package/esm2022/admin/components/admin-dataset/store/admin-dataset.selector.mjs +9 -0
  375. package/esm2022/admin/components/admin-environment/admin-environment-form/admin-environment-form.component.mjs +125 -0
  376. package/esm2022/admin/components/admin-environment/admin-environment-new/admin-environment-new.component.mjs +13 -0
  377. package/esm2022/admin/components/admin-environment/admin-environment-select/admin-environment-select.component.mjs +94 -0
  378. package/esm2022/admin/components/admin-environment/admin-environment-update/admin-environment-update.component.mjs +26 -0
  379. package/esm2022/admin/components/admin-environment/admin-environment.component.mjs +51 -0
  380. package/esm2022/admin/components/admin-environment/store/environment.actions.mjs +19 -0
  381. package/esm2022/admin/components/admin-environment/store/environment.effects.mjs +47 -0
  382. package/esm2022/admin/components/admin-environment/store/environment.reducer.mjs +39 -0
  383. package/esm2022/admin/components/admin-environment/store/environment.selectors.mjs +15 -0
  384. package/esm2022/admin/components/admin-fields/admin-fields-edit/admin-fields-edit.component.mjs +25 -0
  385. package/esm2022/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.mjs +85 -0
  386. package/esm2022/admin/components/admin-fields/admin-fields-new/admin-fields-new.component.mjs +13 -0
  387. package/esm2022/admin/components/admin-fields/admin-fields-select/admin-fields-select.component.mjs +96 -0
  388. package/esm2022/admin/components/admin-fields/admin-fields.component.mjs +52 -0
  389. package/esm2022/admin/components/admin-fields/store/admin-fields.model.mjs +2 -0
  390. package/esm2022/admin/components/admin-fields/store/fields.actions.mjs +14 -0
  391. package/esm2022/admin/components/admin-fields/store/fields.effects.mjs +54 -0
  392. package/esm2022/admin/components/admin-fields/store/fields.reducer.mjs +14 -0
  393. package/esm2022/admin/components/admin-fields/store/fields.selectors.mjs +13 -0
  394. package/esm2022/admin/components/admin-layout/admin-layout.component.mjs +81 -0
  395. package/esm2022/admin/components/admin-links/admin-links-new/admin-links-new.component.mjs +92 -0
  396. package/esm2022/admin/components/admin-links/admin-links.component.mjs +60 -0
  397. package/esm2022/admin/components/admin-links/store/links.actions.mjs +10 -0
  398. package/esm2022/admin/components/admin-links/store/links.effects.mjs +27 -0
  399. package/esm2022/admin/components/admin-links/store/links.reducer.mjs +19 -0
  400. package/esm2022/admin/components/admin-links/store/links.selectors.mjs +9 -0
  401. package/esm2022/admin/components/admin-menu/admin-menu.component.mjs +38 -0
  402. package/esm2022/admin/components/admin-metadata/admin-edit-metadata/admin-edit-metadata.component.mjs +32 -0
  403. package/esm2022/admin/components/admin-metadata/admin-metadata.component.mjs +65 -0
  404. package/esm2022/admin/components/admin-metadata/admin-new-metadata/admin-new-metadata.component.mjs +21 -0
  405. package/esm2022/admin/components/admin-metadata/admin-select-metadata/admin-select-metadata.component.mjs +77 -0
  406. package/esm2022/admin/components/admin-metadata/shared/form-metadata/form-metadata.component.mjs +130 -0
  407. package/esm2022/admin/components/admin-metadata/shared/list-metadata/list-metadata.module.mjs +21 -0
  408. package/esm2022/admin/components/admin-metadata/shared/list-metadata/pry-list-metadata.component.mjs +90 -0
  409. package/esm2022/admin/components/admin-metadata/store/metadata.action.mjs +19 -0
  410. package/esm2022/admin/components/admin-metadata/store/metadata.effects.mjs +33 -0
  411. package/esm2022/admin/components/admin-metadata/store/metadata.reducer.mjs +35 -0
  412. package/esm2022/admin/components/admin-metadata/store/metadata.selector.mjs +17 -0
  413. package/esm2022/admin/components/admin-metadata-rules/admin-edit-metadata-rules/admin-edit-metadata-rules.component.mjs +22 -0
  414. package/esm2022/admin/components/admin-metadata-rules/admin-metadata-rules.component.mjs +86 -0
  415. package/esm2022/admin/components/admin-metadata-rules/admin-new-metadata-rules/admin-new-metadata-rules.component.mjs +13 -0
  416. package/esm2022/admin/components/admin-metadata-rules/admin-select-metadata-rules/admin-select-metadata-rules.component.mjs +86 -0
  417. package/esm2022/admin/components/admin-metadata-rules/shared/admin-form-metadata-rules/admin-form-metadata-rules.component.mjs +133 -0
  418. package/esm2022/admin/components/admin-metadata-rules/store/metadata-rules.actions.mjs +23 -0
  419. package/esm2022/admin/components/admin-metadata-rules/store/metadata-rules.effects.mjs +51 -0
  420. package/esm2022/admin/components/admin-metadata-rules/store/metadata-rules.reducer.mjs +28 -0
  421. package/esm2022/admin/components/admin-metadata-rules/store/metadata-rules.selectors.mjs +13 -0
  422. package/esm2022/admin/components/admin-metadata-user/admin-metadata-user.component.mjs +65 -0
  423. package/esm2022/admin/components/admin-metadata-user/admin-user-edit-metadata/admin-user-edit-metadata.component.mjs +33 -0
  424. package/esm2022/admin/components/admin-metadata-user/admin-user-new-metadata/admin-user-new-metadata.component.mjs +21 -0
  425. package/esm2022/admin/components/admin-metadata-user/admin-user-select-metadata/admin-user-select-metadata.component.mjs +77 -0
  426. package/esm2022/admin/components/admin-metadata-user/store/admin-metadata-user.action.mjs +23 -0
  427. package/esm2022/admin/components/admin-metadata-user/store/admin-metadata-user.effects.mjs +38 -0
  428. package/esm2022/admin/components/admin-metadata-user/store/admin-metadata-user.reducer.mjs +45 -0
  429. package/esm2022/admin/components/admin-metadata-user/store/admin-metadata-user.selector.mjs +17 -0
  430. package/esm2022/admin/components/admin-predicates/admin-predicates-form/admin-predicates-form.component.mjs +102 -0
  431. package/esm2022/admin/components/admin-predicates/admin-predicates-new/admin-predicates-new.component.mjs +13 -0
  432. package/esm2022/admin/components/admin-predicates/admin-predicates-select/admin-predicates-select.component.mjs +69 -0
  433. package/esm2022/admin/components/admin-predicates/admin-predicates-update/admin-predicates-update.component.mjs +27 -0
  434. package/esm2022/admin/components/admin-predicates/admin-predicates.component.mjs +46 -0
  435. package/esm2022/admin/components/admin-predicates/store/predicates.actions.mjs +13 -0
  436. package/esm2022/admin/components/admin-predicates/store/predicates.effects.mjs +28 -0
  437. package/esm2022/admin/components/admin-predicates/store/predicates.reducer.mjs +40 -0
  438. package/esm2022/admin/components/admin-predicates/store/predicates.selectors.mjs +15 -0
  439. package/esm2022/admin/components/admin-relation-types/admin-relation-types-modal/admin-relation-types-modal.component.mjs +101 -0
  440. package/esm2022/admin/components/admin-relation-types/admin-relation-types-select/admin-relation-types-select.component.mjs +63 -0
  441. package/esm2022/admin/components/admin-relation-types/admin-relation-types.component.mjs +42 -0
  442. package/esm2022/admin/components/admin-title/admin-title.component.mjs +29 -0
  443. package/esm2022/admin/components/admin-user/admin-user-select/admin-user-select.component.mjs +116 -0
  444. package/esm2022/admin/components/admin-user/admin-user.component.mjs +34 -0
  445. package/esm2022/admin/components/admin-user/store/admin-user.action.mjs +21 -0
  446. package/esm2022/admin/components/admin-user/store/admin-user.effects.mjs +38 -0
  447. package/esm2022/admin/components/admin-user/store/admin-user.reducer.mjs +27 -0
  448. package/esm2022/admin/components/admin-user/store/admin-user.selector.mjs +15 -0
  449. package/esm2022/admin/components/admin.component.mjs +29 -0
  450. package/esm2022/admin/i18n/en.translations.mjs +328 -0
  451. package/esm2022/admin/i18n/fr.translations.mjs +329 -0
  452. package/esm2022/admin/provoly-dashboard-admin.mjs +5 -0
  453. package/esm2022/admin/public-api.mjs +2 -0
  454. package/esm2022/admin/store/admin.actions.mjs +12 -0
  455. package/esm2022/admin/store/admin.effects.mjs +66 -0
  456. package/esm2022/admin/store/admin.reducer.mjs +52 -0
  457. package/esm2022/admin/store/admin.selectors.mjs +32 -0
  458. package/esm2022/admin/store/admin.service.mjs +181 -0
  459. package/esm2022/components/card/card.component.mjs +270 -0
  460. package/esm2022/components/card/card.module.mjs +38 -0
  461. package/esm2022/components/card/provoly-dashboard-components-card.mjs +5 -0
  462. package/esm2022/components/card/public-api.mjs +3 -0
  463. package/esm2022/components/checkbox/checkbox.component.mjs +58 -0
  464. package/esm2022/components/checkbox/checkbox.module.mjs +20 -0
  465. package/esm2022/components/checkbox/provoly-dashboard-components-checkbox.mjs +5 -0
  466. package/esm2022/components/checkbox/public-api.mjs +3 -0
  467. package/esm2022/components/expand-panel/expand-panel.component.mjs +65 -0
  468. package/esm2022/components/expand-panel/expand-panel.module.mjs +19 -0
  469. package/esm2022/components/expand-panel/provoly-dashboard-components-expand-panel.mjs +5 -0
  470. package/esm2022/components/expand-panel/public-api.mjs +3 -0
  471. package/esm2022/components/filter/filter.module.mjs +16 -0
  472. package/esm2022/components/filter/filter.pipe.mjs +16 -0
  473. package/esm2022/components/filter/provoly-dashboard-components-filter.mjs +5 -0
  474. package/esm2022/components/filter/public-api.mjs +3 -0
  475. package/esm2022/components/sinceDate/provoly-dashboard-components-sinceDate.mjs +5 -0
  476. package/esm2022/components/sinceDate/public-api.mjs +3 -0
  477. package/esm2022/components/sinceDate/sinceDate.module.mjs +16 -0
  478. package/esm2022/components/sinceDate/sinceDate.pipe.mjs +40 -0
  479. package/esm2022/components/stepper/provoly-dashboard-components-stepper.mjs +5 -0
  480. package/esm2022/components/stepper/public-api.mjs +5 -0
  481. package/esm2022/components/stepper/step/step.component.mjs +36 -0
  482. package/esm2022/components/stepper/step-title.directive.mjs +14 -0
  483. package/esm2022/components/stepper/stepper.component.mjs +109 -0
  484. package/esm2022/components/stepper/stepper.module.mjs +20 -0
  485. package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +24 -0
  486. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +86 -0
  487. package/esm2022/dataset/components/dataset.component.mjs +35 -0
  488. package/esm2022/dataset/dataset.module.mjs +59 -0
  489. package/esm2022/dataset/i18n/en.translations.mjs +34 -0
  490. package/esm2022/dataset/i18n/fr.translations.mjs +39 -0
  491. package/esm2022/dataset/provoly-dashboard-dataset.mjs +5 -0
  492. package/esm2022/dataset/public-api.mjs +6 -0
  493. package/esm2022/dataset/style/css.component.mjs +11 -0
  494. package/esm2022/filters/date/date-filter.component.mjs +50 -0
  495. package/esm2022/filters/date/date-filter.module.mjs +25 -0
  496. package/esm2022/filters/date/provoly-dashboard-filters-date.mjs +5 -0
  497. package/esm2022/filters/date/public-api.mjs +4 -0
  498. package/esm2022/filters/date/style/css.component.mjs +11 -0
  499. package/esm2022/filters/list/list-filter.component.mjs +31 -0
  500. package/esm2022/filters/list/list-filter.module.mjs +24 -0
  501. package/esm2022/filters/list/provoly-dashboard-filters-list.mjs +5 -0
  502. package/esm2022/filters/list/public-api.mjs +4 -0
  503. package/esm2022/filters/list/style/css.component.mjs +11 -0
  504. package/esm2022/filters/number/number-filter.component.mjs +26 -0
  505. package/esm2022/filters/number/number-filter.module.mjs +24 -0
  506. package/esm2022/filters/number/provoly-dashboard-filters-number.mjs +5 -0
  507. package/esm2022/filters/number/public-api.mjs +3 -0
  508. package/esm2022/filters/text/provoly-dashboard-filters-text.mjs +5 -0
  509. package/esm2022/filters/text/public-api.mjs +3 -0
  510. package/esm2022/filters/text/text-filter.component.mjs +29 -0
  511. package/esm2022/filters/text/text-filter.module.mjs +24 -0
  512. package/esm2022/import/components/import.component.mjs +72 -0
  513. package/esm2022/import/i18n/en.translations.mjs +28 -0
  514. package/esm2022/import/i18n/fr.translations.mjs +28 -0
  515. package/esm2022/import/import-routing.module.mjs +32 -0
  516. package/esm2022/import/import.module.mjs +61 -0
  517. package/esm2022/import/provoly-dashboard-import.mjs +5 -0
  518. package/esm2022/import/public-api.mjs +3 -0
  519. package/esm2022/import/store/import.actions.mjs +7 -0
  520. package/esm2022/import/store/import.effects.mjs +32 -0
  521. package/esm2022/import/store/import.reducer.mjs +23 -0
  522. package/esm2022/import/store/import.selectors.mjs +10 -0
  523. package/esm2022/import/store/import.service.mjs +29 -0
  524. package/esm2022/import/style/css.component.mjs +11 -0
  525. package/esm2022/lib/core/access/access.directive.mjs +45 -0
  526. package/esm2022/lib/core/access/access.guard.mjs +21 -0
  527. package/esm2022/lib/core/access/access.model.mjs +2 -0
  528. package/esm2022/lib/core/access/access.service.mjs +20 -0
  529. package/esm2022/lib/core/access/access.utils.mjs +83 -0
  530. package/esm2022/lib/core/components/base-layout/base-layout.component.mjs +44 -0
  531. package/esm2022/lib/core/components/base-menu/base-menu.component.mjs +29 -0
  532. package/esm2022/lib/core/components/base-toolbox/base-toolbox-action.interface.mjs +2 -0
  533. package/esm2022/lib/core/components/base-toolbox/base-toolbox.component.mjs +23 -0
  534. package/esm2022/lib/core/components/base-toolbox-action/base-toolbox-action.component.mjs +64 -0
  535. package/esm2022/lib/core/components/date-picker/date-picker.component.mjs +206 -0
  536. package/esm2022/lib/core/components/date-picker/date-picker.module.mjs +36 -0
  537. package/esm2022/lib/core/components/date-picker/date-range-highlight.pipe.mjs +42 -0
  538. package/esm2022/lib/core/components/date-picker/time-picker/loop-scroll-column/loop-scroll-column.component.mjs +92 -0
  539. package/esm2022/lib/core/components/date-picker/time-picker/time-picker.component.mjs +81 -0
  540. package/esm2022/lib/core/components/edit-input/edit-input.component.mjs +60 -0
  541. package/esm2022/lib/core/components/edit-input/edit-input.module.mjs +22 -0
  542. package/esm2022/lib/core/components/get-secured-image/get-secured-image.pipe.mjs +25 -0
  543. package/esm2022/lib/core/components/hidden-when-overlay/hidden-when-overlay.directive.mjs +30 -0
  544. package/esm2022/lib/core/components/hidden-when-overlay/hidden-when-overlay.module.mjs +20 -0
  545. package/esm2022/lib/core/components/icon/icon.component.mjs +92 -0
  546. package/esm2022/lib/core/components/icon/icon.module.mjs +19 -0
  547. package/esm2022/lib/core/components/modal/modal.component.mjs +34 -0
  548. package/esm2022/lib/core/components/modal/pry-modal.module.mjs +22 -0
  549. package/esm2022/lib/core/components/modalStatus/modalStatus.component.mjs +35 -0
  550. package/esm2022/lib/core/components/modalStatus/modalStatus.module.mjs +28 -0
  551. package/esm2022/lib/core/components/nq-color-selector/nq-color-selector.component.mjs +77 -0
  552. package/esm2022/lib/core/components/overlay/dialog-confirm.component.mjs +57 -0
  553. package/esm2022/lib/core/components/overlay/dialog-ref.mjs +15 -0
  554. package/esm2022/lib/core/components/overlay/dialog.service.mjs +71 -0
  555. package/esm2022/lib/core/components/overlay/overlay.constantes.mjs +9 -0
  556. package/esm2022/lib/core/components/overlay/overlay.directive.mjs +125 -0
  557. package/esm2022/lib/core/components/overlay/overlay.module.mjs +23 -0
  558. package/esm2022/lib/core/components/overlay/tooltip.directive.mjs +121 -0
  559. package/esm2022/lib/core/components/range/range.component.mjs +106 -0
  560. package/esm2022/lib/core/components/range/range.module.mjs +19 -0
  561. package/esm2022/lib/core/components/select/select.component.mjs +118 -0
  562. package/esm2022/lib/core/components/select/select.module.mjs +22 -0
  563. package/esm2022/lib/core/components/select-image/select-image.component.mjs +84 -0
  564. package/esm2022/lib/core/components/share/share.component.mjs +83 -0
  565. package/esm2022/lib/core/components/share/share.model.mjs +7 -0
  566. package/esm2022/lib/core/components/share/share.module.mjs +21 -0
  567. package/esm2022/lib/core/components/snackbar/snack.interface.mjs +2 -0
  568. package/esm2022/lib/core/components/snackbar/snackbar/snackbar.component.mjs +65 -0
  569. package/esm2022/lib/core/components/snackbar/snackbar.module.mjs +19 -0
  570. package/esm2022/lib/core/components/snackbar/snackbar.service.mjs +63 -0
  571. package/esm2022/lib/core/components/sort/sort-data.pipe.mjs +54 -0
  572. package/esm2022/lib/core/components/sort/sort-header/sort-header.component.mjs +52 -0
  573. package/esm2022/lib/core/components/sort/sort-header.directive.mjs +13 -0
  574. package/esm2022/lib/core/components/sort/sort-table.directive.mjs +64 -0
  575. package/esm2022/lib/core/components/sort/sort.model.mjs +2 -0
  576. package/esm2022/lib/core/components/sort/sort.module.mjs +23 -0
  577. package/esm2022/lib/core/components/title-presentation/title-presentation.component.mjs +26 -0
  578. package/esm2022/lib/core/components/toggle/toggle.component.mjs +100 -0
  579. package/esm2022/lib/core/components/toggle/toggle.module.mjs +21 -0
  580. package/esm2022/lib/core/components/translate-id/translate-id.pipe.mjs +115 -0
  581. package/esm2022/lib/core/components/translate-item-to-symbol/translate-item-to-symbol.pipe.mjs +27 -0
  582. package/esm2022/lib/core/components/upload/upload.component.mjs +88 -0
  583. package/esm2022/lib/core/core.module.mjs +179 -0
  584. package/esm2022/lib/core/errors/http-error-interceptor.service.mjs +44 -0
  585. package/esm2022/lib/core/i18n/deep-merge.function.mjs +21 -0
  586. package/esm2022/lib/core/i18n/en.translations.mjs +323 -0
  587. package/esm2022/lib/core/i18n/fr.translations.mjs +323 -0
  588. package/esm2022/lib/core/i18n/i18n.module.mjs +16 -0
  589. package/esm2022/lib/core/i18n/i18n.pipe.mjs +42 -0
  590. package/esm2022/lib/core/i18n/i18n.service.mjs +88 -0
  591. package/esm2022/lib/core/model/admin-api.model.mjs +45 -0
  592. package/esm2022/lib/core/model/dataset.interface.mjs +13 -0
  593. package/esm2022/lib/core/model/filter.interface.mjs +2 -0
  594. package/esm2022/lib/core/model/item.interface.mjs +2 -0
  595. package/esm2022/lib/core/model/manifest.interface.mjs +11 -0
  596. package/esm2022/lib/core/model/mimetype-resultset.constant.mjs +2 -0
  597. package/esm2022/lib/core/model/notification-interface.mjs +2 -0
  598. package/esm2022/lib/core/model/public-api.mjs +25 -0
  599. package/esm2022/lib/core/model/relation.interface.mjs +2 -0
  600. package/esm2022/lib/core/model/result-order.interface.mjs +2 -0
  601. package/esm2022/lib/core/model/result-set.interface.mjs +2 -0
  602. package/esm2022/lib/core/model/search-mono-class.model.mjs +17 -0
  603. package/esm2022/lib/core/model/search-multi-class.model.mjs +2 -0
  604. package/esm2022/lib/core/model/tooltip-of-class.interface.mjs +2 -0
  605. package/esm2022/lib/core/model/widget-aggregated-chart-manifest.interface.mjs +26 -0
  606. package/esm2022/lib/core/model/widget-chart-manifest.interface.mjs +63 -0
  607. package/esm2022/lib/core/model/widget-detail-manifest.interface.mjs +2 -0
  608. package/esm2022/lib/core/model/widget-graph-manifest.interface.mjs +2 -0
  609. package/esm2022/lib/core/model/widget-iframe-manifest.interface.mjs +2 -0
  610. package/esm2022/lib/core/model/widget-image-manifest.interface.mjs +2 -0
  611. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +19 -0
  612. package/esm2022/lib/core/model/widget-table-manifest.interface.mjs +2 -0
  613. package/esm2022/lib/core/model/widget-template-manifest.interface.mjs +2 -0
  614. package/esm2022/lib/core/model/widget-tile-manifest.interface.mjs +2 -0
  615. package/esm2022/lib/core/model/widget.interface.mjs +2 -0
  616. package/esm2022/lib/core/public-api.mjs +113 -0
  617. package/esm2022/lib/core/store/category/category.actions.mjs +7 -0
  618. package/esm2022/lib/core/store/category/category.effects.mjs +20 -0
  619. package/esm2022/lib/core/store/category/category.interface.mjs +2 -0
  620. package/esm2022/lib/core/store/category/category.reducer.mjs +19 -0
  621. package/esm2022/lib/core/store/category/category.selectors.mjs +11 -0
  622. package/esm2022/lib/core/store/category/category.service.mjs +26 -0
  623. package/esm2022/lib/core/store/class/class.actions.mjs +13 -0
  624. package/esm2022/lib/core/store/class/class.effects.mjs +26 -0
  625. package/esm2022/lib/core/store/class/class.interface.mjs +2 -0
  626. package/esm2022/lib/core/store/class/class.reducer.mjs +42 -0
  627. package/esm2022/lib/core/store/class/class.selectors.mjs +31 -0
  628. package/esm2022/lib/core/store/class/class.service.mjs +42 -0
  629. package/esm2022/lib/core/store/config/config.actions.mjs +31 -0
  630. package/esm2022/lib/core/store/config/config.effects.mjs +100 -0
  631. package/esm2022/lib/core/store/config/config.reducer.mjs +122 -0
  632. package/esm2022/lib/core/store/config/config.selectors.mjs +82 -0
  633. package/esm2022/lib/core/store/config/config.service.mjs +106 -0
  634. package/esm2022/lib/core/store/config/config.widget.constants.mjs +55 -0
  635. package/esm2022/lib/core/store/config/icon-definitions.interface.mjs +19 -0
  636. package/esm2022/lib/core/store/config/open-map-tiles.service.mjs +37 -0
  637. package/esm2022/lib/core/store/context-menu/context-menu.actions.mjs +6 -0
  638. package/esm2022/lib/core/store/context-menu/context-menu.effects.mjs +14 -0
  639. package/esm2022/lib/core/store/context-menu/context-menu.reducer.mjs +29 -0
  640. package/esm2022/lib/core/store/context-menu/context-menu.selectors.mjs +19 -0
  641. package/esm2022/lib/core/store/data-source/data-source.actions.mjs +53 -0
  642. package/esm2022/lib/core/store/data-source/data-source.effects.mjs +151 -0
  643. package/esm2022/lib/core/store/data-source/data-source.model.mjs +2 -0
  644. package/esm2022/lib/core/store/data-source/data-source.reducer.mjs +87 -0
  645. package/esm2022/lib/core/store/data-source/data-source.selectors.mjs +66 -0
  646. package/esm2022/lib/core/store/data-source/data-source.service.mjs +123 -0
  647. package/esm2022/lib/core/store/data-source/named-query-types.model.mjs +7 -0
  648. package/esm2022/lib/core/store/data-source/named-query-utils.mjs +13 -0
  649. package/esm2022/lib/core/store/field/field.actions.mjs +7 -0
  650. package/esm2022/lib/core/store/field/field.effects.mjs +20 -0
  651. package/esm2022/lib/core/store/field/field.interface.mjs +18 -0
  652. package/esm2022/lib/core/store/field/field.reducer.mjs +19 -0
  653. package/esm2022/lib/core/store/field/field.selectors.mjs +19 -0
  654. package/esm2022/lib/core/store/field/field.service.mjs +36 -0
  655. package/esm2022/lib/core/store/image/image.actions.mjs +10 -0
  656. package/esm2022/lib/core/store/image/image.effects.mjs +21 -0
  657. package/esm2022/lib/core/store/image/image.reducer.mjs +23 -0
  658. package/esm2022/lib/core/store/image/image.selectors.mjs +19 -0
  659. package/esm2022/lib/core/store/image/image.service.mjs +72 -0
  660. package/esm2022/lib/core/store/item/item.actions.mjs +7 -0
  661. package/esm2022/lib/core/store/item/item.effects.mjs +44 -0
  662. package/esm2022/lib/core/store/item/item.service.mjs +50 -0
  663. package/esm2022/lib/core/store/raw/raw.service.mjs +50 -0
  664. package/esm2022/lib/core/store/relation-types/relation-types.actions.mjs +22 -0
  665. package/esm2022/lib/core/store/relation-types/relation-types.effects.mjs +48 -0
  666. package/esm2022/lib/core/store/relation-types/relation-types.interface.mjs +2 -0
  667. package/esm2022/lib/core/store/relation-types/relation-types.reducer.mjs +33 -0
  668. package/esm2022/lib/core/store/relation-types/relation-types.selectors.mjs +18 -0
  669. package/esm2022/lib/core/store/relation-types/relation-types.service.mjs +46 -0
  670. package/esm2022/lib/core/store/search/lat-lon-to-geographic-field-transformation.function.mjs +35 -0
  671. package/esm2022/lib/core/store/search/search.actions.mjs +9 -0
  672. package/esm2022/lib/core/store/search/search.constants.mjs +3 -0
  673. package/esm2022/lib/core/store/search/search.effects.mjs +36 -0
  674. package/esm2022/lib/core/store/search/search.reducer.mjs +25 -0
  675. package/esm2022/lib/core/store/search/search.selectors.mjs +9 -0
  676. package/esm2022/lib/core/store/search/search.service.mjs +96 -0
  677. package/esm2022/lib/core/symbol/symbol.service.mjs +182 -0
  678. package/esm2022/lib/core/toolbox/toolbox-manifest.service.mjs +335 -0
  679. package/esm2022/lib/core/toolbox/toolbox-menu.service.mjs +167 -0
  680. package/esm2022/lib/core/ws/websocket.service.mjs +92 -0
  681. package/esm2022/lib/dashboard/action-bus/bus-action.interface.mjs +2 -0
  682. package/esm2022/lib/dashboard/action-bus/effect/action-bus.effects.mjs +23 -0
  683. package/esm2022/lib/dashboard/action-bus/service/bus.service.mjs +86 -0
  684. package/esm2022/lib/dashboard/action-bus/service/control-message.interface.mjs +2 -0
  685. package/esm2022/lib/dashboard/base-widget.module.mjs +16 -0
  686. package/esm2022/lib/dashboard/components/context-menu/context-menu.component.mjs +131 -0
  687. package/esm2022/lib/dashboard/components/context-menu/object-edition/object-edition.component.mjs +267 -0
  688. package/esm2022/lib/dashboard/components/dashboard.component.mjs +558 -0
  689. package/esm2022/lib/dashboard/components/manifests/manifests.component.mjs +60 -0
  690. package/esm2022/lib/dashboard/components/metadata/metadata.component.mjs +33 -0
  691. package/esm2022/lib/dashboard/components/solve-collisions.function.mjs +88 -0
  692. package/esm2022/lib/dashboard/components/subscriptionner.directive.mjs +17 -0
  693. package/esm2022/lib/dashboard/components/vizualize-raw/vizualize-raw.component.mjs +45 -0
  694. package/esm2022/lib/dashboard/components/widgets/base-widget.component.mjs +62 -0
  695. package/esm2022/lib/dashboard/components/widgets/data-widget.component.mjs +59 -0
  696. package/esm2022/lib/dashboard/components/widgets/header/resultset-size.pipe.mjs +45 -0
  697. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +474 -0
  698. package/esm2022/lib/dashboard/components/widgets/public-api.mjs +10 -0
  699. package/esm2022/lib/dashboard/components/widgets/settings/settings.component.mjs +97 -0
  700. package/esm2022/lib/dashboard/components/widgets/widget-filler/widget-filler.component.mjs +20 -0
  701. package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widget-factory.service.mjs +60 -0
  702. package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widget-instanciator.component.mjs +90 -0
  703. package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widgets-definition.model.mjs +2 -0
  704. package/esm2022/lib/dashboard/components/widgets/widget-placeholder/widget-placeholder.component.mjs +17 -0
  705. package/esm2022/lib/dashboard/components/widgets/widget-placement/widget-placement.utils.mjs +183 -0
  706. package/esm2022/lib/dashboard/dashboard.module.mjs +172 -0
  707. package/esm2022/lib/dashboard/date-utils.mjs +7 -0
  708. package/esm2022/lib/dashboard/filter/base-filter.component.mjs +32 -0
  709. package/esm2022/lib/dashboard/filter/base-filter.module.mjs +15 -0
  710. package/esm2022/lib/dashboard/filter/components/filter-instanciator/filter-instanciator.component.mjs +42 -0
  711. package/esm2022/lib/dashboard/filter/filter-factory.service.mjs +67 -0
  712. package/esm2022/lib/dashboard/filter/filter-loader.function.mjs +21 -0
  713. package/esm2022/lib/dashboard/filter/public-api.mjs +6 -0
  714. package/esm2022/lib/dashboard/guard/default-view.guard.mjs +41 -0
  715. package/esm2022/lib/dashboard/item-utils.mjs +167 -0
  716. package/esm2022/lib/dashboard/public-api.mjs +31 -0
  717. package/esm2022/lib/dashboard/resultset-utils.mjs +30 -0
  718. package/esm2022/lib/dashboard/store/dashboard-init.service.mjs +37 -0
  719. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +76 -0
  720. package/esm2022/lib/dashboard/store/dashboard.contants.mjs +5 -0
  721. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +333 -0
  722. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +590 -0
  723. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +118 -0
  724. package/esm2022/lib/dashboard/store/geocoding.service.mjs +44 -0
  725. package/esm2022/lib/dashboard/store/manifest.service.mjs +95 -0
  726. package/esm2022/lib/dashboard/store/refresh.service.mjs +37 -0
  727. package/esm2022/lib/dashboard/store/title.service.mjs +39 -0
  728. package/esm2022/lib/dashboard/tooltip/base-tooltip.component.mjs +20 -0
  729. package/esm2022/lib/dashboard/tooltip/base-tooltip.module.mjs +16 -0
  730. package/esm2022/lib/dashboard/tooltip/components/default/default.tooltip.component.mjs +15 -0
  731. package/esm2022/lib/dashboard/tooltip/public-api.mjs +6 -0
  732. package/esm2022/lib/dashboard/tooltip/tooltip-factory.service.mjs +77 -0
  733. package/esm2022/lib/dashboard/tooltip/tooltip-loader.function.mjs +22 -0
  734. package/esm2022/lib/dashboard/widget-loader.function.mjs +22 -0
  735. package/esm2022/notification/components/notification/content/notification-content.component.mjs +62 -0
  736. package/esm2022/notification/components/notification/notification.component.mjs +59 -0
  737. package/esm2022/notification/i18n/en.translations.mjs +23 -0
  738. package/esm2022/notification/i18n/fr.translations.mjs +23 -0
  739. package/esm2022/notification/notification.module.mjs +53 -0
  740. package/esm2022/notification/provoly-dashboard-notification.mjs +5 -0
  741. package/esm2022/notification/public-api.mjs +9 -0
  742. package/esm2022/notification/store/notification.actions.mjs +9 -0
  743. package/esm2022/notification/store/notification.effects.mjs +37 -0
  744. package/esm2022/notification/store/notification.reducer.mjs +20 -0
  745. package/esm2022/notification/store/notification.selectors.mjs +9 -0
  746. package/esm2022/notification/store/notification.service.mjs +31 -0
  747. package/esm2022/notification/style/css.component.mjs +11 -0
  748. package/esm2022/pipeline/components/pipeline-details/pipeline-details.component.mjs +103 -0
  749. package/esm2022/pipeline/components/pipeline-editor/graph-serializer.utils.mjs +101 -0
  750. package/esm2022/pipeline/components/pipeline-editor/pipeline-editor.component.mjs +305 -0
  751. package/esm2022/pipeline/components/pipeline-editor/pipeline.interface.mjs +7 -0
  752. package/esm2022/pipeline/components/pipeline-list/pipeline-list.component.mjs +174 -0
  753. package/esm2022/pipeline/components/pipeline-properties-panel.component.mjs +22 -0
  754. package/esm2022/pipeline/factory/pipeline-component-factory.service.mjs +58 -0
  755. package/esm2022/pipeline/i18n/en.translations.mjs +74 -0
  756. package/esm2022/pipeline/i18n/fr.translations.mjs +74 -0
  757. package/esm2022/pipeline/node-class/base-node.class.mjs +44 -0
  758. package/esm2022/pipeline/pipeline.module.mjs +83 -0
  759. package/esm2022/pipeline/provoly-dashboard-pipeline.mjs +5 -0
  760. package/esm2022/pipeline/public-api.mjs +17 -0
  761. package/esm2022/pipeline/store/pipeline.actions.mjs +15 -0
  762. package/esm2022/pipeline/store/pipeline.effects.mjs +71 -0
  763. package/esm2022/pipeline/store/pipeline.reducer.mjs +41 -0
  764. package/esm2022/pipeline/store/pipeline.selectors.mjs +18 -0
  765. package/esm2022/pipeline/store/pipeline.service.mjs +51 -0
  766. package/esm2022/pipeline/style/css.component.mjs +11 -0
  767. package/esm2022/pipeline-components/filter/component/filter.component.mjs +62 -0
  768. package/esm2022/pipeline-components/filter/filter.module.mjs +52 -0
  769. package/esm2022/pipeline-components/filter/i18n/en.translations.mjs +16 -0
  770. package/esm2022/pipeline-components/filter/i18n/fr.translations.mjs +16 -0
  771. package/esm2022/pipeline-components/filter/node-class/filter-node.class.mjs +10 -0
  772. package/esm2022/pipeline-components/filter/provoly-dashboard-pipeline-components-filter.mjs +5 -0
  773. package/esm2022/pipeline-components/filter/public-api.mjs +4 -0
  774. package/esm2022/pipeline-components/input-datasource/component/input-datasource.component.mjs +28 -0
  775. package/esm2022/pipeline-components/input-datasource/i18n/en.translations.mjs +8 -0
  776. package/esm2022/pipeline-components/input-datasource/i18n/fr.translations.mjs +8 -0
  777. package/esm2022/pipeline-components/input-datasource/input-datasource.module.mjs +59 -0
  778. package/esm2022/pipeline-components/input-datasource/node-class/input-datasourse-node.class.mjs +16 -0
  779. package/esm2022/pipeline-components/input-datasource/provoly-dashboard-pipeline-components-input-datasource.mjs +5 -0
  780. package/esm2022/pipeline-components/input-datasource/public-api.mjs +4 -0
  781. package/esm2022/pipeline-components/noop/component/noop.component.mjs +18 -0
  782. package/esm2022/pipeline-components/noop/node-class/noop-node.class.mjs +10 -0
  783. package/esm2022/pipeline-components/noop/noop.module.mjs +46 -0
  784. package/esm2022/pipeline-components/noop/provoly-dashboard-pipeline-components-noop.mjs +5 -0
  785. package/esm2022/pipeline-components/noop/public-api.mjs +4 -0
  786. package/esm2022/pipeline-components/output-dataset/component/output-dataset.component.mjs +30 -0
  787. package/esm2022/pipeline-components/output-dataset/i18n/en.translations.mjs +8 -0
  788. package/esm2022/pipeline-components/output-dataset/i18n/fr.translations.mjs +8 -0
  789. package/esm2022/pipeline-components/output-dataset/node-class/output-dataset-node.class.mjs +17 -0
  790. package/esm2022/pipeline-components/output-dataset/output-dataset.module.mjs +60 -0
  791. package/esm2022/pipeline-components/output-dataset/provoly-dashboard-pipeline-components-output-dataset.mjs +5 -0
  792. package/esm2022/pipeline-components/output-dataset/public-api.mjs +4 -0
  793. package/esm2022/pipeline-components/subgraph/component/empty.component.mjs +18 -0
  794. package/esm2022/pipeline-components/subgraph/node-class/sub-graph-input.class.mjs +15 -0
  795. package/esm2022/pipeline-components/subgraph/node-class/sub-graph-node.class.mjs +96 -0
  796. package/esm2022/pipeline-components/subgraph/node-class/sub-graph-output.class.mjs +15 -0
  797. package/esm2022/pipeline-components/subgraph/provoly-dashboard-pipeline-components-subgraph.mjs +5 -0
  798. package/esm2022/pipeline-components/subgraph/public-api.mjs +6 -0
  799. package/esm2022/pipeline-components/subgraph/subgraph.module.mjs +50 -0
  800. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +119 -0
  801. package/esm2022/presentation/components/presentation.component.mjs +231 -0
  802. package/esm2022/presentation/i18n/en.translations.mjs +40 -0
  803. package/esm2022/presentation/i18n/fr.translations.mjs +41 -0
  804. package/esm2022/presentation/presentation.module.mjs +72 -0
  805. package/esm2022/presentation/provoly-dashboard-presentation.mjs +5 -0
  806. package/esm2022/presentation/public-api.mjs +5 -0
  807. package/esm2022/presentation/style/css.component.mjs +11 -0
  808. package/esm2022/provoly-dashboard.mjs +5 -0
  809. package/esm2022/public-api.mjs +6 -0
  810. package/esm2022/restitution/components/restitution/restitution.component.mjs +216 -0
  811. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +114 -0
  812. package/esm2022/restitution/components/restitution-list/restitution-list.component.mjs +68 -0
  813. package/esm2022/restitution/i18n/en.translations.mjs +44 -0
  814. package/esm2022/restitution/i18n/fr.translations.mjs +44 -0
  815. package/esm2022/restitution/model/restitution.model.mjs +2 -0
  816. package/esm2022/restitution/provoly-dashboard-restitution.mjs +5 -0
  817. package/esm2022/restitution/public-api.mjs +5 -0
  818. package/esm2022/restitution/restitution.module.mjs +86 -0
  819. package/esm2022/restitution/style/css.component.mjs +11 -0
  820. package/esm2022/search/components/choose-widget/choose-widget.component.mjs +67 -0
  821. package/esm2022/search/components/edit-named-query/edit-named-query.component.mjs +101 -0
  822. package/esm2022/search/components/edit-named-query-modal/edit-named-query-modal.component.mjs +55 -0
  823. package/esm2022/search/components/save-query/save-query.component.mjs +106 -0
  824. package/esm2022/search/components/save-query-button/save-query-button.component.mjs +76 -0
  825. package/esm2022/search/i18n/en.translations.mjs +132 -0
  826. package/esm2022/search/i18n/fr.translations.mjs +132 -0
  827. package/esm2022/search/provoly-dashboard-search.mjs +5 -0
  828. package/esm2022/search/public-api.mjs +13 -0
  829. package/esm2022/search/search-fulltext/search-fulltext/search-fulltext.component.mjs +207 -0
  830. package/esm2022/search/search-fulltext/store/search-fulltext.actions.mjs +6 -0
  831. package/esm2022/search/search-fulltext/store/search-fulltext.effects.mjs +38 -0
  832. package/esm2022/search/search-fulltext/store/search-fulltext.service.mjs +22 -0
  833. package/esm2022/search/search-home/search-home.component.mjs +199 -0
  834. package/esm2022/search/search-mono-class/components/search-composed/search-composed.component.mjs +78 -0
  835. package/esm2022/search/search-mono-class/components/search-condition/search-condition.component.mjs +139 -0
  836. package/esm2022/search/search-mono-class/components/search-mono-class/search-mono-class.component.mjs +34 -0
  837. package/esm2022/search/search-mono-class/components/search-order/search-order.component.mjs +69 -0
  838. package/esm2022/search/search-mono-class/components/search-select-attribute/search-select-attribute.component.mjs +37 -0
  839. package/esm2022/search/search-mono-class/store/search-mono-class.actions.mjs +26 -0
  840. package/esm2022/search/search-mono-class/store/search-mono-class.effects.mjs +112 -0
  841. package/esm2022/search/search-mono-class/store/search-mono-class.reducer.mjs +139 -0
  842. package/esm2022/search/search-mono-class/store/search-mono-class.selectors.mjs +38 -0
  843. package/esm2022/search/search-mono-class/store/search-mono-class.service.mjs +161 -0
  844. package/esm2022/search/search-multi-class/components/multi-class-condition/multi-class-condition.component.mjs +150 -0
  845. package/esm2022/search/search-multi-class/components/multi-class-field-selection/multi-class-field-selection.component.mjs +62 -0
  846. package/esm2022/search/search-multi-class/components/search-multi-class/search-multi-class.component.mjs +37 -0
  847. package/esm2022/search/search-multi-class/store/search-multi-class.actions.mjs +16 -0
  848. package/esm2022/search/search-multi-class/store/search-multi-class.effects.mjs +66 -0
  849. package/esm2022/search/search-multi-class/store/search-multi-class.reducer.mjs +59 -0
  850. package/esm2022/search/search-multi-class/store/search-multi-class.selectors.mjs +32 -0
  851. package/esm2022/search/search-multi-class/store/search-multi-class.service.mjs +125 -0
  852. package/esm2022/search/search-tools/search-tools.component.mjs +151 -0
  853. package/esm2022/search/search.module.mjs +156 -0
  854. package/esm2022/search/style/css.component.mjs +11 -0
  855. package/esm2022/supervision/components/supervision-business-data/supervision-business-data.component.mjs +34 -0
  856. package/esm2022/supervision/components/supervision-flow/supervision-flow.component.mjs +33 -0
  857. package/esm2022/supervision/components/supervision-infrastructures/supervision-infrastructures.component.mjs +51 -0
  858. package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors-select/supervision-integration-errors-select.component.mjs +27 -0
  859. package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors.component.mjs +100 -0
  860. package/esm2022/supervision/components/supervision-layout/supervision-layout.component.mjs +47 -0
  861. package/esm2022/supervision/components/supervision-menu/supervision-menu.component.mjs +32 -0
  862. package/esm2022/supervision/components/supervision-title/supervision-title.component.mjs +24 -0
  863. package/esm2022/supervision/components/supervision.component.mjs +19 -0
  864. package/esm2022/supervision/i18n/en.translations.mjs +58 -0
  865. package/esm2022/supervision/i18n/fr.translations.mjs +58 -0
  866. package/esm2022/supervision/provoly-dashboard-supervision.mjs +5 -0
  867. package/esm2022/supervision/public-api.mjs +2 -0
  868. package/esm2022/supervision/store/supervision-api.model.mjs +2 -0
  869. package/esm2022/supervision/store/supervision.actions.mjs +33 -0
  870. package/esm2022/supervision/store/supervision.effects.mjs +60 -0
  871. package/esm2022/supervision/store/supervision.reducer.mjs +115 -0
  872. package/esm2022/supervision/store/supervision.selectors.mjs +35 -0
  873. package/esm2022/supervision/store/supervision.service.mjs +54 -0
  874. package/esm2022/supervision/supervision-routing.module.mjs +96 -0
  875. package/esm2022/supervision/supervision.module.mjs +96 -0
  876. package/esm2022/toolbox/components/clear-view/clear-view.component.mjs +24 -0
  877. package/esm2022/toolbox/components/drag-widgets/drag-widgets.component.mjs +43 -0
  878. package/esm2022/toolbox/components/edit-mode-toggle/edit-mode-toggle.component.mjs +27 -0
  879. package/esm2022/toolbox/components/filter-settings/filter-settings.component.mjs +235 -0
  880. package/esm2022/toolbox/components/launch-tab/launch-tab.component.mjs +24 -0
  881. package/esm2022/toolbox/components/named-query/named-query.component.mjs +35 -0
  882. package/esm2022/toolbox/components/save-view/save-view.component.mjs +207 -0
  883. package/esm2022/toolbox/components/select-grid-layout/select-grid-layout.component.mjs +109 -0
  884. package/esm2022/toolbox/components/toolbox.component.mjs +32 -0
  885. package/esm2022/toolbox/provoly-dashboard-toolbox.mjs +5 -0
  886. package/esm2022/toolbox/public-api.mjs +12 -0
  887. package/esm2022/toolbox/style/css.component.mjs +11 -0
  888. package/esm2022/toolbox/toolbox.module.mjs +107 -0
  889. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +33 -0
  890. package/esm2022/tooltips/attribute/attribute-tooltip.module.mjs +24 -0
  891. package/esm2022/tooltips/attribute/provoly-dashboard-tooltips-attribute.mjs +5 -0
  892. package/esm2022/tooltips/attribute/public-api.mjs +3 -0
  893. package/esm2022/tooltips/cluster/cluster-tooltip.component.mjs +12 -0
  894. package/esm2022/tooltips/cluster/cluster-tooltip.module.mjs +24 -0
  895. package/esm2022/tooltips/cluster/provoly-dashboard-tooltips-cluster.mjs +5 -0
  896. package/esm2022/tooltips/cluster/public-api.mjs +3 -0
  897. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +633 -0
  898. package/esm2022/widgets/widget-aggregated-chart/i18n/en.translations.mjs +104 -0
  899. package/esm2022/widgets/widget-aggregated-chart/i18n/fr.translations.mjs +104 -0
  900. package/esm2022/widgets/widget-aggregated-chart/provoly-dashboard-widgets-widget-aggregated-chart.mjs +5 -0
  901. package/esm2022/widgets/widget-aggregated-chart/public-api.mjs +6 -0
  902. package/esm2022/widgets/widget-aggregated-chart/service/backend-aggregation.service.mjs +103 -0
  903. package/esm2022/widgets/widget-aggregated-chart/service/base-aggregation.service.mjs +16 -0
  904. package/esm2022/widgets/widget-aggregated-chart/service/frontend-aggregation.service.mjs +206 -0
  905. package/esm2022/widgets/widget-aggregated-chart/style/css.component.mjs +11 -0
  906. package/esm2022/widgets/widget-aggregated-chart/widget-aggregated-chart.module.mjs +72 -0
  907. package/esm2022/widgets/widget-chart/component/vega-error.handler.mjs +36 -0
  908. package/esm2022/widgets/widget-chart/component/vega-spec.constant.mjs +248 -0
  909. package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +652 -0
  910. package/esm2022/widgets/widget-chart/i18n/en.translations.mjs +114 -0
  911. package/esm2022/widgets/widget-chart/i18n/fr.translations.mjs +114 -0
  912. package/esm2022/widgets/widget-chart/provoly-dashboard-widgets-widget-chart.mjs +5 -0
  913. package/esm2022/widgets/widget-chart/public-api.mjs +3 -0
  914. package/esm2022/widgets/widget-chart/style/css.component.mjs +11 -0
  915. package/esm2022/widgets/widget-chart/widget-chart.module.mjs +70 -0
  916. package/esm2022/widgets/widget-detail/component/widget-detail.component.mjs +131 -0
  917. package/esm2022/widgets/widget-detail/i18n/en.translations.mjs +14 -0
  918. package/esm2022/widgets/widget-detail/i18n/fr.translations.mjs +14 -0
  919. package/esm2022/widgets/widget-detail/provoly-dashboard-widgets-widget-detail.mjs +5 -0
  920. package/esm2022/widgets/widget-detail/public-api.mjs +3 -0
  921. package/esm2022/widgets/widget-detail/style/css.component.mjs +11 -0
  922. package/esm2022/widgets/widget-detail/widget-detail.module.mjs +64 -0
  923. package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +448 -0
  924. package/esm2022/widgets/widget-graph/i18n/en.translations.mjs +15 -0
  925. package/esm2022/widgets/widget-graph/i18n/fr.translations.mjs +15 -0
  926. package/esm2022/widgets/widget-graph/layout/node.interface.mjs +2 -0
  927. package/esm2022/widgets/widget-graph/layout/simple.function.mjs +99 -0
  928. package/esm2022/widgets/widget-graph/provoly-dashboard-widgets-widget-graph.mjs +5 -0
  929. package/esm2022/widgets/widget-graph/public-api.mjs +4 -0
  930. package/esm2022/widgets/widget-graph/style/css.component.mjs +11 -0
  931. package/esm2022/widgets/widget-graph/widget-graph.module.mjs +73 -0
  932. package/esm2022/widgets/widget-iframe/component/widget-iframe.component.mjs +53 -0
  933. package/esm2022/widgets/widget-iframe/i18n/en.translations.mjs +11 -0
  934. package/esm2022/widgets/widget-iframe/i18n/fr.translations.mjs +11 -0
  935. package/esm2022/widgets/widget-iframe/messaging/iframe-message-type.interface.mjs +2 -0
  936. package/esm2022/widgets/widget-iframe/messaging/iframe-messaging.service.mjs +30 -0
  937. package/esm2022/widgets/widget-iframe/provoly-dashboard-widgets-widget-iframe.mjs +5 -0
  938. package/esm2022/widgets/widget-iframe/public-api.mjs +5 -0
  939. package/esm2022/widgets/widget-iframe/style/css.component.mjs +11 -0
  940. package/esm2022/widgets/widget-iframe/widget-iframe.module.mjs +66 -0
  941. package/esm2022/widgets/widget-image/component/widget-image.component.mjs +33 -0
  942. package/esm2022/widgets/widget-image/provoly-dashboard-widgets-widget-image.mjs +5 -0
  943. package/esm2022/widgets/widget-image/public-api.mjs +3 -0
  944. package/esm2022/widgets/widget-image/style/css.component.mjs +11 -0
  945. package/esm2022/widgets/widget-image/widget-image.module.mjs +24 -0
  946. package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +317 -0
  947. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +822 -0
  948. package/esm2022/widgets/widget-map/i18n/en.translations.mjs +81 -0
  949. package/esm2022/widgets/widget-map/i18n/fr.translations.mjs +81 -0
  950. package/esm2022/widgets/widget-map/interaction/selection-interaction.class.mjs +170 -0
  951. package/esm2022/widgets/widget-map/pipe/widget-map-geometry-fields-for.pipe.mjs +52 -0
  952. package/esm2022/widgets/widget-map/pipe/widget-map-legend-url.pipe.mjs +22 -0
  953. package/esm2022/widgets/widget-map/provoly-dashboard-widgets-widget-map.mjs +5 -0
  954. package/esm2022/widgets/widget-map/public-api.mjs +7 -0
  955. package/esm2022/widgets/widget-map/reader/kmz-zip-reader.class.mjs +57 -0
  956. package/esm2022/widgets/widget-map/reader/map-formats-reader.class.mjs +37 -0
  957. package/esm2022/widgets/widget-map/reader/random-color-style.function.mjs +32 -0
  958. package/esm2022/widgets/widget-map/reader/read-as-text.class.mjs +30 -0
  959. package/esm2022/widgets/widget-map/reader/shp-zip-reader.class.mjs +35 -0
  960. package/esm2022/widgets/widget-map/search-bar/search-bar.control.mjs +66 -0
  961. package/esm2022/widgets/widget-map/style/css.component.mjs +11 -0
  962. package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +229 -0
  963. package/esm2022/widgets/widget-map/widget-map.module.mjs +72 -0
  964. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +187 -0
  965. package/esm2022/widgets/widget-table/expand-value/detach-row.directive.mjs +30 -0
  966. package/esm2022/widgets/widget-table/expand-value/expand-value.component.mjs +32 -0
  967. package/esm2022/widgets/widget-table/expand-value/format-number.pipe.mjs +29 -0
  968. package/esm2022/widgets/widget-table/get-value/get-value.pipe.mjs +43 -0
  969. package/esm2022/widgets/widget-table/i18n/en.translations.mjs +15 -0
  970. package/esm2022/widgets/widget-table/i18n/fr.translations.mjs +15 -0
  971. package/esm2022/widgets/widget-table/provoly-dashboard-widgets-widget-table.mjs +5 -0
  972. package/esm2022/widgets/widget-table/public-api.mjs +6 -0
  973. package/esm2022/widgets/widget-table/resizable/resizable.component.mjs +21 -0
  974. package/esm2022/widgets/widget-table/resizable/resizable.directive.mjs +34 -0
  975. package/esm2022/widgets/widget-table/style/css.component.mjs +11 -0
  976. package/esm2022/widgets/widget-table/widget-table.module.mjs +86 -0
  977. package/esm2022/widgets/widget-template/component/widget-template.component.mjs +86 -0
  978. package/esm2022/widgets/widget-template/provoly-dashboard-widgets-widget-template.mjs +5 -0
  979. package/esm2022/widgets/widget-template/public-api.mjs +3 -0
  980. package/esm2022/widgets/widget-template/style/css.component.mjs +11 -0
  981. package/esm2022/widgets/widget-template/widget-template.module.mjs +52 -0
  982. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +114 -0
  983. package/esm2022/widgets/widget-tile/i18n/en.translations.mjs +13 -0
  984. package/esm2022/widgets/widget-tile/i18n/fr.translations.mjs +13 -0
  985. package/esm2022/widgets/widget-tile/provoly-dashboard-widgets-widget-tile.mjs +5 -0
  986. package/esm2022/widgets/widget-tile/public-api.mjs +3 -0
  987. package/esm2022/widgets/widget-tile/style/css.component.mjs +11 -0
  988. package/esm2022/widgets/widget-tile/widget-tile.module.mjs +72 -0
  989. package/fesm2022/provoly-dashboard-admin.mjs +6992 -0
  990. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -0
  991. package/fesm2022/provoly-dashboard-components-card.mjs +312 -0
  992. package/fesm2022/provoly-dashboard-components-card.mjs.map +1 -0
  993. package/fesm2022/provoly-dashboard-components-checkbox.mjs +81 -0
  994. package/fesm2022/provoly-dashboard-components-checkbox.mjs.map +1 -0
  995. package/fesm2022/provoly-dashboard-components-expand-panel.mjs +88 -0
  996. package/fesm2022/provoly-dashboard-components-expand-panel.mjs.map +1 -0
  997. package/fesm2022/provoly-dashboard-components-filter.mjs +36 -0
  998. package/fesm2022/provoly-dashboard-components-filter.mjs.map +1 -0
  999. package/fesm2022/provoly-dashboard-components-sinceDate.mjs +60 -0
  1000. package/fesm2022/provoly-dashboard-components-sinceDate.mjs.map +1 -0
  1001. package/fesm2022/provoly-dashboard-components-stepper.mjs +175 -0
  1002. package/fesm2022/provoly-dashboard-components-stepper.mjs.map +1 -0
  1003. package/fesm2022/provoly-dashboard-dataset.mjs +268 -0
  1004. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -0
  1005. package/fesm2022/provoly-dashboard-filters-date.mjs +85 -0
  1006. package/fesm2022/provoly-dashboard-filters-date.mjs.map +1 -0
  1007. package/fesm2022/provoly-dashboard-filters-list.mjs +65 -0
  1008. package/fesm2022/provoly-dashboard-filters-list.mjs.map +1 -0
  1009. package/fesm2022/provoly-dashboard-filters-number.mjs +53 -0
  1010. package/fesm2022/provoly-dashboard-filters-number.mjs.map +1 -0
  1011. package/fesm2022/provoly-dashboard-filters-text.mjs +56 -0
  1012. package/fesm2022/provoly-dashboard-filters-text.mjs.map +1 -0
  1013. package/fesm2022/provoly-dashboard-import.mjs +302 -0
  1014. package/fesm2022/provoly-dashboard-import.mjs.map +1 -0
  1015. package/fesm2022/provoly-dashboard-notification.mjs +303 -0
  1016. package/fesm2022/provoly-dashboard-notification.mjs.map +1 -0
  1017. package/fesm2022/provoly-dashboard-pipeline-components-filter.mjs +154 -0
  1018. package/fesm2022/provoly-dashboard-pipeline-components-filter.mjs.map +1 -0
  1019. package/fesm2022/provoly-dashboard-pipeline-components-input-datasource.mjs +116 -0
  1020. package/fesm2022/provoly-dashboard-pipeline-components-input-datasource.mjs.map +1 -0
  1021. package/fesm2022/provoly-dashboard-pipeline-components-noop.mjs +76 -0
  1022. package/fesm2022/provoly-dashboard-pipeline-components-noop.mjs.map +1 -0
  1023. package/fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs +120 -0
  1024. package/fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs.map +1 -0
  1025. package/fesm2022/provoly-dashboard-pipeline-components-subgraph.mjs +188 -0
  1026. package/fesm2022/provoly-dashboard-pipeline-components-subgraph.mjs.map +1 -0
  1027. package/fesm2022/provoly-dashboard-pipeline.mjs +1183 -0
  1028. package/fesm2022/provoly-dashboard-pipeline.mjs.map +1 -0
  1029. package/fesm2022/provoly-dashboard-presentation.mjs +498 -0
  1030. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -0
  1031. package/fesm2022/provoly-dashboard-restitution.mjs +557 -0
  1032. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -0
  1033. package/fesm2022/provoly-dashboard-search.mjs +2590 -0
  1034. package/fesm2022/provoly-dashboard-search.mjs.map +1 -0
  1035. package/fesm2022/provoly-dashboard-supervision.mjs +866 -0
  1036. package/fesm2022/provoly-dashboard-supervision.mjs.map +1 -0
  1037. package/fesm2022/provoly-dashboard-toolbox.mjs +774 -0
  1038. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -0
  1039. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +60 -0
  1040. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -0
  1041. package/fesm2022/provoly-dashboard-tooltips-cluster.mjs +39 -0
  1042. package/fesm2022/provoly-dashboard-tooltips-cluster.mjs.map +1 -0
  1043. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +1228 -0
  1044. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -0
  1045. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +1238 -0
  1046. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -0
  1047. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs +230 -0
  1048. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs.map +1 -0
  1049. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +656 -0
  1050. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -0
  1051. package/fesm2022/provoly-dashboard-widgets-widget-iframe.mjs +173 -0
  1052. package/fesm2022/provoly-dashboard-widgets-widget-iframe.mjs.map +1 -0
  1053. package/fesm2022/provoly-dashboard-widgets-widget-image.mjs +67 -0
  1054. package/fesm2022/provoly-dashboard-widgets-widget-image.mjs.map +1 -0
  1055. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +2055 -0
  1056. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -0
  1057. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +464 -0
  1058. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -0
  1059. package/fesm2022/provoly-dashboard-widgets-widget-template.mjs +148 -0
  1060. package/fesm2022/provoly-dashboard-widgets-widget-template.mjs.map +1 -0
  1061. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +219 -0
  1062. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -0
  1063. package/fesm2022/provoly-dashboard.mjs +10650 -0
  1064. package/fesm2022/provoly-dashboard.mjs.map +1 -0
  1065. package/filters/date/date-filter.component.d.ts +17 -0
  1066. package/filters/date/date-filter.module.d.ts +15 -0
  1067. package/filters/date/index.d.ts +5 -0
  1068. package/filters/date/public-api.d.ts +3 -0
  1069. package/filters/date/style/_m-date.scss +6 -0
  1070. package/filters/date/style/css.component.d.ts +5 -0
  1071. package/filters/list/index.d.ts +5 -0
  1072. package/filters/list/list-filter.component.d.ts +12 -0
  1073. package/filters/list/list-filter.module.d.ts +14 -0
  1074. package/filters/list/public-api.d.ts +3 -0
  1075. package/filters/list/style/_m-list.scss +7 -0
  1076. package/filters/list/style/css.component.d.ts +5 -0
  1077. package/filters/number/index.d.ts +5 -0
  1078. package/filters/number/number-filter.component.d.ts +11 -0
  1079. package/filters/number/number-filter.module.d.ts +14 -0
  1080. package/filters/number/public-api.d.ts +2 -0
  1081. package/filters/text/index.d.ts +5 -0
  1082. package/filters/text/public-api.d.ts +2 -0
  1083. package/filters/text/text-filter.component.d.ts +12 -0
  1084. package/filters/text/text-filter.module.d.ts +14 -0
  1085. package/import/components/import.component.d.ts +29 -0
  1086. package/import/i18n/en.translations.d.ts +27 -0
  1087. package/import/i18n/fr.translations.d.ts +27 -0
  1088. package/import/import-routing.module.d.ts +7 -0
  1089. package/import/import.module.d.ts +17 -0
  1090. package/import/index.d.ts +5 -0
  1091. package/import/public-api.d.ts +2 -0
  1092. package/import/store/import.actions.d.ts +33 -0
  1093. package/import/store/import.effects.d.ts +18 -0
  1094. package/import/store/import.reducer.d.ts +11 -0
  1095. package/import/store/import.selectors.d.ts +9 -0
  1096. package/import/store/import.service.d.ts +12 -0
  1097. package/import/style/_o-import.scss +51 -0
  1098. package/import/style/css.component.d.ts +5 -0
  1099. package/index.d.ts +5 -0
  1100. package/lib/core/access/access.directive.d.ts +16 -0
  1101. package/lib/core/access/access.guard.d.ts +13 -0
  1102. package/lib/core/access/access.model.d.ts +24 -0
  1103. package/lib/core/access/access.service.d.ts +13 -0
  1104. package/lib/core/access/access.utils.d.ts +6 -0
  1105. package/lib/core/components/base-layout/base-layout.component.d.ts +20 -0
  1106. package/lib/core/components/base-menu/base-menu.component.d.ts +27 -0
  1107. package/lib/core/components/base-toolbox/base-toolbox-action.interface.d.ts +12 -0
  1108. package/lib/core/components/base-toolbox/base-toolbox.component.d.ts +10 -0
  1109. package/lib/core/components/base-toolbox-action/base-toolbox-action.component.d.ts +23 -0
  1110. package/lib/core/components/date-picker/date-picker.component.d.ts +47 -0
  1111. package/lib/core/components/date-picker/date-picker.module.d.ts +14 -0
  1112. package/lib/core/components/date-picker/date-range-highlight.pipe.d.ts +8 -0
  1113. package/lib/core/components/date-picker/time-picker/loop-scroll-column/loop-scroll-column.component.d.ts +26 -0
  1114. package/lib/core/components/date-picker/time-picker/time-picker.component.d.ts +28 -0
  1115. package/lib/core/components/edit-input/edit-input.component.d.ts +21 -0
  1116. package/lib/core/components/edit-input/edit-input.module.d.ts +11 -0
  1117. package/lib/core/components/get-secured-image/get-secured-image.pipe.d.ts +16 -0
  1118. package/lib/core/components/hidden-when-overlay/hidden-when-overlay.directive.d.ts +12 -0
  1119. package/lib/core/components/hidden-when-overlay/hidden-when-overlay.module.d.ts +9 -0
  1120. package/lib/core/components/icon/icon.component.d.ts +32 -0
  1121. package/lib/core/components/icon/icon.module.d.ts +8 -0
  1122. package/lib/core/components/modal/modal.component.d.ts +11 -0
  1123. package/lib/core/components/modal/pry-modal.module.d.ts +11 -0
  1124. package/lib/core/components/modalStatus/modalStatus.component.d.ts +17 -0
  1125. package/lib/core/components/modalStatus/modalStatus.module.d.ts +13 -0
  1126. package/lib/core/components/nq-color-selector/nq-color-selector.component.d.ts +23 -0
  1127. package/lib/core/components/overlay/dialog-confirm.component.d.ts +29 -0
  1128. package/lib/core/components/overlay/dialog-ref.d.ts +9 -0
  1129. package/lib/core/components/overlay/dialog.service.d.ts +27 -0
  1130. package/lib/core/components/overlay/overlay.constantes.d.ts +4 -0
  1131. package/lib/core/components/overlay/overlay.directive.d.ts +27 -0
  1132. package/lib/core/components/overlay/overlay.module.d.ts +13 -0
  1133. package/lib/core/components/overlay/tooltip.directive.d.ts +28 -0
  1134. package/lib/core/components/range/range.component.d.ts +35 -0
  1135. package/lib/core/components/range/range.module.d.ts +9 -0
  1136. package/lib/core/components/select/select.component.d.ts +42 -0
  1137. package/lib/core/components/select/select.module.d.ts +12 -0
  1138. package/lib/core/components/select-image/select-image.component.d.ts +28 -0
  1139. package/lib/core/components/share/share.component.d.ts +31 -0
  1140. package/lib/core/components/share/share.model.d.ts +9 -0
  1141. package/lib/core/components/share/share.module.d.ts +11 -0
  1142. package/lib/core/components/snackbar/snack.interface.d.ts +6 -0
  1143. package/lib/core/components/snackbar/snackbar/snackbar.component.d.ts +25 -0
  1144. package/lib/core/components/snackbar/snackbar.module.d.ts +9 -0
  1145. package/lib/core/components/snackbar/snackbar.service.d.ts +22 -0
  1146. package/lib/core/components/sort/sort-data.pipe.d.ts +10 -0
  1147. package/lib/core/components/sort/sort-header/sort-header.component.d.ts +16 -0
  1148. package/lib/core/components/sort/sort-header.directive.d.ts +5 -0
  1149. package/lib/core/components/sort/sort-table.directive.d.ts +17 -0
  1150. package/lib/core/components/sort/sort.model.d.ts +4 -0
  1151. package/lib/core/components/sort/sort.module.d.ts +12 -0
  1152. package/lib/core/components/title-presentation/title-presentation.component.d.ts +12 -0
  1153. package/lib/core/components/toggle/toggle.component.d.ts +31 -0
  1154. package/lib/core/components/toggle/toggle.module.d.ts +10 -0
  1155. package/lib/core/components/translate-id/translate-id.pipe.d.ts +20 -0
  1156. package/lib/core/components/translate-item-to-symbol/translate-item-to-symbol.pipe.d.ts +18 -0
  1157. package/lib/core/components/upload/upload.component.d.ts +19 -0
  1158. package/lib/core/core.module.d.ts +36 -0
  1159. package/lib/core/errors/http-error-interceptor.service.d.ts +16 -0
  1160. package/lib/core/i18n/deep-merge.function.d.ts +1 -0
  1161. package/lib/core/i18n/en.translations.d.ts +322 -0
  1162. package/lib/core/i18n/fr.translations.d.ts +322 -0
  1163. package/lib/core/i18n/i18n.module.d.ts +7 -0
  1164. package/lib/core/i18n/i18n.pipe.d.ts +16 -0
  1165. package/lib/core/i18n/i18n.service.d.ts +35 -0
  1166. package/lib/core/model/admin-api.model.d.ts +111 -0
  1167. package/lib/core/model/dataset.interface.d.ts +29 -0
  1168. package/lib/core/model/filter.interface.d.ts +20 -0
  1169. package/lib/core/model/item.interface.d.ts +38 -0
  1170. package/lib/core/model/manifest.interface.d.ts +84 -0
  1171. package/lib/core/model/mimetype-resultset.constant.d.ts +1 -0
  1172. package/lib/core/model/notification-interface.d.ts +13 -0
  1173. package/lib/core/model/public-api.d.ts +24 -0
  1174. package/lib/core/model/relation.interface.d.ts +5 -0
  1175. package/lib/core/model/result-order.interface.d.ts +5 -0
  1176. package/lib/core/model/result-set.interface.d.ts +19 -0
  1177. package/lib/core/model/search-mono-class.model.d.ts +49 -0
  1178. package/lib/core/model/search-multi-class.model.d.ts +38 -0
  1179. package/lib/core/model/tooltip-of-class.interface.d.ts +4 -0
  1180. package/lib/core/model/widget-aggregated-chart-manifest.interface.d.ts +60 -0
  1181. package/lib/core/model/widget-chart-manifest.interface.d.ts +150 -0
  1182. package/lib/core/model/widget-detail-manifest.interface.d.ts +4 -0
  1183. package/lib/core/model/widget-graph-manifest.interface.d.ts +14 -0
  1184. package/lib/core/model/widget-iframe-manifest.interface.d.ts +3 -0
  1185. package/lib/core/model/widget-image-manifest.interface.d.ts +4 -0
  1186. package/lib/core/model/widget-map-manifest.interface.d.ts +97 -0
  1187. package/lib/core/model/widget-table-manifest.interface.d.ts +9 -0
  1188. package/lib/core/model/widget-template-manifest.interface.d.ts +5 -0
  1189. package/lib/core/model/widget-tile-manifest.interface.d.ts +10 -0
  1190. package/lib/core/model/widget.interface.d.ts +13 -0
  1191. package/lib/core/public-api.d.ts +113 -0
  1192. package/lib/core/store/category/category.actions.d.ts +14 -0
  1193. package/lib/core/store/category/category.effects.d.ts +15 -0
  1194. package/lib/core/store/category/category.interface.d.ts +4 -0
  1195. package/lib/core/store/category/category.reducer.d.ts +11 -0
  1196. package/lib/core/store/category/category.selectors.d.ts +6 -0
  1197. package/lib/core/store/category/category.service.d.ts +13 -0
  1198. package/lib/core/store/class/class.actions.d.ts +37 -0
  1199. package/lib/core/store/class/class.effects.d.ts +25 -0
  1200. package/lib/core/store/class/class.interface.d.ts +19 -0
  1201. package/lib/core/store/class/class.reducer.d.ts +15 -0
  1202. package/lib/core/store/class/class.selectors.d.ts +14 -0
  1203. package/lib/core/store/class/class.service.d.ts +22 -0
  1204. package/lib/core/store/config/config.actions.d.ts +185 -0
  1205. package/lib/core/store/config/config.effects.d.ts +51 -0
  1206. package/lib/core/store/config/config.reducer.d.ts +37 -0
  1207. package/lib/core/store/config/config.selectors.d.ts +52 -0
  1208. package/lib/core/store/config/config.service.d.ts +51 -0
  1209. package/lib/core/store/config/config.widget.constants.d.ts +12 -0
  1210. package/lib/core/store/config/icon-definitions.interface.d.ts +34 -0
  1211. package/lib/core/store/config/open-map-tiles.service.d.ts +17 -0
  1212. package/lib/core/store/context-menu/context-menu.actions.d.ts +18 -0
  1213. package/lib/core/store/context-menu/context-menu.effects.d.ts +8 -0
  1214. package/lib/core/store/context-menu/context-menu.reducer.d.ts +12 -0
  1215. package/lib/core/store/context-menu/context-menu.selectors.d.ts +16 -0
  1216. package/lib/core/store/data-source/data-source.actions.d.ts +238 -0
  1217. package/lib/core/store/data-source/data-source.effects.d.ts +106 -0
  1218. package/lib/core/store/data-source/data-source.model.d.ts +32 -0
  1219. package/lib/core/store/data-source/data-source.reducer.d.ts +21 -0
  1220. package/lib/core/store/data-source/data-source.selectors.d.ts +31 -0
  1221. package/lib/core/store/data-source/data-source.service.d.ts +40 -0
  1222. package/lib/core/store/data-source/named-query-types.model.d.ts +5 -0
  1223. package/lib/core/store/data-source/named-query-utils.d.ts +6 -0
  1224. package/lib/core/store/field/field.actions.d.ts +14 -0
  1225. package/lib/core/store/field/field.effects.d.ts +15 -0
  1226. package/lib/core/store/field/field.interface.d.ts +21 -0
  1227. package/lib/core/store/field/field.reducer.d.ts +11 -0
  1228. package/lib/core/store/field/field.selectors.d.ts +7 -0
  1229. package/lib/core/store/field/field.service.d.ts +15 -0
  1230. package/lib/core/store/image/image.actions.d.ts +32 -0
  1231. package/lib/core/store/image/image.effects.d.ts +20 -0
  1232. package/lib/core/store/image/image.reducer.d.ts +9 -0
  1233. package/lib/core/store/image/image.selectors.d.ts +7 -0
  1234. package/lib/core/store/image/image.service.d.ts +29 -0
  1235. package/lib/core/store/item/item.actions.d.ts +18 -0
  1236. package/lib/core/store/item/item.effects.d.ts +27 -0
  1237. package/lib/core/store/item/item.service.d.ts +28 -0
  1238. package/lib/core/store/raw/raw.service.d.ts +18 -0
  1239. package/lib/core/store/relation-types/relation-types.actions.d.ts +65 -0
  1240. package/lib/core/store/relation-types/relation-types.effects.d.ts +31 -0
  1241. package/lib/core/store/relation-types/relation-types.interface.d.ts +8 -0
  1242. package/lib/core/store/relation-types/relation-types.reducer.d.ts +11 -0
  1243. package/lib/core/store/relation-types/relation-types.selectors.d.ts +8 -0
  1244. package/lib/core/store/relation-types/relation-types.service.d.ts +17 -0
  1245. package/lib/core/store/search/lat-lon-to-geographic-field-transformation.function.d.ts +2 -0
  1246. package/lib/core/store/search/search.actions.d.ts +33 -0
  1247. package/lib/core/store/search/search.constants.d.ts +2 -0
  1248. package/lib/core/store/search/search.effects.d.ts +33 -0
  1249. package/lib/core/store/search/search.reducer.d.ts +10 -0
  1250. package/lib/core/store/search/search.selectors.d.ts +5 -0
  1251. package/lib/core/store/search/search.service.d.ts +50 -0
  1252. package/lib/core/symbol/symbol.service.d.ts +27 -0
  1253. package/lib/core/toolbox/toolbox-manifest.service.d.ts +21 -0
  1254. package/lib/core/toolbox/toolbox-menu.service.d.ts +45 -0
  1255. package/lib/core/ws/websocket.service.d.ts +26 -0
  1256. package/lib/dashboard/action-bus/bus-action.interface.d.ts +4 -0
  1257. package/lib/dashboard/action-bus/effect/action-bus.effects.d.ts +13 -0
  1258. package/lib/dashboard/action-bus/service/bus.service.d.ts +22 -0
  1259. package/lib/dashboard/action-bus/service/control-message.interface.d.ts +6 -0
  1260. package/lib/dashboard/base-widget.module.d.ts +9 -0
  1261. package/lib/dashboard/components/context-menu/context-menu.component.d.ts +59 -0
  1262. package/lib/dashboard/components/context-menu/object-edition/object-edition.component.d.ts +78 -0
  1263. package/lib/dashboard/components/dashboard.component.d.ts +99 -0
  1264. package/lib/dashboard/components/manifests/manifests.component.d.ts +20 -0
  1265. package/lib/dashboard/components/metadata/metadata.component.d.ts +16 -0
  1266. package/lib/dashboard/components/solve-collisions.function.d.ts +15 -0
  1267. package/lib/dashboard/components/subscriptionner.directive.d.ts +9 -0
  1268. package/lib/dashboard/components/vizualize-raw/vizualize-raw.component.d.ts +26 -0
  1269. package/lib/dashboard/components/widgets/base-widget.component.d.ts +36 -0
  1270. package/lib/dashboard/components/widgets/data-widget.component.d.ts +20 -0
  1271. package/lib/dashboard/components/widgets/header/resultset-size.pipe.d.ts +18 -0
  1272. package/lib/dashboard/components/widgets/header/widget-header.component.d.ts +115 -0
  1273. package/lib/dashboard/components/widgets/public-api.d.ts +9 -0
  1274. package/lib/dashboard/components/widgets/settings/settings.component.d.ts +35 -0
  1275. package/lib/dashboard/components/widgets/widget-filler/widget-filler.component.d.ts +10 -0
  1276. package/lib/dashboard/components/widgets/widget-instanciator/widget-factory.service.d.ts +24 -0
  1277. package/lib/dashboard/components/widgets/widget-instanciator/widget-instanciator.component.d.ts +34 -0
  1278. package/lib/dashboard/components/widgets/widget-instanciator/widgets-definition.model.d.ts +11 -0
  1279. package/lib/dashboard/components/widgets/widget-placeholder/widget-placeholder.component.d.ts +9 -0
  1280. package/lib/dashboard/components/widgets/widget-placement/widget-placement.utils.d.ts +39 -0
  1281. package/lib/dashboard/dashboard.module.d.ts +59 -0
  1282. package/lib/dashboard/date-utils.d.ts +3 -0
  1283. package/lib/dashboard/filter/base-filter.component.d.ts +13 -0
  1284. package/lib/dashboard/filter/base-filter.module.d.ts +9 -0
  1285. package/lib/dashboard/filter/components/filter-instanciator/filter-instanciator.component.d.ts +20 -0
  1286. package/lib/dashboard/filter/filter-factory.service.d.ts +40 -0
  1287. package/lib/dashboard/filter/filter-loader.function.d.ts +3 -0
  1288. package/lib/dashboard/filter/public-api.d.ts +5 -0
  1289. package/lib/dashboard/guard/default-view.guard.d.ts +14 -0
  1290. package/lib/dashboard/item-utils.d.ts +35 -0
  1291. package/lib/dashboard/public-api.d.ts +30 -0
  1292. package/lib/dashboard/resultset-utils.d.ts +4 -0
  1293. package/lib/dashboard/store/dashboard-init.service.d.ts +20 -0
  1294. package/lib/dashboard/store/dashboard.actions.d.ts +455 -0
  1295. package/lib/dashboard/store/dashboard.contants.d.ts +4 -0
  1296. package/lib/dashboard/store/dashboard.effects.d.ts +226 -0
  1297. package/lib/dashboard/store/dashboard.reducers.d.ts +48 -0
  1298. package/lib/dashboard/store/dashboard.selectors.d.ts +374 -0
  1299. package/lib/dashboard/store/geocoding.service.d.ts +56 -0
  1300. package/lib/dashboard/store/manifest.service.d.ts +26 -0
  1301. package/lib/dashboard/store/refresh.service.d.ts +12 -0
  1302. package/lib/dashboard/store/title.service.d.ts +17 -0
  1303. package/lib/dashboard/tooltip/base-tooltip.component.d.ts +15 -0
  1304. package/lib/dashboard/tooltip/base-tooltip.module.d.ts +9 -0
  1305. package/lib/dashboard/tooltip/components/default/default.tooltip.component.d.ts +6 -0
  1306. package/lib/dashboard/tooltip/public-api.d.ts +5 -0
  1307. package/lib/dashboard/tooltip/tooltip-factory.service.d.ts +42 -0
  1308. package/lib/dashboard/tooltip/tooltip-loader.function.d.ts +3 -0
  1309. package/lib/dashboard/widget-loader.function.d.ts +3 -0
  1310. package/notification/components/notification/content/notification-content.component.d.ts +25 -0
  1311. package/notification/components/notification/notification.component.d.ts +20 -0
  1312. package/notification/i18n/en.translations.d.ts +22 -0
  1313. package/notification/i18n/fr.translations.d.ts +22 -0
  1314. package/notification/index.d.ts +5 -0
  1315. package/notification/notification.module.d.ts +17 -0
  1316. package/notification/public-api.d.ts +9 -0
  1317. package/notification/store/notification.actions.d.ts +20 -0
  1318. package/notification/store/notification.effects.d.ts +18 -0
  1319. package/notification/store/notification.reducer.d.ts +6 -0
  1320. package/notification/store/notification.selectors.d.ts +5 -0
  1321. package/notification/store/notification.service.d.ts +12 -0
  1322. package/notification/style/_m-notifications.scss +127 -0
  1323. package/notification/style/css.component.d.ts +5 -0
  1324. package/package.json +266 -0
  1325. package/pipeline/components/pipeline-details/pipeline-details.component.d.ts +27 -0
  1326. package/pipeline/components/pipeline-editor/graph-serializer.utils.d.ts +8 -0
  1327. package/pipeline/components/pipeline-editor/pipeline-editor.component.d.ts +73 -0
  1328. package/pipeline/components/pipeline-editor/pipeline.interface.d.ts +52 -0
  1329. package/pipeline/components/pipeline-list/pipeline-list.component.d.ts +46 -0
  1330. package/pipeline/components/pipeline-properties-panel.component.d.ts +11 -0
  1331. package/pipeline/factory/pipeline-component-factory.service.d.ts +29 -0
  1332. package/pipeline/i18n/en.translations.d.ts +73 -0
  1333. package/pipeline/i18n/fr.translations.d.ts +73 -0
  1334. package/pipeline/index.d.ts +5 -0
  1335. package/pipeline/node-class/base-node.class.d.ts +13 -0
  1336. package/pipeline/pipeline.module.d.ts +20 -0
  1337. package/pipeline/public-api.d.ts +16 -0
  1338. package/pipeline/store/pipeline.actions.d.ts +81 -0
  1339. package/pipeline/store/pipeline.effects.d.ts +30 -0
  1340. package/pipeline/store/pipeline.reducer.d.ts +13 -0
  1341. package/pipeline/store/pipeline.selectors.d.ts +8 -0
  1342. package/pipeline/store/pipeline.service.d.ts +19 -0
  1343. package/pipeline/style/_o-pipeline.scss +274 -0
  1344. package/pipeline/style/css.component.d.ts +5 -0
  1345. package/pipeline-components/filter/component/filter.component.d.ts +16 -0
  1346. package/pipeline-components/filter/filter.module.d.ts +15 -0
  1347. package/pipeline-components/filter/i18n/en.translations.d.ts +15 -0
  1348. package/pipeline-components/filter/i18n/fr.translations.d.ts +15 -0
  1349. package/pipeline-components/filter/index.d.ts +5 -0
  1350. package/pipeline-components/filter/node-class/filter-node.class.d.ts +4 -0
  1351. package/pipeline-components/filter/public-api.d.ts +3 -0
  1352. package/pipeline-components/input-datasource/component/input-datasource.component.d.ts +13 -0
  1353. package/pipeline-components/input-datasource/i18n/en.translations.d.ts +10 -0
  1354. package/pipeline-components/input-datasource/i18n/fr.translations.d.ts +10 -0
  1355. package/pipeline-components/input-datasource/index.d.ts +5 -0
  1356. package/pipeline-components/input-datasource/input-datasource.module.d.ts +17 -0
  1357. package/pipeline-components/input-datasource/node-class/input-datasourse-node.class.d.ts +5 -0
  1358. package/pipeline-components/input-datasource/public-api.d.ts +3 -0
  1359. package/pipeline-components/noop/component/noop.component.d.ts +7 -0
  1360. package/pipeline-components/noop/index.d.ts +5 -0
  1361. package/pipeline-components/noop/node-class/noop-node.class.d.ts +4 -0
  1362. package/pipeline-components/noop/noop.module.d.ts +13 -0
  1363. package/pipeline-components/noop/public-api.d.ts +3 -0
  1364. package/pipeline-components/output-dataset/component/output-dataset.component.d.ts +13 -0
  1365. package/pipeline-components/output-dataset/i18n/en.translations.d.ts +9 -0
  1366. package/pipeline-components/output-dataset/i18n/fr.translations.d.ts +9 -0
  1367. package/pipeline-components/output-dataset/index.d.ts +5 -0
  1368. package/pipeline-components/output-dataset/node-class/output-dataset-node.class.d.ts +5 -0
  1369. package/pipeline-components/output-dataset/output-dataset.module.d.ts +17 -0
  1370. package/pipeline-components/output-dataset/public-api.d.ts +3 -0
  1371. package/pipeline-components/subgraph/component/empty.component.d.ts +7 -0
  1372. package/pipeline-components/subgraph/index.d.ts +5 -0
  1373. package/pipeline-components/subgraph/node-class/sub-graph-input.class.d.ts +4 -0
  1374. package/pipeline-components/subgraph/node-class/sub-graph-node.class.d.ts +17 -0
  1375. package/pipeline-components/subgraph/node-class/sub-graph-output.class.d.ts +4 -0
  1376. package/pipeline-components/subgraph/public-api.d.ts +5 -0
  1377. package/pipeline-components/subgraph/subgraph.module.d.ts +13 -0
  1378. package/presentation/components/add-edit-presentation/add-edit-presentation.component.d.ts +28 -0
  1379. package/presentation/components/presentation.component.d.ts +55 -0
  1380. package/presentation/i18n/en.translations.d.ts +39 -0
  1381. package/presentation/i18n/fr.translations.d.ts +40 -0
  1382. package/presentation/index.d.ts +5 -0
  1383. package/presentation/presentation.module.d.ts +18 -0
  1384. package/presentation/public-api.d.ts +4 -0
  1385. package/presentation/style/_o-pry-new-presentation.scss +78 -0
  1386. package/presentation/style/_o-pry-presentation.scss +93 -0
  1387. package/presentation/style/css.component.d.ts +5 -0
  1388. package/public-api.d.ts +2 -0
  1389. package/restitution/components/restitution/restitution.component.d.ts +54 -0
  1390. package/restitution/components/restitution-catalog/restitution-catalog.component.d.ts +40 -0
  1391. package/restitution/components/restitution-list/restitution-list.component.d.ts +33 -0
  1392. package/restitution/i18n/en.translations.d.ts +43 -0
  1393. package/restitution/i18n/fr.translations.d.ts +43 -0
  1394. package/restitution/index.d.ts +5 -0
  1395. package/restitution/model/restitution.model.d.ts +8 -0
  1396. package/restitution/public-api.d.ts +4 -0
  1397. package/restitution/restitution.module.d.ts +21 -0
  1398. package/restitution/style/_o-restitution-list.scss +161 -0
  1399. package/restitution/style/_o-restitution.scss +32 -0
  1400. package/restitution/style/css.component.d.ts +5 -0
  1401. package/search/components/choose-widget/choose-widget.component.d.ts +34 -0
  1402. package/search/components/edit-named-query/edit-named-query.component.d.ts +37 -0
  1403. package/search/components/edit-named-query-modal/edit-named-query-modal.component.d.ts +17 -0
  1404. package/search/components/save-query/save-query.component.d.ts +36 -0
  1405. package/search/components/save-query-button/save-query-button.component.d.ts +23 -0
  1406. package/search/i18n/en.translations.d.ts +131 -0
  1407. package/search/i18n/fr.translations.d.ts +131 -0
  1408. package/search/index.d.ts +5 -0
  1409. package/search/public-api.d.ts +12 -0
  1410. package/search/search-fulltext/search-fulltext/search-fulltext.component.d.ts +56 -0
  1411. package/search/search-fulltext/store/search-fulltext.actions.d.ts +21 -0
  1412. package/search/search-fulltext/store/search-fulltext.effects.d.ts +25 -0
  1413. package/search/search-fulltext/store/search-fulltext.service.d.ts +7 -0
  1414. package/search/search-home/search-home.component.d.ts +76 -0
  1415. package/search/search-mono-class/components/search-composed/search-composed.component.d.ts +27 -0
  1416. package/search/search-mono-class/components/search-condition/search-condition.component.d.ts +42 -0
  1417. package/search/search-mono-class/components/search-mono-class/search-mono-class.component.d.ts +15 -0
  1418. package/search/search-mono-class/components/search-order/search-order.component.d.ts +25 -0
  1419. package/search/search-mono-class/components/search-select-attribute/search-select-attribute.component.d.ts +16 -0
  1420. package/search/search-mono-class/store/search-mono-class.actions.d.ts +119 -0
  1421. package/search/search-mono-class/store/search-mono-class.effects.d.ts +64 -0
  1422. package/search/search-mono-class/store/search-mono-class.reducer.d.ts +10 -0
  1423. package/search/search-mono-class/store/search-mono-class.selectors.d.ts +13 -0
  1424. package/search/search-mono-class/store/search-mono-class.service.d.ts +20 -0
  1425. package/search/search-multi-class/components/multi-class-condition/multi-class-condition.component.d.ts +39 -0
  1426. package/search/search-multi-class/components/multi-class-field-selection/multi-class-field-selection.component.d.ts +24 -0
  1427. package/search/search-multi-class/components/search-multi-class/search-multi-class.component.d.ts +15 -0
  1428. package/search/search-multi-class/store/search-multi-class.actions.d.ts +65 -0
  1429. package/search/search-multi-class/store/search-multi-class.effects.d.ts +39 -0
  1430. package/search/search-multi-class/store/search-multi-class.reducer.d.ts +8 -0
  1431. package/search/search-multi-class/store/search-multi-class.selectors.d.ts +9 -0
  1432. package/search/search-multi-class/store/search-multi-class.service.d.ts +15 -0
  1433. package/search/search-tools/search-tools.component.d.ts +52 -0
  1434. package/search/search.module.d.ts +37 -0
  1435. package/search/style/_m-choose-widget.scss +108 -0
  1436. package/search/style/_m-pry-search-select-attribute.scss +28 -0
  1437. package/search/style/_o-edit-named-query-modal.scss +9 -0
  1438. package/search/style/_o-edit-named-query.scss +29 -0
  1439. package/search/style/_o-multi-class-condition.scss +65 -0
  1440. package/search/style/_o-multi-class-field-selection.scss +64 -0
  1441. package/search/style/_o-pry-search-composed.scss +89 -0
  1442. package/search/style/_o-pry-search-condition.scss +54 -0
  1443. package/search/style/_o-pry-search-home.scss +91 -0
  1444. package/search/style/_o-pry-search-order.scss +14 -0
  1445. package/search/style/_o-pry-search-tools.scss +150 -0
  1446. package/search/style/_o-search-fulltext.scss +154 -0
  1447. package/search/style/_o-search-mono-class.scss +45 -0
  1448. package/search/style/_o-search-multi-class.scss +34 -0
  1449. package/search/style/css.component.d.ts +5 -0
  1450. package/styles/abstracts/_abstracts-overlays.scss +13 -0
  1451. package/styles/abstracts/_abstracts-utils.scss +82 -0
  1452. package/styles/abstracts/_functions.scss +229 -0
  1453. package/styles/abstracts/_index.scss +5 -0
  1454. package/styles/abstracts/_mixins.scss +309 -0
  1455. package/styles/abstracts/_variables.scss +3 -0
  1456. package/styles/base/_custom-scrollbar.scss +9 -0
  1457. package/styles/base/_html-body.scss +5 -0
  1458. package/styles/base/_index.scss +6 -0
  1459. package/styles/base/_normalize.scss +351 -0
  1460. package/styles/base/_reboot.scss +376 -0
  1461. package/styles/base/_typography.scss +25 -0
  1462. package/styles/base/_utils.scss +67 -0
  1463. package/styles/components/_a-badge.scss +8 -0
  1464. package/styles/components/_a-btn.scss +207 -0
  1465. package/styles/components/_a-checkbox.scss +80 -0
  1466. package/styles/components/_a-checkmark.scss +1 -0
  1467. package/styles/components/_a-expandable-value.scss +51 -0
  1468. package/styles/components/_a-form-field.scss +96 -0
  1469. package/styles/components/_a-icon.scss +16 -0
  1470. package/styles/components/_a-label.scss +16 -0
  1471. package/styles/components/_a-link.scss +17 -0
  1472. package/styles/components/_a-loader.scss +30 -0
  1473. package/styles/components/_a-pastille.scss +14 -0
  1474. package/styles/components/_a-pry-select-image.scss +16 -0
  1475. package/styles/components/_a-pry-select.scss +19 -0
  1476. package/styles/components/_a-range-slider.scss +105 -0
  1477. package/styles/components/_a-table.scss +128 -0
  1478. package/styles/components/_a-toggle.scss +150 -0
  1479. package/styles/components/_m-actions-list.scss +25 -0
  1480. package/styles/components/_m-btn-group.scss +58 -0
  1481. package/styles/components/_m-btn-sorttable.scss +75 -0
  1482. package/styles/components/_m-color-selector.scss +58 -0
  1483. package/styles/components/_m-context-menu.scss +52 -0
  1484. package/styles/components/_m-filter.scss +7 -0
  1485. package/styles/components/_m-form-label-field.scss +55 -0
  1486. package/styles/components/_m-form-radio-group.scss +47 -0
  1487. package/styles/components/_m-image-selector.scss +11 -0
  1488. package/styles/components/_m-metadata-tag.scss +55 -0
  1489. package/styles/components/_m-minus-plus.scss +81 -0
  1490. package/styles/components/_m-nav-links.scss +34 -0
  1491. package/styles/components/_m-pry-overlay.scss +56 -0
  1492. package/styles/components/_m-snackbar.scss +52 -0
  1493. package/styles/components/_m-time-picker.scss +55 -0
  1494. package/styles/components/_m-toolbox.scss +21 -0
  1495. package/styles/components/_m-tooltip.scss +91 -0
  1496. package/styles/components/_o-accordion.scss +24 -0
  1497. package/styles/components/_o-card.scss +131 -0
  1498. package/styles/components/_o-cards-list.scss +11 -0
  1499. package/styles/components/_o-dashboard.scss +169 -0
  1500. package/styles/components/_o-datasources.scss +83 -0
  1501. package/styles/components/_o-date-picker.scss +141 -0
  1502. package/styles/components/_o-draggable-menu.scss +54 -0
  1503. package/styles/components/_o-form.scss +29 -0
  1504. package/styles/components/_o-modal.scss +94 -0
  1505. package/styles/components/_o-named-query.scss +43 -0
  1506. package/styles/components/_o-object-panel.scss +109 -0
  1507. package/styles/components/_o-panel.scss +37 -0
  1508. package/styles/components/_o-properties.scss +42 -0
  1509. package/styles/components/_o-pry-admin-classes-customize.scss +130 -0
  1510. package/styles/components/_o-pry-card-menu.scss +105 -0
  1511. package/styles/components/_o-pry-card.scss +97 -0
  1512. package/styles/components/_o-pry-composed-condition.scss +84 -0
  1513. package/styles/components/_o-pry-edit.scss +9 -0
  1514. package/styles/components/_o-pry-expand-panel.scss +36 -0
  1515. package/styles/components/_o-pry-stepper.scss +103 -0
  1516. package/styles/components/_o-search-mono-class.scss +45 -0
  1517. package/styles/components/_o-search-multi-class.scss +34 -0
  1518. package/styles/components/_o-settings.scss +123 -0
  1519. package/styles/components/_o-tabs.scss +108 -0
  1520. package/styles/components/_o-widget.scss +208 -0
  1521. package/styles/components/_overlay.scss +82 -0
  1522. package/styles/layout/_o-base-layout.scss +113 -0
  1523. package/styles/layout/_o-main-layout.scss +38 -0
  1524. package/styles/layout/_o-manifest-layout.scss +89 -0
  1525. package/styles/layout/_o-workspace.scss +61 -0
  1526. package/styles/layout/grid/_grid.scss +141 -0
  1527. package/styles/layout/grid/_visibility.scss +71 -0
  1528. package/styles/layout/grid/mixins/_grid-mixins.scss +368 -0
  1529. package/styles/layout/grid/mixins/_visibility-mixins.scss +115 -0
  1530. package/styles/layout/grid/variables/_grid-variables.scss +41 -0
  1531. package/styles/libs/_reset-lib-ol.scss +35 -0
  1532. package/styles/main.scss +78 -0
  1533. package/styles-theme/abstracts-theme/_abstracts-cards.theme.scss +22 -0
  1534. package/styles-theme/abstracts-theme/_abstracts-overlays.theme.scss +10 -0
  1535. package/styles-theme/abstracts-theme/_index.scss +3 -0
  1536. package/styles-theme/abstracts-theme/_variables.theme.scss +5 -0
  1537. package/styles-theme/abstracts-theme/variables/_index.scss +4 -0
  1538. package/styles-theme/abstracts-theme/variables/_variables-colors.scss +113 -0
  1539. package/styles-theme/abstracts-theme/variables/_variables-decoration.scss +49 -0
  1540. package/styles-theme/abstracts-theme/variables/_variables-fonts.scss +40 -0
  1541. package/styles-theme/abstracts-theme/variables/_variables-typo.scss +138 -0
  1542. package/styles-theme/base-theme/_custom-scrollbar.theme.scss +8 -0
  1543. package/styles-theme/base-theme/_fonts.theme.scss +37 -0
  1544. package/styles-theme/base-theme/_html-body.theme.scss +6 -0
  1545. package/styles-theme/base-theme/_index.scss +4 -0
  1546. package/styles-theme/base-theme/_typography.theme.scss +27 -0
  1547. package/styles-theme/components-theme/_a-badge.theme.scss +21 -0
  1548. package/styles-theme/components-theme/_a-btn.theme.scss +214 -0
  1549. package/styles-theme/components-theme/_a-checkbox.theme.scss +68 -0
  1550. package/styles-theme/components-theme/_a-checkmark.theme.scss +4 -0
  1551. package/styles-theme/components-theme/_a-expandable-value.theme.scss +23 -0
  1552. package/styles-theme/components-theme/_a-form-field.theme.scss +63 -0
  1553. package/styles-theme/components-theme/_a-icon.theme.scss +17 -0
  1554. package/styles-theme/components-theme/_a-label.theme.scss +16 -0
  1555. package/styles-theme/components-theme/_a-link.theme.scss +12 -0
  1556. package/styles-theme/components-theme/_a-pastille.theme.scss +14 -0
  1557. package/styles-theme/components-theme/_a-pry-select.theme.scss +117 -0
  1558. package/styles-theme/components-theme/_a-range-slider.theme.scss +54 -0
  1559. package/styles-theme/components-theme/_a-table.theme.scss +49 -0
  1560. package/styles-theme/components-theme/_a-toggle.theme.scss +62 -0
  1561. package/styles-theme/components-theme/_m-btn-sorttable.theme.scss +45 -0
  1562. package/styles-theme/components-theme/_m-choose-widget.theme.scss +4 -0
  1563. package/styles-theme/components-theme/_m-context-menu.theme.scss +46 -0
  1564. package/styles-theme/components-theme/_m-metadata-tag.theme.scss +17 -0
  1565. package/styles-theme/components-theme/_m-minus-plus.theme.scss +51 -0
  1566. package/styles-theme/components-theme/_m-nav-links.theme.scss +4 -0
  1567. package/styles-theme/components-theme/_m-notifications.theme.scss +90 -0
  1568. package/styles-theme/components-theme/_m-pry-search-select-attribute.theme.scss +15 -0
  1569. package/styles-theme/components-theme/_m-snackbar.theme.scss +42 -0
  1570. package/styles-theme/components-theme/_m-time-picker.theme.scss +36 -0
  1571. package/styles-theme/components-theme/_m-toolbox.theme.scss +15 -0
  1572. package/styles-theme/components-theme/_m-tooltip.theme.scss +66 -0
  1573. package/styles-theme/components-theme/_o-card.theme.scss +45 -0
  1574. package/styles-theme/components-theme/_o-catalog.theme.scss +74 -0
  1575. package/styles-theme/components-theme/_o-datasources.theme.scss +38 -0
  1576. package/styles-theme/components-theme/_o-date-picker.theme.scss +37 -0
  1577. package/styles-theme/components-theme/_o-draggable-menu.theme.scss +26 -0
  1578. package/styles-theme/components-theme/_o-modal.theme.scss +28 -0
  1579. package/styles-theme/components-theme/_o-multi-class-condition.theme.scss +22 -0
  1580. package/styles-theme/components-theme/_o-multi-class-field-selection.theme.scss +43 -0
  1581. package/styles-theme/components-theme/_o-named-query.theme.scss +19 -0
  1582. package/styles-theme/components-theme/_o-object-panel.theme.scss +11 -0
  1583. package/styles-theme/components-theme/_o-panel.theme.scss +18 -0
  1584. package/styles-theme/components-theme/_o-pipeline.theme.scss +88 -0
  1585. package/styles-theme/components-theme/_o-pry-admin-classes-customize.theme.scss +14 -0
  1586. package/styles-theme/components-theme/_o-pry-card-menu.theme.scss +55 -0
  1587. package/styles-theme/components-theme/_o-pry-card.theme.scss +44 -0
  1588. package/styles-theme/components-theme/_o-pry-composed-condition.theme.scss +60 -0
  1589. package/styles-theme/components-theme/_o-pry-dataset-card.theme.scss +18 -0
  1590. package/styles-theme/components-theme/_o-pry-dataset.theme.scss +12 -0
  1591. package/styles-theme/components-theme/_o-pry-expand-panel.theme.scss +12 -0
  1592. package/styles-theme/components-theme/_o-pry-new-presentation.theme.scss +20 -0
  1593. package/styles-theme/components-theme/_o-pry-presentation.theme.scss +39 -0
  1594. package/styles-theme/components-theme/_o-pry-search-composed.theme.scss +44 -0
  1595. package/styles-theme/components-theme/_o-pry-search-condition.theme.scss +10 -0
  1596. package/styles-theme/components-theme/_o-pry-search-home.theme.scss +25 -0
  1597. package/styles-theme/components-theme/_o-pry-search-tools.theme.scss +54 -0
  1598. package/styles-theme/components-theme/_o-pry-stepper.theme.scss +35 -0
  1599. package/styles-theme/components-theme/_o-restitution-list.theme.scss +27 -0
  1600. package/styles-theme/components-theme/_o-restitution.theme.scss +7 -0
  1601. package/styles-theme/components-theme/_o-search-fulltext.theme.scss +83 -0
  1602. package/styles-theme/components-theme/_o-search-multi-class.theme.scss +28 -0
  1603. package/styles-theme/components-theme/_o-select-grid-layout.theme.scss +33 -0
  1604. package/styles-theme/components-theme/_o-settings.theme.scss +64 -0
  1605. package/styles-theme/components-theme/_o-tabs.theme.scss +37 -0
  1606. package/styles-theme/components-theme/_o-widget-detail.theme.scss +21 -0
  1607. package/styles-theme/components-theme/_o-widget-graph.theme.scss +32 -0
  1608. package/styles-theme/components-theme/_o-widget-iframe.theme.scss +30 -0
  1609. package/styles-theme/components-theme/_o-widget-map.theme.scss +5 -0
  1610. package/styles-theme/components-theme/_o-widget-table.theme.scss +18 -0
  1611. package/styles-theme/components-theme/_o-widget-tile.theme.scss +21 -0
  1612. package/styles-theme/components-theme/_o-widget.theme.scss +70 -0
  1613. package/styles-theme/components-theme/_overlay.theme.scss +44 -0
  1614. package/styles-theme/layout-theme/_o-base-layout.theme.scss +24 -0
  1615. package/styles-theme/layout-theme/_o-manifest-layout.theme.scss +33 -0
  1616. package/styles-theme/layout-theme/_o-workspace.theme.scss +18 -0
  1617. package/styles-theme/libs-theme/_reset-lib-ol.theme.scss +38 -0
  1618. package/styles-theme/main-theme.scss +83 -0
  1619. package/supervision/components/supervision-business-data/supervision-business-data.component.d.ts +14 -0
  1620. package/supervision/components/supervision-flow/supervision-flow.component.d.ts +14 -0
  1621. package/supervision/components/supervision-infrastructures/supervision-infrastructures.component.d.ts +18 -0
  1622. package/supervision/components/supervision-integration-errors/supervision-integration-errors-select/supervision-integration-errors-select.component.d.ts +14 -0
  1623. package/supervision/components/supervision-integration-errors/supervision-integration-errors.component.d.ts +29 -0
  1624. package/supervision/components/supervision-layout/supervision-layout.component.d.ts +21 -0
  1625. package/supervision/components/supervision-menu/supervision-menu.component.d.ts +13 -0
  1626. package/supervision/components/supervision-title/supervision-title.component.d.ts +11 -0
  1627. package/supervision/components/supervision.component.d.ts +9 -0
  1628. package/supervision/i18n/en.translations.d.ts +57 -0
  1629. package/supervision/i18n/fr.translations.d.ts +57 -0
  1630. package/supervision/index.d.ts +5 -0
  1631. package/supervision/public-api.d.ts +1 -0
  1632. package/supervision/store/supervision-api.model.d.ts +36 -0
  1633. package/supervision/store/supervision.actions.d.ts +121 -0
  1634. package/supervision/store/supervision.effects.d.ts +51 -0
  1635. package/supervision/store/supervision.reducer.d.ts +22 -0
  1636. package/supervision/store/supervision.selectors.d.ts +18 -0
  1637. package/supervision/store/supervision.service.d.ts +19 -0
  1638. package/supervision/supervision-routing.module.d.ts +7 -0
  1639. package/supervision/supervision.module.d.ts +25 -0
  1640. package/toolbox/components/clear-view/clear-view.component.d.ts +10 -0
  1641. package/toolbox/components/drag-widgets/drag-widgets.component.d.ts +19 -0
  1642. package/toolbox/components/edit-mode-toggle/edit-mode-toggle.component.d.ts +12 -0
  1643. package/toolbox/components/filter-settings/filter-settings.component.d.ts +80 -0
  1644. package/toolbox/components/launch-tab/launch-tab.component.d.ts +10 -0
  1645. package/toolbox/components/named-query/named-query.component.d.ts +15 -0
  1646. package/toolbox/components/save-view/save-view.component.d.ts +53 -0
  1647. package/toolbox/components/select-grid-layout/select-grid-layout.component.d.ts +35 -0
  1648. package/toolbox/components/toolbox.component.d.ts +11 -0
  1649. package/toolbox/index.d.ts +5 -0
  1650. package/toolbox/public-api.d.ts +11 -0
  1651. package/toolbox/style/_o-filter-settings.scss +96 -0
  1652. package/toolbox/style/_o-select-grid-layout.scss +43 -0
  1653. package/toolbox/style/css.component.d.ts +5 -0
  1654. package/toolbox/toolbox.module.d.ts +23 -0
  1655. package/tooltips/attribute/attribute-tooltip.component.d.ts +10 -0
  1656. package/tooltips/attribute/attribute-tooltip.module.d.ts +14 -0
  1657. package/tooltips/attribute/index.d.ts +5 -0
  1658. package/tooltips/attribute/public-api.d.ts +2 -0
  1659. package/tooltips/cluster/cluster-tooltip.component.d.ts +6 -0
  1660. package/tooltips/cluster/cluster-tooltip.module.d.ts +13 -0
  1661. package/tooltips/cluster/index.d.ts +5 -0
  1662. package/tooltips/cluster/public-api.d.ts +2 -0
  1663. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +101 -0
  1664. package/widgets/widget-aggregated-chart/i18n/en.translations.d.ts +103 -0
  1665. package/widgets/widget-aggregated-chart/i18n/fr.translations.d.ts +103 -0
  1666. package/widgets/widget-aggregated-chart/index.d.ts +5 -0
  1667. package/widgets/widget-aggregated-chart/public-api.d.ts +5 -0
  1668. package/widgets/widget-aggregated-chart/service/backend-aggregation.service.d.ts +21 -0
  1669. package/widgets/widget-aggregated-chart/service/base-aggregation.service.d.ts +21 -0
  1670. package/widgets/widget-aggregated-chart/service/frontend-aggregation.service.d.ts +32 -0
  1671. package/widgets/widget-aggregated-chart/style/_o-widget-chart.scss +43 -0
  1672. package/widgets/widget-aggregated-chart/style/css.component.d.ts +5 -0
  1673. package/widgets/widget-aggregated-chart/widget-aggregated-chart.module.d.ts +18 -0
  1674. package/widgets/widget-chart/component/vega-error.handler.d.ts +6 -0
  1675. package/widgets/widget-chart/component/vega-spec.constant.d.ts +98 -0
  1676. package/widgets/widget-chart/component/widget-chart.component.d.ts +151 -0
  1677. package/widgets/widget-chart/i18n/en.translations.d.ts +113 -0
  1678. package/widgets/widget-chart/i18n/fr.translations.d.ts +113 -0
  1679. package/widgets/widget-chart/index.d.ts +5 -0
  1680. package/widgets/widget-chart/public-api.d.ts +2 -0
  1681. package/widgets/widget-chart/style/_o-widget-chart.scss +43 -0
  1682. package/widgets/widget-chart/style/css.component.d.ts +5 -0
  1683. package/widgets/widget-chart/widget-chart.module.d.ts +18 -0
  1684. package/widgets/widget-detail/component/widget-detail.component.d.ts +45 -0
  1685. package/widgets/widget-detail/i18n/en.translations.d.ts +13 -0
  1686. package/widgets/widget-detail/i18n/fr.translations.d.ts +13 -0
  1687. package/widgets/widget-detail/index.d.ts +5 -0
  1688. package/widgets/widget-detail/public-api.d.ts +2 -0
  1689. package/widgets/widget-detail/style/_o-widget-detail.scss +60 -0
  1690. package/widgets/widget-detail/style/css.component.d.ts +5 -0
  1691. package/widgets/widget-detail/widget-detail.module.d.ts +18 -0
  1692. package/widgets/widget-graph/component/widget-graph.component.d.ts +101 -0
  1693. package/widgets/widget-graph/i18n/en.translations.d.ts +14 -0
  1694. package/widgets/widget-graph/i18n/fr.translations.d.ts +14 -0
  1695. package/widgets/widget-graph/index.d.ts +5 -0
  1696. package/widgets/widget-graph/layout/node.interface.d.ts +12 -0
  1697. package/widgets/widget-graph/layout/simple.function.d.ts +9 -0
  1698. package/widgets/widget-graph/public-api.d.ts +3 -0
  1699. package/widgets/widget-graph/style/_o-widget-graph.scss +4 -0
  1700. package/widgets/widget-graph/style/css.component.d.ts +5 -0
  1701. package/widgets/widget-graph/widget-graph.module.d.ts +18 -0
  1702. package/widgets/widget-iframe/component/widget-iframe.component.d.ts +20 -0
  1703. package/widgets/widget-iframe/i18n/en.translations.d.ts +10 -0
  1704. package/widgets/widget-iframe/i18n/fr.translations.d.ts +10 -0
  1705. package/widgets/widget-iframe/index.d.ts +5 -0
  1706. package/widgets/widget-iframe/messaging/iframe-message-type.interface.d.ts +8 -0
  1707. package/widgets/widget-iframe/messaging/iframe-messaging.service.d.ts +10 -0
  1708. package/widgets/widget-iframe/public-api.d.ts +4 -0
  1709. package/widgets/widget-iframe/style/_o-widget-iframe.scss +19 -0
  1710. package/widgets/widget-iframe/style/css.component.d.ts +5 -0
  1711. package/widgets/widget-iframe/widget-iframe.module.d.ts +18 -0
  1712. package/widgets/widget-image/component/widget-image.component.d.ts +13 -0
  1713. package/widgets/widget-image/index.d.ts +5 -0
  1714. package/widgets/widget-image/public-api.d.ts +2 -0
  1715. package/widgets/widget-image/style/_o-widget-image.scss +7 -0
  1716. package/widgets/widget-image/style/css.component.d.ts +5 -0
  1717. package/widgets/widget-image/widget-image.module.d.ts +14 -0
  1718. package/widgets/widget-map/component/widget-map-layer.service.d.ts +98 -0
  1719. package/widgets/widget-map/component/widget-map.component.d.ts +136 -0
  1720. package/widgets/widget-map/i18n/en.translations.d.ts +80 -0
  1721. package/widgets/widget-map/i18n/fr.translations.d.ts +80 -0
  1722. package/widgets/widget-map/index.d.ts +5 -0
  1723. package/widgets/widget-map/interaction/selection-interaction.class.d.ts +25 -0
  1724. package/widgets/widget-map/pipe/widget-map-geometry-fields-for.pipe.d.ts +14 -0
  1725. package/widgets/widget-map/pipe/widget-map-legend-url.pipe.d.ts +8 -0
  1726. package/widgets/widget-map/public-api.d.ts +6 -0
  1727. package/widgets/widget-map/reader/kmz-zip-reader.class.d.ts +12 -0
  1728. package/widgets/widget-map/reader/map-formats-reader.class.d.ts +15 -0
  1729. package/widgets/widget-map/reader/random-color-style.function.d.ts +6 -0
  1730. package/widgets/widget-map/reader/read-as-text.class.d.ts +10 -0
  1731. package/widgets/widget-map/reader/shp-zip-reader.class.d.ts +10 -0
  1732. package/widgets/widget-map/search-bar/search-bar.control.d.ts +27 -0
  1733. package/widgets/widget-map/style/_o-layer-legend.scss +42 -0
  1734. package/widgets/widget-map/style/_o-widget-map.scss +69 -0
  1735. package/widgets/widget-map/style/css.component.d.ts +5 -0
  1736. package/widgets/widget-map/utils/widget-map.utils.d.ts +29 -0
  1737. package/widgets/widget-map/widget-map.module.d.ts +20 -0
  1738. package/widgets/widget-table/component/widget-table.component.d.ts +41 -0
  1739. package/widgets/widget-table/expand-value/detach-row.directive.d.ts +12 -0
  1740. package/widgets/widget-table/expand-value/expand-value.component.d.ts +10 -0
  1741. package/widgets/widget-table/expand-value/format-number.pipe.d.ts +12 -0
  1742. package/widgets/widget-table/get-value/get-value.pipe.d.ts +11 -0
  1743. package/widgets/widget-table/i18n/en.translations.d.ts +14 -0
  1744. package/widgets/widget-table/i18n/fr.translations.d.ts +14 -0
  1745. package/widgets/widget-table/index.d.ts +5 -0
  1746. package/widgets/widget-table/public-api.d.ts +5 -0
  1747. package/widgets/widget-table/resizable/resizable.component.d.ts +7 -0
  1748. package/widgets/widget-table/resizable/resizable.directive.d.ts +10 -0
  1749. package/widgets/widget-table/style/_o-widget-table.scss +64 -0
  1750. package/widgets/widget-table/style/css.component.d.ts +5 -0
  1751. package/widgets/widget-table/widget-table.module.d.ts +24 -0
  1752. package/widgets/widget-template/component/widget-template.component.d.ts +21 -0
  1753. package/widgets/widget-template/index.d.ts +5 -0
  1754. package/widgets/widget-template/public-api.d.ts +2 -0
  1755. package/widgets/widget-template/style/_o-widget-template.scss +8 -0
  1756. package/widgets/widget-template/style/css.component.d.ts +5 -0
  1757. package/widgets/widget-template/widget-template.module.d.ts +16 -0
  1758. package/widgets/widget-tile/component/widget-tile.component.d.ts +47 -0
  1759. package/widgets/widget-tile/i18n/en.translations.d.ts +12 -0
  1760. package/widgets/widget-tile/i18n/fr.translations.d.ts +12 -0
  1761. package/widgets/widget-tile/index.d.ts +5 -0
  1762. package/widgets/widget-tile/public-api.d.ts +2 -0
  1763. package/widgets/widget-tile/style/_o-widget-tile.scss +83 -0
  1764. package/widgets/widget-tile/style/css.component.d.ts +5 -0
  1765. package/widgets/widget-tile/widget-tile.module.d.ts +20 -0
@@ -0,0 +1,652 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import { Aggregation, ClassSelectors, ConfigSelectors, DashboardSelectors, DataWidgetComponent, FieldSelectors, FieldType, ItemUtils, MarkSubType, MarkType, VegaType, WIDGET_HEADER_HEIGHT } from '@provoly/dashboard';
3
+ import equal from 'fast-deep-equal/es6';
4
+ import { BehaviorSubject, combineLatest, delay, Subject } from 'rxjs';
5
+ import { distinctUntilChanged, filter, map } from 'rxjs/operators';
6
+ import embed, { vega } from 'vega-embed';
7
+ import { mergeDeep } from 'vega-lite';
8
+ import { fontConfig } from 'vega-lite/build/src/config';
9
+ import { VegaErrorHandler } from './vega-error.handler';
10
+ import { vegaBaseConf, vegaCirclePackConf, vegaRadarConf } from './vega-spec.constant';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@ngrx/store";
13
+ import * as i2 from "@provoly/dashboard";
14
+ import * as i3 from "@angular/common";
15
+ import * as i4 from "@angular/forms";
16
+ import * as i5 from "@provoly/dashboard/components/checkbox";
17
+ import * as i6 from "../style/css.component";
18
+ vega.scheme('KO/W/OK', ['#C04D3F', '#FD9843', '#9ABE29']);
19
+ export class WidgetChartComponent extends DataWidgetComponent {
20
+ constructor(store, translateService, el, cdRef) {
21
+ super(store, el);
22
+ this.translateService = translateService;
23
+ this.cdRef = cdRef;
24
+ this.typeOptions = [];
25
+ this.markTypes = [];
26
+ this.MarkType = MarkType;
27
+ this.MarkSubType = MarkSubType;
28
+ this.WIDGET_HEADER_HEIGHT = WIDGET_HEADER_HEIGHT;
29
+ this.timeUnits = ['year', 'quarter', 'month', 'week', 'day', 'hours', 'minutes'];
30
+ this.optionsCopy = {};
31
+ this.triggerCalculatePossibleAttributes$ = new BehaviorSubject(undefined);
32
+ this.variables = [];
33
+ this.aggregations = [];
34
+ this.variableAttributes = [];
35
+ this.fields = [];
36
+ this.comparisons = [
37
+ {
38
+ id: 'item',
39
+ name: this.translateService.instant('@pry.widget.chart.comparison.item')
40
+ },
41
+ {
42
+ id: 'value',
43
+ name: this.translateService.instant('@pry.widget.chart.comparison.value')
44
+ }
45
+ ];
46
+ this.trigger$ = new Subject();
47
+ this.invalidJson = false;
48
+ this.templateTypeTranslationFn = (item, args) => `${args[0]}${item === MarkSubType.DEFAULT ? item : args[1] + args[2] + item}`;
49
+ this.translateAggregations = (item) => this.translateService.instant('@pry.widget.chart.aggregation.' + item);
50
+ this.advancedEdit = '{}';
51
+ this.store.select(ConfigSelectors.chartOption).subscribe((chartOptions) => {
52
+ this.aggregations = chartOptions.aggregation;
53
+ this.schemes = chartOptions.color.map((scheme) => ({ id: scheme, translated: '' }));
54
+ this.markTypes = chartOptions.type;
55
+ this.subTypes = chartOptions.subType;
56
+ this.typeOptions = this.markTypes
57
+ .map((type) => {
58
+ // @ts-ignore
59
+ return this.subTypes && this.subTypes[type] ? this.subTypes[type].map((subType) => ({ type, subType })) : [];
60
+ })
61
+ .reduce((p, c) => [...p, ...c], [])
62
+ .map((options) => ({
63
+ ...options,
64
+ id: `${options.type}-${options.subType}`,
65
+ label: options.subType === MarkSubType.DEFAULT ? options.type : options.subType
66
+ }))
67
+ .map((options) => ({
68
+ ...options,
69
+ translated: this.translateService.instant('@pry.widget.chart.markType.' + options.label)
70
+ }));
71
+ this.typeOptions.sort((a, b) => a.translated?.localeCompare(b.translated ?? '') ?? -1);
72
+ });
73
+ this.classes$ = this.store.select(ClassSelectors.classes);
74
+ this.fields$ = this.store.select(FieldSelectors.fields);
75
+ this.variableAttributes$ = combineLatest([this.resultSet$, this.classes$, this.fields$]).pipe(map(([resultSet, classes, fields]) => ItemUtils.getAttributesFromRs(resultSet, classes, fields)), map((fields) => fields.sort((a, b) => a.name.localeCompare(b.name))), map((props) => WidgetChartComponent.uniqueAttributesByNames(props)), distinctUntilChanged((p, c) => equal(p, c)));
76
+ this.subscriptions.add(this.variableAttributes$.subscribe((attrs) => (this.variableAttributes = attrs)));
77
+ this.subscriptions.add(this.fields$.subscribe((attrs) => (this.fields = attrs)));
78
+ this.variables$ = combineLatest([this.variableAttributes$, this.fields$]).pipe(map(([attributes, fields]) => {
79
+ return attributes.map((attr) => ({
80
+ name: attr.name,
81
+ label: attr.name,
82
+ type: this.translateToVegaType(fields.find((field) => field.id === attr.field)?.type ?? FieldType.STRING, attr.name)
83
+ }) ?? []);
84
+ }));
85
+ this.options$ = combineLatest([
86
+ this.variables$,
87
+ this.manifest$.pipe(map((manifest) => manifest.options))
88
+ ]).pipe(map(([variables, options]) => ({
89
+ ...options,
90
+ title: options?.title ?? ((variables[0]?.label ?? '') + ', ' + (variables[1]?.label ?? '')).replace(/^, $/, ''),
91
+ selectedVariables: options?.selectedVariables ?? [{}, {}],
92
+ // Here, we do not presume of the type of graph that the user wants, and prefer to display a button to go to params
93
+ type: options?.type ?? undefined,
94
+ aggregation: options?.aggregation ?? Aggregation.COUNT,
95
+ tooltip: options?.tooltip ?? true,
96
+ legend: options.legend ?? true,
97
+ locale: 'fr'
98
+ })));
99
+ this.items$ = this.resultSet$.pipe(filter((resultSet) => !!resultSet), map((resultSet) => {
100
+ return Object.keys(resultSet?.items)
101
+ .map((classId) => resultSet.items[classId])
102
+ .reduce((prev, curr) => [...prev, ...curr], []);
103
+ }));
104
+ this.possibleSecondaryAttributes$ = combineLatest([
105
+ this.variableAttributes$,
106
+ this.items$,
107
+ this.fields$,
108
+ this.triggerCalculatePossibleAttributes$
109
+ ]).pipe(map(([variableFields, items, fields, _]) => {
110
+ return variableFields
111
+ .filter((attribute) => {
112
+ // Keep only numeric values when necessary
113
+ if (!this.optionsCopy.aggregation ||
114
+ [Aggregation.NONE, Aggregation.DISTINCT, Aggregation.COUNT].includes(this.optionsCopy.aggregation)) {
115
+ return true;
116
+ }
117
+ else {
118
+ const field = fields.find((field) => field.id === attribute.field);
119
+ return [FieldType.DECIMAL, FieldType.INSTANT, FieldType.LONG, FieldType.INTEGER].includes(field?.type ?? FieldType.STRING);
120
+ }
121
+ })
122
+ .filter((attribute) => items.find((item) => Object.keys(item.attributes).includes(this.optionsCopy.selectedVariables[0].label) &&
123
+ Object.keys(item.attributes).includes(attribute.name) &&
124
+ !!item.attributes[this.optionsCopy.selectedVariables[0].label].value &&
125
+ item.attributes[attribute.name].value !== undefined));
126
+ }), map((props) => WidgetChartComponent.uniqueAttributesByNames(props)));
127
+ this.numericProperties$ = combineLatest([
128
+ this.variableAttributes$,
129
+ this.items$,
130
+ this.fields$,
131
+ this.triggerCalculatePossibleAttributes$
132
+ ]).pipe(map(([variableFields, items, fields, _]) => {
133
+ return variableFields
134
+ .filter((attribute) => {
135
+ const field = fields.find((field) => field.id === attribute.field);
136
+ return [FieldType.DECIMAL, FieldType.INSTANT, FieldType.LONG, FieldType.INTEGER].includes(field?.type ?? FieldType.STRING);
137
+ })
138
+ .filter((attribute) => items.find((item) => Object.keys(item.attributes).includes(attribute.name) &&
139
+ item.attributes[attribute.name].value !== undefined));
140
+ }), map((props) => {
141
+ return WidgetChartComponent.uniqueAttributesByNames(props);
142
+ }));
143
+ this.textProperties$ = combineLatest([
144
+ this.variableAttributes$,
145
+ this.items$,
146
+ this.fields$,
147
+ this.triggerCalculatePossibleAttributes$
148
+ ]).pipe(map(([variableFields, items, fields, _]) => {
149
+ return variableFields
150
+ .filter((attribute) => {
151
+ const field = fields.find((field) => field.id === attribute.field);
152
+ return [FieldType.STRING, FieldType.KEYWORD].includes(field?.type ?? FieldType.INTEGER);
153
+ })
154
+ .filter((attribute) => items.find((item) => Object.keys(item.attributes).includes(attribute.name) &&
155
+ item.attributes[attribute.name].value !== undefined));
156
+ }), map((props) => {
157
+ return WidgetChartComponent.uniqueAttributesByNames(props);
158
+ }));
159
+ this.filterDataForOptions$ = combineLatest([this.items$, this.options$, this.variableAttributes$]).pipe(filter(([items, options]) => options.selectedVariables && options.selectedVariables.length > 0), map(([items, options, variables]) => WidgetChartComponent.matchingItems(items, options, variables)));
160
+ this.filterDataForOptionsCopy$ = combineLatest([
161
+ this.items$,
162
+ this.triggerCalculatePossibleAttributes$.pipe(delay(200)),
163
+ this.variableAttributes$
164
+ ]).pipe(filter(([items, _]) => this.optionsCopy.selectedVariables && this.optionsCopy.selectedVariables.length > 0), map(([items, _, variables]) => WidgetChartComponent.matchingItems(items, this.optionsCopy, variables)));
165
+ this.subscriptions.add(this.options$.pipe(filter((opt) => !!opt)).subscribe((options) => {
166
+ this.optionsCopy = JSON.parse(JSON.stringify(options));
167
+ this.updateAdvancedEdit(JSON.stringify(this.optionsCopy.specToMerge));
168
+ this.optionsCopy.type = !this.markTypes.includes(this.optionsCopy.type)
169
+ ? this.markTypes[0]
170
+ : this.optionsCopy.type;
171
+ this.optionsCopy.subType = this.optionsCopy.subType ?? MarkSubType.DEFAULT;
172
+ this.optionsCopy.aggregation = !this.aggregations.includes(this.optionsCopy.aggregation)
173
+ ? this.aggregations[0]
174
+ : this.optionsCopy.aggregation;
175
+ if (this.optionsCopy.series) {
176
+ this.optionsCopy.series.scheme =
177
+ this.optionsCopy.series?.scheme &&
178
+ this.schemes &&
179
+ !this.schemes.find((s) => s.id === this.optionsCopy?.series?.scheme)
180
+ ? this.schemes[0].id
181
+ : this.optionsCopy.series?.scheme;
182
+ }
183
+ }));
184
+ this.vegaLiteSpec$ = combineLatest([
185
+ this.store.select(DashboardSelectors.windowManifest),
186
+ this.manifest$,
187
+ this.widgetSize$,
188
+ this.filterDataForOptions$,
189
+ this.options$,
190
+ this.displayHeader$,
191
+ this.variableAttributes$
192
+ ]).pipe(map(([windowManifest, widgetManifest, size, data, options, displayHeader, variableField]) => {
193
+ let spec = vegaBaseConf;
194
+ switch (options.type) {
195
+ case MarkType.RADAR:
196
+ spec = vegaRadarConf;
197
+ break;
198
+ case MarkType.CIRCLE_PACK:
199
+ spec = vegaCirclePackConf;
200
+ }
201
+ spec.title = options.customTitle ?? options.title;
202
+ switch (options.type) {
203
+ case MarkType.RADAR:
204
+ spec.signals[0].update = size.width > size.height ? 'height / 2' : 'width / 2';
205
+ spec.data[0].values = WidgetChartComponent.buildDataVegaRadar(data, options);
206
+ spec.scales[2].range.scheme = options.series?.scheme;
207
+ break;
208
+ case MarkType.CIRCLE_PACK:
209
+ spec.data[0].values = JSON.parse(JSON.stringify(data));
210
+ spec.data[1].transform[0].key = 'attributes.' + options.packing?.id + '.value';
211
+ spec.data[1].transform[0].parentKey = 'attributes.' + options.packing?.parentId + '.value';
212
+ spec.data[1].transform[1].field = 'attributes.' + options.packing?.packField + '.value';
213
+ spec.marks[0].encode.enter.tooltip.signal = `datum.attributes.${options.packing?.tooltip ?? options.packing?.id}.value + ' : ' + datum.attributes.${options.packing?.packField}.value`;
214
+ break;
215
+ default:
216
+ spec.data = { values: JSON.parse(JSON.stringify(data)) };
217
+ spec.layer = [
218
+ {
219
+ mark: {
220
+ type: options.type,
221
+ point: options.type === MarkType.POINT ||
222
+ options.subType === MarkSubType.WITH_LINES_AND_POINTS ||
223
+ options.subType === MarkSubType.WITH_POINTS,
224
+ line: options.type === MarkType.LINE || options.subType === MarkSubType.WITH_LINES_AND_POINTS,
225
+ innerRadius: options.innerRadius,
226
+ tooltip: options.tooltip ?? true
227
+ },
228
+ encoding: WidgetChartComponent.calculateEncoding(options)
229
+ }
230
+ ];
231
+ if (options.fill) {
232
+ spec.layer[0].mark.fill = options.fill;
233
+ }
234
+ if (options.subType === MarkSubType.AREASTACKED || options.subType === MarkSubType.HISTOSTACKED) {
235
+ spec.data.transform = [
236
+ {
237
+ type: 'stack',
238
+ groupby: [options.selectedVariables[0].name],
239
+ sort: { field: options.series?.groupBy },
240
+ field: options.selectedVariables[1].name
241
+ }
242
+ ];
243
+ }
244
+ }
245
+ const merged = mergeDeep(spec, { config: fontConfig('Ubuntu, sans-serif') }, options.specToMerge);
246
+ if (!!options.specToMerge) {
247
+ console.log(JSON.stringify(spec));
248
+ }
249
+ return merged;
250
+ }));
251
+ this.isChartValid$ = this.options$.pipe(map((options) => !!options.type &&
252
+ // We must have the correct number of variables to draw the graph
253
+ (options.selectedVariables.filter((v) => !!v.type).length > 1 ||
254
+ (options.selectedVariables.filter((v) => !!v.type).length > 0 &&
255
+ (options.aggregation === Aggregation.COUNT ||
256
+ options.aggregation === Aggregation.DISTINCT ||
257
+ options.aggregation === Aggregation.NONE)))));
258
+ }
259
+ ngAfterViewInit() {
260
+ this.subscriptions.add(combineLatest([this.vegaLiteSpec$, this.trigger$]).subscribe(([spec, _]) => {
261
+ if (this.vega) {
262
+ this.view?.finalize();
263
+ embed(this.vega.nativeElement, JSON.parse(JSON.stringify(spec)), {
264
+ actions: false,
265
+ renderer: 'svg',
266
+ formatLocale: this.optionsCopy.locale === 'fr'
267
+ ? {
268
+ decimal: ',',
269
+ thousands: '\u00a0',
270
+ grouping: [3],
271
+ currency: ['', '\u00a0€'],
272
+ percent: '\u202f%'
273
+ }
274
+ : {
275
+ decimal: '.',
276
+ thousands: ',',
277
+ grouping: [3],
278
+ currency: ['$', '']
279
+ },
280
+ // @ts-ignore
281
+ viewClass: VegaErrorHandler
282
+ }).then((result) => (this.view = result.view));
283
+ }
284
+ else {
285
+ setTimeout(() => this.trigger$.next(), 100);
286
+ }
287
+ }));
288
+ this.trigger$.next();
289
+ }
290
+ static calculateEncoding(options) {
291
+ const variables = options.selectedVariables ?? [{}, {}];
292
+ switch (options.type) {
293
+ case MarkType.ARC:
294
+ return {
295
+ theta: {
296
+ field: `attributes.${variables[1].name}.value`,
297
+ title: variables[1].label,
298
+ type: variables[1].type,
299
+ aggregate: 'count'
300
+ },
301
+ color: {
302
+ field: `attributes.${variables[0].name}.value`,
303
+ title: variables[0].label,
304
+ type: variables[0].type,
305
+ legend: options.legend ?? true,
306
+ scale: options.scale ?? { scheme: options.series?.scheme ?? 'category20c' }
307
+ }
308
+ };
309
+ case MarkType.RADAR:
310
+ return {};
311
+ default:
312
+ const encoding = {
313
+ x: {
314
+ field: `attributes.${variables[0].name}.value`,
315
+ title: variables[0].label,
316
+ type: variables[0].type,
317
+ timeUnit: variables[0].type === VegaType.TEMPORAL ? variables[0].timeUnit : undefined,
318
+ bin: options.subType === MarkSubType.HISTOGRAM,
319
+ axis: variables[0].axisOptions,
320
+ scale: {
321
+ // Force a false value here so that vega understand properly
322
+ zero: !!variables[0].origin0,
323
+ type: WidgetChartComponent.isTimeUnitUTC(variables[0]) ? 'utc' : undefined
324
+ }
325
+ },
326
+ y: {
327
+ field: `attributes.${variables[1].name}.value`,
328
+ title: variables[1].label,
329
+ type: options.aggregation === Aggregation.COUNT ? VegaType.QUANTITATIVE : variables[1].type,
330
+ timeUnit: variables[1].type === VegaType.TEMPORAL ? variables[1].timeUnit : undefined,
331
+ axis: variables[1].axisOptions,
332
+ aggregate: options.aggregation !== Aggregation.NONE ? options.aggregation : undefined,
333
+ scale: {
334
+ zero: variables[1].origin0,
335
+ type: WidgetChartComponent.isTimeUnitUTC(variables[1]) ? 'utc' : undefined
336
+ }
337
+ }
338
+ };
339
+ if (options.series) {
340
+ // @ts-ignore
341
+ encoding.color = {
342
+ title: `${options.series.groupBy}`,
343
+ field: `attributes.${options.series.groupBy}.value`,
344
+ legend: options.legend
345
+ };
346
+ if (options.series.scheme) {
347
+ // @ts-ignore
348
+ encoding.color.scale = { scheme: options.series.scheme };
349
+ }
350
+ }
351
+ return encoding;
352
+ }
353
+ }
354
+ static buildDataVegaRadar(items, options) {
355
+ if (options.radar?.compare === 'item') {
356
+ return items
357
+ .map((item, idx) => (options.radar?.props ?? []).map((prop) => {
358
+ const itemValueMultiple = ItemUtils.getAttributeValue(item, prop);
359
+ const itemValue = Array.isArray(itemValueMultiple) ? itemValueMultiple[0] : itemValueMultiple;
360
+ return {
361
+ category: idx,
362
+ key: prop,
363
+ value: itemValue?.value
364
+ };
365
+ }))
366
+ .reduce((a, b) => [...a, ...b], [])
367
+ .filter((a) => a.value !== undefined && a.value !== null);
368
+ }
369
+ else {
370
+ return items
371
+ .map((item, idx) => ({
372
+ category: item.attributes[options.radar?.categoryProp ?? '']?.value ?? 'object',
373
+ key: item.attributes[options.radar?.keyProp ?? '']?.value,
374
+ value: item.attributes[options.radar?.valueProp ?? '']?.value
375
+ }))
376
+ .filter((a) => a.value !== undefined && a.value !== null && !!a.key);
377
+ }
378
+ }
379
+ static matchingItems(items, options, attributes) {
380
+ return items.filter((item) => {
381
+ switch (options.type) {
382
+ case MarkType.CIRCLE_PACK:
383
+ return !!options.packing?.id && !!options.packing.parentId && !!options.packing.packField;
384
+ case MarkType.RADAR:
385
+ return (((options.radar?.compare === 'item' && (options.radar.props?.length ?? []) > 2) ||
386
+ (options.radar?.compare !== 'item' &&
387
+ !!options.radar?.keyProp &&
388
+ !!options.radar.valueProp &&
389
+ !!options.radar.categoryProp)) &&
390
+ WidgetChartComponent.buildDataVegaRadar(items, options).length > 0);
391
+ default:
392
+ return (Object.keys(item.attributes).includes(options.selectedVariables[0].name) &&
393
+ item.attributes[options.selectedVariables[0].name].value !== undefined &&
394
+ ((Object.keys(item.attributes).includes(options.selectedVariables[1].name) &&
395
+ item.attributes[options.selectedVariables[1].name].value !== undefined) ||
396
+ options.aggregation === Aggregation.DISTINCT ||
397
+ options.aggregation === Aggregation.COUNT));
398
+ }
399
+ });
400
+ }
401
+ static uniqueAttributesByNames(attributes) {
402
+ return [...new Set(attributes.map((attr) => attr.name))].map((attrName) => attributes.find((attr) => attr.name === attrName) ?? {});
403
+ }
404
+ changeChartTitle(title) {
405
+ this.optionsCopy.customTitle = title;
406
+ }
407
+ changeTimeUnit($event, variable) {
408
+ variable.timeUnit = $event;
409
+ }
410
+ changeAggregation($event) {
411
+ this.optionsCopy.aggregation = $event;
412
+ if ([Aggregation.COUNT, Aggregation.DISTINCT].includes($event)) {
413
+ this.optionsCopy.selectedVariables[1].axisOptions = { tickMinStep: 1 };
414
+ }
415
+ else {
416
+ delete this.optionsCopy.selectedVariables[1].axisOptions;
417
+ }
418
+ this.triggerCalculatePossibleAttributes$.next();
419
+ }
420
+ changeProperty(attrName, index) {
421
+ const attr = this.variableAttributes.find((attr) => attr.name === attrName);
422
+ if (!!attr) {
423
+ this.optionsCopy.selectedVariables[index].name = attr.name;
424
+ this.optionsCopy.selectedVariables[index].label = attr.name;
425
+ const field = this.fields.find((field) => field.id === attr.field)?.type ?? FieldType.STRING;
426
+ this.optionsCopy.selectedVariables[index].type = this.translateToVegaType(field, attr.name);
427
+ this.optionsCopy.selectedVariables[index].axisOptions = this.minTick(field);
428
+ this.optionsCopy.title =
429
+ this.optionsCopy.selectedVariables[0].label + ', ' + this.optionsCopy.selectedVariables[1].label;
430
+ }
431
+ this.triggerCalculatePossibleAttributes$.next();
432
+ }
433
+ static isTimeUnitUTC(variableDef) {
434
+ let utcRegex = new RegExp(/_utc|utc_|_UTC|UTC_|_Utc|Utc_/, 'g');
435
+ return utcRegex.test(variableDef?.label);
436
+ }
437
+ changeLabel(label, index) {
438
+ let updateTitle = false;
439
+ if (this.optionsCopy.title ===
440
+ this.optionsCopy.selectedVariables[0].label + ', ' + this.optionsCopy.selectedVariables[1].label) {
441
+ updateTitle = true;
442
+ }
443
+ this.optionsCopy.selectedVariables[index].label = label;
444
+ if (updateTitle) {
445
+ //update title if it has not been modified manually
446
+ this.optionsCopy.title =
447
+ this.optionsCopy.selectedVariables[0].label + ', ' + this.optionsCopy.selectedVariables[1].label;
448
+ }
449
+ }
450
+ toggleOriginAtZero(variable, $event) {
451
+ variable.origin0 = $event;
452
+ }
453
+ changeType(typeOptionsId) {
454
+ this.optionsCopy = JSON.parse(JSON.stringify(this.optionsCopy));
455
+ const [type, subType] = typeOptionsId.split('-');
456
+ // @ts-ignore
457
+ this.optionsCopy.type = type;
458
+ this.optionsCopy.subType = subType ?? MarkSubType.DEFAULT;
459
+ if (this.optionsCopy.type === MarkType.CIRCLE_PACK) {
460
+ this.optionsCopy.packing = {};
461
+ }
462
+ else {
463
+ delete this.optionsCopy.packing;
464
+ }
465
+ if (this.optionsCopy.type === MarkType.RADAR) {
466
+ this.optionsCopy.radar = {};
467
+ }
468
+ else {
469
+ delete this.optionsCopy.radar;
470
+ }
471
+ switch (this.optionsCopy.type) {
472
+ case MarkType.BAR:
473
+ case MarkType.LINE:
474
+ this.optionsCopy.selectedVariables[0].type =
475
+ this.optionsCopy.selectedVariables[0].type !== VegaType.TEMPORAL ? VegaType.NOMINAL : VegaType.TEMPORAL;
476
+ break;
477
+ case MarkType.POINT:
478
+ this.optionsCopy.selectedVariables[1].type =
479
+ this.optionsCopy.selectedVariables[1].type !== VegaType.TEMPORAL ? VegaType.QUANTITATIVE : VegaType.TEMPORAL;
480
+ break;
481
+ }
482
+ if (this.optionsCopy.subType === MarkSubType.AREASTACKED || this.optionsCopy.subType === MarkSubType.HISTOSTACKED) {
483
+ this.optionsCopy.series = this.optionsCopy.series ?? {};
484
+ }
485
+ this.resetChart();
486
+ if (subType === MarkSubType.DONUT) {
487
+ this.optionsCopy.innerRadius = this.optionsCopy.innerRadius ?? 50;
488
+ }
489
+ }
490
+ resetChart() {
491
+ if (this.optionsCopy.selectedVariables?.length > 2) {
492
+ this.optionsCopy.selectedVariables.pop();
493
+ }
494
+ }
495
+ emitManifest() {
496
+ this.manifestModified.emit({
497
+ widgetIndex: this.widgetIndex,
498
+ manifest: {
499
+ ...this.manifest,
500
+ options: { ...this.optionsCopy }
501
+ }
502
+ });
503
+ }
504
+ translateToVegaType(type, name) {
505
+ let idRegex = new RegExp(/_id|id_|_ID|ID_|_Id|Id_/, 'g');
506
+ if (idRegex.test(name)) {
507
+ return VegaType.ORDINAL;
508
+ }
509
+ switch (type) {
510
+ case FieldType.DECIMAL:
511
+ case FieldType.INTEGER:
512
+ case FieldType.LONG:
513
+ return VegaType.QUANTITATIVE;
514
+ case FieldType.INSTANT:
515
+ return VegaType.TEMPORAL;
516
+ case FieldType.KEYWORD:
517
+ case FieldType.STRING:
518
+ return VegaType.NOMINAL;
519
+ default:
520
+ return VegaType.NOMINAL;
521
+ }
522
+ }
523
+ minTick(type) {
524
+ switch (type) {
525
+ case FieldType.INTEGER:
526
+ case FieldType.LONG:
527
+ return { tickMinStep: 1 };
528
+ case FieldType.DECIMAL:
529
+ case FieldType.INSTANT:
530
+ case FieldType.KEYWORD:
531
+ case FieldType.STRING:
532
+ default:
533
+ return undefined;
534
+ }
535
+ }
536
+ trigger() {
537
+ this.triggerCalculatePossibleAttributes$.next();
538
+ }
539
+ proposeTitle() {
540
+ setTimeout(() => {
541
+ if (this.optionsCopy.type === MarkType.RADAR) {
542
+ if (this.optionsCopy.radar?.compare === 'item') {
543
+ this.optionsCopy.title = this.translateService.instant('@pry.widget.chart.radar.titleItem', {
544
+ props: (this.optionsCopy.radar.props || []).join(', ')
545
+ });
546
+ }
547
+ if (this.optionsCopy.radar?.compare === 'value') {
548
+ this.optionsCopy.title = this.translateService.instant('@pry.widget.chart.radar.titleList', {
549
+ key: this.optionsCopy.radar.keyProp ?? this.translateService.instant('@pry.widget.chart.radar.defineKey'),
550
+ value: this.optionsCopy.radar.valueProp ?? this.translateService.instant('@pry.widget.chart.radar.defineValue'),
551
+ category: this.optionsCopy.radar.categoryProp ??
552
+ this.translateService.instant('@pry.widget.chart.radar.defineCategory')
553
+ });
554
+ }
555
+ }
556
+ if (this.optionsCopy.type === MarkType.CIRCLE_PACK) {
557
+ this.optionsCopy.title = this.translateService.instant('@pry.widget.chart.circle.title', {
558
+ field: this.optionsCopy.packing?.packField ?? ''
559
+ });
560
+ }
561
+ }, 100);
562
+ }
563
+ changeInnerRadius($event) {
564
+ // @ts-ignore
565
+ this.optionsCopy.innerRadius = parseInt($event, 10);
566
+ }
567
+ openSettings() {
568
+ this.open$.next(undefined);
569
+ }
570
+ toggleSeries($event) {
571
+ if ($event) {
572
+ this.optionsCopy.series = {};
573
+ }
574
+ else {
575
+ delete this.optionsCopy.series;
576
+ }
577
+ }
578
+ changeSeries($event) {
579
+ if (!this.optionsCopy.series) {
580
+ this.optionsCopy.series = {};
581
+ }
582
+ this.optionsCopy.series.groupBy = $event;
583
+ }
584
+ changeSeriesScheme($event) {
585
+ if (!this.optionsCopy.series) {
586
+ this.optionsCopy.series = {};
587
+ }
588
+ this.optionsCopy.series.scheme = $event;
589
+ }
590
+ toggleSeriesLegend($event) {
591
+ this.optionsCopy.legend = $event;
592
+ }
593
+ toggleTooltip($event) {
594
+ this.optionsCopy.tooltip = $event;
595
+ }
596
+ axeLabel(i, optionsCopy) {
597
+ if (optionsCopy?.type === MarkType.ARC) {
598
+ return i === 0 ? '@pry.widget.chart.encoding.group' : '@pry.widget.chart.encoding.values';
599
+ }
600
+ return i === 0 ? '@pry.widget.chart.encoding.horizontal' : '@pry.widget.chart.encoding.vertical';
601
+ }
602
+ hasNoType(options) {
603
+ return !options || !options.type || options.type.includes('undefined') || options.type.includes('null');
604
+ }
605
+ scheme() {
606
+ return vega.scheme(this.optionsCopy.series?.scheme ?? '');
607
+ }
608
+ toggleSpecToMerge($event) {
609
+ if ($event) {
610
+ this.optionsCopy.specToMerge = {};
611
+ this.advancedEdit = '{}';
612
+ }
613
+ else {
614
+ delete this.optionsCopy.specToMerge;
615
+ this.advancedEdit = '{}';
616
+ }
617
+ }
618
+ updateAdvancedEdit($event) {
619
+ const value = $event?.target?.value ?? $event;
620
+ if (value) {
621
+ try {
622
+ this.optionsCopy.specToMerge = JSON.parse(value);
623
+ this.advancedEdit = JSON.stringify(this.optionsCopy.specToMerge, undefined, 4);
624
+ this.invalidJson = false;
625
+ }
626
+ catch (e) {
627
+ console.error('Invalid json provided');
628
+ this.invalidJson = true;
629
+ }
630
+ this.cdRef.markForCheck();
631
+ }
632
+ else {
633
+ delete this.optionsCopy.specToMerge;
634
+ this.advancedEdit = '{}';
635
+ }
636
+ }
637
+ toImage() {
638
+ return new Promise((resolve, reject) => {
639
+ resolve(this.vega.nativeElement.querySelectorAll('canvas')[0].toDataURL('image/png'));
640
+ });
641
+ }
642
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetChartComponent, deps: [{ token: i1.Store }, { token: i2.PryI18nService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
643
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetChartComponent, selector: "pry-widget-chart", viewQueries: [{ propertyName: "vega", first: true, predicate: ["vega"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-chart-css></pry-widget-chart-css>\n<div class=\"o-widget o-widget--chart\">\n <pry-widget-header\n [datasourceIds$]=\"datasourceIds$\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n [headerPresent]=\"displayHeader$ | async\"\n [isDisable]=\"(filterDataForOptionsCopy$ | async)?.length === 0 || hasNoType(optionsCopy)\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.customTitle ?? optionsCopy.title\"\n ></pry-edit-input>\n\n <div class=\"m-form-label-field\">\n <ng-container *ngIf=\"(filterDataForOptionsCopy$ | async)?.length === 0; else data\">\n <p class=\"a-label a-label--help -error\">{{ '@pry.widget.chart.params.noParams' | i18n }}</p>\n </ng-container>\n <ng-template #data>\n <div *ngIf=\"optionsCopy?.type !== MarkType.RADAR\">\n {{ '@pry.widget.chart.params.multipleParams' | i18n }}{{ (filterDataForOptionsCopy$ | async)?.length }}\n </div>\n </ng-template>\n </div>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [labelTranslate]=\"true\"\n [ngModel]=\"optionsCopy.type + '-' + optionsCopy.subType\"\n baseTranslate=\"@pry.widget.chart.markType.\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n </div>\n\n <ng-container *ngIf=\"optionsCopy?.type !== MarkType.RADAR && optionsCopy?.type !== MarkType.CIRCLE_PACK\">\n <ng-container *ngIf=\"optionsCopy?.subType === MarkSubType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.innerRadius\"\n (ngModelChange)=\"changeInnerRadius($event)\"\n labelTranslate=\"@pry.widget.chart.innerRadius\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div\n *ngFor=\"let variableDef of optionsCopy?.selectedVariables; let i = index\"\n class=\"o-settings__popup__content__fields -condensed\"\n >\n <div class=\"m-form-label-field\" *ngIf=\"i === 1\">\n <label class=\"a-label\" for=\"aggregations\">{{ '@pry.widget.chart.encoding.group' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAggregation($event)\"\n *ngIf=\"i === 1\"\n [bindData]=\"true\"\n [itemsAsOption]=\"true\"\n [items]=\"aggregations\"\n [labelTranslate]=\"true\"\n [ngModel]=\"optionsCopy.aggregation\"\n [translationFn]=\"translateAggregations\"\n class=\"a-pry-select\"\n id=\"aggregations\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\" *ngIf=\"i !== 1 || optionsCopy.aggregation !== 'count'\">\n <label class=\"a-label\" for=\"aggregation_property\">\n {{ axeLabel(i, optionsCopy) | i18n }}\n </label>\n <pry-select\n (ngModelChange)=\"changeProperty($event, i)\"\n [itemsAsOption]=\"true\"\n [items]=\"(i !== 1 ? variableAttributes$ : possibleSecondaryAttributes$) | async\"\n [ngModel]=\"variableDef.name\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"aggregation_property\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeLabel($event, i)\"\n [ngModel]=\"variableDef.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"variableDef.type === 'temporal'\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_timeUnit\">{{ '@pry.widget.chart.timeUnit' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeUnit($event, variableDef)\"\n [bindData]=\"true\"\n [itemsAsOption]=\"true\"\n [items]=\"timeUnits\"\n [labelTranslate]=\"true\"\n [ngModel]=\"variableDef.timeUnit\"\n baseTranslate=\"@pry.widget.chart.timeUnitList.\"\n class=\"a-pry-select\"\n id=\"chart_timeUnit\"\n ></pry-select>\n </div>\n\n <div *ngIf=\"variableDef.type === 'quantitative' && optionsCopy?.type !== 'arc'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleOriginAtZero(variableDef, $event)\" [ngModel]=\"variableDef.origin0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox\n (ngModelChange)=\"toggleSeries($event)\"\n [ngModel]=\"!!optionsCopy.series\"\n *ngIf=\"optionsCopy?.type !== MarkType.ARC && optionsCopy?.type !== MarkType.RADAR\"\n [disabled]=\"\n this.optionsCopy.subType === MarkSubType.AREASTACKED ||\n this.optionsCopy.subType === MarkSubType.HISTOSTACKED\n \"\n >{{ '@pry.widget.chart.series' | i18n }}\n </pry-checkbox>\n </div>\n\n <div\n class=\"m-form-label-field\"\n *ngIf=\"optionsCopy?.type !== MarkType.ARC && optionsCopy?.type !== MarkType.RADAR && !!optionsCopy.series\"\n >\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.seriesAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSeries($event)\"\n [ngModel]=\"optionsCopy.series.groupBy!\"\n [itemsAsOption]=\"true\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div\n class=\"m-form-label-field\"\n *ngIf=\"\n (optionsCopy?.type === MarkType.ARC || optionsCopy?.type === MarkType.RADAR || !!optionsCopy.series) &&\n schemes\n \"\n >\n <label class=\"a-label\" for=\"chart_seriesScheme\" [title]=\"'@pry.widget.chart.seriesSchemeAlt' | i18n\">{{\n '@pry.widget.chart.seriesScheme' | i18n\n }}</label>\n <pry-select\n (ngModelChange)=\"changeSeriesScheme($event)\"\n [ngModel]=\"optionsCopy.series?.scheme!\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.scheme.\"\n bindValue=\"id\"\n bindLabel=\"id\"\n ></pry-select>\n </div>\n\n <div class=\"o-widget--chart-color-thumb\">\n <div\n *ngFor=\"let schemeColor of scheme()\"\n class=\"o-widget--chart-color-thumb-item\"\n [title]=\"schemeColor\"\n [style.background-color]=\"schemeColor\"\n ></div>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox\n (ngModelChange)=\"toggleSeriesLegend($event)\"\n [ngModel]=\"!!optionsCopy.legend!\"\n *ngIf=\"optionsCopy?.type !== MarkType.RADAR || !!optionsCopy.series\"\n >{{ '@pry.widget.chart.seriesLegend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.tooltip!\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy?.type === MarkType.RADAR && optionsCopy.radar !== undefined\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.compare\"\n [itemsAsOption]=\"true\"\n [items]=\"comparisons\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.radar.compare === 'item'\">\n <div class=\"m-form-label-field\">\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.props\"\n [itemsAsOption]=\"true\"\n [items]=\"numericProperties$ | async\"\n [multiple]=\"true\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy.radar.compare === 'value'\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_key\">{{ '@pry.widget.chart.comparison.key' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.keyProp\"\n [itemsAsOption]=\"true\"\n [items]=\"textProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"comparison_key\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_values\">{{ '@pry.widget.chart.comparison.values' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.valueProp\"\n [itemsAsOption]=\"true\"\n [items]=\"numericProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"comparison_values\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_category\">{{\n '@pry.widget.chart.comparison.category' | i18n\n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.categoryProp\"\n [itemsAsOption]=\"true\"\n [items]=\"textProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"comparison_category\"\n ></pry-select>\n </div>\n </ng-container>\n <ng-container *ngIf=\"schemes\">\n <label\n class=\"a-label\"\n for=\"chart_seriesScheme_radar\"\n [title]=\"'@pry.widget.chart.seriesSchemeAlt' | i18n\"\n >{{ '@pry.widget.chart.seriesScheme' | i18n }}</label\n >\n <pry-select\n (ngModelChange)=\"changeSeriesScheme($event)\"\n [ngModel]=\"optionsCopy.series?.scheme!\"\n [bindData]=\"true\"\n [itemsAsOption]=\"false\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme_radar\"\n ></pry-select>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy?.type === MarkType.CIRCLE_PACK && optionsCopy.packing !== undefined\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_id\">{{ '@pry.widget.chart.circle.id' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.id\"\n [itemsAsOption]=\"true\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"chart_circle_id\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_pid\">{{ '@pry.widget.chart.circle.pid' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.parentId\"\n [itemsAsOption]=\"true\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"chart_circle_pid\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_field\">{{ '@pry.widget.chart.circle.field' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.packField\"\n [itemsAsOption]=\"true\"\n [items]=\"numericProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"chart_circle_field\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_tooltip\">{{ '@pry.widget.chart.circle.tooltip' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.tooltip\"\n [itemsAsOption]=\"true\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"chart_circle_tooltip\"\n ></pry-select>\n </div>\n </div>\n </ng-container>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-checkbox (ngModelChange)=\"toggleSpecToMerge($event)\" [ngModel]=\"!!optionsCopy.specToMerge\"\n >{{ '@pry.widget.chart.moreOptions' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.specToMerge\">\n <textarea\n [ngModel]=\"advancedEdit\"\n (focusout)=\"updateAdvancedEdit($event)\"\n class=\"o-settings__popup__content__area\"\n [class.-invalid]=\"invalidJson\"\n ></textarea>\n </ng-container>\n </div>\n </pry-settings>\n </pry-widget-header>\n <ng-container *ngIf=\"isChartValid$ | async\">\n <div\n #vega\n [style.height.px]=\"\n ((widgetSize$ | async)?.height ?? 0) - ((displayHeader$ | async) ? 1 : 0) * WIDGET_HEADER_HEIGHT\n \"\n [style.width.px]=\"(widgetSize$ | async)?.width\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"!(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <p class=\"a-p\">\n {{ '@pry.widget.chart.chooseParameters' | i18n }}\n </p>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["saveTriggered"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "additionalOptions", "headerOptions", "displayCount", "datasourceIds$", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i2.PryEditInputComponent, selector: "pry-edit-input", inputs: ["label"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i6.PryWidgetChartCssComponent, selector: "pry-widget-chart-css" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
644
+ }
645
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetChartComponent, decorators: [{
646
+ type: Component,
647
+ args: [{ selector: 'pry-widget-chart', template: "<pry-widget-chart-css></pry-widget-chart-css>\n<div class=\"o-widget o-widget--chart\">\n <pry-widget-header\n [datasourceIds$]=\"datasourceIds$\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n [headerPresent]=\"displayHeader$ | async\"\n [isDisable]=\"(filterDataForOptionsCopy$ | async)?.length === 0 || hasNoType(optionsCopy)\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.customTitle ?? optionsCopy.title\"\n ></pry-edit-input>\n\n <div class=\"m-form-label-field\">\n <ng-container *ngIf=\"(filterDataForOptionsCopy$ | async)?.length === 0; else data\">\n <p class=\"a-label a-label--help -error\">{{ '@pry.widget.chart.params.noParams' | i18n }}</p>\n </ng-container>\n <ng-template #data>\n <div *ngIf=\"optionsCopy?.type !== MarkType.RADAR\">\n {{ '@pry.widget.chart.params.multipleParams' | i18n }}{{ (filterDataForOptionsCopy$ | async)?.length }}\n </div>\n </ng-template>\n </div>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [labelTranslate]=\"true\"\n [ngModel]=\"optionsCopy.type + '-' + optionsCopy.subType\"\n baseTranslate=\"@pry.widget.chart.markType.\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n </div>\n\n <ng-container *ngIf=\"optionsCopy?.type !== MarkType.RADAR && optionsCopy?.type !== MarkType.CIRCLE_PACK\">\n <ng-container *ngIf=\"optionsCopy?.subType === MarkSubType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.innerRadius\"\n (ngModelChange)=\"changeInnerRadius($event)\"\n labelTranslate=\"@pry.widget.chart.innerRadius\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div\n *ngFor=\"let variableDef of optionsCopy?.selectedVariables; let i = index\"\n class=\"o-settings__popup__content__fields -condensed\"\n >\n <div class=\"m-form-label-field\" *ngIf=\"i === 1\">\n <label class=\"a-label\" for=\"aggregations\">{{ '@pry.widget.chart.encoding.group' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAggregation($event)\"\n *ngIf=\"i === 1\"\n [bindData]=\"true\"\n [itemsAsOption]=\"true\"\n [items]=\"aggregations\"\n [labelTranslate]=\"true\"\n [ngModel]=\"optionsCopy.aggregation\"\n [translationFn]=\"translateAggregations\"\n class=\"a-pry-select\"\n id=\"aggregations\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\" *ngIf=\"i !== 1 || optionsCopy.aggregation !== 'count'\">\n <label class=\"a-label\" for=\"aggregation_property\">\n {{ axeLabel(i, optionsCopy) | i18n }}\n </label>\n <pry-select\n (ngModelChange)=\"changeProperty($event, i)\"\n [itemsAsOption]=\"true\"\n [items]=\"(i !== 1 ? variableAttributes$ : possibleSecondaryAttributes$) | async\"\n [ngModel]=\"variableDef.name\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"aggregation_property\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeLabel($event, i)\"\n [ngModel]=\"variableDef.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"variableDef.type === 'temporal'\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_timeUnit\">{{ '@pry.widget.chart.timeUnit' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeUnit($event, variableDef)\"\n [bindData]=\"true\"\n [itemsAsOption]=\"true\"\n [items]=\"timeUnits\"\n [labelTranslate]=\"true\"\n [ngModel]=\"variableDef.timeUnit\"\n baseTranslate=\"@pry.widget.chart.timeUnitList.\"\n class=\"a-pry-select\"\n id=\"chart_timeUnit\"\n ></pry-select>\n </div>\n\n <div *ngIf=\"variableDef.type === 'quantitative' && optionsCopy?.type !== 'arc'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleOriginAtZero(variableDef, $event)\" [ngModel]=\"variableDef.origin0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox\n (ngModelChange)=\"toggleSeries($event)\"\n [ngModel]=\"!!optionsCopy.series\"\n *ngIf=\"optionsCopy?.type !== MarkType.ARC && optionsCopy?.type !== MarkType.RADAR\"\n [disabled]=\"\n this.optionsCopy.subType === MarkSubType.AREASTACKED ||\n this.optionsCopy.subType === MarkSubType.HISTOSTACKED\n \"\n >{{ '@pry.widget.chart.series' | i18n }}\n </pry-checkbox>\n </div>\n\n <div\n class=\"m-form-label-field\"\n *ngIf=\"optionsCopy?.type !== MarkType.ARC && optionsCopy?.type !== MarkType.RADAR && !!optionsCopy.series\"\n >\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.seriesAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSeries($event)\"\n [ngModel]=\"optionsCopy.series.groupBy!\"\n [itemsAsOption]=\"true\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div\n class=\"m-form-label-field\"\n *ngIf=\"\n (optionsCopy?.type === MarkType.ARC || optionsCopy?.type === MarkType.RADAR || !!optionsCopy.series) &&\n schemes\n \"\n >\n <label class=\"a-label\" for=\"chart_seriesScheme\" [title]=\"'@pry.widget.chart.seriesSchemeAlt' | i18n\">{{\n '@pry.widget.chart.seriesScheme' | i18n\n }}</label>\n <pry-select\n (ngModelChange)=\"changeSeriesScheme($event)\"\n [ngModel]=\"optionsCopy.series?.scheme!\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.scheme.\"\n bindValue=\"id\"\n bindLabel=\"id\"\n ></pry-select>\n </div>\n\n <div class=\"o-widget--chart-color-thumb\">\n <div\n *ngFor=\"let schemeColor of scheme()\"\n class=\"o-widget--chart-color-thumb-item\"\n [title]=\"schemeColor\"\n [style.background-color]=\"schemeColor\"\n ></div>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox\n (ngModelChange)=\"toggleSeriesLegend($event)\"\n [ngModel]=\"!!optionsCopy.legend!\"\n *ngIf=\"optionsCopy?.type !== MarkType.RADAR || !!optionsCopy.series\"\n >{{ '@pry.widget.chart.seriesLegend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.tooltip!\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy?.type === MarkType.RADAR && optionsCopy.radar !== undefined\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.compare\"\n [itemsAsOption]=\"true\"\n [items]=\"comparisons\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.radar.compare === 'item'\">\n <div class=\"m-form-label-field\">\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.props\"\n [itemsAsOption]=\"true\"\n [items]=\"numericProperties$ | async\"\n [multiple]=\"true\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy.radar.compare === 'value'\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_key\">{{ '@pry.widget.chart.comparison.key' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.keyProp\"\n [itemsAsOption]=\"true\"\n [items]=\"textProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"comparison_key\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_values\">{{ '@pry.widget.chart.comparison.values' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.valueProp\"\n [itemsAsOption]=\"true\"\n [items]=\"numericProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"comparison_values\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_category\">{{\n '@pry.widget.chart.comparison.category' | i18n\n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.categoryProp\"\n [itemsAsOption]=\"true\"\n [items]=\"textProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"comparison_category\"\n ></pry-select>\n </div>\n </ng-container>\n <ng-container *ngIf=\"schemes\">\n <label\n class=\"a-label\"\n for=\"chart_seriesScheme_radar\"\n [title]=\"'@pry.widget.chart.seriesSchemeAlt' | i18n\"\n >{{ '@pry.widget.chart.seriesScheme' | i18n }}</label\n >\n <pry-select\n (ngModelChange)=\"changeSeriesScheme($event)\"\n [ngModel]=\"optionsCopy.series?.scheme!\"\n [bindData]=\"true\"\n [itemsAsOption]=\"false\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme_radar\"\n ></pry-select>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy?.type === MarkType.CIRCLE_PACK && optionsCopy.packing !== undefined\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_id\">{{ '@pry.widget.chart.circle.id' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.id\"\n [itemsAsOption]=\"true\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"chart_circle_id\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_pid\">{{ '@pry.widget.chart.circle.pid' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.parentId\"\n [itemsAsOption]=\"true\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"chart_circle_pid\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_field\">{{ '@pry.widget.chart.circle.field' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.packField\"\n [itemsAsOption]=\"true\"\n [items]=\"numericProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"chart_circle_field\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_tooltip\">{{ '@pry.widget.chart.circle.tooltip' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.tooltip\"\n [itemsAsOption]=\"true\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"chart_circle_tooltip\"\n ></pry-select>\n </div>\n </div>\n </ng-container>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-checkbox (ngModelChange)=\"toggleSpecToMerge($event)\" [ngModel]=\"!!optionsCopy.specToMerge\"\n >{{ '@pry.widget.chart.moreOptions' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.specToMerge\">\n <textarea\n [ngModel]=\"advancedEdit\"\n (focusout)=\"updateAdvancedEdit($event)\"\n class=\"o-settings__popup__content__area\"\n [class.-invalid]=\"invalidJson\"\n ></textarea>\n </ng-container>\n </div>\n </pry-settings>\n </pry-widget-header>\n <ng-container *ngIf=\"isChartValid$ | async\">\n <div\n #vega\n [style.height.px]=\"\n ((widgetSize$ | async)?.height ?? 0) - ((displayHeader$ | async) ? 1 : 0) * WIDGET_HEADER_HEIGHT\n \"\n [style.width.px]=\"(widgetSize$ | async)?.width\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"!(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <p class=\"a-p\">\n {{ '@pry.widget.chart.chooseParameters' | i18n }}\n </p>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n" }]
648
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.PryI18nService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { vega: [{
649
+ type: ViewChild,
650
+ args: ['vega']
651
+ }] } });
652
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWNoYXJ0L2NvbXBvbmVudC93aWRnZXQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtY2hhcnQvY29tcG9uZW50L3dpZGdldC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkcsT0FBTyxFQUNMLFdBQVcsRUFPWCxjQUFjLEVBQ2QsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFFBQVEsRUFJUixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5FLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQVF2RixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQU0xRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsbUJBQW1CO0lBa0QzRCxZQUNFLEtBQWlCLEVBQ1QsZ0JBQWdDLEVBQ3hDLEVBQWMsRUFDTixLQUF3QjtRQUVoQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBSlQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQjtRQUVoQyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQXBEbEMsZ0JBQVcsR0FNTCxFQUFFLENBQUM7UUFDVCxjQUFTLEdBQWUsRUFBRSxDQUFDO1FBRzNCLGFBQVEsR0FBRyxRQUFRLENBQUM7UUFDcEIsZ0JBQVcsR0FBRyxXQUFXLENBQUM7UUFDMUIseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFFNUMsY0FBUyxHQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFeEYsZ0JBQVcsR0FBdUIsRUFBd0IsQ0FBQztRQU8zRCx3Q0FBbUMsR0FBRyxJQUFJLGVBQWUsQ0FBTyxTQUFTLENBQUMsQ0FBQztRQUkzRSxjQUFTLEdBQXlCLEVBQUUsQ0FBQztRQUNyQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBZ0IsRUFBRSxDQUFDO1FBQ3JDLFdBQU0sR0FBWSxFQUFFLENBQUM7UUFJckIsZ0JBQVcsR0FBRztZQUNaO2dCQUNFLEVBQUUsRUFBRSxNQUFNO2dCQUNWLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDO2FBQ3pFO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLE9BQU87Z0JBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsb0NBQW9DLENBQUM7YUFDMUU7U0FDRixDQUFDO1FBRUYsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFnZDdCLDhCQUF5QixHQUFHLENBQUMsSUFBUyxFQUFFLElBQVcsRUFBRSxFQUFFLENBQ3JELEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFFaEYsMEJBQXFCLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDOUcsaUJBQVksR0FBVyxJQUFJLENBQUM7UUExYzFCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUF5QixFQUFFLEVBQUU7WUFDckYsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztZQUVyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTO2lCQUM5QixHQUFHLENBQUMsQ0FBQyxJQUFjLEVBQUUsRUFBRTtnQkFDdEIsYUFBYTtnQkFDYixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0csQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7aUJBQ2xDLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdEIsR0FBRyxPQUFPO2dCQUNWLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDeEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU87YUFDaEYsQ0FBQyxDQUFDO2lCQUNGLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdEIsR0FBRyxPQUFPO2dCQUNWLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLDZCQUE2QixHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7YUFDekYsQ0FBQyxDQUFDLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMzRixHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQ2hHLEdBQUcsQ0FBQyxDQUFDLE1BQW1CLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNqRixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ25FLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUM1QyxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpGLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDNUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUMzQixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQ25CLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDTixDQUFDO2dCQUNBLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxFQUN6RSxJQUFJLENBQUMsSUFBSSxDQUNWO2FBQ0YsQ0FBd0IsSUFBSSxFQUFFLENBQ2xDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUE2QixDQUFDLENBQUM7U0FDL0UsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QixHQUFHLE9BQU87WUFDVixLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDL0csaUJBQWlCLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN6RCxtSEFBbUg7WUFDbkgsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksU0FBUztZQUNoQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVcsSUFBSSxXQUFXLENBQUMsS0FBSztZQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJO1lBQ2pDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUk7WUFDOUIsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUMsQ0FDSixDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDaEMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQ2xDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO2lCQUNqQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLDRCQUE0QixHQUFHLGFBQWEsQ0FBQztZQUNoRCxJQUFJLENBQUMsbUJBQW1CO1lBQ3hCLElBQUksQ0FBQyxNQUFNO1lBQ1gsSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsbUNBQW1DO1NBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sY0FBYztpQkFDbEIsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3BCLDBDQUEwQztnQkFDMUMsSUFDRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVztvQkFDN0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUNsRztvQkFDQSxPQUFPLElBQUksQ0FBQztpQkFDYjtxQkFBTTtvQkFDTCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbkUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQ3ZGLEtBQUssRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FDaEMsQ0FBQztpQkFDSDtZQUNILENBQUMsQ0FBQztpQkFDRCxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNwQixLQUFLLENBQUMsSUFBSSxDQUNSLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDUCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUNyRCxDQUFDLENBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBMEIsQ0FBQyxLQUFLO2dCQUM3RixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQTBCLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FDaEYsQ0FDRixDQUFDO1FBQ04sQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNwRSxDQUFDO1FBRUYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztZQUN0QyxJQUFJLENBQUMsbUJBQW1CO1lBQ3hCLElBQUksQ0FBQyxNQUFNO1lBQ1gsSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsbUNBQW1DO1NBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sY0FBYztpQkFDbEIsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3BCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuRSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FDdkYsS0FBSyxFQUFFLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxDQUNoQyxDQUFDO1lBQ0osQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQ1IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQTBCLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FDaEYsQ0FDRixDQUFDO1FBQ04sQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixPQUFPLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQztZQUNuQyxJQUFJLENBQUMsbUJBQW1CO1lBQ3hCLElBQUksQ0FBQyxNQUFNO1lBQ1gsSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsbUNBQW1DO1NBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sY0FBYztpQkFDbEIsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3BCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuRSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFGLENBQUMsQ0FBQztpQkFDRCxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNwQixLQUFLLENBQUMsSUFBSSxDQUNSLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDUCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUEwQixDQUFDLEtBQUssS0FBSyxTQUFTLENBQ2hGLENBQ0YsQ0FBQztRQUNOLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osT0FBTyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDckcsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUMvRixHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQ3BHLENBQUM7UUFFRixJQUFJLENBQUMseUJBQXlCLEdBQUcsYUFBYSxDQUFDO1lBQzdDLElBQUksQ0FBQyxNQUFNO1lBQ1gsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLG1CQUFtQjtTQUN6QixDQUFDLENBQUMsSUFBSSxDQUNMLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUN2RyxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDL0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDckUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUMzRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO2dCQUN0RixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO2dCQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNO29CQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNO3dCQUMvQixJQUFJLENBQUMsT0FBTzt3QkFDWixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzt3QkFDbEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQzthQUN2QztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7WUFDcEQsSUFBSSxDQUFDLFNBQVM7WUFDZCxJQUFJLENBQUMsV0FBVztZQUNoQixJQUFJLENBQUMscUJBQXFCO1lBQzFCLElBQUksQ0FBQyxRQUFRO1lBQ2IsSUFBSSxDQUFDLGNBQWM7WUFDbkIsSUFBSSxDQUFDLG1CQUFtQjtTQUN6QixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRTtZQUMxRixJQUFJLElBQUksR0FBRyxZQUFZLENBQUM7WUFDeEIsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNwQixLQUFLLFFBQVEsQ0FBQyxLQUFLO29CQUNqQixJQUFJLEdBQUcsYUFBYSxDQUFDO29CQUNyQixNQUFNO2dCQUNSLEtBQUssUUFBUSxDQUFDLFdBQVc7b0JBQ3ZCLElBQUksR0FBRyxrQkFBa0IsQ0FBQzthQUM3QjtZQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBRWxELFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRTtnQkFDcEIsS0FBSyxRQUFRLENBQUMsS0FBSztvQkFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztvQkFDL0UsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUM3RSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7b0JBQ3JELE1BQU07Z0JBQ1IsS0FBSyxRQUFRLENBQUMsV0FBVztvQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDO29CQUMvRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxHQUFHLFFBQVEsQ0FBQztvQkFDM0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsR0FBRyxRQUFRLENBQUM7b0JBQ3hGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLG9CQUMxQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQy9DLHFDQUFxQyxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsUUFBUSxDQUFDO29CQUN4RSxNQUFNO2dCQUNSO29CQUNFLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekQsSUFBSSxDQUFDLEtBQUssR0FBRzt3QkFDWDs0QkFDRSxJQUFJLEVBQUU7Z0NBQ0osSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dDQUNsQixLQUFLLEVBQ0gsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsS0FBSztvQ0FDL0IsT0FBTyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMscUJBQXFCO29DQUNyRCxPQUFPLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxXQUFXO2dDQUM3QyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLHFCQUFxQjtnQ0FDN0YsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dDQUNoQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJOzZCQUNqQzs0QkFDRCxRQUFRLEVBQUUsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDO3lCQUMxRDtxQkFDRixDQUFDO29CQUNGLElBQUksT0FBTyxDQUFDLElBQUksRUFBRTt3QkFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7cUJBQ3hDO29CQUNELElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLFlBQVksRUFBRTt3QkFDL0YsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUc7NEJBQ3BCO2dDQUNFLElBQUksRUFBRSxPQUFPO2dDQUNiLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0NBQzVDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtnQ0FDeEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJOzZCQUN6Qzt5QkFDRixDQUFDO3FCQUNIO2FBQ0o7WUFDRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFTLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXpHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ25DO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3JDLEdBQUcsQ0FDRCxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ1YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQ2QsaUVBQWlFO1lBQ2pFLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDM0QsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUMzRCxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLEtBQUs7d0JBQ3hDLE9BQU8sQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLFFBQVE7d0JBQzVDLE9BQU8sQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDcEQsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3pFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDYixJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7b0JBQy9ELE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxLQUFLO29CQUNmLFlBQVksRUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxJQUFJO3dCQUM5QixDQUFDLENBQUM7NEJBQ0UsT0FBTyxFQUFFLEdBQUc7NEJBQ1osU0FBUyxFQUFFLFFBQVE7NEJBQ25CLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDYixRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDOzRCQUN6QixPQUFPLEVBQUUsU0FBUzt5QkFDbkI7d0JBQ0gsQ0FBQyxDQUFDOzRCQUNFLE9BQU8sRUFBRSxHQUFHOzRCQUNaLFNBQVMsRUFBRSxHQUFHOzRCQUNkLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDYixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO3lCQUNwQjtvQkFDUCxhQUFhO29CQUNiLFNBQVMsRUFBRSxnQkFBZ0I7aUJBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNoRDtpQkFBTTtnQkFDTCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUM3QztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBMkI7UUFDbEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNwQixLQUFLLFFBQVEsQ0FBQyxHQUFHO2dCQUNmLE9BQU87b0JBQ0wsS0FBSyxFQUFFO3dCQUNMLEtBQUssRUFBRSxjQUFjLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVE7d0JBQzlDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzt3QkFDekIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO3dCQUN2QixTQUFTLEVBQUUsT0FBTztxQkFDbkI7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLEtBQUssRUFBRSxjQUFjLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVE7d0JBQzlDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzt3QkFDekIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO3dCQUN2QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJO3dCQUM5QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQUU7cUJBQzVFO2lCQUNGLENBQUM7WUFDSixLQUFLLFFBQVEsQ0FBQyxLQUFLO2dCQUNqQixPQUFPLEVBQUUsQ0FBQztZQUNaO2dCQUNFLE1BQU0sUUFBUSxHQUFHO29CQUNmLENBQUMsRUFBRTt3QkFDRCxLQUFLLEVBQUUsY0FBYyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRO3dCQUM5QyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7d0JBQ3pCLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTt3QkFDdkIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUzt3QkFDckYsR0FBRyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLFNBQVM7d0JBQzlDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVzt3QkFDOUIsS0FBSyxFQUFFOzRCQUNMLDREQUE0RDs0QkFDNUQsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTzs0QkFDNUIsSUFBSSxFQUFFLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO3lCQUMzRTtxQkFDRjtvQkFDRCxDQUFDLEVBQUU7d0JBQ0QsS0FBSyxFQUFFLGNBQWMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUTt3QkFDOUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO3dCQUN6QixJQUFJLEVBQUUsT0FBTyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTt3QkFDM0YsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUzt3QkFDckYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXO3dCQUM5QixTQUFTLEVBQUUsT0FBTyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTO3dCQUNyRixLQUFLLEVBQUU7NEJBQ0wsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPOzRCQUMxQixJQUFJLEVBQUUsb0JBQW9CLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7eUJBQzNFO3FCQUNGO2lCQUNGLENBQUM7Z0JBQ0YsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO29CQUNsQixhQUFhO29CQUNiLFFBQVEsQ0FBQyxLQUFLLEdBQUc7d0JBQ2YsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7d0JBQ2xDLEtBQUssRUFBRSxjQUFjLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxRQUFRO3dCQUNuRCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07cUJBQ3ZCLENBQUM7b0JBQ0YsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTt3QkFDekIsYUFBYTt3QkFDYixRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO3FCQUMxRDtpQkFDRjtnQkFDRCxPQUFPLFFBQVEsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBYSxFQUFFLE9BQTJCO1FBQ2xFLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEtBQUssTUFBTSxFQUFFO1lBQ3JDLE9BQU8sS0FBSztpQkFDVCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDakIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtnQkFDaEQsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDOUYsT0FBTztvQkFDTCxRQUFRLEVBQUUsR0FBRztvQkFDYixHQUFHLEVBQUUsSUFBSTtvQkFDVCxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUs7aUJBQ1YsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FDSDtpQkFDQSxNQUFNLENBQUMsQ0FBQyxDQUFlLEVBQUUsQ0FBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2lCQUM5RCxNQUFNLENBQUMsQ0FBQyxDQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7U0FDekU7YUFBTTtZQUNMLE9BQU8sS0FBSztpQkFDVCxHQUFHLENBQ0YsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDWixDQUFDO2dCQUNDLFFBQVEsRUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxJQUFJLEVBQUUsQ0FBMEIsRUFBRSxLQUFLLElBQUksUUFBUTtnQkFDekcsR0FBRyxFQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksRUFBRSxDQUEwQixFQUFFLEtBQUs7Z0JBQ25GLEtBQUssRUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBMEIsRUFBRSxLQUFLO2FBQ3hGLENBQWUsQ0FDbkI7aUJBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BGO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBYSxFQUFFLE9BQTJCLEVBQUUsVUFBdUI7UUFDdEYsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDM0IsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNwQixLQUFLLFFBQVEsQ0FBQyxXQUFXO29CQUN2QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUM1RixLQUFLLFFBQVEsQ0FBQyxLQUFLO29CQUNqQixPQUFPLENBQ0wsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxLQUFLLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzdFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEtBQUssTUFBTTs0QkFDaEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTzs0QkFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUzs0QkFDekIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNuRSxDQUFDO2dCQUNKO29CQUNFLE9BQU8sQ0FDTCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUEwQixDQUFDLEtBQUssS0FBSyxTQUFTO3dCQUNoRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7NEJBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBMEIsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDOzRCQUNqRyxPQUFPLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxRQUFROzRCQUM1QyxPQUFPLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FDN0MsQ0FBQzthQUNMO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLFVBQXVCO1FBQ3BELE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUMxRCxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSyxFQUFnQixDQUNyRixDQUFDO0lBQ0osQ0FBQztJQVFELGdCQUFnQixDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBZ0IsRUFBRSxRQUE0QjtRQUMzRCxRQUFRLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUM3QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBbUI7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTyxDQUFDLEVBQUU7WUFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDeEU7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDMUQ7UUFDRCxJQUFJLENBQUMsbUNBQW1DLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFnQixFQUFFLEtBQWE7UUFDNUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQzdGLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLO2dCQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDcEc7UUFDRCxJQUFJLENBQUMsbUNBQW1DLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBK0I7UUFDbEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsK0JBQStCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWEsRUFBRSxLQUFhO1FBQ3RDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSztZQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQ2hHO1lBQ0EsV0FBVyxHQUFHLElBQUksQ0FBQztTQUNwQjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN4RCxJQUFJLFdBQVcsRUFBRTtZQUNmLG1EQUFtRDtZQUNuRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7Z0JBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNwRztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUE0QixFQUFFLE1BQWU7UUFDOUQsUUFBUSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxhQUFxQjtRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsYUFBYTtRQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUUxRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1NBQy9CO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFO1lBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztTQUM3QjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztTQUMvQjtRQUVELFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUU7WUFDN0IsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ2xCLEtBQUssUUFBUSxDQUFDLElBQUk7Z0JBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDMUcsTUFBTTtZQUNSLEtBQUssUUFBUSxDQUFDLEtBQUs7Z0JBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDL0csTUFBTTtTQUNUO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxZQUFZLEVBQUU7WUFDakgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1NBQ3pEO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxCLElBQUksT0FBTyxLQUFLLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUU7Z0JBQ1IsR0FBRyxJQUFJLENBQUMsUUFBUTtnQkFDaEIsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFO2FBQ2pDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQWUsRUFBRSxJQUFZO1FBQy9DLElBQUksT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUM7U0FDekI7UUFDRCxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDdkIsS0FBSyxTQUFTLENBQUMsSUFBSTtnQkFDakIsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQy9CLEtBQUssU0FBUyxDQUFDLE9BQU87Z0JBQ3BCLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUMzQixLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDdkIsS0FBSyxTQUFTLENBQUMsTUFBTTtnQkFDbkIsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQzFCO2dCQUNFLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsSUFBZTtRQUNyQixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLFNBQVMsQ0FBQyxJQUFJO2dCQUNqQixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzVCLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDdkIsS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLEtBQUssU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN0QjtnQkFDRSxPQUFPLFNBQVMsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRCxZQUFZO1FBQ1YsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLEtBQUssRUFBRTtnQkFDNUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLEtBQUssTUFBTSxFQUFFO29CQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxFQUFFO3dCQUMxRixLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztxQkFDdkQsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxLQUFLLE9BQU8sRUFBRTtvQkFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsRUFBRTt3QkFDMUYsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDO3dCQUN6RyxLQUFLLEVBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMscUNBQXFDLENBQUM7d0JBQzFHLFFBQVEsRUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZOzRCQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxDQUFDO3FCQUMxRSxDQUFDLENBQUM7aUJBQ0o7YUFDRjtZQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLFdBQVcsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsRUFBRTtvQkFDdkYsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFNBQVMsSUFBSSxFQUFFO2lCQUNqRCxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFjO1FBQzlCLGFBQWE7UUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxZQUFZO1FBQ1QsSUFBSSxDQUFDLEtBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxZQUFZLENBQUMsTUFBVztRQUN0QixJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztTQUM5QjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsTUFBVztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMzQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBVztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUMxQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBVztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDbkMsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFXO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUNwQyxDQUFDO0lBRUQsUUFBUSxDQUFDLENBQVMsRUFBRSxXQUErQjtRQUNqRCxJQUFJLFdBQVcsRUFBRSxJQUFJLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQztTQUMzRjtRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDO0lBQ25HLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBMkI7UUFDbkMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFXO1FBQzNCLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzFCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQVc7UUFDNUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDO1FBQzlDLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSTtnQkFDRixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzthQUMxQjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDekI7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzNCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVRLE9BQU87UUFDZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBanhCVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiw2S0NqRGpDLDQ3Z0JBaVpBOzsyRkRoV2Esb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNFLGtCQUFrQjtrTEFJVCxJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQWdncmVnYXRpb24sXG4gIEF0dHJpYnV0ZSxcbiAgQXR0cmlidXRlU2ltcGxlVmFsdWUsXG4gIENoYXJ0T3B0aW9uLFxuICBDaGFydFN1YlR5cGVEZWZpbml0aW9uLFxuICBDaGFydFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29uZmlnU2VsZWN0b3JzLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEZpZWxkLFxuICBGaWVsZFNlbGVjdG9ycyxcbiAgRmllbGRUeXBlLFxuICBJdGVtLFxuICBJdGVtVXRpbHMsXG4gIE1hcmtTdWJUeXBlLFxuICBNYXJrVHlwZSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFZhcmlhYmxlRGVmaW5pdGlvbixcbiAgVmVnYUNvbG9yVHlwZSxcbiAgVmVnYVR5cGUsXG4gIFdJREdFVF9IRUFERVJfSEVJR0hUXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlbGF5LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUaW1lVW5pdCwgVmlldyB9IGZyb20gJ3ZlZ2EnO1xuaW1wb3J0IGVtYmVkLCB7IHZlZ2EgfSBmcm9tICd2ZWdhLWVtYmVkJztcbmltcG9ydCB7IG1lcmdlRGVlcCwgVG9wTGV2ZWxTcGVjIH0gZnJvbSAndmVnYS1saXRlJztcbmltcG9ydCB7IGZvbnRDb25maWcgfSBmcm9tICd2ZWdhLWxpdGUvYnVpbGQvc3JjL2NvbmZpZyc7XG5pbXBvcnQgeyBWZWdhRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi92ZWdhLWVycm9yLmhhbmRsZXInO1xuaW1wb3J0IHsgdmVnYUJhc2VDb25mLCB2ZWdhQ2lyY2xlUGFja0NvbmYsIHZlZ2FSYWRhckNvbmYgfSBmcm9tICcuL3ZlZ2Etc3BlYy5jb25zdGFudCc7XG5cbmV4cG9ydCB0eXBlIFJhZGFyVmFsdWUgPSB7XG4gIGNhdGVnb3J5OiBudW1iZXI7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufTtcblxudmVnYS5zY2hlbWUoJ0tPL1cvT0snLCBbJyNDMDREM0YnLCAnI0ZEOTg0MycsICcjOUFCRTI5J10pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1jaGFydC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0Q2hhcnRDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3ZlZ2EnKSB2ZWdhITogRWxlbWVudFJlZjtcbiAgdHlwZU9wdGlvbnM6IHtcbiAgICB0eXBlOiBNYXJrVHlwZTtcbiAgICBzdWJUeXBlOiBNYXJrU3ViVHlwZTtcbiAgICBsYWJlbDogTWFya1R5cGUgfCBNYXJrU3ViVHlwZTtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRyYW5zbGF0ZWQ/OiBzdHJpbmc7XG4gIH1bXSA9IFtdO1xuICBtYXJrVHlwZXM6IE1hcmtUeXBlW10gPSBbXTtcbiAgc3ViVHlwZXM/OiBQYXJ0aWFsPENoYXJ0U3ViVHlwZURlZmluaXRpb24+O1xuICBzY2hlbWVzPzogeyBpZDogVmVnYUNvbG9yVHlwZTsgdHJhbnNsYXRlZDogc3RyaW5nIH1bXTtcbiAgTWFya1R5cGUgPSBNYXJrVHlwZTtcbiAgTWFya1N1YlR5cGUgPSBNYXJrU3ViVHlwZTtcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQgPSBXSURHRVRfSEVBREVSX0hFSUdIVDtcblxuICB0aW1lVW5pdHM6IFRpbWVVbml0W10gPSBbJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VycycsICdtaW51dGVzJ107XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPENoYXJ0V2lkZ2V0T3B0aW9ucz47XG4gIG9wdGlvbnNDb3B5OiBDaGFydFdpZGdldE9wdGlvbnMgPSB7fSBhcyBDaGFydFdpZGdldE9wdGlvbnM7XG4gIGNsYXNzZXMkOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuICBmaWVsZHMkOiBPYnNlcnZhYmxlPEZpZWxkW10+O1xuICB2YXJpYWJsZXMkOiBPYnNlcnZhYmxlPFZhcmlhYmxlRGVmaW5pdGlvbltdPjtcbiAgdmVnYUxpdGVTcGVjJDogT2JzZXJ2YWJsZTxUb3BMZXZlbFNwZWM+O1xuICB2YXJpYWJsZUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgcG9zc2libGVTZWNvbmRhcnlBdHRyaWJ1dGVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIHRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuICBpdGVtcyQ6IE9ic2VydmFibGU8SXRlbVtdPjtcbiAgZmlsdGVyRGF0YUZvck9wdGlvbnMkOiBPYnNlcnZhYmxlPEl0ZW1bXT47XG4gIGZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQ6IE9ic2VydmFibGU8SXRlbVtdPjtcbiAgdmFyaWFibGVzOiBWYXJpYWJsZURlZmluaXRpb25bXSA9IFtdO1xuICBhZ2dyZWdhdGlvbnM6IGFueVtdID0gW107XG4gIHZhcmlhYmxlQXR0cmlidXRlczogQXR0cmlidXRlW10gPSBbXTtcbiAgZmllbGRzOiBGaWVsZFtdID0gW107XG4gIGlzQ2hhcnRWYWxpZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIG51bWVyaWNQcm9wZXJ0aWVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIHRleHRQcm9wZXJ0aWVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIGNvbXBhcmlzb25zID0gW1xuICAgIHtcbiAgICAgIGlkOiAnaXRlbScsXG4gICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQuY29tcGFyaXNvbi5pdGVtJylcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAndmFsdWUnLFxuICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNvbXBhcmlzb24udmFsdWUnKVxuICAgIH1cbiAgXTtcbiAgdmlldz86IFZpZXc7XG4gIHRyaWdnZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgaW52YWxpZEpzb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG5cbiAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMuY2hhcnRPcHRpb24pLnN1YnNjcmliZSgoY2hhcnRPcHRpb25zOiBDaGFydE9wdGlvbikgPT4ge1xuICAgICAgdGhpcy5hZ2dyZWdhdGlvbnMgPSBjaGFydE9wdGlvbnMuYWdncmVnYXRpb247XG4gICAgICB0aGlzLnNjaGVtZXMgPSBjaGFydE9wdGlvbnMuY29sb3IubWFwKChzY2hlbWUpID0+ICh7IGlkOiBzY2hlbWUsIHRyYW5zbGF0ZWQ6ICcnIH0pKTtcbiAgICAgIHRoaXMubWFya1R5cGVzID0gY2hhcnRPcHRpb25zLnR5cGU7XG4gICAgICB0aGlzLnN1YlR5cGVzID0gY2hhcnRPcHRpb25zLnN1YlR5cGU7XG5cbiAgICAgIHRoaXMudHlwZU9wdGlvbnMgPSB0aGlzLm1hcmtUeXBlc1xuICAgICAgICAubWFwKCh0eXBlOiBNYXJrVHlwZSkgPT4ge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdWJUeXBlcyAmJiB0aGlzLnN1YlR5cGVzW3R5cGVdID8gdGhpcy5zdWJUeXBlc1t0eXBlXS5tYXAoKHN1YlR5cGUpID0+ICh7IHR5cGUsIHN1YlR5cGUgfSkpIDogW107XG4gICAgICAgIH0pXG4gICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgICAgIC5tYXAoKG9wdGlvbnM6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIGlkOiBgJHtvcHRpb25zLnR5cGV9LSR7b3B0aW9ucy5zdWJUeXBlfWAsXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuREVGQVVMVCA/IG9wdGlvbnMudHlwZSA6IG9wdGlvbnMuc3ViVHlwZVxuICAgICAgICB9KSlcbiAgICAgICAgLm1hcCgob3B0aW9uczogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgdHJhbnNsYXRlZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm1hcmtUeXBlLicgKyBvcHRpb25zLmxhYmVsKVxuICAgICAgICB9KSk7XG4gICAgICB0aGlzLnR5cGVPcHRpb25zLnNvcnQoKGEsIGIpID0+IGEudHJhbnNsYXRlZD8ubG9jYWxlQ29tcGFyZShiLnRyYW5zbGF0ZWQgPz8gJycpID8/IC0xKTtcbiAgICB9KTtcbiAgICB0aGlzLmNsYXNzZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3Nlcyk7XG4gICAgdGhpcy5maWVsZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKTtcblxuICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmVzdWx0U2V0JCwgdGhpcy5jbGFzc2VzJCwgdGhpcy5maWVsZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzXSkgPT4gSXRlbVV0aWxzLmdldEF0dHJpYnV0ZXNGcm9tUnMocmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpKSxcbiAgICAgIG1hcCgoZmllbGRzOiBBdHRyaWJ1dGVbXSkgPT4gZmllbGRzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpKSxcbiAgICAgIG1hcCgocHJvcHMpID0+IFdpZGdldENoYXJ0Q29tcG9uZW50LnVuaXF1ZUF0dHJpYnV0ZXNCeU5hbWVzKHByb3BzKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkLnN1YnNjcmliZSgoYXR0cnMpID0+ICh0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyA9IGF0dHJzKSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5maWVsZHMkLnN1YnNjcmliZSgoYXR0cnMpID0+ICh0aGlzLmZpZWxkcyA9IGF0dHJzKSkpO1xuXG4gICAgdGhpcy52YXJpYWJsZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkLCB0aGlzLmZpZWxkcyRdKS5waXBlKFxuICAgICAgbWFwKChbYXR0cmlidXRlcywgZmllbGRzXSkgPT4ge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5tYXAoXG4gICAgICAgICAgKGF0dHIpID0+XG4gICAgICAgICAgICAoKHtcbiAgICAgICAgICAgICAgbmFtZTogYXR0ci5uYW1lLFxuICAgICAgICAgICAgICBsYWJlbDogYXR0ci5uYW1lLFxuICAgICAgICAgICAgICB0eXBlOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUoXG4gICAgICAgICAgICAgICAgZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gYXR0ci5maWVsZCk/LnR5cGUgPz8gRmllbGRUeXBlLlNUUklORyxcbiAgICAgICAgICAgICAgICBhdHRyLm5hbWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSkgYXMgVmFyaWFibGVEZWZpbml0aW9uKSA/PyBbXVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy52YXJpYWJsZXMkLFxuICAgICAgdGhpcy5tYW5pZmVzdCQucGlwZShtYXAoKG1hbmlmZXN0KSA9PiBtYW5pZmVzdC5vcHRpb25zIGFzIENoYXJ0V2lkZ2V0T3B0aW9ucykpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhcmlhYmxlcywgb3B0aW9uc10pID0+ICh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAoKHZhcmlhYmxlc1swXT8ubGFiZWwgPz8gJycpICsgJywgJyArICh2YXJpYWJsZXNbMV0/LmxhYmVsID8/ICcnKSkucmVwbGFjZSgvXiwgJC8sICcnKSxcbiAgICAgICAgc2VsZWN0ZWRWYXJpYWJsZXM6IG9wdGlvbnM/LnNlbGVjdGVkVmFyaWFibGVzID8/IFt7fSwge31dLFxuICAgICAgICAvLyBIZXJlLCB3ZSBkbyBub3QgcHJlc3VtZSBvZiB0aGUgdHlwZSBvZiBncmFwaCB0aGF0IHRoZSB1c2VyIHdhbnRzLCBhbmQgcHJlZmVyIHRvIGRpc3BsYXkgYSBidXR0b24gdG8gZ28gdG8gcGFyYW1zXG4gICAgICAgIHR5cGU6IG9wdGlvbnM/LnR5cGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICBhZ2dyZWdhdGlvbjogb3B0aW9ucz8uYWdncmVnYXRpb24gPz8gQWdncmVnYXRpb24uQ09VTlQsXG4gICAgICAgIHRvb2x0aXA6IG9wdGlvbnM/LnRvb2x0aXAgPz8gdHJ1ZSxcbiAgICAgICAgbGVnZW5kOiBvcHRpb25zLmxlZ2VuZCA/PyB0cnVlLFxuICAgICAgICBsb2NhbGU6ICdmcidcbiAgICAgIH0pKVxuICAgICk7XG5cbiAgICB0aGlzLml0ZW1zJCA9IHRoaXMucmVzdWx0U2V0JC5waXBlKFxuICAgICAgZmlsdGVyKChyZXN1bHRTZXQpID0+ICEhcmVzdWx0U2V0KSxcbiAgICAgIG1hcCgocmVzdWx0U2V0KSA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXN1bHRTZXQ/Lml0ZW1zKVxuICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+IHJlc3VsdFNldC5pdGVtc1tjbGFzc0lkXSlcbiAgICAgICAgICAucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBbLi4ucHJldiwgLi4uY3Vycl0sIFtdKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucG9zc2libGVTZWNvbmRhcnlBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkLFxuICAgICAgdGhpcy5pdGVtcyQsXG4gICAgICB0aGlzLmZpZWxkcyQsXG4gICAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhcmlhYmxlRmllbGRzLCBpdGVtcywgZmllbGRzLCBfXSkgPT4ge1xuICAgICAgICByZXR1cm4gdmFyaWFibGVGaWVsZHNcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgIC8vIEtlZXAgb25seSBudW1lcmljIHZhbHVlcyB3aGVuIG5lY2Vzc2FyeVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbiB8fFxuICAgICAgICAgICAgICBbQWdncmVnYXRpb24uTk9ORSwgQWdncmVnYXRpb24uRElTVElOQ1QsIEFnZ3JlZ2F0aW9uLkNPVU5UXS5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LmFnZ3JlZ2F0aW9uKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyaWJ1dGUuZmllbGQpO1xuICAgICAgICAgICAgICByZXR1cm4gW0ZpZWxkVHlwZS5ERUNJTUFMLCBGaWVsZFR5cGUuSU5TVEFOVCwgRmllbGRUeXBlLkxPTkcsIEZpZWxkVHlwZS5JTlRFR0VSXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICBmaWVsZD8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICBpdGVtcy5maW5kKFxuICAgICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmF0dHJpYnV0ZXMpLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWwpICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhhdHRyaWJ1dGUubmFtZSkgJiZcbiAgICAgICAgICAgICAgICAhIShpdGVtLmF0dHJpYnV0ZXNbdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1swXS5sYWJlbF0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgKGl0ZW0uYXR0cmlidXRlc1thdHRyaWJ1dGUubmFtZV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBtYXAoKHByb3BzKSA9PiBXaWRnZXRDaGFydENvbXBvbmVudC51bmlxdWVBdHRyaWJ1dGVzQnlOYW1lcyhwcm9wcykpXG4gICAgKTtcblxuICAgIHRoaXMubnVtZXJpY1Byb3BlcnRpZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyQsXG4gICAgICB0aGlzLml0ZW1zJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMudHJpZ2dlckNhbGN1bGF0ZVBvc3NpYmxlQXR0cmlidXRlcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbdmFyaWFibGVGaWVsZHMsIGl0ZW1zLCBmaWVsZHMsIF9dKSA9PiB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZUZpZWxkc1xuICAgICAgICAgIC5maWx0ZXIoKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyaWJ1dGUuZmllbGQpO1xuICAgICAgICAgICAgcmV0dXJuIFtGaWVsZFR5cGUuREVDSU1BTCwgRmllbGRUeXBlLklOU1RBTlQsIEZpZWxkVHlwZS5MT05HLCBGaWVsZFR5cGUuSU5URUdFUl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIGZpZWxkPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICBpdGVtcy5maW5kKFxuICAgICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmF0dHJpYnV0ZXMpLmluY2x1ZGVzKGF0dHJpYnV0ZS5uYW1lKSAmJlxuICAgICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbYXR0cmlidXRlLm5hbWVdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChwcm9wcykgPT4ge1xuICAgICAgICByZXR1cm4gV2lkZ2V0Q2hhcnRDb21wb25lbnQudW5pcXVlQXR0cmlidXRlc0J5TmFtZXMocHJvcHMpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy50ZXh0UHJvcGVydGllcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJCxcbiAgICAgIHRoaXMuaXRlbXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt2YXJpYWJsZUZpZWxkcywgaXRlbXMsIGZpZWxkcywgX10pID0+IHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlRmllbGRzXG4gICAgICAgICAgLmZpbHRlcigoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHJpYnV0ZS5maWVsZCk7XG4gICAgICAgICAgICByZXR1cm4gW0ZpZWxkVHlwZS5TVFJJTkcsIEZpZWxkVHlwZS5LRVlXT1JEXS5pbmNsdWRlcyhmaWVsZD8udHlwZSA/PyBGaWVsZFR5cGUuSU5URUdFUik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICBpdGVtcy5maW5kKFxuICAgICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmF0dHJpYnV0ZXMpLmluY2x1ZGVzKGF0dHJpYnV0ZS5uYW1lKSAmJlxuICAgICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbYXR0cmlidXRlLm5hbWVdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChwcm9wcykgPT4ge1xuICAgICAgICByZXR1cm4gV2lkZ2V0Q2hhcnRDb21wb25lbnQudW5pcXVlQXR0cmlidXRlc0J5TmFtZXMocHJvcHMpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5maWx0ZXJEYXRhRm9yT3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLml0ZW1zJCwgdGhpcy5vcHRpb25zJCwgdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW2l0ZW1zLCBvcHRpb25zXSkgPT4gb3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlcyAmJiBvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzLmxlbmd0aCA+IDApLFxuICAgICAgbWFwKChbaXRlbXMsIG9wdGlvbnMsIHZhcmlhYmxlc10pID0+IFdpZGdldENoYXJ0Q29tcG9uZW50Lm1hdGNoaW5nSXRlbXMoaXRlbXMsIG9wdGlvbnMsIHZhcmlhYmxlcykpXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyRGF0YUZvck9wdGlvbnNDb3B5JCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5pdGVtcyQsXG4gICAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkLnBpcGUoZGVsYXkoMjAwKSksXG4gICAgICB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyRcbiAgICBdKS5waXBlKFxuICAgICAgZmlsdGVyKChbaXRlbXMsIF9dKSA9PiB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzICYmIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXMubGVuZ3RoID4gMCksXG4gICAgICBtYXAoKFtpdGVtcywgXywgdmFyaWFibGVzXSkgPT4gV2lkZ2V0Q2hhcnRDb21wb25lbnQubWF0Y2hpbmdJdGVtcyhpdGVtcywgdGhpcy5vcHRpb25zQ29weSwgdmFyaWFibGVzKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuICAgICAgICB0aGlzLnVwZGF0ZUFkdmFuY2VkRWRpdChKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnNDb3B5LnNwZWNUb01lcmdlKSk7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkudHlwZSA9ICF0aGlzLm1hcmtUeXBlcy5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LnR5cGUpXG4gICAgICAgICAgPyB0aGlzLm1hcmtUeXBlc1swXVxuICAgICAgICAgIDogdGhpcy5vcHRpb25zQ29weS50eXBlO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPSB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPz8gTWFya1N1YlR5cGUuREVGQVVMVDtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbiA9ICF0aGlzLmFnZ3JlZ2F0aW9ucy5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LmFnZ3JlZ2F0aW9uKVxuICAgICAgICAgID8gdGhpcy5hZ2dyZWdhdGlvbnNbMF1cbiAgICAgICAgICA6IHRoaXMub3B0aW9uc0NvcHkuYWdncmVnYXRpb247XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnNlcmllcykge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzLnNjaGVtZSA9XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lICYmXG4gICAgICAgICAgICB0aGlzLnNjaGVtZXMgJiZcbiAgICAgICAgICAgICF0aGlzLnNjaGVtZXMuZmluZCgocykgPT4gcy5pZCA9PT0gdGhpcy5vcHRpb25zQ29weT8uc2VyaWVzPy5zY2hlbWUpXG4gICAgICAgICAgICAgID8gdGhpcy5zY2hlbWVzWzBdLmlkXG4gICAgICAgICAgICAgIDogdGhpcy5vcHRpb25zQ29weS5zZXJpZXM/LnNjaGVtZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy52ZWdhTGl0ZVNwZWMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMud2luZG93TWFuaWZlc3QpLFxuICAgICAgdGhpcy5tYW5pZmVzdCQsXG4gICAgICB0aGlzLndpZGdldFNpemUkLFxuICAgICAgdGhpcy5maWx0ZXJEYXRhRm9yT3B0aW9ucyQsXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5kaXNwbGF5SGVhZGVyJCxcbiAgICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt3aW5kb3dNYW5pZmVzdCwgd2lkZ2V0TWFuaWZlc3QsIHNpemUsIGRhdGEsIG9wdGlvbnMsIGRpc3BsYXlIZWFkZXIsIHZhcmlhYmxlRmllbGRdKSA9PiB7XG4gICAgICAgIGxldCBzcGVjID0gdmVnYUJhc2VDb25mO1xuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuUkFEQVI6XG4gICAgICAgICAgICBzcGVjID0gdmVnYVJhZGFyQ29uZjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuQ0lSQ0xFX1BBQ0s6XG4gICAgICAgICAgICBzcGVjID0gdmVnYUNpcmNsZVBhY2tDb25mO1xuICAgICAgICB9XG5cbiAgICAgICAgc3BlYy50aXRsZSA9IG9wdGlvbnMuY3VzdG9tVGl0bGUgPz8gb3B0aW9ucy50aXRsZTtcblxuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuUkFEQVI6XG4gICAgICAgICAgICBzcGVjLnNpZ25hbHNbMF0udXBkYXRlID0gc2l6ZS53aWR0aCA+IHNpemUuaGVpZ2h0ID8gJ2hlaWdodCAvIDInIDogJ3dpZHRoIC8gMic7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMF0udmFsdWVzID0gV2lkZ2V0Q2hhcnRDb21wb25lbnQuYnVpbGREYXRhVmVnYVJhZGFyKGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgc3BlYy5zY2FsZXNbMl0ucmFuZ2Uuc2NoZW1lID0gb3B0aW9ucy5zZXJpZXM/LnNjaGVtZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuQ0lSQ0xFX1BBQ0s6XG4gICAgICAgICAgICBzcGVjLmRhdGFbMF0udmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMV0udHJhbnNmb3JtWzBdLmtleSA9ICdhdHRyaWJ1dGVzLicgKyBvcHRpb25zLnBhY2tpbmc/LmlkICsgJy52YWx1ZSc7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMV0udHJhbnNmb3JtWzBdLnBhcmVudEtleSA9ICdhdHRyaWJ1dGVzLicgKyBvcHRpb25zLnBhY2tpbmc/LnBhcmVudElkICsgJy52YWx1ZSc7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMV0udHJhbnNmb3JtWzFdLmZpZWxkID0gJ2F0dHJpYnV0ZXMuJyArIG9wdGlvbnMucGFja2luZz8ucGFja0ZpZWxkICsgJy52YWx1ZSc7XG4gICAgICAgICAgICBzcGVjLm1hcmtzWzBdLmVuY29kZS5lbnRlci50b29sdGlwLnNpZ25hbCA9IGBkYXR1bS5hdHRyaWJ1dGVzLiR7XG4gICAgICAgICAgICAgIG9wdGlvbnMucGFja2luZz8udG9vbHRpcCA/PyBvcHRpb25zLnBhY2tpbmc/LmlkXG4gICAgICAgICAgICB9LnZhbHVlICsgJyA6ICcgKyBkYXR1bS5hdHRyaWJ1dGVzLiR7b3B0aW9ucy5wYWNraW5nPy5wYWNrRmllbGR9LnZhbHVlYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzcGVjLmRhdGEgPSB7IHZhbHVlczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSkgfTtcbiAgICAgICAgICAgIHNwZWMubGF5ZXIgPSBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBvcHRpb25zLnR5cGUsXG4gICAgICAgICAgICAgICAgICBwb2ludDpcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID09PSBNYXJrVHlwZS5QT0lOVCB8fFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLldJVEhfTElORVNfQU5EX1BPSU5UUyB8fFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLldJVEhfUE9JTlRTLFxuICAgICAgICAgICAgICAgICAgbGluZTogb3B0aW9ucy50eXBlID09PSBNYXJrVHlwZS5MSU5FIHx8IG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuV0lUSF9MSU5FU19BTkRfUE9JTlRTLFxuICAgICAgICAgICAgICAgICAgaW5uZXJSYWRpdXM6IG9wdGlvbnMuaW5uZXJSYWRpdXMsXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBvcHRpb25zLnRvb2x0aXAgPz8gdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFdpZGdldENoYXJ0Q29tcG9uZW50LmNhbGN1bGF0ZUVuY29kaW5nKG9wdGlvbnMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5maWxsKSB7XG4gICAgICAgICAgICAgIHNwZWMubGF5ZXJbMF0ubWFyay5maWxsID0gb3B0aW9ucy5maWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuQVJFQVNUQUNLRUQgfHwgb3B0aW9ucy5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ISVNUT1NUQUNLRUQpIHtcbiAgICAgICAgICAgICAgc3BlYy5kYXRhLnRyYW5zZm9ybSA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RhY2snLFxuICAgICAgICAgICAgICAgICAgZ3JvdXBieTogW29wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubmFtZV0sXG4gICAgICAgICAgICAgICAgICBzb3J0OiB7IGZpZWxkOiBvcHRpb25zLnNlcmllcz8uZ3JvdXBCeSB9LFxuICAgICAgICAgICAgICAgICAgZmllbGQ6IG9wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXNbMV0ubmFtZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZWQgPSBtZXJnZURlZXAoc3BlYywgeyBjb25maWc6IGZvbnRDb25maWcoJ1VidW50dSwgc2Fucy1zZXJpZicpIH0gYXMgYW55LCBvcHRpb25zLnNwZWNUb01lcmdlKTtcblxuICAgICAgICBpZiAoISFvcHRpb25zLnNwZWNUb01lcmdlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoc3BlYykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaXNDaGFydFZhbGlkJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG9wdGlvbnMpID0+XG4gICAgICAgICAgISFvcHRpb25zLnR5cGUgJiZcbiAgICAgICAgICAvLyBXZSBtdXN0IGhhdmUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHZhcmlhYmxlcyB0byBkcmF3IHRoZSBncmFwaFxuICAgICAgICAgIChvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzLmZpbHRlcigodikgPT4gISF2LnR5cGUpLmxlbmd0aCA+IDEgfHxcbiAgICAgICAgICAgIChvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzLmZpbHRlcigodikgPT4gISF2LnR5cGUpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgKG9wdGlvbnMuYWdncmVnYXRpb24gPT09IEFnZ3JlZ2F0aW9uLkNPVU5UIHx8XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uRElTVElOQ1QgfHxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFnZ3JlZ2F0aW9uID09PSBBZ2dyZWdhdGlvbi5OT05FKSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy52ZWdhTGl0ZVNwZWMkLCB0aGlzLnRyaWdnZXIkXSkuc3Vic2NyaWJlKChbc3BlYywgX10pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmVnYSkge1xuICAgICAgICAgIHRoaXMudmlldz8uZmluYWxpemUoKTtcbiAgICAgICAgICBlbWJlZCh0aGlzLnZlZ2EubmF0aXZlRWxlbWVudCwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzcGVjKSksIHtcbiAgICAgICAgICAgIGFjdGlvbnM6IGZhbHNlLFxuICAgICAgICAgICAgcmVuZGVyZXI6ICdzdmcnLFxuICAgICAgICAgICAgZm9ybWF0TG9jYWxlOlxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmxvY2FsZSA9PT0gJ2ZyJ1xuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsOiAnLCcsXG4gICAgICAgICAgICAgICAgICAgIHRob3VzYW5kczogJ1xcdTAwYTAnLFxuICAgICAgICAgICAgICAgICAgICBncm91cGluZzogWzNdLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogWycnLCAnXFx1MDBhMOKCrCddLFxuICAgICAgICAgICAgICAgICAgICBwZXJjZW50OiAnXFx1MjAyZiUnXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWw6ICcuJyxcbiAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmRzOiAnLCcsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nOiBbM10sXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiBbJyQnLCAnJ11cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICB2aWV3Q2xhc3M6IFZlZ2FFcnJvckhhbmRsZXJcbiAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+ICh0aGlzLnZpZXcgPSByZXN1bHQudmlldykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyJC5uZXh0KCksIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnRyaWdnZXIkLm5leHQoKTtcbiAgfVxuXG4gIHN0YXRpYyBjYWxjdWxhdGVFbmNvZGluZyhvcHRpb25zOiBDaGFydFdpZGdldE9wdGlvbnMpIHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSBvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzID8/IFt7fSwge31dO1xuICAgIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgICBjYXNlIE1hcmtUeXBlLkFSQzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0aGV0YToge1xuICAgICAgICAgICAgZmllbGQ6IGBhdHRyaWJ1dGVzLiR7dmFyaWFibGVzWzFdLm5hbWV9LnZhbHVlYCxcbiAgICAgICAgICAgIHRpdGxlOiB2YXJpYWJsZXNbMV0ubGFiZWwsXG4gICAgICAgICAgICB0eXBlOiB2YXJpYWJsZXNbMV0udHlwZSxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZTogJ2NvdW50J1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgIGZpZWxkOiBgYXR0cmlidXRlcy4ke3ZhcmlhYmxlc1swXS5uYW1lfS52YWx1ZWAsXG4gICAgICAgICAgICB0aXRsZTogdmFyaWFibGVzWzBdLmxhYmVsLFxuICAgICAgICAgICAgdHlwZTogdmFyaWFibGVzWzBdLnR5cGUsXG4gICAgICAgICAgICBsZWdlbmQ6IG9wdGlvbnMubGVnZW5kID8/IHRydWUsXG4gICAgICAgICAgICBzY2FsZTogb3B0aW9ucy5zY2FsZSA/PyB7IHNjaGVtZTogb3B0aW9ucy5zZXJpZXM/LnNjaGVtZSA/PyAnY2F0ZWdvcnkyMGMnIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICBjYXNlIE1hcmtUeXBlLlJBREFSOlxuICAgICAgICByZXR1cm4ge307XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zdCBlbmNvZGluZyA9IHtcbiAgICAgICAgICB4OiB7XG4gICAgICAgICAgICBmaWVsZDogYGF0dHJpYnV0ZXMuJHt2YXJpYWJsZXNbMF0ubmFtZX0udmFsdWVgLFxuICAgICAgICAgICAgdGl0bGU6IHZhcmlhYmxlc1swXS5sYWJlbCxcbiAgICAgICAgICAgIHR5cGU6IHZhcmlhYmxlc1swXS50eXBlLFxuICAgICAgICAgICAgdGltZVVuaXQ6IHZhcmlhYmxlc1swXS50eXBlID09PSBWZWdhVHlwZS5URU1QT1JBTCA/IHZhcmlhYmxlc1swXS50aW1lVW5pdCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJpbjogb3B0aW9ucy5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ISVNUT0dSQU0sXG4gICAgICAgICAgICBheGlzOiB2YXJpYWJsZXNbMF0uYXhpc09wdGlvbnMsXG4gICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAvLyBGb3JjZSBhIGZhbHNlIHZhbHVlIGhlcmUgc28gdGhhdCB2ZWdhIHVuZGVyc3RhbmQgcHJvcGVybHlcbiAgICAgICAgICAgICAgemVybzogISF2YXJpYWJsZXNbMF0ub3JpZ2luMCxcbiAgICAgICAgICAgICAgdHlwZTogV2lkZ2V0Q2hhcnRDb21wb25lbnQuaXNUaW1lVW5pdFVUQyh2YXJpYWJsZXNbMF0pID8gJ3V0YycgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgIGZpZWxkOiBgYXR0cmlidXRlcy4ke3ZhcmlhYmxlc1sxXS5uYW1lfS52YWx1ZWAsXG4gICAgICAgICAgICB0aXRsZTogdmFyaWFibGVzWzFdLmxhYmVsLFxuICAgICAgICAgICAgdHlwZTogb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uQ09VTlQgPyBWZWdhVHlwZS5RVUFOVElUQVRJVkUgOiB2YXJpYWJsZXNbMV0udHlwZSxcbiAgICAgICAgICAgIHRpbWVVbml0OiB2YXJpYWJsZXNbMV0udHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUwgPyB2YXJpYWJsZXNbMV0udGltZVVuaXQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBheGlzOiB2YXJpYWJsZXNbMV0uYXhpc09wdGlvbnMsXG4gICAgICAgICAgICBhZ2dyZWdhdGU6IG9wdGlvbnMuYWdncmVnYXRpb24gIT09IEFnZ3JlZ2F0aW9uLk5PTkUgPyBvcHRpb25zLmFnZ3JlZ2F0aW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgemVybzogdmFyaWFibGVzWzFdLm9yaWdpbjAsXG4gICAgICAgICAgICAgIHR5cGU6IFdpZGdldENoYXJ0Q29tcG9uZW50LmlzVGltZVVuaXRVVEModmFyaWFibGVzWzFdKSA/ICd1dGMnIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAob3B0aW9ucy5zZXJpZXMpIHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgZW5jb2RpbmcuY29sb3IgPSB7XG4gICAgICAgICAgICB0aXRsZTogYCR7b3B0aW9ucy5zZXJpZXMuZ3JvdXBCeX1gLFxuICAgICAgICAgICAgZmllbGQ6IGBhdHRyaWJ1dGVzLiR7b3B0aW9ucy5zZXJpZXMuZ3JvdXBCeX0udmFsdWVgLFxuICAgICAgICAgICAgbGVnZW5kOiBvcHRpb25zLmxlZ2VuZFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKG9wdGlvbnMuc2VyaWVzLnNjaGVtZSkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgZW5jb2RpbmcuY29sb3Iuc2NhbGUgPSB7IHNjaGVtZTogb3B0aW9ucy5zZXJpZXMuc2NoZW1lIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbmNvZGluZztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYnVpbGREYXRhVmVnYVJhZGFyKGl0ZW1zOiBJdGVtW10sIG9wdGlvbnM6IENoYXJ0V2lkZ2V0T3B0aW9ucyk6IFJhZGFyVmFsdWVbXSB7XG4gICAgaWYgKG9wdGlvbnMucmFkYXI/LmNvbXBhcmUgPT09ICdpdGVtJykge1xuICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgICAgIC5tYXAoKGl0ZW0sIGlkeCkgPT5cbiAgICAgICAgICAob3B0aW9ucy5yYWRhcj8ucHJvcHMgPz8gW10pLm1hcCgocHJvcDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtVmFsdWVNdWx0aXBsZSA9IEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShpdGVtLCBwcm9wKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IEFycmF5LmlzQXJyYXkoaXRlbVZhbHVlTXVsdGlwbGUpID8gaXRlbVZhbHVlTXVsdGlwbGVbMF0gOiBpdGVtVmFsdWVNdWx0aXBsZTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBpZHgsXG4gICAgICAgICAgICAgIGtleTogcHJvcCxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1WYWx1ZT8udmFsdWVcbiAgICAgICAgICAgIH0gYXMgUmFkYXJWYWx1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5yZWR1Y2UoKGE6IFJhZGFyVmFsdWVbXSwgYjogUmFkYXJWYWx1ZVtdKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAuZmlsdGVyKChhOiBSYWRhclZhbHVlKSA9PiBhLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgYS52YWx1ZSAhPT0gbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtc1xuICAgICAgICAubWFwKFxuICAgICAgICAgIChpdGVtLCBpZHgpID0+XG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICBjYXRlZ29yeTogKGl0ZW0uYXR0cmlidXRlc1tvcHRpb25zLnJhZGFyPy5jYXRlZ29yeVByb3AgPz8gJyddIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKT8udmFsdWUgPz8gJ29iamVjdCcsXG4gICAgICAgICAgICAgIGtleTogKGl0ZW0uYXR0cmlidXRlc1tvcHRpb25zLnJhZGFyPy5rZXlQcm9wID8/ICcnXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSk/LnZhbHVlLFxuICAgICAgICAgICAgICB2YWx1ZTogKGl0ZW0uYXR0cmlidXRlc1tvcHRpb25zLnJhZGFyPy52YWx1ZVByb3AgPz8gJyddIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKT8udmFsdWVcbiAgICAgICAgICAgIH0pIGFzIFJhZGFyVmFsdWVcbiAgICAgICAgKVxuICAgICAgICAuZmlsdGVyKChhOiBSYWRhclZhbHVlKSA9PiBhLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgYS52YWx1ZSAhPT0gbnVsbCAmJiAhIWEua2V5KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWF0Y2hpbmdJdGVtcyhpdGVtczogSXRlbVtdLCBvcHRpb25zOiBDaGFydFdpZGdldE9wdGlvbnMsIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdKSB7XG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgc3dpdGNoIChvcHRpb25zLnR5cGUpIHtcbiAgICAgICAgY2FzZSBNYXJrVHlwZS5DSVJDTEVfUEFDSzpcbiAgICAgICAgICByZXR1cm4gISFvcHRpb25zLnBhY2tpbmc/LmlkICYmICEhb3B0aW9ucy5wYWNraW5nLnBhcmVudElkICYmICEhb3B0aW9ucy5wYWNraW5nLnBhY2tGaWVsZDtcbiAgICAgICAgY2FzZSBNYXJrVHlwZS5SQURBUjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKChvcHRpb25zLnJhZGFyPy5jb21wYXJlID09PSAnaXRlbScgJiYgKG9wdGlvbnMucmFkYXIucHJvcHM/Lmxlbmd0aCA/PyBbXSkgPiAyKSB8fFxuICAgICAgICAgICAgICAob3B0aW9ucy5yYWRhcj8uY29tcGFyZSAhPT0gJ2l0ZW0nICYmXG4gICAgICAgICAgICAgICAgISFvcHRpb25zLnJhZGFyPy5rZXlQcm9wICYmXG4gICAgICAgICAgICAgICAgISFvcHRpb25zLnJhZGFyLnZhbHVlUHJvcCAmJlxuICAgICAgICAgICAgICAgICEhb3B0aW9ucy5yYWRhci5jYXRlZ29yeVByb3ApKSAmJlxuICAgICAgICAgICAgV2lkZ2V0Q2hhcnRDb21wb25lbnQuYnVpbGREYXRhVmVnYVJhZGFyKGl0ZW1zLCBvcHRpb25zKS5sZW5ndGggPiAwXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzWzBdLm5hbWUpICYmXG4gICAgICAgICAgICAoaXRlbS5hdHRyaWJ1dGVzW29wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubmFtZV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICgoT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzWzFdLm5hbWUpICYmXG4gICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbb3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlc1sxXS5uYW1lXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWUgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uRElTVElOQ1QgfHxcbiAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uQ09VTlQpXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyB1bmlxdWVBdHRyaWJ1dGVzQnlOYW1lcyhhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSk6IEF0dHJpYnV0ZVtdIHtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQoYXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGF0dHIubmFtZSkpXS5tYXAoXG4gICAgICAoYXR0ck5hbWUpID0+IGF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5uYW1lID09PSBhdHRyTmFtZSkgPz8gKHt9IGFzIEF0dHJpYnV0ZSlcbiAgICApO1xuICB9XG5cbiAgdGVtcGxhdGVUeXBlVHJhbnNsYXRpb25GbiA9IChpdGVtOiBhbnksIGFyZ3M6IGFueVtdKSA9PlxuICAgIGAke2FyZ3NbMF19JHtpdGVtID09PSBNYXJrU3ViVHlwZS5ERUZBVUxUID8gaXRlbSA6IGFyZ3NbMV0gKyBhcmdzWzJdICsgaXRlbX1gO1xuXG4gIHRyYW5zbGF0ZUFnZ3JlZ2F0aW9ucyA9IChpdGVtOiBhbnkpID0+IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5hZ2dyZWdhdGlvbi4nICsgaXRlbSk7XG4gIGFkdmFuY2VkRWRpdDogc3RyaW5nID0gJ3t9JztcblxuICBjaGFuZ2VDaGFydFRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmN1c3RvbVRpdGxlID0gdGl0bGU7XG4gIH1cblxuICBjaGFuZ2VUaW1lVW5pdCgkZXZlbnQ6IFRpbWVVbml0LCB2YXJpYWJsZTogVmFyaWFibGVEZWZpbml0aW9uKSB7XG4gICAgdmFyaWFibGUudGltZVVuaXQgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VBZ2dyZWdhdGlvbigkZXZlbnQ6IEFnZ3JlZ2F0aW9uKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbiA9ICRldmVudDtcbiAgICBpZiAoW0FnZ3JlZ2F0aW9uLkNPVU5ULCBBZ2dyZWdhdGlvbi5ESVNUSU5DVF0uaW5jbHVkZXMoJGV2ZW50ISkpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0uYXhpc09wdGlvbnMgPSB7IHRpY2tNaW5TdGVwOiAxIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzFdLmF4aXNPcHRpb25zO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkLm5leHQoKTtcbiAgfVxuXG4gIGNoYW5nZVByb3BlcnR5KGF0dHJOYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBhdHRyID0gdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5uYW1lID09PSBhdHRyTmFtZSk7XG4gICAgaWYgKCEhYXR0cikge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1tpbmRleF0ubmFtZSA9IGF0dHIubmFtZTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbaW5kZXhdLmxhYmVsID0gYXR0ci5uYW1lO1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzW2luZGV4XS50eXBlID0gdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKGZpZWxkLCBhdHRyLm5hbWUpO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1tpbmRleF0uYXhpc09wdGlvbnMgPSB0aGlzLm1pblRpY2soZmllbGQpO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWwgKyAnLCAnICsgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS5sYWJlbDtcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJC5uZXh0KCk7XG4gIH1cblxuICBzdGF0aWMgaXNUaW1lVW5pdFVUQyh2YXJpYWJsZURlZjogVmFyaWFibGVEZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgbGV0IHV0Y1JlZ2V4ID0gbmV3IFJlZ0V4cCgvX3V0Y3x1dGNffF9VVEN8VVRDX3xfVXRjfFV0Y18vLCAnZycpO1xuICAgIHJldHVybiB1dGNSZWdleC50ZXN0KHZhcmlhYmxlRGVmPy5sYWJlbCk7XG4gIH1cblxuICBjaGFuZ2VMYWJlbChsYWJlbDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHVwZGF0ZVRpdGxlID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9PT1cbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWwgKyAnLCAnICsgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS5sYWJlbFxuICAgICkge1xuICAgICAgdXBkYXRlVGl0bGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbaW5kZXhdLmxhYmVsID0gbGFiZWw7XG4gICAgaWYgKHVwZGF0ZVRpdGxlKSB7XG4gICAgICAvL3VwZGF0ZSB0aXRsZSBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQgbWFudWFsbHlcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPVxuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLmxhYmVsICsgJywgJyArIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0ubGFiZWw7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlT3JpZ2luQXRaZXJvKHZhcmlhYmxlOiBWYXJpYWJsZURlZmluaXRpb24sICRldmVudDogYm9vbGVhbikge1xuICAgIHZhcmlhYmxlLm9yaWdpbjAgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VUeXBlKHR5cGVPcHRpb25zSWQ6IHN0cmluZykge1xuICAgIHRoaXMub3B0aW9uc0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9uc0NvcHkpKTtcbiAgICBjb25zdCBbdHlwZSwgc3ViVHlwZV0gPSB0eXBlT3B0aW9uc0lkLnNwbGl0KCctJyk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMub3B0aW9uc0NvcHkudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID0gc3ViVHlwZSA/PyBNYXJrU3ViVHlwZS5ERUZBVUxUO1xuXG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkudHlwZSA9PT0gTWFya1R5cGUuQ0lSQ0xFX1BBQ0spIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkucGFja2luZyA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5wYWNraW5nO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zQ29weS50eXBlKSB7XG4gICAgICBjYXNlIE1hcmtUeXBlLkJBUjpcbiAgICAgIGNhc2UgTWFya1R5cGUuTElORTpcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1swXS50eXBlID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLnR5cGUgIT09IFZlZ2FUeXBlLlRFTVBPUkFMID8gVmVnYVR5cGUuTk9NSU5BTCA6IFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTWFya1R5cGUuUE9JTlQ6XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0udHlwZSA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS50eXBlICE9PSBWZWdhVHlwZS5URU1QT1JBTCA/IFZlZ2FUeXBlLlFVQU5USVRBVElWRSA6IFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5BUkVBU1RBQ0tFRCB8fCB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkhJU1RPU1RBQ0tFRCkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMgPSB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcyA/PyB7fTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0Q2hhcnQoKTtcblxuICAgIGlmIChzdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ET05VVCkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5pbm5lclJhZGl1cyA9IHRoaXMub3B0aW9uc0NvcHkuaW5uZXJSYWRpdXMgPz8gNTA7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRDaGFydCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlcz8ubGVuZ3RoID4gMikge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlcy5wb3AoKTtcbiAgICB9XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdHJhbnNsYXRlVG9WZWdhVHlwZSh0eXBlOiBGaWVsZFR5cGUsIG5hbWU6IHN0cmluZyk6IFZlZ2FUeXBlIHtcbiAgICBsZXQgaWRSZWdleCA9IG5ldyBSZWdFeHAoL19pZHxpZF98X0lEfElEX3xfSWR8SWRfLywgJ2cnKTtcbiAgICBpZiAoaWRSZWdleC50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gVmVnYVR5cGUuT1JESU5BTDtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5ERUNJTUFMOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5URUdFUjpcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxPTkc6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5RVUFOVElUQVRJVkU7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlNUQU5UOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuVEVNUE9SQUw7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5LRVlXT1JEOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuU1RSSU5HOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuTk9NSU5BTDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5OT01JTkFMO1xuICAgIH1cbiAgfVxuXG4gIG1pblRpY2sodHlwZTogRmllbGRUeXBlKTogeyB0aWNrTWluU3RlcDogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5URUdFUjpcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxPTkc6XG4gICAgICAgIHJldHVybiB7IHRpY2tNaW5TdGVwOiAxIH07XG4gICAgICBjYXNlIEZpZWxkVHlwZS5ERUNJTUFMOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5TVEFOVDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLktFWVdPUkQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5TVFJJTkc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHRyaWdnZXIoKSB7XG4gICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJC5uZXh0KCk7XG4gIH1cblxuICBwcm9wb3NlVGl0bGUoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zQ29weS50eXBlID09PSBNYXJrVHlwZS5SQURBUikge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zQ29weS5yYWRhcj8uY29tcGFyZSA9PT0gJ2l0ZW0nKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci50aXRsZUl0ZW0nLCB7XG4gICAgICAgICAgICBwcm9wczogKHRoaXMub3B0aW9uc0NvcHkucmFkYXIucHJvcHMgfHwgW10pLmpvaW4oJywgJylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zQ29weS5yYWRhcj8uY29tcGFyZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQucmFkYXIudGl0bGVMaXN0Jywge1xuICAgICAgICAgICAga2V5OiB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyLmtleVByb3AgPz8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LnJhZGFyLmRlZmluZUtleScpLFxuICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkucmFkYXIudmFsdWVQcm9wID8/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci5kZWZpbmVWYWx1ZScpLFxuICAgICAgICAgICAgY2F0ZWdvcnk6XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkucmFkYXIuY2F0ZWdvcnlQcm9wID8/XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci5kZWZpbmVDYXRlZ29yeScpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnR5cGUgPT09IE1hcmtUeXBlLkNJUkNMRV9QQUNLKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLnRpdGxlJywge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLm9wdGlvbnNDb3B5LnBhY2tpbmc/LnBhY2tGaWVsZCA/PyAnJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgY2hhbmdlSW5uZXJSYWRpdXMoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5vcHRpb25zQ29weS5pbm5lclJhZGl1cyA9IHBhcnNlSW50KCRldmVudCwgMTApO1xuICB9XG5cbiAgb3BlblNldHRpbmdzKCkge1xuICAgICh0aGlzLm9wZW4kIGFzIFN1YmplY3Q8dm9pZD4pLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHRvZ2dsZVNlcmllcygkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcztcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTZXJpZXMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkuc2VyaWVzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcy5ncm91cEJ5ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlU2VyaWVzU2NoZW1lKCRldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LnNlcmllcykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMuc2NoZW1lID0gJGV2ZW50O1xuICB9XG5cbiAgdG9nZ2xlU2VyaWVzTGVnZW5kKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5sZWdlbmQgPSAkZXZlbnQ7XG4gIH1cblxuICB0b2dnbGVUb29sdGlwKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS50b29sdGlwID0gJGV2ZW50O1xuICB9XG5cbiAgYXhlTGFiZWwoaTogbnVtYmVyLCBvcHRpb25zQ29weTogQ2hhcnRXaWRnZXRPcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5BUkMpIHtcbiAgICAgIHJldHVybiBpID09PSAwID8gJ0Bwcnkud2lkZ2V0LmNoYXJ0LmVuY29kaW5nLmdyb3VwJyA6ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy52YWx1ZXMnO1xuICAgIH1cbiAgICByZXR1cm4gaSA9PT0gMCA/ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy5ob3Jpem9udGFsJyA6ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy52ZXJ0aWNhbCc7XG4gIH1cblxuICBoYXNOb1R5cGUob3B0aW9uczogQ2hhcnRXaWRnZXRPcHRpb25zKSB7XG4gICAgcmV0dXJuICFvcHRpb25zIHx8ICFvcHRpb25zLnR5cGUgfHwgb3B0aW9ucy50eXBlLmluY2x1ZGVzKCd1bmRlZmluZWQnKSB8fCBvcHRpb25zLnR5cGUuaW5jbHVkZXMoJ251bGwnKTtcbiAgfVxuXG4gIHNjaGVtZSgpIHtcbiAgICByZXR1cm4gdmVnYS5zY2hlbWUodGhpcy5vcHRpb25zQ29weS5zZXJpZXM/LnNjaGVtZSA/PyAnJyk7XG4gIH1cblxuICB0b2dnbGVTcGVjVG9NZXJnZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2UgPSB7fTtcbiAgICAgIHRoaXMuYWR2YW5jZWRFZGl0ID0gJ3t9JztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2U7XG4gICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9ICd7fSc7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQWR2YW5jZWRFZGl0KCRldmVudDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSAkZXZlbnQ/LnRhcmdldD8udmFsdWUgPz8gJGV2ZW50O1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zcGVjVG9NZXJnZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9IEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2UsIHVuZGVmaW5lZCwgNCk7XG4gICAgICAgIHRoaXMuaW52YWxpZEpzb24gPSBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBqc29uIHByb3ZpZGVkJyk7XG4gICAgICAgIHRoaXMuaW52YWxpZEpzb24gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2U7XG4gICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9ICd7fSc7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2NhbnZhcycpWzBdLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJykpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1jaGFydC1jc3M+PC9wcnktd2lkZ2V0LWNoYXJ0LWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tY2hhcnRcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgW2RhdGFzb3VyY2VJZHMkXT1cImRhdGFzb3VyY2VJZHMkXCJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgI2hlYWRlclxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFtpc0Rpc2FibGVdPVwiKGZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMCB8fCBoYXNOb1R5cGUob3B0aW9uc0NvcHkpXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQudGl0bGVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNoYXJ0VGl0bGUoJGV2ZW50KVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuY3VzdG9tVGl0bGUgPz8gb3B0aW9uc0NvcHkudGl0bGVcIlxuICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWx0ZXJEYXRhRm9yT3B0aW9uc0NvcHkkIHwgYXN5bmMpPy5sZW5ndGggPT09IDA7IGVsc2UgZGF0YVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhLWxhYmVsIGEtbGFiZWwtLWhlbHAgLWVycm9yXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnBhcmFtcy5ub1BhcmFtcycgfCBpMThuIH19PC9wPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0YT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuUkFEQVJcIj5cbiAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnBhcmFtcy5tdWx0aXBsZVBhcmFtcycgfCBpMThuIH19e3sgKGZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQgfCBhc3luYyk/Lmxlbmd0aCB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnNDb3B5XCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfdHlwZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC50eXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUeXBlKCRldmVudClcIlxuICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwidHlwZU9wdGlvbnNcIlxuICAgICAgICAgICAgW2xhYmVsVHJhbnNsYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkudHlwZSArICctJyArIG9wdGlvbnNDb3B5LnN1YlR5cGVcIlxuICAgICAgICAgICAgYmFzZVRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0Lm1hcmtUeXBlLlwiXG4gICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICBpZD1cImNoYXJ0X3R5cGVcIlxuICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuUkFEQVIgJiYgb3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLkNJUkNMRV9QQUNLXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weT8uc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuRE9OVVRcIj5cbiAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5pbm5lclJhZGl1c1wiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VJbm5lclJhZGl1cygkZXZlbnQpXCJcbiAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQuY2hhcnQuaW5uZXJSYWRpdXNcIlxuICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICBtYXg9XCI1MDBcIlxuICAgICAgICAgID48L3ByeS1yYW5nZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCB2YXJpYWJsZURlZiBvZiBvcHRpb25zQ29weT8uc2VsZWN0ZWRWYXJpYWJsZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImkgPT09IDFcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhZ2dyZWdhdGlvbnNcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuZW5jb2RpbmcuZ3JvdXAnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBZ2dyZWdhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpID09PSAxXCJcbiAgICAgICAgICAgICAgW2JpbmREYXRhXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImFnZ3JlZ2F0aW9uc1wiXG4gICAgICAgICAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWdncmVnYXRpb25cIlxuICAgICAgICAgICAgICBbdHJhbnNsYXRpb25Gbl09XCJ0cmFuc2xhdGVBZ2dyZWdhdGlvbnNcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgIGlkPVwiYWdncmVnYXRpb25zXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJpICE9PSAxIHx8IG9wdGlvbnNDb3B5LmFnZ3JlZ2F0aW9uICE9PSAnY291bnQnXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiYWdncmVnYXRpb25fcHJvcGVydHlcIj5cbiAgICAgICAgICAgICAge3sgYXhlTGFiZWwoaSwgb3B0aW9uc0NvcHkpIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVByb3BlcnR5KCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cIihpICE9PSAxID8gdmFyaWFibGVBdHRyaWJ1dGVzJCA6IHBvc3NpYmxlU2Vjb25kYXJ5QXR0cmlidXRlcyQpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YXJpYWJsZURlZi5uYW1lXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgIGlkPVwiYWdncmVnYXRpb25fcHJvcGVydHlcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJAcHJ5LndpZGdldC5jaGFydC5kYXRhTGFiZWxcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGFiZWwoJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJ2YXJpYWJsZURlZi5sYWJlbFwiXG4gICAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmFyaWFibGVEZWYudHlwZSA9PT0gJ3RlbXBvcmFsJ1wiIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfdGltZVVuaXRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQudGltZVVuaXQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUaW1lVW5pdCgkZXZlbnQsIHZhcmlhYmxlRGVmKVwiXG4gICAgICAgICAgICAgIFtiaW5kRGF0YV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ0aW1lVW5pdHNcIlxuICAgICAgICAgICAgICBbbGFiZWxUcmFuc2xhdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInZhcmlhYmxlRGVmLnRpbWVVbml0XCJcbiAgICAgICAgICAgICAgYmFzZVRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LnRpbWVVbml0TGlzdC5cIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfdGltZVVuaXRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2YXJpYWJsZURlZi50eXBlID09PSAncXVhbnRpdGF0aXZlJyAmJiBvcHRpb25zQ29weT8udHlwZSAhPT0gJ2FyYydcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVPcmlnaW5BdFplcm8odmFyaWFibGVEZWYsICRldmVudClcIiBbbmdNb2RlbF09XCJ2YXJpYWJsZURlZi5vcmlnaW4wXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmlnaW4nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVNlcmllcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5zZXJpZXNcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5BUkMgJiYgb3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLlJBREFSXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuQVJFQVNUQUNLRUQgfHxcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkhJU1RPU1RBQ0tFRFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllcycgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCJcbiAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLkFSQyAmJiBvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuUkFEQVIgJiYgISFvcHRpb25zQ29weS5zZXJpZXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNBdHRyXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc0F0dHInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcy5ncm91cEJ5IVwiXG4gICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwidmFyaWFibGVBdHRyaWJ1dGVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzQXR0clwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKG9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5BUkMgfHwgb3B0aW9uc0NvcHk/LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSIHx8ICEhb3B0aW9uc0NvcHkuc2VyaWVzKSAmJlxuICAgICAgICAgICAgICBzY2hlbWVzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNTY2hlbWVcIiBbdGl0bGVdPVwiJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc1NjaGVtZUFsdCcgfCBpMThuXCI+e3tcbiAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc1NjaGVtZScgfCBpMThuXG4gICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXNTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lIVwiXG4gICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwic2NoZW1lc1wiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzU2NoZW1lXCJcbiAgICAgICAgICAgICAgW2xhYmVsVHJhbnNsYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgICBiYXNlVHJhbnNsYXRlPVwiQHByeS53aWRnZXQuY2hhcnQuc2NoZW1lLlwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwiaWRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldC0tY2hhcnQtY29sb3ItdGh1bWJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNjaGVtZUNvbG9yIG9mIHNjaGVtZSgpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJvLXdpZGdldC0tY2hhcnQtY29sb3ItdGh1bWItaXRlbVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJzY2hlbWVDb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNjaGVtZUNvbG9yXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlU2VyaWVzTGVnZW5kKCRldmVudClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmxlZ2VuZCFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5SQURBUiB8fCAhIW9wdGlvbnNDb3B5LnNlcmllc1wiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuc2VyaWVzTGVnZW5kJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVUb29sdGlwKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LnRvb2x0aXAhXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC50b29sdGlwJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSICYmIG9wdGlvbnNDb3B5LnJhZGFyICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLmNvbXBhcmVcIlxuICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImNvbXBhcmlzb25zXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5yYWRhci5jb21wYXJlID09PSAnaXRlbSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLnByb3BzXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwibnVtZXJpY1Byb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5yYWRhci5jb21wYXJlID09PSAndmFsdWUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjb21wYXJpc29uX2tleVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jb21wYXJpc29uLmtleScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLmtleVByb3BcIlxuICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJ0ZXh0UHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgIGlkPVwiY29tcGFyaXNvbl9rZXlcIlxuICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNvbXBhcmlzb25fdmFsdWVzXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNvbXBhcmlzb24udmFsdWVzJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc0NvcHkucmFkYXIudmFsdWVQcm9wXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwibnVtZXJpY1Byb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICBpZD1cImNvbXBhcmlzb25fdmFsdWVzXCJcbiAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjb21wYXJpc29uX2NhdGVnb3J5XCI+e3tcbiAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQuY2hhcnQuY29tcGFyaXNvbi5jYXRlZ29yeScgfCBpMThuXG4gICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLmNhdGVnb3J5UHJvcFwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cInRleHRQcm9wZXJ0aWVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJjb21wYXJpc29uX2NhdGVnb3J5XCJcbiAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzY2hlbWVzXCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwiY2hhcnRfc2VyaWVzU2NoZW1lX3JhZGFyXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidAcHJ5LndpZGdldC5jaGFydC5zZXJpZXNTY2hlbWVBbHQnIHwgaTE4blwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuc2VyaWVzU2NoZW1lJyB8IGkxOG4gfX08L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXNTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lIVwiXG4gICAgICAgICAgICAgIFtiaW5kRGF0YV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwic2NoZW1lc1wiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzU2NoZW1lX3JhZGFyXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weT8udHlwZSA9PT0gTWFya1R5cGUuQ0lSQ0xFX1BBQ0sgJiYgb3B0aW9uc0NvcHkucGFja2luZyAhPT0gdW5kZWZpbmVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfY2lyY2xlX2lkXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNpcmNsZS5pZCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnBhY2tpbmcuaWRcIlxuICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cInZhcmlhYmxlQXR0cmlidXRlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICBpZD1cImNoYXJ0X2NpcmNsZV9pZFwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X2NpcmNsZV9waWRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLnBpZCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnBhY2tpbmcucGFyZW50SWRcIlxuICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cInZhcmlhYmxlQXR0cmlidXRlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICBpZD1cImNoYXJ0X2NpcmNsZV9waWRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9jaXJjbGVfZmllbGRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLmZpZWxkJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc0NvcHkucGFja2luZy5wYWNrRmllbGRcIlxuICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cIm51bWVyaWNQcm9wZXJ0aWVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfY2lyY2xlX2ZpZWxkXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfY2lyY2xlX3Rvb2x0aXBcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLnRvb2x0aXAnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5wYWNraW5nLnRvb2x0aXBcIlxuICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cInZhcmlhYmxlQXR0cmlidXRlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICBpZD1cImNoYXJ0X2NpcmNsZV90b29sdGlwXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVTcGVjVG9NZXJnZSgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5zcGVjVG9NZXJnZVwiXG4gICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5tb3JlT3B0aW9ucycgfCBpMThuIH19XG4gICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5LnNwZWNUb01lcmdlXCI+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJhZHZhbmNlZEVkaXRcIlxuICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInVwZGF0ZUFkdmFuY2VkRWRpdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2FyZWFcIlxuICAgICAgICAgICAgW2NsYXNzLi1pbnZhbGlkXT1cImludmFsaWRKc29uXCJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ2hhcnRWYWxpZCQgfCBhc3luY1wiPlxuICAgIDxkaXZcbiAgICAgICN2ZWdhXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAoKHdpZGdldFNpemUkIHwgYXN5bmMpPy5oZWlnaHQgPz8gMCkgLSAoKGRpc3BsYXlIZWFkZXIkIHwgYXN5bmMpID8gMSA6IDApICogV0lER0VUX0hFQURFUl9IRUlHSFRcbiAgICAgIFwiXG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwiKHdpZGdldFNpemUkIHwgYXN5bmMpPy53aWR0aFwiXG4gICAgPjwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShpc0NoYXJ0VmFsaWQkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19jaG9vc2UtcGFyYW1ldGVyc1wiPlxuICAgICAgPHAgY2xhc3M9XCJhLXBcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNob29zZVBhcmFtZXRlcnMnIHwgaTE4biB9fVxuICAgICAgPC9wPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5TZXR0aW5ncygpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyMFwiIGljb25Tdmc9XCJjb250cm9sXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0LnNldHRpbmdzLnRpdGxlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==