@igo2/common 1.15.4 → 16.0.0-rc.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 (473) hide show
  1. package/common-theme.scss +19 -0
  2. package/{esm2020 → esm2022}/igo2-common.mjs +4 -4
  3. package/esm2022/lib/action/action.module.mjs +20 -0
  4. package/esm2022/lib/action/actionbar/actionbar-item.component.mjs +270 -0
  5. package/esm2022/lib/action/actionbar/actionbar.component.mjs +389 -0
  6. package/{esm2020 → esm2022}/lib/action/actionbar/actionbar.module.mjs +57 -57
  7. package/{esm2020 → esm2022}/lib/action/index.mjs +3 -3
  8. package/{esm2020 → esm2022}/lib/action/shared/action.enums.mjs +7 -7
  9. package/{esm2020 → esm2022}/lib/action/shared/action.interfaces.mjs +2 -2
  10. package/{esm2020 → esm2022}/lib/action/shared/index.mjs +4 -4
  11. package/{esm2020 → esm2022}/lib/action/shared/store.mjs +8 -8
  12. package/esm2022/lib/backdrop/backdrop.component.mjs +27 -0
  13. package/{esm2020 → esm2022}/lib/backdrop/backdrop.module.mjs +25 -25
  14. package/{esm2020 → esm2022}/lib/backdrop/index.mjs +2 -2
  15. package/esm2022/lib/badge-icon/badge-icon.directive.mjs +150 -0
  16. package/{esm2020 → esm2022}/lib/badge-icon/badge-icon.module.mjs +26 -26
  17. package/{esm2020 → esm2022}/lib/badge-icon/index.mjs +2 -2
  18. package/esm2022/lib/clickout/clickout.directive.mjs +33 -0
  19. package/{esm2020 → esm2022}/lib/clickout/clickout.module.mjs +24 -24
  20. package/{esm2020 → esm2022}/lib/clickout/index.mjs +2 -2
  21. package/{esm2020 → esm2022}/lib/clone/clone.module.mjs +24 -24
  22. package/esm2022/lib/clone/clone.pipe.mjs +24 -0
  23. package/{esm2020 → esm2022}/lib/clone/index.mjs +2 -2
  24. package/esm2022/lib/collapsible/collapse.directive.mjs +58 -0
  25. package/esm2022/lib/collapsible/collapsible.component.mjs +54 -0
  26. package/{esm2020 → esm2022}/lib/collapsible/collapsible.module.mjs +27 -27
  27. package/{esm2020 → esm2022}/lib/collapsible/index.mjs +3 -3
  28. package/esm2022/lib/color-picker-form-field/color-picker-form-field.component.mjs +121 -0
  29. package/esm2022/lib/color-picker-form-field/color-picker-form-field.module.mjs +32 -0
  30. package/esm2022/lib/color-picker-form-field/index.mjs +2 -0
  31. package/esm2022/lib/confirm-dialog/confirm-dialog.component.mjs +47 -0
  32. package/{esm2020 → esm2022}/lib/confirm-dialog/confirm-dialog.module.mjs +29 -29
  33. package/esm2022/lib/confirm-dialog/confirm-dialog.service.mjs +29 -0
  34. package/{esm2020 → esm2022}/lib/confirm-dialog/index.mjs +3 -3
  35. package/esm2022/lib/context-menu/context-menu.directive.mjs +110 -0
  36. package/{esm2020 → esm2022}/lib/context-menu/context-menu.module.mjs +25 -25
  37. package/{esm2020 → esm2022}/lib/context-menu/index.mjs +3 -3
  38. package/esm2022/lib/context-menu/long-press.directive.mjs +67 -0
  39. package/esm2022/lib/custom-html/custom-html.component.mjs +27 -0
  40. package/{esm2020 → esm2022}/lib/custom-html/custom-html.module.mjs +47 -47
  41. package/{esm2020 → esm2022}/lib/custom-html/custom-html.pipe.mjs +20 -18
  42. package/{esm2020 → esm2022}/lib/custom-html/index.mjs +3 -3
  43. package/{esm2020 → esm2022}/lib/dom/dom.interfaces.mjs +2 -2
  44. package/{esm2020 → esm2022}/lib/dom/dom.module.mjs +21 -23
  45. package/esm2022/lib/dom/dom.service.mjs +35 -0
  46. package/{esm2020 → esm2022}/lib/dom/index.mjs +3 -3
  47. package/esm2022/lib/drag-drop/drag-drop.directive.mjs +85 -0
  48. package/{esm2020 → esm2022}/lib/drag-drop/drag-drop.module.mjs +24 -24
  49. package/{esm2020 → esm2022}/lib/drag-drop/index.mjs +2 -2
  50. package/esm2022/lib/dynamic-component/dynamic-component.module.mjs +20 -0
  51. package/esm2022/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +138 -0
  52. package/esm2022/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +22 -0
  53. package/{esm2020 → esm2022}/lib/dynamic-component/index.mjs +3 -3
  54. package/{esm2020 → esm2022}/lib/dynamic-component/shared/dynamic-component.interfaces.mjs +2 -2
  55. package/esm2022/lib/dynamic-component/shared/dynamic-component.mjs +183 -0
  56. package/{esm2020 → esm2022}/lib/dynamic-component/shared/dynamic-component.service.mjs +30 -29
  57. package/{esm2020 → esm2022}/lib/dynamic-component/shared/index.mjs +4 -4
  58. package/esm2022/lib/entity/entity-selector/entity-selector.component.mjs +214 -0
  59. package/esm2022/lib/entity/entity-selector/entity-selector.module.mjs +24 -0
  60. package/esm2022/lib/entity/entity-table/entity-table-row.directive.mjs +139 -0
  61. package/esm2022/lib/entity/entity-table/entity-table.component.mjs +1455 -0
  62. package/esm2022/lib/entity/entity-table/entity-table.module.mjs +96 -0
  63. package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +167 -0
  64. package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +2 -0
  65. package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +22 -0
  66. package/{esm2020 → esm2022}/lib/entity/entity.module.mjs +29 -31
  67. package/{esm2020 → esm2022}/lib/entity/index.mjs +6 -6
  68. package/{esm2020 → esm2022}/lib/entity/shared/entity.enums.mjs +28 -28
  69. package/esm2022/lib/entity/shared/entity.interfaces.mjs +2 -0
  70. package/esm2022/lib/entity/shared/entity.utils.mjs +73 -0
  71. package/esm2022/lib/entity/shared/index.mjs +11 -0
  72. package/esm2022/lib/entity/shared/state.mjs +194 -0
  73. package/esm2022/lib/entity/shared/store-strategy.mjs +73 -0
  74. package/esm2022/lib/entity/shared/store.mjs +256 -0
  75. package/esm2022/lib/entity/shared/strategies/filter-custom-function.mjs +80 -0
  76. package/esm2022/lib/entity/shared/strategies/filter-selection.mjs +81 -0
  77. package/{esm2020 → esm2022}/lib/entity/shared/strategies/index.mjs +4 -4
  78. package/esm2022/lib/entity/shared/strategies/strategy.mjs +78 -0
  79. package/esm2022/lib/entity/shared/transaction.mjs +329 -0
  80. package/esm2022/lib/entity/shared/view.mjs +330 -0
  81. package/esm2022/lib/entity/shared/watcher.mjs +135 -0
  82. package/esm2022/lib/flexible/flexible.component.mjs +153 -0
  83. package/{esm2020 → esm2022}/lib/flexible/flexible.module.mjs +24 -24
  84. package/{esm2020 → esm2022}/lib/flexible/flexible.type.mjs +2 -2
  85. package/{esm2020 → esm2022}/lib/flexible/index.mjs +3 -3
  86. package/esm2022/lib/form/form/form.component.mjs +125 -0
  87. package/esm2022/lib/form/form/form.module.mjs +23 -0
  88. package/esm2022/lib/form/form-field/form-field-select.component.mjs +140 -0
  89. package/esm2022/lib/form/form-field/form-field-text.component.mjs +113 -0
  90. package/esm2022/lib/form/form-field/form-field-textarea.component.mjs +114 -0
  91. package/esm2022/lib/form/form-field/form-field.component.mjs +78 -0
  92. package/{esm2020 → esm2022}/lib/form/form-field/form-field.module.mjs +74 -74
  93. package/{esm2020 → esm2022}/lib/form/form-field/index.mjs +5 -5
  94. package/esm2022/lib/form/form-group/form-group.component.mjs +115 -0
  95. package/esm2022/lib/form/form-group/form-group.module.mjs +36 -0
  96. package/esm2022/lib/form/form.module.mjs +27 -0
  97. package/{esm2020 → esm2022}/lib/form/index.mjs +5 -5
  98. package/{esm2020 → esm2022}/lib/form/shared/form-field-component.mjs +7 -7
  99. package/esm2022/lib/form/shared/form-field.service.mjs +29 -0
  100. package/esm2022/lib/form/shared/form.interfaces.mjs +2 -0
  101. package/esm2022/lib/form/shared/form.service.mjs +82 -0
  102. package/esm2022/lib/form/shared/form.utils.mjs +40 -0
  103. package/{esm2020 → esm2022}/lib/form/shared/index.mjs +6 -6
  104. package/esm2022/lib/home-button/home-button.component.mjs +30 -0
  105. package/{esm2020 → esm2022}/lib/home-button/home-button.module.mjs +41 -41
  106. package/{esm2020 → esm2022}/lib/home-button/index.mjs +2 -2
  107. package/esm2022/lib/image/image-error.directive.mjs +36 -0
  108. package/{esm2020 → esm2022}/lib/image/image.module.mjs +25 -25
  109. package/{esm2020 → esm2022}/lib/image/index.mjs +3 -3
  110. package/esm2022/lib/image/secure-image.pipe.mjs +65 -0
  111. package/{esm2020 → esm2022}/lib/interactive-tour/index.mjs +5 -5
  112. package/esm2022/lib/interactive-tour/interactive-tour.component.mjs +161 -0
  113. package/esm2022/lib/interactive-tour/interactive-tour.interface.mjs +2 -0
  114. package/esm2022/lib/interactive-tour/interactive-tour.loader.mjs +49 -0
  115. package/{esm2020 → esm2022}/lib/interactive-tour/interactive-tour.module.mjs +40 -40
  116. package/esm2022/lib/interactive-tour/interactive-tour.service.mjs +297 -0
  117. package/{esm2020 → esm2022}/lib/json-dialog/index.mjs +3 -3
  118. package/esm2022/lib/json-dialog/json-dialog.component.mjs +114 -0
  119. package/{esm2020 → esm2022}/lib/json-dialog/json-dialog.module.mjs +29 -29
  120. package/{esm2020 → esm2022}/lib/json-dialog/json-dialog.service.mjs +26 -24
  121. package/{esm2020 → esm2022}/lib/keyvalue/index.mjs +2 -2
  122. package/{esm2020 → esm2022}/lib/keyvalue/keyvalue.module.mjs +24 -24
  123. package/{esm2020 → esm2022}/lib/keyvalue/keyvalue.pipe.mjs +18 -18
  124. package/{esm2020 → esm2022}/lib/list/index.mjs +3 -3
  125. package/esm2022/lib/list/list-item.directive.mjs +167 -0
  126. package/esm2022/lib/list/list.component.mjs +268 -0
  127. package/{esm2020 → esm2022}/lib/list/list.module.mjs +29 -29
  128. package/{esm2020 → esm2022}/lib/panel/index.mjs +2 -2
  129. package/esm2022/lib/panel/panel.component.mjs +60 -0
  130. package/{esm2020 → esm2022}/lib/panel/panel.module.mjs +19 -19
  131. package/{esm2020 → esm2022}/lib/sidenav/index.mjs +2 -2
  132. package/esm2022/lib/sidenav/sidenav-shim.directive.mjs +59 -0
  133. package/{esm2020 → esm2022}/lib/sidenav/sidenav.module.mjs +24 -24
  134. package/{esm2020 → esm2022}/lib/spinner/index.mjs +3 -3
  135. package/esm2022/lib/spinner/spinner-activity.directive.mjs +55 -0
  136. package/esm2022/lib/spinner/spinner.component.mjs +38 -0
  137. package/{esm2020 → esm2022}/lib/spinner/spinner.module.mjs +21 -21
  138. package/{esm2020 → esm2022}/lib/stop-propagation/index.mjs +3 -3
  139. package/{esm2020 → esm2022}/lib/stop-propagation/stop-drop-propagation.directive.mjs +22 -22
  140. package/{esm2020 → esm2022}/lib/stop-propagation/stop-propagation.directive.mjs +21 -21
  141. package/{esm2020 → esm2022}/lib/stop-propagation/stop-propagation.module.mjs +25 -25
  142. package/{esm2020 → esm2022}/lib/table/index.mjs +6 -6
  143. package/{esm2020 → esm2022}/lib/table/table-action-color.enum.mjs +7 -7
  144. package/esm2022/lib/table/table-database.mjs +28 -0
  145. package/esm2022/lib/table/table-datasource.mjs +64 -0
  146. package/esm2022/lib/table/table-model.interface.mjs +2 -0
  147. package/esm2022/lib/table/table.component.mjs +302 -0
  148. package/{esm2020 → esm2022}/lib/table/table.module.mjs +67 -67
  149. package/{esm2020 → esm2022}/lib/tool/index.mjs +3 -3
  150. package/{esm2020 → esm2022}/lib/tool/shared/index.mjs +6 -6
  151. package/esm2022/lib/tool/shared/tool-component.mjs +9 -0
  152. package/esm2022/lib/tool/shared/tool.interface.mjs +2 -0
  153. package/esm2022/lib/tool/shared/tool.service.mjs +43 -0
  154. package/{esm2020 → esm2022}/lib/tool/shared/toolbox.enums.mjs +7 -7
  155. package/esm2022/lib/tool/shared/toolbox.mjs +184 -0
  156. package/esm2022/lib/tool/tool.module.mjs +26 -0
  157. package/{esm2020 → esm2022}/lib/tool/toolbox/toolbox.animation.mjs +10 -10
  158. package/esm2022/lib/tool/toolbox/toolbox.component.mjs +273 -0
  159. package/esm2022/lib/tool/toolbox/toolbox.module.mjs +24 -0
  160. package/{esm2020 → esm2022}/lib/widget/index.mjs +3 -3
  161. package/{esm2020 → esm2022}/lib/widget/shared/index.mjs +4 -4
  162. package/esm2022/lib/widget/shared/widget.interfaces.mjs +2 -0
  163. package/{esm2020 → esm2022}/lib/widget/shared/widget.mjs +4 -4
  164. package/esm2022/lib/widget/shared/widget.service.mjs +22 -0
  165. package/esm2022/lib/widget/widget-outlet/widget-outlet.component.mjs +124 -0
  166. package/esm2022/lib/widget/widget-outlet/widget-outlet.module.mjs +23 -0
  167. package/esm2022/lib/widget/widget.module.mjs +21 -0
  168. package/{esm2020 → esm2022}/lib/workspace/index.mjs +4 -4
  169. package/{esm2020 → esm2022}/lib/workspace/shared/index.mjs +4 -4
  170. package/esm2022/lib/workspace/shared/store.mjs +37 -0
  171. package/{esm2020 → esm2022}/lib/workspace/shared/workspace.interfaces.mjs +2 -2
  172. package/esm2022/lib/workspace/shared/workspace.mjs +143 -0
  173. package/esm2022/lib/workspace/workspace-selector/workspace-selector.component.mjs +58 -0
  174. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +23 -0
  175. package/esm2022/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +94 -0
  176. package/esm2022/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +23 -0
  177. package/esm2022/lib/workspace/workspace.module.mjs +20 -0
  178. package/esm2022/public_api.mjs +76 -0
  179. package/{fesm2020 → fesm2022}/igo2-common.mjs +9837 -9345
  180. package/fesm2022/igo2-common.mjs.map +1 -0
  181. package/index.d.ts +5 -5
  182. package/lib/action/action.module.d.ts +8 -8
  183. package/lib/action/action.theming.scss +5 -0
  184. package/lib/action/actionbar/actionbar-item.component.d.ts +78 -78
  185. package/lib/action/actionbar/actionbar-item.theming.scss +32 -0
  186. package/lib/action/actionbar/actionbar.component.d.ts +147 -146
  187. package/lib/action/actionbar/actionbar.module.d.ts +20 -20
  188. package/lib/action/actionbar/actionbar.theming.scss +22 -0
  189. package/lib/action/index.d.ts +2 -2
  190. package/lib/action/shared/action.enums.d.ts +5 -5
  191. package/lib/action/shared/action.interfaces.d.ts +17 -17
  192. package/lib/action/shared/index.d.ts +3 -3
  193. package/lib/action/shared/store.d.ts +8 -8
  194. package/lib/backdrop/backdrop.component.d.ts +9 -9
  195. package/lib/backdrop/backdrop.module.d.ts +10 -10
  196. package/lib/backdrop/index.d.ts +1 -1
  197. package/lib/badge-icon/badge-icon.directive.d.ts +36 -36
  198. package/lib/badge-icon/badge-icon.module.d.ts +11 -11
  199. package/lib/badge-icon/index.d.ts +1 -1
  200. package/lib/clickout/clickout.directive.d.ts +10 -10
  201. package/lib/clickout/clickout.module.d.ts +9 -9
  202. package/lib/clickout/index.d.ts +1 -1
  203. package/lib/clone/clone.module.d.ts +9 -9
  204. package/lib/clone/clone.pipe.d.ts +7 -7
  205. package/lib/clone/index.d.ts +1 -1
  206. package/lib/collapsible/collapse.directive.d.ts +19 -19
  207. package/lib/collapsible/collapsible.component.d.ts +13 -13
  208. package/lib/collapsible/collapsible.module.d.ts +12 -12
  209. package/lib/collapsible/collapsible.theming.scss +22 -0
  210. package/lib/collapsible/index.d.ts +2 -2
  211. package/lib/color-picker-form-field/color-picker-form-field.component.d.ts +26 -0
  212. package/lib/color-picker-form-field/color-picker-form-field.module.d.ts +10 -0
  213. package/lib/color-picker-form-field/index.d.ts +1 -0
  214. package/lib/confirm-dialog/confirm-dialog.component.d.ts +9 -9
  215. package/lib/confirm-dialog/confirm-dialog.module.d.ts +12 -12
  216. package/lib/confirm-dialog/confirm-dialog.service.d.ts +12 -12
  217. package/lib/confirm-dialog/index.d.ts +2 -2
  218. package/lib/context-menu/context-menu.directive.d.ts +21 -21
  219. package/lib/context-menu/context-menu.module.d.ts +10 -10
  220. package/lib/context-menu/index.d.ts +2 -2
  221. package/lib/context-menu/long-press.directive.d.ts +20 -20
  222. package/lib/custom-html/custom-html.component.d.ts +9 -9
  223. package/lib/custom-html/custom-html.module.d.ts +16 -16
  224. package/lib/custom-html/custom-html.pipe.d.ts +10 -10
  225. package/lib/custom-html/index.d.ts +2 -2
  226. package/lib/dom/dom.interfaces.d.ts +10 -10
  227. package/lib/dom/dom.module.d.ts +8 -8
  228. package/lib/dom/dom.service.d.ts +10 -10
  229. package/lib/dom/index.d.ts +2 -2
  230. package/lib/drag-drop/drag-drop.directive.d.ts +14 -14
  231. package/lib/drag-drop/drag-drop.module.d.ts +9 -9
  232. package/lib/drag-drop/index.d.ts +1 -1
  233. package/lib/dynamic-component/dynamic-component.module.d.ts +8 -8
  234. package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.d.ts +70 -70
  235. package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.d.ts +11 -11
  236. package/lib/dynamic-component/index.d.ts +2 -2
  237. package/lib/dynamic-component/shared/dynamic-component.d.ts +88 -88
  238. package/lib/dynamic-component/shared/dynamic-component.interfaces.d.ts +3 -3
  239. package/lib/dynamic-component/shared/dynamic-component.service.d.ts +18 -18
  240. package/lib/dynamic-component/shared/index.d.ts +3 -3
  241. package/lib/entity/entity-selector/entity-selector.component.d.ts +92 -92
  242. package/lib/entity/entity-selector/entity-selector.module.d.ts +13 -13
  243. package/lib/entity/entity-selector/entity-selector.theming.scss +21 -0
  244. package/lib/entity/entity-table/entity-table-row.directive.d.ts +69 -69
  245. package/lib/entity/entity-table/entity-table.component.d.ts +327 -333
  246. package/lib/entity/entity-table/entity-table.module.d.ts +29 -29
  247. package/lib/entity/entity-table/entity-table.theming.scss +34 -0
  248. package/lib/entity/entity-table-paginator/entity-table-paginator.component.d.ts +49 -49
  249. package/lib/entity/entity-table-paginator/entity-table-paginator.interface.d.ts +8 -8
  250. package/lib/entity/entity-table-paginator/entity-table-paginator.module.d.ts +11 -11
  251. package/lib/entity/entity-table-paginator/entity-table-paginator.theming.scss +21 -0
  252. package/lib/entity/entity.module.d.ts +10 -10
  253. package/lib/entity/entity.theming.scss +10 -0
  254. package/lib/entity/index.d.ts +5 -5
  255. package/lib/entity/shared/entity.enums.d.ts +23 -23
  256. package/lib/entity/shared/entity.interfaces.d.ts +95 -114
  257. package/lib/entity/shared/entity.utils.d.ts +49 -49
  258. package/lib/entity/shared/index.d.ts +10 -9
  259. package/lib/entity/shared/state.d.ts +108 -103
  260. package/lib/entity/shared/store-strategy.d.ts +38 -0
  261. package/lib/entity/shared/store.d.ts +147 -176
  262. package/lib/entity/shared/strategies/filter-custom-function.d.ts +51 -51
  263. package/lib/entity/shared/strategies/filter-selection.d.ts +48 -48
  264. package/lib/entity/shared/strategies/index.d.ts +3 -3
  265. package/lib/entity/shared/strategies/strategy.d.ts +56 -56
  266. package/lib/entity/shared/transaction.d.ts +180 -168
  267. package/lib/entity/shared/view.d.ts +193 -193
  268. package/lib/entity/shared/watcher.d.ts +72 -72
  269. package/lib/flexible/flexible.component.d.ts +41 -41
  270. package/lib/flexible/flexible.module.d.ts +9 -9
  271. package/lib/flexible/flexible.type.d.ts +2 -2
  272. package/lib/flexible/index.d.ts +2 -2
  273. package/lib/form/form/form.component.d.ts +53 -53
  274. package/lib/form/form/form.module.d.ts +12 -12
  275. package/lib/form/form-field/form-field-select.component.d.ts +48 -48
  276. package/lib/form/form-field/form-field-text.component.d.ts +41 -41
  277. package/lib/form/form-field/form-field-textarea.component.d.ts +41 -41
  278. package/lib/form/form-field/form-field.component.d.ts +29 -34
  279. package/lib/form/form-field/form-field.module.d.ts +21 -21
  280. package/lib/form/form-field/index.d.ts +4 -4
  281. package/lib/form/form-group/form-group.component.d.ts +49 -49
  282. package/lib/form/form-group/form-group.module.d.ts +14 -14
  283. package/lib/form/form.module.d.ts +13 -13
  284. package/lib/form/index.d.ts +4 -4
  285. package/lib/form/shared/form-field-component.d.ts +1 -1
  286. package/lib/form/shared/form-field.service.d.ts +19 -19
  287. package/lib/form/shared/form.interfaces.d.ts +61 -57
  288. package/lib/form/shared/form.service.d.ts +15 -15
  289. package/lib/form/shared/form.utils.d.ts +11 -11
  290. package/lib/form/shared/index.d.ts +5 -5
  291. package/lib/home-button/home-button.component.d.ts +9 -9
  292. package/lib/home-button/home-button.module.d.ts +15 -15
  293. package/lib/home-button/home-button.theming.scss +18 -0
  294. package/lib/home-button/index.d.ts +1 -1
  295. package/lib/image/image-error.directive.d.ts +11 -11
  296. package/lib/image/image.module.d.ts +10 -10
  297. package/lib/image/index.d.ts +2 -2
  298. package/lib/image/secure-image.pipe.d.ts +13 -13
  299. package/lib/interactive-tour/index.d.ts +4 -4
  300. package/lib/interactive-tour/interactive-tour.component.d.ts +30 -30
  301. package/lib/interactive-tour/interactive-tour.interface.d.ts +32 -32
  302. package/lib/interactive-tour/interactive-tour.loader.d.ts +18 -18
  303. package/lib/interactive-tour/interactive-tour.module.d.ts +12 -12
  304. package/lib/interactive-tour/interactive-tour.service.d.ts +29 -29
  305. package/lib/interactive-tour/interactive-tour.theming.scss +32 -0
  306. package/lib/json-dialog/index.d.ts +2 -2
  307. package/lib/json-dialog/json-dialog.component.d.ts +13 -13
  308. package/lib/json-dialog/json-dialog.module.d.ts +13 -13
  309. package/lib/json-dialog/json-dialog.service.d.ts +10 -10
  310. package/lib/keyvalue/index.d.ts +1 -1
  311. package/lib/keyvalue/keyvalue.module.d.ts +9 -9
  312. package/lib/keyvalue/keyvalue.pipe.d.ts +7 -7
  313. package/lib/list/index.d.ts +2 -2
  314. package/lib/list/list-item.directive.d.ts +43 -43
  315. package/lib/list/list.component.d.ts +51 -51
  316. package/lib/list/list.module.d.ts +14 -14
  317. package/lib/list/list.theming.scss +40 -0
  318. package/lib/panel/index.d.ts +1 -1
  319. package/lib/panel/panel.component.d.ts +10 -10
  320. package/lib/panel/panel.module.d.ts +8 -8
  321. package/lib/panel/panel.theming.scss +30 -0
  322. package/lib/sidenav/index.d.ts +1 -1
  323. package/lib/sidenav/sidenav-shim.directive.d.ts +20 -20
  324. package/lib/sidenav/sidenav.module.d.ts +9 -9
  325. package/lib/spinner/index.d.ts +2 -2
  326. package/lib/spinner/spinner-activity.directive.d.ts +32 -32
  327. package/lib/spinner/spinner.component.d.ts +12 -12
  328. package/lib/spinner/spinner.module.d.ts +10 -10
  329. package/lib/stop-propagation/index.d.ts +2 -2
  330. package/lib/stop-propagation/stop-drop-propagation.directive.d.ts +6 -6
  331. package/lib/stop-propagation/stop-propagation.directive.d.ts +6 -6
  332. package/lib/stop-propagation/stop-propagation.module.d.ts +10 -10
  333. package/lib/table/index.d.ts +5 -5
  334. package/lib/table/table-action-color.enum.d.ts +5 -5
  335. package/lib/table/table-database.d.ts +10 -10
  336. package/lib/table/table-datasource.d.ts +18 -17
  337. package/lib/table/table-model.interface.d.ts +28 -28
  338. package/lib/table/table.component.d.ts +40 -40
  339. package/lib/table/table.module.d.ts +20 -20
  340. package/lib/tool/index.d.ts +2 -2
  341. package/lib/tool/shared/index.d.ts +5 -5
  342. package/lib/tool/shared/tool-component.d.ts +2 -2
  343. package/lib/tool/shared/tool.interface.d.ts +18 -18
  344. package/lib/tool/shared/tool.service.d.ts +30 -30
  345. package/lib/tool/shared/toolbox.d.ts +95 -95
  346. package/lib/tool/shared/toolbox.enums.d.ts +5 -5
  347. package/lib/tool/tool.module.d.ts +10 -10
  348. package/lib/tool/tool.theming.scss +5 -0
  349. package/lib/tool/toolbox/toolbox.animation.d.ts +2 -2
  350. package/lib/tool/toolbox/toolbox.component.d.ts +128 -127
  351. package/lib/tool/toolbox/toolbox.module.d.ts +13 -13
  352. package/lib/tool/toolbox/toolbox.theming.scss +105 -0
  353. package/lib/widget/index.d.ts +2 -2
  354. package/lib/widget/shared/index.d.ts +3 -3
  355. package/lib/widget/shared/widget.d.ts +4 -4
  356. package/lib/widget/shared/widget.interfaces.d.ts +12 -12
  357. package/lib/widget/shared/widget.service.d.ts +10 -10
  358. package/lib/widget/widget-outlet/widget-outlet.component.d.ts +71 -71
  359. package/lib/widget/widget-outlet/widget-outlet.module.d.ts +12 -12
  360. package/lib/widget/widget.module.d.ts +8 -8
  361. package/lib/workspace/index.d.ts +3 -3
  362. package/lib/workspace/shared/index.d.ts +3 -3
  363. package/lib/workspace/shared/store.d.ts +20 -20
  364. package/lib/workspace/shared/workspace.d.ts +108 -108
  365. package/lib/workspace/shared/workspace.interfaces.d.ts +11 -11
  366. package/lib/workspace/workspace-selector/workspace-selector.component.d.ts +39 -39
  367. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +12 -12
  368. package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.d.ts +57 -57
  369. package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.d.ts +12 -12
  370. package/lib/workspace/workspace.module.d.ts +9 -9
  371. package/locale/en.common.json +43 -0
  372. package/locale/fr.common.json +43 -0
  373. package/package.json +30 -28
  374. package/public_api.d.ts +72 -70
  375. package/style/partial/common-utils.scss +9 -0
  376. package/style/partial/common.variables.scss +8 -8
  377. package/style/style.css +204 -0
  378. package/esm2020/lib/action/action.module.mjs +0 -27
  379. package/esm2020/lib/action/actionbar/actionbar-item.component.mjs +0 -252
  380. package/esm2020/lib/action/actionbar/actionbar.component.mjs +0 -370
  381. package/esm2020/lib/backdrop/backdrop.component.mjs +0 -26
  382. package/esm2020/lib/badge-icon/badge-icon.directive.mjs +0 -141
  383. package/esm2020/lib/clickout/clickout.directive.mjs +0 -32
  384. package/esm2020/lib/clone/clone.pipe.mjs +0 -24
  385. package/esm2020/lib/collapsible/collapse.directive.mjs +0 -55
  386. package/esm2020/lib/collapsible/collapsible.component.mjs +0 -57
  387. package/esm2020/lib/confirm-dialog/confirm-dialog.component.mjs +0 -44
  388. package/esm2020/lib/confirm-dialog/confirm-dialog.service.mjs +0 -24
  389. package/esm2020/lib/context-menu/context-menu.directive.mjs +0 -103
  390. package/esm2020/lib/context-menu/long-press.directive.mjs +0 -67
  391. package/esm2020/lib/custom-html/custom-html.component.mjs +0 -28
  392. package/esm2020/lib/dom/dom.service.mjs +0 -30
  393. package/esm2020/lib/drag-drop/drag-drop.directive.mjs +0 -88
  394. package/esm2020/lib/dynamic-component/dynamic-component.module.mjs +0 -31
  395. package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +0 -122
  396. package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +0 -28
  397. package/esm2020/lib/dynamic-component/shared/dynamic-component.mjs +0 -174
  398. package/esm2020/lib/entity/entity-selector/entity-selector.component.mjs +0 -194
  399. package/esm2020/lib/entity/entity-selector/entity-selector.module.mjs +0 -32
  400. package/esm2020/lib/entity/entity-table/entity-table-row.directive.mjs +0 -137
  401. package/esm2020/lib/entity/entity-table/entity-table.component.mjs +0 -1376
  402. package/esm2020/lib/entity/entity-table/entity-table.module.mjs +0 -102
  403. package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +0 -132
  404. package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +0 -2
  405. package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +0 -28
  406. package/esm2020/lib/entity/shared/entity.interfaces.mjs +0 -2
  407. package/esm2020/lib/entity/shared/entity.utils.mjs +0 -67
  408. package/esm2020/lib/entity/shared/index.mjs +0 -10
  409. package/esm2020/lib/entity/shared/state.mjs +0 -191
  410. package/esm2020/lib/entity/shared/store.mjs +0 -288
  411. package/esm2020/lib/entity/shared/strategies/filter-custom-function.mjs +0 -79
  412. package/esm2020/lib/entity/shared/strategies/filter-selection.mjs +0 -84
  413. package/esm2020/lib/entity/shared/strategies/strategy.mjs +0 -75
  414. package/esm2020/lib/entity/shared/transaction.mjs +0 -316
  415. package/esm2020/lib/entity/shared/view.mjs +0 -315
  416. package/esm2020/lib/entity/shared/watcher.mjs +0 -120
  417. package/esm2020/lib/flexible/flexible.component.mjs +0 -148
  418. package/esm2020/lib/form/form/form.component.mjs +0 -117
  419. package/esm2020/lib/form/form/form.module.mjs +0 -40
  420. package/esm2020/lib/form/form-field/form-field-select.component.mjs +0 -127
  421. package/esm2020/lib/form/form-field/form-field-text.component.mjs +0 -104
  422. package/esm2020/lib/form/form-field/form-field-textarea.component.mjs +0 -105
  423. package/esm2020/lib/form/form-field/form-field.component.mjs +0 -72
  424. package/esm2020/lib/form/form-group/form-group.component.mjs +0 -105
  425. package/esm2020/lib/form/form-group/form-group.module.mjs +0 -40
  426. package/esm2020/lib/form/form.module.mjs +0 -49
  427. package/esm2020/lib/form/shared/form-field.service.mjs +0 -29
  428. package/esm2020/lib/form/shared/form.interfaces.mjs +0 -2
  429. package/esm2020/lib/form/shared/form.service.mjs +0 -81
  430. package/esm2020/lib/form/shared/form.utils.mjs +0 -40
  431. package/esm2020/lib/home-button/home-button.component.mjs +0 -31
  432. package/esm2020/lib/image/image-error.directive.mjs +0 -35
  433. package/esm2020/lib/image/secure-image.pipe.mjs +0 -59
  434. package/esm2020/lib/interactive-tour/interactive-tour.component.mjs +0 -135
  435. package/esm2020/lib/interactive-tour/interactive-tour.interface.mjs +0 -2
  436. package/esm2020/lib/interactive-tour/interactive-tour.loader.mjs +0 -44
  437. package/esm2020/lib/interactive-tour/interactive-tour.service.mjs +0 -285
  438. package/esm2020/lib/json-dialog/json-dialog.component.mjs +0 -109
  439. package/esm2020/lib/list/list-item.directive.mjs +0 -165
  440. package/esm2020/lib/list/list.component.mjs +0 -262
  441. package/esm2020/lib/panel/panel.component.mjs +0 -59
  442. package/esm2020/lib/sidenav/sidenav-shim.directive.mjs +0 -55
  443. package/esm2020/lib/spinner/spinner-activity.directive.mjs +0 -47
  444. package/esm2020/lib/spinner/spinner.component.mjs +0 -35
  445. package/esm2020/lib/table/table-database.mjs +0 -28
  446. package/esm2020/lib/table/table-datasource.mjs +0 -61
  447. package/esm2020/lib/table/table-model.interface.mjs +0 -2
  448. package/esm2020/lib/table/table.component.mjs +0 -297
  449. package/esm2020/lib/tool/shared/tool-component.mjs +0 -9
  450. package/esm2020/lib/tool/shared/tool.interface.mjs +0 -2
  451. package/esm2020/lib/tool/shared/tool.service.mjs +0 -43
  452. package/esm2020/lib/tool/shared/toolbox.mjs +0 -179
  453. package/esm2020/lib/tool/tool.module.mjs +0 -32
  454. package/esm2020/lib/tool/toolbox/toolbox.component.mjs +0 -255
  455. package/esm2020/lib/tool/toolbox/toolbox.module.mjs +0 -36
  456. package/esm2020/lib/widget/shared/widget.interfaces.mjs +0 -2
  457. package/esm2020/lib/widget/shared/widget.service.mjs +0 -20
  458. package/esm2020/lib/widget/widget-outlet/widget-outlet.component.mjs +0 -116
  459. package/esm2020/lib/widget/widget-outlet/widget-outlet.module.mjs +0 -32
  460. package/esm2020/lib/widget/widget.module.mjs +0 -32
  461. package/esm2020/lib/workspace/shared/store.mjs +0 -40
  462. package/esm2020/lib/workspace/shared/workspace.mjs +0 -117
  463. package/esm2020/lib/workspace/workspace-selector/workspace-selector.component.mjs +0 -51
  464. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +0 -32
  465. package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +0 -88
  466. package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +0 -32
  467. package/esm2020/lib/workspace/workspace.module.mjs +0 -27
  468. package/esm2020/public_api.mjs +0 -74
  469. package/fesm2015/igo2-common.mjs +0 -10329
  470. package/fesm2015/igo2-common.mjs.map +0 -1
  471. package/fesm2020/igo2-common.mjs.map +0 -1
  472. package/style/common.theming.scss +0 -12
  473. package/style/partial/action.scss +0 -18
@@ -0,0 +1,1455 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef, ElementRef, Optional, Self } from '@angular/core';
2
+ import { BehaviorSubject, Observable } from 'rxjs';
3
+ import { EntityStore, EntityTableColumnRenderer, EntityTableSelectionState, EntityTableScrollBehavior } from '../shared';
4
+ import { MatPaginator } from '@angular/material/paginator';
5
+ import { MatTableDataSource } from '@angular/material/table';
6
+ import { MatFormFieldControl } from '@angular/material/form-field';
7
+ import { UntypedFormBuilder, NgControl, NgForm, FormControlName, UntypedFormGroup } from '@angular/forms';
8
+ import { FocusMonitor } from '@angular/cdk/a11y';
9
+ import { DateAdapter, ErrorStateMatcher } from '@angular/material/core';
10
+ import { map } from 'rxjs/operators';
11
+ import { default as moment } from 'moment';
12
+ import { StringUtils } from '@igo2/utils';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/forms";
15
+ import * as i2 from "@angular/cdk/a11y";
16
+ import * as i3 from "@angular/material/core";
17
+ import * as i4 from "@angular/common";
18
+ import * as i5 from "@angular/material/table";
19
+ import * as i6 from "@angular/material/autocomplete";
20
+ import * as i7 from "@angular/material/sort";
21
+ import * as i8 from "@angular/material/icon";
22
+ import * as i9 from "@angular/material/button";
23
+ import * as i10 from "@angular/material/checkbox";
24
+ import * as i11 from "@angular/material/form-field";
25
+ import * as i12 from "@angular/material/select";
26
+ import * as i13 from "../../stop-propagation/stop-propagation.directive";
27
+ import * as i14 from "../entity-table-paginator/entity-table-paginator.component";
28
+ import * as i15 from "../../image/image-error.directive";
29
+ import * as i16 from "@angular/material/input";
30
+ import * as i17 from "@angular/material/datepicker";
31
+ import * as i18 from "@angular/material/tooltip";
32
+ import * as i19 from "./entity-table-row.directive";
33
+ import * as i20 from "../../custom-html/custom-html.pipe";
34
+ import * as i21 from "../../image/secure-image.pipe";
35
+ import * as i22 from "@ngx-translate/core";
36
+ function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
37
+ const _r10 = i0.ɵɵgetCurrentView();
38
+ i0.ɵɵelementContainerStart(0);
39
+ i0.ɵɵelementStart(1, "mat-checkbox", 11);
40
+ i0.ɵɵlistener("change", function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template_mat_checkbox_change_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r9.onToggleRows($event.checked)); });
41
+ i0.ɵɵelementEnd();
42
+ i0.ɵɵelementContainerEnd();
43
+ } if (rf & 2) {
44
+ const selectionState_r8 = ctx.ngIf;
45
+ const ctx_r7 = i0.ɵɵnextContext(3);
46
+ i0.ɵɵadvance(1);
47
+ i0.ɵɵproperty("checked", selectionState_r8 === ctx_r7.entityTableSelectionState.All)("indeterminate", selectionState_r8 === ctx_r7.entityTableSelectionState.Some);
48
+ } }
49
+ function EntityTableComponent_th_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelementContainerStart(0);
51
+ i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_ng_container_1_Template, 2, 2, "ng-container", 10);
52
+ i0.ɵɵpipe(2, "async");
53
+ i0.ɵɵelementContainerEnd();
54
+ } if (rf & 2) {
55
+ const ctx_r6 = i0.ɵɵnextContext(2);
56
+ i0.ɵɵadvance(1);
57
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 1, ctx_r6.selectionState$));
58
+ } }
59
+ function EntityTableComponent_th_3_Template(rf, ctx) { if (rf & 1) {
60
+ i0.ɵɵelementStart(0, "th", 9);
61
+ i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_Template, 3, 3, "ng-container", 10);
62
+ i0.ɵɵelementEnd();
63
+ } if (rf & 2) {
64
+ const ctx_r0 = i0.ɵɵnextContext();
65
+ i0.ɵɵadvance(1);
66
+ i0.ɵɵproperty("ngIf", ctx_r0.selectMany);
67
+ } }
68
+ function EntityTableComponent_td_4_Template(rf, ctx) { if (rf & 1) {
69
+ const _r14 = i0.ɵɵgetCurrentView();
70
+ i0.ɵɵelementStart(0, "td", 12)(1, "mat-checkbox", 13);
71
+ i0.ɵɵlistener("mousedown", function EntityTableComponent_td_4_Template_mat_checkbox_mousedown_1_listener($event) { return $event.shiftKey ? $event.preventDefault() : null; })("click", function EntityTableComponent_td_4_Template_mat_checkbox_click_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r14); const record_r11 = restoredCtx.$implicit; const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView($event.shiftKey ? ctx_r13.onShiftToggleRow(!ctx_r13.rowIsSelected(record_r11), record_r11, $event) : $event.stopPropagation()); })("change", function EntityTableComponent_td_4_Template_mat_checkbox_change_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r14); const record_r11 = restoredCtx.$implicit; const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.onToggleRow($event.checked, record_r11)); });
72
+ i0.ɵɵelementEnd()();
73
+ } if (rf & 2) {
74
+ const record_r11 = ctx.$implicit;
75
+ const ctx_r1 = i0.ɵɵnextContext();
76
+ i0.ɵɵadvance(1);
77
+ i0.ɵɵproperty("checked", ctx_r1.rowIsSelected(record_r11));
78
+ } }
79
+ function EntityTableComponent_ng_container_5_ng_container_1_th_1_Template(rf, ctx) { if (rf & 1) {
80
+ i0.ɵɵelementStart(0, "th", 16);
81
+ i0.ɵɵtext(1);
82
+ i0.ɵɵelementEnd();
83
+ } if (rf & 2) {
84
+ const column_r16 = i0.ɵɵnextContext(2).$implicit;
85
+ i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
86
+ i0.ɵɵadvance(1);
87
+ i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
88
+ } }
89
+ function EntityTableComponent_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
90
+ i0.ɵɵelementContainerStart(0);
91
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_th_1_Template, 2, 2, "th", 15);
92
+ i0.ɵɵelementContainerEnd();
93
+ } }
94
+ function EntityTableComponent_ng_container_5_ng_container_2_th_1_Template(rf, ctx) { if (rf & 1) {
95
+ i0.ɵɵelementStart(0, "th", 18);
96
+ i0.ɵɵtext(1);
97
+ i0.ɵɵelementEnd();
98
+ } if (rf & 2) {
99
+ const column_r16 = i0.ɵɵnextContext(2).$implicit;
100
+ i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
101
+ i0.ɵɵadvance(1);
102
+ i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
103
+ } }
104
+ function EntityTableComponent_ng_container_5_ng_container_2_Template(rf, ctx) { if (rf & 1) {
105
+ i0.ɵɵelementContainerStart(0);
106
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_2_th_1_Template, 2, 2, "th", 17);
107
+ i0.ɵɵelementContainerEnd();
108
+ } }
109
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
110
+ i0.ɵɵelementStart(0, "td", 22);
111
+ i0.ɵɵtext(1);
112
+ i0.ɵɵelementEnd();
113
+ } if (rf & 2) {
114
+ const record_r31 = i0.ɵɵnextContext().$implicit;
115
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
116
+ const ctx_r32 = i0.ɵɵnextContext();
117
+ i0.ɵɵproperty("ngClass", ctx_r32.getCellClass(record_r31, column_r16));
118
+ i0.ɵɵadvance(1);
119
+ i0.ɵɵtextInterpolate1(" ", ctx_r32.getValue(record_r31, column_r16), " ");
120
+ } }
121
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
122
+ i0.ɵɵelement(0, "img", 26);
123
+ i0.ɵɵpipe(1, "async");
124
+ i0.ɵɵpipe(2, "secureImage");
125
+ } if (rf & 2) {
126
+ const record_r31 = i0.ɵɵnextContext(2).$implicit;
127
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
128
+ const ctx_r37 = i0.ɵɵnextContext();
129
+ i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r37.getValue(record_r31, column_r16))), i0.ɵɵsanitizeUrl);
130
+ } }
131
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
132
+ i0.ɵɵelementStart(0, "span");
133
+ i0.ɵɵtext(1);
134
+ i0.ɵɵpipe(2, "translate");
135
+ i0.ɵɵelementEnd();
136
+ } if (rf & 2) {
137
+ i0.ɵɵadvance(1);
138
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.common.entity-table.targetHtmlUrl"), " ");
139
+ } }
140
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
141
+ i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
142
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
143
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 24);
144
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
145
+ i0.ɵɵelementEnd()();
146
+ } if (rf & 2) {
147
+ const _r38 = i0.ɵɵreference(4);
148
+ const record_r31 = i0.ɵɵnextContext().$implicit;
149
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
150
+ const ctx_r34 = i0.ɵɵnextContext();
151
+ i0.ɵɵproperty("ngClass", ctx_r34.getCellClass(record_r31, column_r16));
152
+ i0.ɵɵadvance(1);
153
+ i0.ɵɵpropertyInterpolate("href", ctx_r34.getValue(record_r31, column_r16), i0.ɵɵsanitizeUrl);
154
+ i0.ɵɵadvance(1);
155
+ i0.ɵɵproperty("ngIf", ctx_r34.isImg(ctx_r34.getValue(record_r31, column_r16)))("ngIfElse", _r38);
156
+ } }
157
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
158
+ i0.ɵɵelementContainerStart(0);
159
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template, 2, 2, "td", 20);
160
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 21, i0.ɵɵtemplateRefExtractor);
161
+ i0.ɵɵelementContainerEnd();
162
+ } if (rf & 2) {
163
+ const record_r31 = ctx.$implicit;
164
+ const _r33 = i0.ɵɵreference(3);
165
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
166
+ const ctx_r30 = i0.ɵɵnextContext();
167
+ i0.ɵɵadvance(1);
168
+ i0.ɵɵproperty("ngIf", !ctx_r30.isUrl(ctx_r30.getValue(record_r31, column_r16)))("ngIfElse", _r33);
169
+ } }
170
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
171
+ i0.ɵɵelementContainerStart(0);
172
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template, 4, 2, "ng-container", 19);
173
+ i0.ɵɵelementContainerEnd();
174
+ } }
175
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
176
+ i0.ɵɵelement(0, "td", 29);
177
+ } if (rf & 2) {
178
+ const record_r47 = i0.ɵɵnextContext().$implicit;
179
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
180
+ const ctx_r48 = i0.ɵɵnextContext();
181
+ i0.ɵɵproperty("ngClass", ctx_r48.getCellClass(record_r47, column_r16))("innerHTML", ctx_r48.getValue(record_r47, column_r16), i0.ɵɵsanitizeHtml);
182
+ } }
183
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
184
+ i0.ɵɵelement(0, "img", 26);
185
+ i0.ɵɵpipe(1, "async");
186
+ i0.ɵɵpipe(2, "secureImage");
187
+ } if (rf & 2) {
188
+ const record_r47 = i0.ɵɵnextContext(2).$implicit;
189
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
190
+ const ctx_r53 = i0.ɵɵnextContext();
191
+ i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r53.getValue(record_r47, column_r16))), i0.ɵɵsanitizeUrl);
192
+ } }
193
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
194
+ i0.ɵɵelementStart(0, "span");
195
+ i0.ɵɵtext(1);
196
+ i0.ɵɵpipe(2, "translate");
197
+ i0.ɵɵelementEnd();
198
+ } if (rf & 2) {
199
+ i0.ɵɵadvance(1);
200
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
201
+ } }
202
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
203
+ i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
204
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
205
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 24);
206
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
207
+ i0.ɵɵelementEnd()();
208
+ } if (rf & 2) {
209
+ const _r54 = i0.ɵɵreference(4);
210
+ const record_r47 = i0.ɵɵnextContext().$implicit;
211
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
212
+ const ctx_r50 = i0.ɵɵnextContext();
213
+ i0.ɵɵproperty("ngClass", ctx_r50.getCellClass(record_r47, column_r16));
214
+ i0.ɵɵadvance(1);
215
+ i0.ɵɵpropertyInterpolate("href", ctx_r50.getValue(record_r47, column_r16), i0.ɵɵsanitizeUrl);
216
+ i0.ɵɵadvance(1);
217
+ i0.ɵɵproperty("ngIf", ctx_r50.isImg(ctx_r50.getValue(record_r47, column_r16)))("ngIfElse", _r54);
218
+ } }
219
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
220
+ i0.ɵɵelementContainerStart(0);
221
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template, 1, 2, "td", 27);
222
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 28, i0.ɵɵtemplateRefExtractor);
223
+ i0.ɵɵelementContainerEnd();
224
+ } if (rf & 2) {
225
+ const record_r47 = ctx.$implicit;
226
+ const _r49 = i0.ɵɵreference(3);
227
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
228
+ const ctx_r46 = i0.ɵɵnextContext();
229
+ i0.ɵɵadvance(1);
230
+ i0.ɵɵproperty("ngIf", !ctx_r46.isUrl(ctx_r46.getValue(record_r47, column_r16)))("ngIfElse", _r49);
231
+ } }
232
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
233
+ i0.ɵɵelementContainerStart(0);
234
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template, 4, 2, "ng-container", 19);
235
+ i0.ɵɵelementContainerEnd();
236
+ } }
237
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template(rf, ctx) { if (rf & 1) {
238
+ const _r79 = i0.ɵɵgetCurrentView();
239
+ i0.ɵɵelementStart(0, "div", 43);
240
+ i0.ɵɵelement(1, "mat-datepicker-toggle", 44);
241
+ i0.ɵɵelementStart(2, "input", 45);
242
+ i0.ɵɵlistener("dateChange", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template_input_dateChange_2_listener($event) { i0.ɵɵrestoreView(_r79); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r77 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r77.onDateChange(column_r16.name, record_r63, $event)); });
243
+ i0.ɵɵelementEnd();
244
+ i0.ɵɵelement(3, "mat-datepicker", null, 46);
245
+ i0.ɵɵelementEnd();
246
+ } if (rf & 2) {
247
+ const _r76 = i0.ɵɵreference(4);
248
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
249
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
250
+ const ctx_r67 = i0.ɵɵnextContext();
251
+ i0.ɵɵadvance(1);
252
+ i0.ɵɵproperty("for", _r76);
253
+ i0.ɵɵadvance(1);
254
+ i0.ɵɵpropertyInterpolate("value", ctx_r67.getValue(record_r63, column_r16));
255
+ i0.ɵɵproperty("matDatepicker", _r76)("formControlName", column_r16.name);
256
+ } }
257
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template(rf, ctx) { if (rf & 1) {
258
+ const _r85 = i0.ɵɵgetCurrentView();
259
+ i0.ɵɵelementStart(0, "input", 47);
260
+ i0.ɵɵlistener("focus", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_focus_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onFocus($event)); })("keypress", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_keypress_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onChange($event)); })("blur", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_blur_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onBlur($event)); });
261
+ i0.ɵɵelementEnd();
262
+ } if (rf & 2) {
263
+ const column_r16 = i0.ɵɵnextContext(5).$implicit;
264
+ i0.ɵɵproperty("formControlName", column_r16.name);
265
+ } }
266
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template(rf, ctx) { if (rf & 1) {
267
+ const _r93 = i0.ɵɵgetCurrentView();
268
+ i0.ɵɵelementStart(0, "input", 48);
269
+ i0.ɵɵlistener("input", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r93); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r91 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r91.onValueChange(column_r16.name, record_r63, $event)); });
270
+ i0.ɵɵelementEnd();
271
+ } if (rf & 2) {
272
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
273
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
274
+ const ctx_r69 = i0.ɵɵnextContext();
275
+ i0.ɵɵpropertyInterpolate("step", column_r16.step);
276
+ i0.ɵɵpropertyInterpolate("value", ctx_r69.getValue(record_r63, column_r16));
277
+ i0.ɵɵpropertyInterpolate("readonly", ctx_r69.getValidationAttributeValue(column_r16, "readonly"));
278
+ i0.ɵɵpropertyInterpolate("required", ctx_r69.getValidationAttributeValue(column_r16, "mandatory"));
279
+ i0.ɵɵpropertyInterpolate("min", ctx_r69.getValidationAttributeValue(column_r16, "minValue"));
280
+ i0.ɵɵpropertyInterpolate("max", ctx_r69.getValidationAttributeValue(column_r16, "maxValue"));
281
+ i0.ɵɵproperty("formControlName", column_r16.name);
282
+ } }
283
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template(rf, ctx) { if (rf & 1) {
284
+ const _r99 = i0.ɵɵgetCurrentView();
285
+ i0.ɵɵelementStart(0, "input", 49);
286
+ i0.ɵɵlistener("input", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r99); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r97 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r97.onValueChange(column_r16.name, record_r63, $event)); });
287
+ i0.ɵɵelementEnd();
288
+ } if (rf & 2) {
289
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
290
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
291
+ const ctx_r70 = i0.ɵɵnextContext();
292
+ i0.ɵɵpropertyInterpolate("value", ctx_r70.getValue(record_r63, column_r16));
293
+ i0.ɵɵpropertyInterpolate("readonly", ctx_r70.getValidationAttributeValue(column_r16, "readonly"));
294
+ i0.ɵɵpropertyInterpolate("required", ctx_r70.getValidationAttributeValue(column_r16, "mandatory"));
295
+ i0.ɵɵproperty("formControlName", column_r16.name);
296
+ } }
297
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template(rf, ctx) { if (rf & 1) {
298
+ const _r105 = i0.ɵɵgetCurrentView();
299
+ i0.ɵɵelementStart(0, "mat-checkbox", 50);
300
+ i0.ɵɵlistener("change", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template_mat_checkbox_change_0_listener($event) { i0.ɵɵrestoreView(_r105); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r103 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r103.onBooleanValueChange(column_r16.name, record_r63, $event)); });
301
+ i0.ɵɵelementEnd();
302
+ } if (rf & 2) {
303
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
304
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
305
+ const ctx_r71 = i0.ɵɵnextContext();
306
+ i0.ɵɵproperty("formControlName", column_r16.name)("checked", ctx_r71.getValue(record_r63, column_r16));
307
+ } }
308
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_mat_option_1_Template(rf, ctx) { if (rf & 1) {
309
+ i0.ɵɵelementStart(0, "mat-option", 53);
310
+ i0.ɵɵtext(1);
311
+ i0.ɵɵelementEnd();
312
+ } if (rf & 2) {
313
+ const option_r110 = ctx.$implicit;
314
+ i0.ɵɵproperty("value", option_r110.id)("disabled", option_r110.disabled);
315
+ i0.ɵɵadvance(1);
316
+ i0.ɵɵtextInterpolate1(" ", option_r110.value, " ");
317
+ } }
318
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template(rf, ctx) { if (rf & 1) {
319
+ const _r113 = i0.ɵɵgetCurrentView();
320
+ i0.ɵɵelementStart(0, "mat-select", 51);
321
+ i0.ɵɵlistener("selectionChange", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template_mat_select_selectionChange_0_listener($event) { i0.ɵɵrestoreView(_r113); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r111 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r111.onSelectValueChange(column_r16.name, record_r63, $event)); });
322
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_mat_option_1_Template, 2, 3, "mat-option", 52);
323
+ i0.ɵɵelementEnd();
324
+ } if (rf & 2) {
325
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
326
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
327
+ const ctx_r72 = i0.ɵɵnextContext();
328
+ i0.ɵɵpropertyInterpolate("required", ctx_r72.getValidationAttributeValue(column_r16, "mandatory"));
329
+ i0.ɵɵproperty("formControlName", column_r16.name)("multiple", column_r16.multiple)("value", ctx_r72.getValue(record_r63, column_r16));
330
+ i0.ɵɵadvance(1);
331
+ i0.ɵɵproperty("ngForOf", column_r16.domainValues);
332
+ } }
333
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template(rf, ctx) { if (rf & 1) {
334
+ i0.ɵɵelement(0, "input", 54);
335
+ } if (rf & 2) {
336
+ i0.ɵɵnextContext();
337
+ const _r74 = i0.ɵɵreference(9);
338
+ const record_r63 = i0.ɵɵnextContext().$implicit;
339
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
340
+ const ctx_r73 = i0.ɵɵnextContext();
341
+ i0.ɵɵpropertyInterpolate("required", ctx_r73.getValidationAttributeValue(column_r16, "mandatory"));
342
+ i0.ɵɵpropertyInterpolate("value", ctx_r73.getValue(record_r63, column_r16));
343
+ i0.ɵɵpropertyInterpolate("readonly", ctx_r73.getValidationAttributeValue(column_r16, "readonly"));
344
+ i0.ɵɵproperty("formControlName", column_r16.name)("matAutocomplete", _r74);
345
+ } }
346
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template(rf, ctx) { if (rf & 1) {
347
+ i0.ɵɵelementStart(0, "mat-option", 55);
348
+ i0.ɵɵtext(1);
349
+ i0.ɵɵelementEnd();
350
+ } if (rf & 2) {
351
+ const option_r119 = ctx.$implicit;
352
+ i0.ɵɵproperty("value", option_r119.id);
353
+ i0.ɵɵadvance(1);
354
+ i0.ɵɵtextInterpolate1(" ", option_r119.value, " ");
355
+ } }
356
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
357
+ const _r122 = i0.ɵɵgetCurrentView();
358
+ i0.ɵɵelementStart(0, "td", 32);
359
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template, 5, 4, "div", 33);
360
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template, 1, 1, "input", 34);
361
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template, 1, 7, "input", 35);
362
+ i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template, 1, 4, "input", 36);
363
+ i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template, 1, 2, "mat-checkbox", 37);
364
+ i0.ɵɵtemplate(6, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template, 2, 5, "mat-select", 38);
365
+ i0.ɵɵtemplate(7, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template, 1, 5, "input", 39);
366
+ i0.ɵɵelementStart(8, "mat-autocomplete", 40, 41);
367
+ i0.ɵɵlistener("optionSelected", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template_mat_autocomplete_optionSelected_8_listener($event) { i0.ɵɵrestoreView(_r122); const record_r63 = i0.ɵɵnextContext().$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r120 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r120.onAutocompleteValueChange(column_r16, record_r63, $event)); });
368
+ i0.ɵɵtemplate(10, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template, 2, 2, "mat-option", 42);
369
+ i0.ɵɵpipe(11, "async");
370
+ i0.ɵɵelementEnd()();
371
+ } if (rf & 2) {
372
+ const record_r63 = i0.ɵɵnextContext().$implicit;
373
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
374
+ const ctx_r64 = i0.ɵɵnextContext();
375
+ i0.ɵɵproperty("formGroup", ctx_r64.formGroup)("ngClass", ctx_r64.getCellClass(record_r63, column_r16));
376
+ i0.ɵɵadvance(1);
377
+ i0.ɵɵproperty("ngIf", column_r16.type === "date");
378
+ i0.ɵɵadvance(1);
379
+ i0.ɵɵproperty("ngIf", column_r16.type === "time");
380
+ i0.ɵɵadvance(1);
381
+ i0.ɵɵproperty("ngIf", column_r16.type === "number");
382
+ i0.ɵɵadvance(1);
383
+ i0.ɵɵproperty("ngIf", !column_r16.type || column_r16.type === "string");
384
+ i0.ɵɵadvance(1);
385
+ i0.ɵɵproperty("ngIf", column_r16.type === "boolean");
386
+ i0.ɵɵadvance(1);
387
+ i0.ɵɵproperty("ngIf", column_r16.type === "list");
388
+ i0.ɵɵadvance(1);
389
+ i0.ɵɵproperty("ngIf", column_r16.type === "autocomplete");
390
+ i0.ɵɵadvance(3);
391
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11, 10, ctx_r64.filteredOptions[column_r16.name]));
392
+ } }
393
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_td_0_Template(rf, ctx) { if (rf & 1) {
394
+ i0.ɵɵelement(0, "td", 29);
395
+ i0.ɵɵpipe(1, "sanitizeHtml");
396
+ } if (rf & 2) {
397
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
398
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
399
+ const ctx_r126 = i0.ɵɵnextContext();
400
+ i0.ɵɵproperty("ngClass", ctx_r126.getCellClass(record_r63, column_r16))("innerHTML", i0.ɵɵpipeBind1(1, 2, ctx_r126.getValue(record_r63, column_r16)), i0.ɵɵsanitizeHtml);
401
+ } }
402
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_img_2_Template(rf, ctx) { if (rf & 1) {
403
+ i0.ɵɵelement(0, "img", 26);
404
+ i0.ɵɵpipe(1, "async");
405
+ i0.ɵɵpipe(2, "secureImage");
406
+ } if (rf & 2) {
407
+ const record_r63 = i0.ɵɵnextContext(3).$implicit;
408
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
409
+ const ctx_r131 = i0.ɵɵnextContext();
410
+ i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r131.getValue(record_r63, column_r16))), i0.ɵɵsanitizeUrl);
411
+ } }
412
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
413
+ i0.ɵɵelementStart(0, "span");
414
+ i0.ɵɵtext(1);
415
+ i0.ɵɵpipe(2, "translate");
416
+ i0.ɵɵelementEnd();
417
+ } if (rf & 2) {
418
+ i0.ɵɵadvance(1);
419
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
420
+ } }
421
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
422
+ i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
423
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
424
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_img_2_Template, 3, 5, "img", 24);
425
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
426
+ i0.ɵɵelementEnd()();
427
+ } if (rf & 2) {
428
+ const _r132 = i0.ɵɵreference(4);
429
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
430
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
431
+ const ctx_r128 = i0.ɵɵnextContext();
432
+ i0.ɵɵproperty("ngClass", ctx_r128.getCellClass(record_r63, column_r16));
433
+ i0.ɵɵadvance(1);
434
+ i0.ɵɵpropertyInterpolate("href", ctx_r128.getValue(record_r63, column_r16), i0.ɵɵsanitizeUrl);
435
+ i0.ɵɵadvance(1);
436
+ i0.ɵɵproperty("ngIf", ctx_r128.isImg(ctx_r128.getValue(record_r63, column_r16)))("ngIfElse", _r132);
437
+ } }
438
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
439
+ i0.ɵɵtemplate(0, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_td_0_Template, 2, 4, "td", 27);
440
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template, 5, 4, "ng-template", null, 56, i0.ɵɵtemplateRefExtractor);
441
+ } if (rf & 2) {
442
+ const _r127 = i0.ɵɵreference(2);
443
+ const record_r63 = i0.ɵɵnextContext().$implicit;
444
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
445
+ const ctx_r66 = i0.ɵɵnextContext();
446
+ i0.ɵɵproperty("ngIf", !ctx_r66.isUrl(ctx_r66.getValue(record_r63, column_r16)))("ngIfElse", _r127);
447
+ } }
448
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
449
+ i0.ɵɵelementContainerStart(0);
450
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template, 12, 12, "td", 30);
451
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template, 3, 2, "ng-template", null, 31, i0.ɵɵtemplateRefExtractor);
452
+ i0.ɵɵelementContainerEnd();
453
+ } if (rf & 2) {
454
+ const record_r63 = ctx.$implicit;
455
+ const _r65 = i0.ɵɵreference(3);
456
+ const ctx_r62 = i0.ɵɵnextContext(4);
457
+ i0.ɵɵadvance(1);
458
+ i0.ɵɵproperty("ngIf", ctx_r62.isEdition(record_r63))("ngIfElse", _r65);
459
+ } }
460
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template(rf, ctx) { if (rf & 1) {
461
+ i0.ɵɵelementContainerStart(0);
462
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template, 4, 2, "ng-container", 19);
463
+ i0.ɵɵelementContainerEnd();
464
+ } }
465
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template(rf, ctx) { if (rf & 1) {
466
+ const _r147 = i0.ɵɵgetCurrentView();
467
+ i0.ɵɵelementStart(0, "mat-icon", 60);
468
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template_mat_icon_click_0_listener($event) { i0.ɵɵrestoreView(_r147); const column_r16 = i0.ɵɵnextContext(4).$implicit; return i0.ɵɵresetView(column_r16.onClick($event)); });
469
+ i0.ɵɵelementEnd();
470
+ } if (rf & 2) {
471
+ const record_r142 = i0.ɵɵnextContext().$implicit;
472
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
473
+ const ctx_r143 = i0.ɵɵnextContext();
474
+ i0.ɵɵpropertyInterpolate("svgIcon", ctx_r143.getValue(record_r142, column_r16) || column_r16.icon);
475
+ } }
476
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_2_Template(rf, ctx) { if (rf & 1) {
477
+ i0.ɵɵelement(0, "mat-icon", 61);
478
+ } if (rf & 2) {
479
+ const record_r142 = i0.ɵɵnextContext().$implicit;
480
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
481
+ const ctx_r144 = i0.ɵɵnextContext();
482
+ i0.ɵɵpropertyInterpolate("svgIcon", ctx_r144.getValue(record_r142, column_r16) || column_r16.icon);
483
+ } }
484
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template(rf, ctx) { if (rf & 1) {
485
+ i0.ɵɵelementStart(0, "td", 22);
486
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template, 1, 1, "mat-icon", 58);
487
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_2_Template, 1, 1, "mat-icon", 59);
488
+ i0.ɵɵelementEnd();
489
+ } if (rf & 2) {
490
+ const record_r142 = ctx.$implicit;
491
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
492
+ const ctx_r141 = i0.ɵɵnextContext();
493
+ i0.ɵɵproperty("ngClass", ctx_r141.getCellClass(record_r142, column_r16));
494
+ i0.ɵɵadvance(1);
495
+ i0.ɵɵproperty("ngIf", column_r16.onClick);
496
+ i0.ɵɵadvance(1);
497
+ i0.ɵɵproperty("ngIf", !column_r16.onClick);
498
+ } }
499
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
500
+ i0.ɵɵelementContainerStart(0);
501
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template, 3, 3, "td", 57);
502
+ i0.ɵɵelementContainerEnd();
503
+ } }
504
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template(rf, ctx) { if (rf & 1) {
505
+ const _r162 = i0.ɵɵgetCurrentView();
506
+ i0.ɵɵelementStart(0, "button", 65);
507
+ i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r162); const button_r156 = i0.ɵɵnextContext(2).$implicit; const record_r154 = i0.ɵɵnextContext().$implicit; const ctx_r160 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r160.onButtonClick(button_r156.click, record_r154)); });
508
+ i0.ɵɵelement(1, "mat-icon", 61);
509
+ i0.ɵɵelementEnd();
510
+ } if (rf & 2) {
511
+ const button_r156 = i0.ɵɵnextContext(2).$implicit;
512
+ i0.ɵɵproperty("color", button_r156.color)("disabled", button_r156.disabled);
513
+ i0.ɵɵadvance(1);
514
+ i0.ɵɵpropertyInterpolate("svgIcon", button_r156.icon);
515
+ } }
516
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template(rf, ctx) { if (rf & 1) {
517
+ const _r167 = i0.ɵɵgetCurrentView();
518
+ i0.ɵɵelementStart(0, "button", 66);
519
+ i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r167); const button_r156 = i0.ɵɵnextContext(2).$implicit; const record_r154 = i0.ɵɵnextContext().$implicit; const ctx_r165 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r165.onButtonClick(button_r156.click, record_r154)); });
520
+ i0.ɵɵelement(1, "mat-icon", 61);
521
+ i0.ɵɵelementEnd();
522
+ } if (rf & 2) {
523
+ const button_r156 = i0.ɵɵnextContext(2).$implicit;
524
+ i0.ɵɵproperty("color", button_r156.color)("disabled", button_r156.disabled);
525
+ i0.ɵɵadvance(1);
526
+ i0.ɵɵpropertyInterpolate("svgIcon", button_r156.icon);
527
+ } }
528
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
529
+ i0.ɵɵelementContainerStart(0);
530
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template, 2, 3, "button", 63);
531
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template, 2, 3, "button", 64);
532
+ i0.ɵɵelementContainerEnd();
533
+ } if (rf & 2) {
534
+ const button_r156 = i0.ɵɵnextContext().$implicit;
535
+ i0.ɵɵadvance(1);
536
+ i0.ɵɵproperty("ngIf", button_r156.style === "mat-icon-button");
537
+ i0.ɵɵadvance(1);
538
+ i0.ɵɵproperty("ngIf", button_r156.style !== "mat-icon-button");
539
+ } }
540
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template(rf, ctx) { if (rf & 1) {
541
+ i0.ɵɵelementStart(0, "span");
542
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template, 3, 2, "ng-container", 10);
543
+ i0.ɵɵelementEnd();
544
+ } if (rf & 2) {
545
+ const button_r156 = ctx.$implicit;
546
+ const record_r154 = i0.ɵɵnextContext().$implicit;
547
+ const ctx_r155 = i0.ɵɵnextContext(4);
548
+ i0.ɵɵadvance(1);
549
+ i0.ɵɵproperty("ngIf", ctx_r155.isEdition(record_r154) === button_r156.editMode || button_r156.editMode === undefined);
550
+ } }
551
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
552
+ i0.ɵɵelementContainerStart(0);
553
+ i0.ɵɵelementStart(1, "td", 22);
554
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template, 2, 1, "span", 62);
555
+ i0.ɵɵelementEnd();
556
+ i0.ɵɵelementContainerEnd();
557
+ } if (rf & 2) {
558
+ const record_r154 = ctx.$implicit;
559
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
560
+ const ctx_r153 = i0.ɵɵnextContext();
561
+ i0.ɵɵadvance(1);
562
+ i0.ɵɵproperty("ngClass", ctx_r153.getCellClass(record_r154, column_r16));
563
+ i0.ɵɵadvance(1);
564
+ i0.ɵɵproperty("ngForOf", ctx_r153.getValue(record_r154, column_r16));
565
+ } }
566
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template(rf, ctx) { if (rf & 1) {
567
+ i0.ɵɵelementContainerStart(0);
568
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template, 3, 2, "ng-container", 19);
569
+ i0.ɵɵelementContainerEnd();
570
+ } }
571
+ function EntityTableComponent_ng_container_5_ng_container_3_Template(rf, ctx) { if (rf & 1) {
572
+ i0.ɵɵelementContainerStart(0);
573
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template, 2, 0, "ng-container", 10);
574
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template, 2, 0, "ng-container", 10);
575
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template, 2, 0, "ng-container", 10);
576
+ i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template, 2, 0, "ng-container", 10);
577
+ i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template, 2, 0, "ng-container", 10);
578
+ i0.ɵɵelementContainerEnd();
579
+ } if (rf & 2) {
580
+ const columnRenderer_r24 = ctx.ngIf;
581
+ const ctx_r19 = i0.ɵɵnextContext(2);
582
+ i0.ɵɵadvance(1);
583
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Default);
584
+ i0.ɵɵadvance(1);
585
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.HTML);
586
+ i0.ɵɵadvance(1);
587
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.UnsanitizedHTML);
588
+ i0.ɵɵadvance(1);
589
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Icon);
590
+ i0.ɵɵadvance(1);
591
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.ButtonGroup);
592
+ } }
593
+ function EntityTableComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
594
+ i0.ɵɵelementContainerStart(0, 14);
595
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_Template, 2, 0, "ng-container", 10);
596
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_2_Template, 2, 0, "ng-container", 10);
597
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_Template, 6, 5, "ng-container", 10);
598
+ i0.ɵɵelementContainerEnd();
599
+ } if (rf & 2) {
600
+ const column_r16 = ctx.$implicit;
601
+ const ctx_r2 = i0.ɵɵnextContext();
602
+ i0.ɵɵproperty("matColumnDef", column_r16.name);
603
+ i0.ɵɵadvance(1);
604
+ i0.ɵɵproperty("ngIf", ctx_r2.columnIsSortable(column_r16));
605
+ i0.ɵɵadvance(1);
606
+ i0.ɵɵproperty("ngIf", !ctx_r2.columnIsSortable(column_r16));
607
+ i0.ɵɵadvance(1);
608
+ i0.ɵɵproperty("ngIf", ctx_r2.getColumnRenderer(column_r16));
609
+ } }
610
+ function EntityTableComponent_tr_6_Template(rf, ctx) { if (rf & 1) {
611
+ i0.ɵɵelement(0, "tr", 67);
612
+ } if (rf & 2) {
613
+ const ctx_r3 = i0.ɵɵnextContext();
614
+ i0.ɵɵproperty("ngClass", ctx_r3.getHeaderClass());
615
+ } }
616
+ function EntityTableComponent_tr_7_Template(rf, ctx) { if (rf & 1) {
617
+ const _r175 = i0.ɵɵgetCurrentView();
618
+ i0.ɵɵelementStart(0, "tr", 68);
619
+ i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r175); const record_r173 = restoredCtx.$implicit; const ctx_r174 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r174.onRowSelect(record_r173)); })("click", function EntityTableComponent_tr_7_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r175); const record_r173 = restoredCtx.$implicit; const ctx_r176 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r176.onRowClick(record_r173)); });
620
+ i0.ɵɵelementEnd();
621
+ } if (rf & 2) {
622
+ const record_r173 = ctx.$implicit;
623
+ const ctx_r4 = i0.ɵɵnextContext();
624
+ i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(record_r173))("selection", ctx_r4.selection)("selected", ctx_r4.rowIsSelected(record_r173));
625
+ } }
626
+ function EntityTableComponent_igo_entity_table_paginator_8_Template(rf, ctx) { if (rf & 1) {
627
+ const _r178 = i0.ɵɵgetCurrentView();
628
+ i0.ɵɵelementStart(0, "igo-entity-table-paginator", 69);
629
+ i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(_r178); const ctx_r177 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r177.paginatorChange($event)); });
630
+ i0.ɵɵelementEnd();
631
+ } if (rf & 2) {
632
+ const ctx_r5 = i0.ɵɵnextContext();
633
+ i0.ɵɵproperty("store", ctx_r5.store)("paginatorOptions", ctx_r5.paginatorOptions)("entitySortChange$", ctx_r5.entitySortChange$);
634
+ } }
635
+ const _c0 = function (a0) { return { height: a0 }; };
636
+ export class EntityTableComponent {
637
+ cdRef;
638
+ formBuilder;
639
+ _focusMonitor;
640
+ _elementRef;
641
+ ngControl;
642
+ _parentForm;
643
+ _controlName;
644
+ _defaultErrorStateMatcher;
645
+ dateAdapter;
646
+ entitySortChange$ = new BehaviorSubject(false);
647
+ formGroup = new UntypedFormGroup({});
648
+ filteredOptions = {};
649
+ /**
650
+ * Reference to the column renderer types
651
+ * @internal
652
+ */
653
+ entityTableColumnRenderer = EntityTableColumnRenderer;
654
+ /**
655
+ * Reference to the selection's state
656
+ * @internal
657
+ */
658
+ entityTableSelectionState = EntityTableSelectionState;
659
+ /**
660
+ * Observable of the selection,s state
661
+ * @internal
662
+ */
663
+ selectionState$ = new BehaviorSubject(undefined);
664
+ /**
665
+ * Subscription to the store's selection
666
+ */
667
+ selection$$;
668
+ /**
669
+ * Subscription to the dataSource
670
+ */
671
+ dataSource$$;
672
+ /**
673
+ * The last record checked. Useful for selecting
674
+ * multiple records by holding the shift key and checking
675
+ * checkboxes.
676
+ */
677
+ lastRecordCheckedKey;
678
+ /**
679
+ * Entity store
680
+ */
681
+ store;
682
+ /**
683
+ * Table paginator
684
+ */
685
+ set paginator(value) {
686
+ this._paginator = value;
687
+ this.dataSource.paginator = value;
688
+ }
689
+ get paginator() {
690
+ return this._paginator;
691
+ }
692
+ _paginator;
693
+ /**
694
+ * Table template
695
+ */
696
+ template;
697
+ /**
698
+ * Scroll behavior on selection
699
+ */
700
+ scrollBehavior = EntityTableScrollBehavior.Auto;
701
+ /**
702
+ * Whether nulls should be first when sorting
703
+ */
704
+ sortNullsFirst = false;
705
+ /**
706
+ * Show the table paginator or not. False by default.
707
+ */
708
+ withPaginator = false;
709
+ /**
710
+ * Paginator options
711
+ */
712
+ paginatorOptions;
713
+ /**
714
+ * Event emitted when an entity (row) is clicked
715
+ */
716
+ entityClick = new EventEmitter();
717
+ /**
718
+ * Event emitted when an entity (row) is selected
719
+ */
720
+ entitySelectChange = new EventEmitter();
721
+ /**
722
+ * Event emitted when the table sort is changed.
723
+ */
724
+ entitySortChange = new EventEmitter(undefined);
725
+ /**
726
+ * Table headers
727
+ * @internal
728
+ */
729
+ get headers() {
730
+ let columns = this.template.columns
731
+ .filter((column) => column.visible !== false)
732
+ .map((column) => column.name);
733
+ if (this.selectionCheckbox === true) {
734
+ columns = ['selectionCheckbox'].concat(columns);
735
+ }
736
+ return columns;
737
+ }
738
+ /**
739
+ * Data source consumable by the underlying material table
740
+ * @internal
741
+ */
742
+ dataSource = new MatTableDataSource();
743
+ /**
744
+ * Whether selection is supported
745
+ * @internal
746
+ */
747
+ get selection() {
748
+ return this.template.selection || false;
749
+ }
750
+ /**
751
+ * Whether a selection checkbox should be displayed
752
+ * @internal
753
+ */
754
+ get selectionCheckbox() {
755
+ return this.template.selectionCheckbox || false;
756
+ }
757
+ /**
758
+ * Whether selection many entities should eb supported
759
+ * @internal
760
+ */
761
+ get selectMany() {
762
+ return this.template.selectMany || false;
763
+ }
764
+ /**
765
+ * Whether selection many entities should eb supported
766
+ * @internal
767
+ */
768
+ get fixedHeader() {
769
+ return this.template.fixedHeader === undefined
770
+ ? true
771
+ : this.template.fixedHeader;
772
+ }
773
+ get tableHeight() {
774
+ return this.template.tableHeight ? this.template.tableHeight : 'auto';
775
+ }
776
+ constructor(cdRef, formBuilder, _focusMonitor, _elementRef, ngControl, _parentForm, _controlName, _defaultErrorStateMatcher, dateAdapter) {
777
+ this.cdRef = cdRef;
778
+ this.formBuilder = formBuilder;
779
+ this._focusMonitor = _focusMonitor;
780
+ this._elementRef = _elementRef;
781
+ this.ngControl = ngControl;
782
+ this._parentForm = _parentForm;
783
+ this._controlName = _controlName;
784
+ this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
785
+ this.dateAdapter = dateAdapter;
786
+ this.dateAdapter.setLocale('fr-CA');
787
+ }
788
+ /**
789
+ * Track the selection state to properly display the selection checkboxes
790
+ * @internal
791
+ */
792
+ ngOnInit() {
793
+ this.handleDatasource();
794
+ this.dataSource.paginator = this.paginator;
795
+ }
796
+ /**
797
+ * @internal
798
+ */
799
+ ngOnChanges(changes) {
800
+ const store = changes.store;
801
+ if (store && store.currentValue !== store.previousValue) {
802
+ this.handleDatasource();
803
+ }
804
+ }
805
+ /**
806
+ * Process text or number value change (edition)
807
+ */
808
+ onValueChange(column, record, event) {
809
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
810
+ record.entity.properties[key] = event.target.value;
811
+ }
812
+ /**
813
+ * Process boolean value change (edition)
814
+ */
815
+ onBooleanValueChange(column, record, event) {
816
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
817
+ record.entity.properties[key] = event.checked;
818
+ }
819
+ /**
820
+ * Process select value change (edition)
821
+ */
822
+ onSelectValueChange(column, record, event) {
823
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
824
+ record.entity.properties[key] = event.value;
825
+ }
826
+ /**
827
+ * Process autocomplete value change (edition)
828
+ */
829
+ onAutocompleteValueChange(column, record, event) {
830
+ this.formGroup.controls[column.name].setValue(event.option.viewValue);
831
+ const key = this.getColumnKeyWithoutPropertiesTag(column.name);
832
+ record.entity.properties[key] = event.option.value;
833
+ }
834
+ /**
835
+ * Process date value change (edition)
836
+ */
837
+ onDateChange(column, record, event) {
838
+ const format = 'YYYY-MM-DD';
839
+ const value = moment(event.value).format(format);
840
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
841
+ record.entity.properties[key] = value;
842
+ }
843
+ /**
844
+ * Enable edition mode for one row
845
+ * More than one row can be edited at the same time
846
+ */
847
+ enableEdit(record) {
848
+ const item = record.entity.properties || record.entity;
849
+ this.template.columns.forEach((column) => {
850
+ column.title =
851
+ column.validation?.mandatory && !column.title.includes('*')
852
+ ? column.title + ' *'
853
+ : column.title;
854
+ const key = this.getColumnKeyWithoutPropertiesTag(column.name);
855
+ if (column.type === 'boolean') {
856
+ if (!item[key] || item[key] === null) {
857
+ item[key] = false;
858
+ }
859
+ else if (typeof item[key] === 'string') {
860
+ item[key] = JSON.parse(item[key].toLowerCase());
861
+ }
862
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
863
+ }
864
+ else if (column.type === 'list') {
865
+ if (column.multiple) {
866
+ this.formGroup.setControl(column.name, this.formBuilder.control([item[key]]));
867
+ }
868
+ else {
869
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
870
+ typeof item[key] === 'string'
871
+ ? this.formGroup.controls[column.name].setValue(parseInt(item[key]))
872
+ : this.formGroup.controls[column.name].setValue(item[key]);
873
+ }
874
+ }
875
+ else if (column.type === 'autocomplete') {
876
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
877
+ this.filteredOptions[column.name] = new Observable();
878
+ this.filteredOptions[column.name] = this.formGroup.controls[column.name].valueChanges.pipe(map((value) => {
879
+ if (value?.length) {
880
+ return column.domainValues?.filter((option) => {
881
+ const filterNormalized = value
882
+ ? value
883
+ .toLowerCase()
884
+ .normalize('NFD')
885
+ .replace(/[\u0300-\u036f]/g, '')
886
+ : '';
887
+ const featureNameNormalized = option.value
888
+ .toLowerCase()
889
+ .normalize('NFD')
890
+ .replace(/[\u0300-\u036f]/g, '');
891
+ return featureNameNormalized.includes(filterNormalized);
892
+ });
893
+ }
894
+ }));
895
+ let formControlValue = item[key];
896
+ column.domainValues.forEach((option) => {
897
+ if (typeof formControlValue === 'string' &&
898
+ StringUtils.isValidNumber(formControlValue) &&
899
+ !StringUtils.isOctalNumber(formControlValue)) {
900
+ formControlValue = parseInt(formControlValue);
901
+ }
902
+ if (option.value === formControlValue ||
903
+ option.id === formControlValue) {
904
+ formControlValue = option.value;
905
+ }
906
+ });
907
+ this.formGroup.controls[column.name].setValue(formControlValue);
908
+ if (this.isEdition(record) && column.linkColumnForce) {
909
+ const entity = record.entity;
910
+ this.formGroup.controls[column.name].setValue(entity?.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)]);
911
+ }
912
+ }
913
+ else if (column.type === 'date') {
914
+ if (column.visible !== false) {
915
+ if (item[key]) {
916
+ let date = moment(item[key]);
917
+ item[key] = date.utc().format('YYYY-MM-DD');
918
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
919
+ }
920
+ else {
921
+ const newKey = this.getColumnKeyWithoutPropertiesTag(column.name);
922
+ record.entity.properties[newKey] = null;
923
+ this.formGroup.setControl(column.name, this.formBuilder.control(null));
924
+ }
925
+ }
926
+ }
927
+ else {
928
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
929
+ }
930
+ if (this.formGroup.controls[column.name] &&
931
+ this.getValidationAttributeValue(column, 'readonly')) {
932
+ this.formGroup.controls[column.name].disable();
933
+ }
934
+ });
935
+ }
936
+ handleDatasource() {
937
+ this.unsubscribeStore();
938
+ this.selection$$ = this.store.stateView
939
+ .manyBy$((record) => record.state.selected === true)
940
+ .subscribe((records) => {
941
+ const firstSelected = records[0];
942
+ const firstSelectedStateviewPosition = this.store.stateView
943
+ .all()
944
+ .indexOf(firstSelected);
945
+ const pageMax = this.paginator
946
+ ? this.paginator.pageSize * (this.paginator.pageIndex + 1)
947
+ : 0;
948
+ const pageMin = this.paginator ? pageMax - this.paginator.pageSize : 0;
949
+ if (this.paginator &&
950
+ (firstSelectedStateviewPosition < pageMin ||
951
+ firstSelectedStateviewPosition >= pageMax)) {
952
+ const pageToReach = Math.floor(firstSelectedStateviewPosition / this.paginator.pageSize);
953
+ this.dataSource.paginator.pageIndex = pageToReach;
954
+ }
955
+ this.selectionState$.next(this.computeSelectionState(records));
956
+ });
957
+ this.dataSource$$ = this.store.stateView.all$().subscribe((all) => {
958
+ if (all[0]) {
959
+ this.enableEdit(all[0]);
960
+ }
961
+ this.dataSource.data = all;
962
+ });
963
+ }
964
+ /**
965
+ * Unbind the store watcher
966
+ * @internal
967
+ */
968
+ ngOnDestroy() {
969
+ this.unsubscribeStore();
970
+ }
971
+ unsubscribeStore() {
972
+ if (this.selection$$) {
973
+ this.selection$$.unsubscribe();
974
+ }
975
+ if (this.dataSource$$) {
976
+ this.dataSource$$.unsubscribe();
977
+ }
978
+ }
979
+ /**
980
+ * Trackby function
981
+ * @param record Record
982
+ * @param index Record index
983
+ * @internal
984
+ */
985
+ getTrackByFunction() {
986
+ return (index, record) => {
987
+ return record.ref;
988
+ };
989
+ }
990
+ /**
991
+ * Trigger a refresh of thre table. This can be useful when
992
+ * the data source doesn't emit a new value but for some reason
993
+ * the records need an update.
994
+ * @internal
995
+ */
996
+ refresh() {
997
+ this.cdRef.detectChanges();
998
+ }
999
+ paginatorChange(event) {
1000
+ this.paginator = event;
1001
+ }
1002
+ /**
1003
+ * On sort, sort the store
1004
+ * @param event Sort event
1005
+ * @internal
1006
+ */
1007
+ onSort(event) {
1008
+ const direction = event.direction;
1009
+ const column = this.template.columns.find((c) => c.name === event.active);
1010
+ if (direction === 'asc' || direction === 'desc') {
1011
+ this.store.stateView.sort({
1012
+ valueAccessor: (record) => this.getValue(record, column),
1013
+ direction,
1014
+ nullsFirst: this.sortNullsFirst
1015
+ });
1016
+ this.entitySortChange.emit({ column, direction });
1017
+ this.entitySortChange$.next(true);
1018
+ }
1019
+ else {
1020
+ this.store.stateView.sort(undefined);
1021
+ }
1022
+ }
1023
+ /**
1024
+ * When an entity is clicked, emit an event
1025
+ * @param record Record
1026
+ * @internal
1027
+ */
1028
+ onRowClick(record) {
1029
+ this.lastRecordCheckedKey = this.store.stateView.getKey(record);
1030
+ this.entityClick.emit(record.entity);
1031
+ }
1032
+ /**
1033
+ * When an entity is selected, select it in the store and emit an event. Even if
1034
+ * "many" is set to true, this method always select a single, exclusive row. Selecting
1035
+ * multiple rows should be achieved by using the checkboxes.
1036
+ * @param record Record
1037
+ * @internal
1038
+ */
1039
+ onRowSelect(record) {
1040
+ if (this.selection === false) {
1041
+ return;
1042
+ }
1043
+ const entity = record.entity;
1044
+ this.store.state.update(entity, { selected: true }, true);
1045
+ this.entitySelectChange.emit({ added: [entity] });
1046
+ }
1047
+ /**
1048
+ * Select or unselect all rows at once. On select, emit an event.
1049
+ * @param toggle Select or unselect
1050
+ * @internal
1051
+ */
1052
+ onToggleRows(toggle) {
1053
+ if (this.selection === false) {
1054
+ return;
1055
+ }
1056
+ this.store.state.updateAll({ selected: toggle });
1057
+ if (toggle === true) {
1058
+ const entities = this.store.stateView
1059
+ .all()
1060
+ .map((record) => record.entity);
1061
+ this.entitySelectChange.emit({ added: [entities] });
1062
+ }
1063
+ }
1064
+ /**
1065
+ * When an entity is toggled, select or unselect it in the store. On select,
1066
+ * emit an event.
1067
+ * @param toggle Select or unselect
1068
+ * @param record Record
1069
+ * @internal
1070
+ */
1071
+ onToggleRow(toggle, record) {
1072
+ if (this.selection === false) {
1073
+ return;
1074
+ }
1075
+ const entity = record.entity;
1076
+ const exclusive = toggle === true && !this.selectMany;
1077
+ this.store.state.update(entity, { selected: toggle }, exclusive);
1078
+ if (toggle === true) {
1079
+ this.entitySelectChange.emit({ added: [entity] });
1080
+ }
1081
+ this.lastRecordCheckedKey = this.store.stateView.getKey(record);
1082
+ }
1083
+ /**
1084
+ * When an entity is toggled, select or unselect it in the store. On select,
1085
+ * emit an event.
1086
+ * @param toggle Select or unselect
1087
+ * @param record Record
1088
+ * @internal
1089
+ */
1090
+ onShiftToggleRow(toggle, record, event) {
1091
+ if (this.selection === false) {
1092
+ return;
1093
+ }
1094
+ if (this.selectMany === false || this.lastRecordCheckedKey === undefined) {
1095
+ this.onToggleRow(toggle, record);
1096
+ return;
1097
+ }
1098
+ // This is a workaround mat checkbox wrong behavior
1099
+ // when the shift key is held.
1100
+ // See https://github.com/angular/components/issues/6232
1101
+ const range = window.document.createRange();
1102
+ range.selectNode(event.target);
1103
+ window.getSelection().removeAllRanges();
1104
+ window.getSelection().addRange(range);
1105
+ event.stopImmediatePropagation();
1106
+ const records = this.store.stateView.all();
1107
+ const recordIndex = records.indexOf(record);
1108
+ const lastRecordChecked = this.store.stateView.get(this.lastRecordCheckedKey);
1109
+ const lastRecordIndex = records.indexOf(lastRecordChecked);
1110
+ const indexes = [recordIndex, lastRecordIndex];
1111
+ const selectRecords = records.slice(Math.min(...indexes), Math.max(...indexes) + 1);
1112
+ const entities = selectRecords.map((_record) => _record.entity);
1113
+ this.store.state.updateMany(entities, { selected: toggle });
1114
+ if (toggle === true) {
1115
+ this.entitySelectChange.emit({ added: entities });
1116
+ }
1117
+ this.lastRecordCheckedKey = this.store.stateView.getKey(record);
1118
+ }
1119
+ /**
1120
+ * Compute the selection state
1121
+ * @returns Whether all, some or no rows are selected
1122
+ * @internal
1123
+ */
1124
+ computeSelectionState(selectedRecords) {
1125
+ const states = EntityTableSelectionState;
1126
+ const selectionCount = selectedRecords.length;
1127
+ return selectionCount === 0
1128
+ ? states.None
1129
+ : selectionCount === this.store.stateView.count
1130
+ ? states.All
1131
+ : states.Some;
1132
+ }
1133
+ /**
1134
+ * Whether a column is sortable
1135
+ * @param column Column
1136
+ * @returns True if a column is sortable
1137
+ * @internal
1138
+ */
1139
+ columnIsSortable(column) {
1140
+ let sortable = column.sort;
1141
+ if (sortable === undefined) {
1142
+ sortable = this.template.sort === undefined ? false : this.template.sort;
1143
+ }
1144
+ return sortable;
1145
+ }
1146
+ /**
1147
+ * Whether a row is should be selected based on the underlying entity state
1148
+ * @param record Record
1149
+ * @returns True if a row should be selected
1150
+ * @internal
1151
+ */
1152
+ rowIsSelected(record) {
1153
+ const state = record.state;
1154
+ return state.selected ? state.selected : false;
1155
+ }
1156
+ isImg(value) {
1157
+ if (this.isUrl(value)) {
1158
+ return (['jpg', 'png', 'gif'].indexOf(value.split('.').pop().toLowerCase()) !==
1159
+ -1);
1160
+ }
1161
+ else {
1162
+ return false;
1163
+ }
1164
+ }
1165
+ isUrl(value) {
1166
+ if (typeof value === 'string') {
1167
+ return (value.slice(0, 8) === 'https://' || value.slice(0, 7) === 'http://');
1168
+ }
1169
+ else {
1170
+ return false;
1171
+ }
1172
+ }
1173
+ /**
1174
+ * Method to access an entity's values
1175
+ * @param record Record
1176
+ * @param column Column
1177
+ * @returns Any value
1178
+ * @internal
1179
+ */
1180
+ getValue(record, column) {
1181
+ const entity = record.entity;
1182
+ let value;
1183
+ if (column.valueAccessor !== undefined) {
1184
+ return column.valueAccessor(entity, record);
1185
+ }
1186
+ if (this.template.valueAccessor !== undefined) {
1187
+ return this.template.valueAccessor(entity, column.name, record);
1188
+ }
1189
+ value = this.store.getProperty(entity, column.name);
1190
+ if (column.type === 'boolean') {
1191
+ if (value === undefined || value === null || value === '') {
1192
+ value = false;
1193
+ }
1194
+ else if (typeof value !== 'boolean' && value !== undefined) {
1195
+ if (typeof value === 'number') {
1196
+ value = Boolean(value);
1197
+ }
1198
+ else {
1199
+ value = JSON.parse(value.toLowerCase());
1200
+ }
1201
+ }
1202
+ if (!this.isEdition(record)) {
1203
+ value = value ? '&#10003;' : ''; // check mark
1204
+ }
1205
+ }
1206
+ else if (column.type === 'list' && value && column.domainValues) {
1207
+ const entity = record.entity;
1208
+ if (column.multiple) {
1209
+ let list_id;
1210
+ typeof value === 'string'
1211
+ ? (list_id = value.match(/[\w.-]+/g).map(Number))
1212
+ : (list_id = value);
1213
+ let list_option = [];
1214
+ column.domainValues.forEach((option) => {
1215
+ if (list_id.includes(option.id)) {
1216
+ if (record.edition) {
1217
+ list_option.push(option.id);
1218
+ }
1219
+ else {
1220
+ list_option.push(option.value);
1221
+ }
1222
+ }
1223
+ });
1224
+ this.isEdition(record) ? (value = list_id) : (value = list_option);
1225
+ }
1226
+ else {
1227
+ if (!this.isEdition(record) && column.linkColumnForce) {
1228
+ value =
1229
+ entity?.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)];
1230
+ }
1231
+ else {
1232
+ column.domainValues.forEach((option) => {
1233
+ if (typeof value === 'string' &&
1234
+ StringUtils.isValidNumber(value) &&
1235
+ !StringUtils.isOctalNumber(value)) {
1236
+ value = parseInt(value);
1237
+ }
1238
+ if (option.value === value || option.id === value) {
1239
+ this.isEdition(record)
1240
+ ? (value = option.id)
1241
+ : (value = option.value);
1242
+ }
1243
+ });
1244
+ }
1245
+ }
1246
+ }
1247
+ else if (column.type === 'autocomplete' && value && column.domainValues) {
1248
+ const entity = record.entity;
1249
+ if (!this.isEdition(record) && column.linkColumnForce) {
1250
+ value =
1251
+ entity?.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)];
1252
+ }
1253
+ else {
1254
+ column.domainValues.forEach((option) => {
1255
+ if (typeof value === 'string' &&
1256
+ StringUtils.isValidNumber(value) &&
1257
+ !StringUtils.isOctalNumber(value)) {
1258
+ value = parseInt(value);
1259
+ }
1260
+ if (option.value === value || option.id === value) {
1261
+ value = option.value;
1262
+ }
1263
+ });
1264
+ }
1265
+ }
1266
+ else if (column.type === 'date') {
1267
+ if (this.isEdition(record)) {
1268
+ if (value) {
1269
+ let date = moment(value);
1270
+ value = date.format();
1271
+ this.formGroup.controls[column.name].setValue(value);
1272
+ }
1273
+ }
1274
+ else if (!this.isEdition(record) && value === null) {
1275
+ value = '';
1276
+ }
1277
+ }
1278
+ if (value === undefined) {
1279
+ value = '';
1280
+ }
1281
+ return value;
1282
+ }
1283
+ /**
1284
+ * Method to access an entity's validation values
1285
+ * @param column Column
1286
+ * @param validationType string
1287
+ * @returns Any value (false if no validation or not the one concerned)
1288
+ * @internal
1289
+ */
1290
+ getValidationAttributeValue(column, validationType) {
1291
+ if (column.validation !== undefined &&
1292
+ column.validation[validationType] !== undefined) {
1293
+ return column.validation[validationType];
1294
+ }
1295
+ else {
1296
+ return false;
1297
+ }
1298
+ }
1299
+ isEdition(record) {
1300
+ return record.entity.edition ? true : false;
1301
+ }
1302
+ /**
1303
+ * Return the type of renderer of a column
1304
+ * @param column Column
1305
+ * @returns Renderer type
1306
+ * @internal
1307
+ */
1308
+ getColumnRenderer(column) {
1309
+ if (column.renderer !== undefined) {
1310
+ return column.renderer;
1311
+ }
1312
+ return EntityTableColumnRenderer.Default;
1313
+ }
1314
+ /**
1315
+ * Return the table ngClass
1316
+ * @returns ngClass
1317
+ * @internal
1318
+ */
1319
+ getTableClass() {
1320
+ return {
1321
+ 'igo-entity-table-with-selection': this.selection
1322
+ };
1323
+ }
1324
+ /**
1325
+ * Return a header ngClass
1326
+ * @returns ngClass
1327
+ * @internal
1328
+ */
1329
+ getHeaderClass() {
1330
+ const func = this.template.headerClassFunc;
1331
+ if (func instanceof Function) {
1332
+ return func();
1333
+ }
1334
+ return {};
1335
+ }
1336
+ /**
1337
+ * Return a row ngClass
1338
+ * @param record Record
1339
+ * @returns ngClass
1340
+ * @internal
1341
+ */
1342
+ getRowClass(record) {
1343
+ const entity = record.entity;
1344
+ const func = this.template.rowClassFunc;
1345
+ if (func instanceof Function) {
1346
+ return func(entity, record);
1347
+ }
1348
+ return {};
1349
+ }
1350
+ /**
1351
+ * Return a row ngClass
1352
+ * @param record Record
1353
+ * @param column Column
1354
+ * @returns ngClass
1355
+ * @internal
1356
+ */
1357
+ getCellClass(record, column) {
1358
+ const entity = record.entity;
1359
+ const cls = {};
1360
+ const tableFunc = this.template.cellClassFunc;
1361
+ if (tableFunc instanceof Function) {
1362
+ Object.assign(cls, tableFunc(entity, column, record));
1363
+ }
1364
+ const columnFunc = column.cellClassFunc;
1365
+ if (columnFunc instanceof Function) {
1366
+ Object.assign(cls, columnFunc(entity, record));
1367
+ }
1368
+ return cls;
1369
+ }
1370
+ /**
1371
+ * When a button is clicked
1372
+ * @param func Function
1373
+ * @param record Record
1374
+ * @internal
1375
+ */
1376
+ onButtonClick(clickFunc, record) {
1377
+ this.enableEdit(record);
1378
+ if (typeof clickFunc === 'function') {
1379
+ clickFunc(record.entity, record);
1380
+ }
1381
+ }
1382
+ /**
1383
+ * Retrieve column name without his "properties" tag (useful for edition workspace properties)
1384
+ */
1385
+ getColumnKeyWithoutPropertiesTag(column) {
1386
+ if (column.includes('properties.')) {
1387
+ return column.split('.')[1];
1388
+ }
1389
+ return column;
1390
+ }
1391
+ static ɵfac = function EntityTableComponent_Factory(t) { return new (t || EntityTableComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.UntypedFormBuilder), i0.ɵɵdirectiveInject(i2.FocusMonitor), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.NgControl, 10), i0.ɵɵdirectiveInject(i1.NgForm, 8), i0.ɵɵdirectiveInject(i1.FormControlName, 8), i0.ɵɵdirectiveInject(i3.ErrorStateMatcher), i0.ɵɵdirectiveInject(i3.DateAdapter)); };
1392
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityTableComponent, selectors: [["igo-entity-table"]], inputs: { store: "store", paginator: "paginator", template: "template", scrollBehavior: "scrollBehavior", sortNullsFirst: "sortNullsFirst", withPaginator: "withPaginator", paginatorOptions: "paginatorOptions" }, outputs: { entityClick: "entityClick", entitySelectChange: "entitySelectChange", entitySortChange: "entitySortChange" }, features: [i0.ɵɵProvidersFeature([
1393
+ { provide: MatFormFieldControl, useExisting: EntityTableComponent }
1394
+ ]), i0.ɵɵNgOnChangesFeature], decls: 9, vars: 11, consts: [[1, "table-container", 3, "ngStyle"], ["id", "currentWorkspaceTable", "mat-table", "", "matSort", "", 3, "ngClass", "dataSource", "trackBy", "matSortChange"], ["matColumnDef", "selectionCheckbox", 1, "mat-cell-checkbox"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], [3, "matColumnDef", 4, "ngFor", "ngForOf"], ["mat-header-row", "", 3, "ngClass", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click", 4, "matRowDef", "matRowDefColumns"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange", 4, "ngIf"], ["mat-header-cell", ""], [4, "ngIf"], [3, "checked", "indeterminate", "change"], ["mat-cell", ""], [3, "checked", "mousedown", "click", "change"], [3, "matColumnDef"], ["mat-header-cell", "", "mat-sort-header", "", "class", "mat-body-1", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", "mat-sort-header", "", 1, "mat-body-1", 3, "matTooltip"], ["mat-header-cell", "", "class", "mat-body-1", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", 1, "mat-body-1", 3, "matTooltip"], [4, "matCellDef"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "ngIf", "ngIfElse"], ["isAnUrlDefault", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["igoImageError", "", "width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["igoImageError", "", "width", "50", "heigth", "auto", 3, "src"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", "innerHTML", 4, "ngIf", "ngIfElse"], ["isAnUrlHTML", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass", "innerHTML"], ["mat-cell", "", "class", "mat-cell-text edition", 3, "formGroup", "ngClass", 4, "ngIf", "ngIfElse"], ["isUnsanitizedHTML", ""], ["mat-cell", "", 1, "mat-cell-text", "edition", 3, "formGroup", "ngClass"], ["class", "date-picker", 4, "ngIf"], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur", 4, "ngIf"], ["matInput", "", "type", "number", "class", "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input", 4, "ngIf"], [3, "formControlName", "checked", "change", 4, "ngIf"], [3, "required", "formControlName", "multiple", "value", "selectionChange", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value", "readonly", 4, "ngIf"], ["panelWidth", "430px", 3, "optionSelected"], ["auto", "matAutocomplete"], [3, "value", 4, "ngFor", "ngForOf"], [1, "date-picker"], ["matSuffix", "", 3, "for"], ["matInput", "", 3, "matDatepicker", "formControlName", "value", "dateChange"], ["picker", ""], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur"], ["matInput", "", "type", "number", 1, "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input"], [3, "formControlName", "checked", "change"], [3, "required", "formControlName", "multiple", "value", "selectionChange"], [3, "value", "disabled", 4, "ngFor", "ngForOf"], [3, "value", "disabled"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value", "readonly"], [3, "value"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon", "click", 4, "ngIf"], [3, "svgIcon", 4, "ngIf"], [3, "svgIcon", "click"], [3, "svgIcon"], [4, "ngFor", "ngForOf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown"], ["mat-header-row", "", 3, "ngClass"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange"]], template: function EntityTableComponent_Template(rf, ctx) { if (rf & 1) {
1395
+ i0.ɵɵelementStart(0, "div", 0)(1, "table", 1);
1396
+ i0.ɵɵlistener("matSortChange", function EntityTableComponent_Template_table_matSortChange_1_listener($event) { return ctx.onSort($event); });
1397
+ i0.ɵɵelementContainerStart(2, 2);
1398
+ i0.ɵɵtemplate(3, EntityTableComponent_th_3_Template, 2, 1, "th", 3);
1399
+ i0.ɵɵtemplate(4, EntityTableComponent_td_4_Template, 2, 1, "td", 4);
1400
+ i0.ɵɵelementContainerEnd();
1401
+ i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_Template, 4, 4, "ng-container", 5);
1402
+ i0.ɵɵtemplate(6, EntityTableComponent_tr_6_Template, 1, 1, "tr", 6);
1403
+ i0.ɵɵtemplate(7, EntityTableComponent_tr_7_Template, 1, 4, "tr", 7);
1404
+ i0.ɵɵelementEnd();
1405
+ i0.ɵɵtemplate(8, EntityTableComponent_igo_entity_table_paginator_8_Template, 1, 3, "igo-entity-table-paginator", 8);
1406
+ i0.ɵɵelementEnd();
1407
+ } if (rf & 2) {
1408
+ i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(9, _c0, ctx.tableHeight));
1409
+ i0.ɵɵadvance(1);
1410
+ i0.ɵɵproperty("ngClass", ctx.getTableClass())("dataSource", ctx.dataSource)("trackBy", ctx.getTrackByFunction());
1411
+ i0.ɵɵadvance(4);
1412
+ i0.ɵɵproperty("ngForOf", ctx.template.columns);
1413
+ i0.ɵɵadvance(1);
1414
+ i0.ɵɵproperty("matHeaderRowDef", ctx.headers)("matHeaderRowDefSticky", ctx.fixedHeader);
1415
+ i0.ɵɵadvance(1);
1416
+ i0.ɵɵproperty("matRowDefColumns", ctx.headers);
1417
+ i0.ɵɵadvance(1);
1418
+ i0.ɵɵproperty("ngIf", ctx.withPaginator);
1419
+ } }, dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i4.NgStyle, i5.MatTable, i5.MatHeaderCellDef, i5.MatHeaderRowDef, i5.MatColumnDef, i5.MatCellDef, i5.MatRowDef, i5.MatHeaderCell, i5.MatCell, i5.MatHeaderRow, i5.MatRow, i6.MatAutocomplete, i3.MatOption, i6.MatAutocompleteTrigger, i7.MatSort, i7.MatSortHeader, i8.MatIcon, i9.MatIconButton, i9.MatMiniFabButton, i10.MatCheckbox, i11.MatSuffix, i12.MatSelect, i13.StopPropagationDirective, i14.EntityTablePaginatorComponent, i15.ImageErrorDirective, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.RequiredValidator, i1.MinValidator, i1.MaxValidator, i1.FormGroupDirective, i1.FormControlName, i16.MatInput, i17.MatDatepicker, i17.MatDatepickerInput, i17.MatDatepickerToggle, i18.MatTooltip, i19.EntityTableRowDirective, i4.AsyncPipe, i20.SanitizeHtmlPipe, i21.SecureImagePipe, i22.TranslatePipe], styles: ["[_nghost-%COMP%]{width:100%;height:100%;display:block}.table-compact[_nghost-%COMP%] tr.mat-mdc-header-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] mat-checkbox .mat-ripple{height:36px}.table-compact[_nghost-%COMP%] tr.mat-mdc-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] mat-checkbox .mat-ripple{height:28px}[_nghost-%COMP%] .table-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}[_nghost-%COMP%] .mat-cell-text[_ngcontent-%COMP%]{overflow:hidden;word-wrap:break-word}[_nghost-%COMP%] entity-table[_ngcontent-%COMP%] table.igo-entity-table-with-selection[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}[_nghost-%COMP%] table[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:7px}[_nghost-%COMP%] .class_hidden[_ngcontent-%COMP%]{visibility:hidden}[_nghost-%COMP%] .class_display_none[_ngcontent-%COMP%]{display:none}[_nghost-%COMP%] .class_boolean[_ngcontent-%COMP%], [_nghost-%COMP%] .class_icon[_ngcontent-%COMP%], [_nghost-%COMP%] .class_number[_ngcontent-%COMP%]{text-align:center;padding-right:35px!important}[_nghost-%COMP%] .class_string[_ngcontent-%COMP%], [_nghost-%COMP%] .class_text[_ngcontent-%COMP%], [_nghost-%COMP%] .class_number_edition[_ngcontent-%COMP%]{text-align:left}[_nghost-%COMP%] td.edition[_ngcontent-%COMP%]{background:rgba(166,166,166,.2)}[_nghost-%COMP%] input[_ngcontent-%COMP%]{border-bottom:1px solid darkgrey}"], changeDetection: 0 });
1420
+ }
1421
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityTableComponent, [{
1422
+ type: Component,
1423
+ args: [{ selector: 'igo-entity-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
1424
+ { provide: MatFormFieldControl, useExisting: EntityTableComponent }
1425
+ ], template: "<div class=\"table-container\" [ngStyle]=\"{ height: tableHeight }\">\r\n <table\r\n id=\"currentWorkspaceTable\"\r\n mat-table\r\n matSort\r\n [ngClass]=\"getTableClass()\"\r\n [dataSource]=\"dataSource\"\r\n [trackBy]=\"getTrackByFunction()\"\r\n (matSortChange)=\"onSort($event)\"\r\n >\r\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngIf=\"selectMany\">\r\n <ng-container *ngIf=\"selectionState$ | async as selectionState\">\r\n <mat-checkbox\r\n (change)=\"onToggleRows($event.checked)\"\r\n [checked]=\"selectionState === entityTableSelectionState.All\"\r\n [indeterminate]=\"\r\n selectionState === entityTableSelectionState.Some\r\n \"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td mat-cell *matCellDef=\"let record\">\r\n <mat-checkbox\r\n (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\"\r\n (click)=\"\r\n $event.shiftKey\r\n ? onShiftToggleRow(!rowIsSelected(record), record, $event)\r\n : $event.stopPropagation()\r\n \"\r\n (change)=\"onToggleRow($event.checked, record)\"\r\n [checked]=\"rowIsSelected(record)\"\r\n >\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container\r\n [matColumnDef]=\"column.name\"\r\n *ngFor=\"let column of template.columns\"\r\n >\r\n <ng-container *ngIf=\"columnIsSortable(column)\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n mat-sort-header\r\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\r\n class=\"mat-body-1\"\r\n >\r\n {{ column.title }}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!columnIsSortable(column)\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\r\n class=\"mat-body-1\"\r\n >\r\n {{ column.title }}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getColumnRenderer(column) as columnRenderer\">\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.Default\"\r\n >\r\n <ng-container *matCellDef=\"let record\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"!isUrl(getValue(record, column)); else isAnUrlDefault\"\r\n [ngClass]=\"getCellClass(record, column)\"\r\n >\r\n {{ getValue(record, column) }}\r\n </td>\r\n <ng-template #isAnUrlDefault>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"getCellClass(record, column)\"\r\n >\r\n <a\r\n href=\"{{ getValue(record, column) }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"isImg(getValue(record, column)); else notImg\"\r\n src=\"{{ getValue(record, column) | secureImage | async }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.common.entity-table.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.HTML\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"!isUrl(getValue(record, column)); else isAnUrlHTML\"\r\n [ngClass]=\"getCellClass(record, column)\"\r\n [innerHTML]=\"getValue(record, column)\"\r\n ></td>\r\n <ng-template #isAnUrlHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"getCellClass(record, column)\"\r\n >\r\n <a\r\n href=\"{{ getValue(record, column) }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"isImg(getValue(record, column)); else notImg\"\r\n src=\"{{ getValue(record, column) | secureImage | async }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.UnsanitizedHTML\"\r\n >\r\n <ng-container *matCellDef=\"let record\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text edition\"\r\n [formGroup]=\"formGroup\"\r\n *ngIf=\"isEdition(record); else isUnsanitizedHTML\"\r\n [ngClass]=\"getCellClass(record, column)\"\r\n >\r\n <div class=\"date-picker\" *ngIf=\"column.type === 'date'\">\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker\"\r\n ></mat-datepicker-toggle>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker\"\r\n [formControlName]=\"column.name\"\r\n value=\"{{ getValue(record, column) }}\"\r\n (dateChange)=\"onDateChange(column.name, record, $event)\"\r\n />\r\n <mat-datepicker #picker></mat-datepicker>\r\n </div>\r\n <input\r\n matInput\r\n type=\"time\"\r\n *ngIf=\"column.type === 'time'\"\r\n [formControlName]=\"column.name\"\r\n step=\"900\"\r\n (focus)=\"column.onFocus($event)\"\r\n (keypress)=\"column.onChange($event)\"\r\n (blur)=\"column.onBlur($event)\"\r\n />\r\n <input\r\n matInput\r\n type=\"number\"\r\n class=\"class_number_edition\"\r\n *ngIf=\"column.type === 'number'\"\r\n [formControlName]=\"column.name\"\r\n step=\"{{ column.step }}\"\r\n value=\"{{ getValue(record, column) }}\"\r\n (input)=\"onValueChange(column.name, record, $event)\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n min=\"{{ getValidationAttributeValue(column, 'minValue') }}\"\r\n max=\"{{ getValidationAttributeValue(column, 'maxValue') }}\"\r\n />\r\n <input\r\n matInput\r\n type=\"text\"\r\n *ngIf=\"!column.type || column.type === 'string'\"\r\n [formControlName]=\"column.name\"\r\n value=\"{{ getValue(record, column) }}\"\r\n (input)=\"onValueChange(column.name, record, $event)\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n />\r\n <mat-checkbox\r\n *ngIf=\"column.type === 'boolean'\"\r\n [formControlName]=\"column.name\"\r\n [checked]=\"getValue(record, column)\"\r\n (change)=\"onBooleanValueChange(column.name, record, $event)\"\r\n ></mat-checkbox>\r\n <mat-select\r\n *ngIf=\"column.type === 'list'\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n [formControlName]=\"column.name\"\r\n [multiple]=\"column.multiple\"\r\n (selectionChange)=\"\r\n onSelectValueChange(column.name, record, $event)\r\n \"\r\n [value]=\"getValue(record, column)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of column.domainValues\"\r\n [value]=\"option.id\"\r\n [disabled]=\"option.disabled\"\r\n >\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-select>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [formControlName]=\"column.name\"\r\n *ngIf=\"column.type === 'autocomplete'\"\r\n [matAutocomplete]=\"auto\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n value=\"{{ getValue(record, column) }}\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n (optionSelected)=\"\r\n onAutocompleteValueChange(column, record, $event)\r\n \"\r\n panelWidth=\"430px\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of filteredOptions[column.name] | async\"\r\n [value]=\"option.id\"\r\n >\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </td>\r\n <ng-template #isUnsanitizedHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"\r\n !isUrl(getValue(record, column));\r\n else isAnUrlUnsanitizedHTML\r\n \"\r\n [ngClass]=\"getCellClass(record, column)\"\r\n [innerHTML]=\"getValue(record, column) | sanitizeHtml\"\r\n ></td>\r\n <ng-template #isAnUrlUnsanitizedHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"getCellClass(record, column)\"\r\n >\r\n <a\r\n href=\"{{ getValue(record, column) }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"isImg(getValue(record, column)); else notImg\"\r\n src=\"{{ getValue(record, column) | secureImage | async }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Icon\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let record\"\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"getCellClass(record, column)\"\r\n >\r\n <mat-icon\r\n *ngIf=\"column.onClick\"\r\n svgIcon=\"{{ getValue(record, column) || column.icon }}\"\r\n (click)=\"column.onClick($event)\"\r\n ></mat-icon>\r\n <mat-icon\r\n *ngIf=\"!column.onClick\"\r\n svgIcon=\"{{ getValue(record, column) || column.icon }}\"\r\n ></mat-icon>\r\n </td>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.ButtonGroup\"\r\n >\r\n <ng-container *matCellDef=\"let record\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"getCellClass(record, column)\"\r\n >\r\n <span *ngFor=\"let button of getValue(record, column)\">\r\n <ng-container\r\n *ngIf=\"\r\n isEdition(record) === button.editMode ||\r\n button.editMode === undefined\r\n \"\r\n >\r\n <button\r\n *ngIf=\"button.style === 'mat-icon-button'\"\r\n igoStopPropagation\r\n mat-icon-button\r\n [color]=\"button.color\"\r\n (mousedown)=\"onButtonClick(button.click, record)\"\r\n [disabled]=\"button.disabled\"\r\n >\r\n <mat-icon svgIcon=\"{{ button.icon }}\"></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"button.style !== 'mat-icon-button'\"\r\n igoStopPropagation\r\n mat-mini-fab\r\n [color]=\"button.color\"\r\n (mousedown)=\"onButtonClick(button.click, record)\"\r\n [disabled]=\"button.disabled\"\r\n >\r\n <mat-icon svgIcon=\"{{ button.icon }}\"></mat-icon>\r\n </button>\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <tr\r\n mat-header-row\r\n *matHeaderRowDef=\"headers; sticky: fixedHeader\"\r\n [ngClass]=\"getHeaderClass()\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n igoEntityTableRow\r\n *matRowDef=\"let record; columns: headers\"\r\n [scrollBehavior]=\"scrollBehavior\"\r\n [ngClass]=\"getRowClass(record)\"\r\n [selection]=\"selection\"\r\n [selected]=\"rowIsSelected(record)\"\r\n (select)=\"onRowSelect(record)\"\r\n (click)=\"onRowClick(record)\"\r\n ></tr>\r\n </table>\r\n <igo-entity-table-paginator\r\n *ngIf=\"withPaginator\"\r\n [store]=\"store\"\r\n [paginatorOptions]=\"paginatorOptions\"\r\n [entitySortChange$]=\"entitySortChange$\"\r\n (paginatorChange)=\"paginatorChange($event)\"\r\n >\r\n </igo-entity-table-paginator>\r\n</div>\r\n", styles: [":host{width:100%;height:100%;display:block}:host.table-compact tr.mat-mdc-header-row,:host.table-compact ::ng-deep mat-checkbox .mat-ripple{height:36px}:host.table-compact tr.mat-mdc-row,:host.table-compact ::ng-deep mat-checkbox .mat-ripple{height:28px}:host .table-container{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}:host .mat-cell-text{overflow:hidden;word-wrap:break-word}:host entity-table table.igo-entity-table-with-selection tr:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}:host table button{margin:7px}:host .class_hidden{visibility:hidden}:host .class_display_none{display:none}:host .class_boolean,:host .class_icon,:host .class_number{text-align:center;padding-right:35px!important}:host .class_string,:host .class_text,:host .class_number_edition{text-align:left}:host td.edition{background:rgba(166,166,166,.2)}:host input{border-bottom:1px solid darkgrey}\n"] }]
1426
+ }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.UntypedFormBuilder }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
1427
+ type: Optional
1428
+ }, {
1429
+ type: Self
1430
+ }] }, { type: i1.NgForm, decorators: [{
1431
+ type: Optional
1432
+ }] }, { type: i1.FormControlName, decorators: [{
1433
+ type: Optional
1434
+ }] }, { type: i3.ErrorStateMatcher }, { type: i3.DateAdapter }]; }, { store: [{
1435
+ type: Input
1436
+ }], paginator: [{
1437
+ type: Input
1438
+ }], template: [{
1439
+ type: Input
1440
+ }], scrollBehavior: [{
1441
+ type: Input
1442
+ }], sortNullsFirst: [{
1443
+ type: Input
1444
+ }], withPaginator: [{
1445
+ type: Input
1446
+ }], paginatorOptions: [{
1447
+ type: Input
1448
+ }], entityClick: [{
1449
+ type: Output
1450
+ }], entitySelectChange: [{
1451
+ type: Output
1452
+ }], entitySortChange: [{
1453
+ type: Output
1454
+ }] }); })();
1455
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUtqQixVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksRUFDTCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxFQUlMLFdBQVcsRUFHWCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUMxQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsTUFBTSxFQUNOLGVBQWUsRUFDZixnQkFBZ0IsRUFDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FB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QUFnQjtZQUFoQiw4Q0FBZ0I7WUFVekMsZUFBbUI7WUFBbkIsd0NBQW1COzs7dUZEelVYLG9CQUFvQjtjQVRoQyxTQUFTOzJCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO29CQUNULEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsc0JBQXNCLEVBQUU7aUJBQ3BFOztzQkFpTEUsUUFBUTs7c0JBQUksSUFBSTs7c0JBQ2hCLFFBQVE7O3NCQUNSLFFBQVE7a0ZBbklGLEtBQUs7a0JBQWIsS0FBSztZQUtPLFNBQVM7a0JBQXJCLEtBQUs7WUFhRyxRQUFRO2tCQUFoQixLQUFLO1lBTU4sY0FBYztrQkFEYixLQUFLO1lBT04sY0FBYztrQkFEYixLQUFLO1lBT04sYUFBYTtrQkFEWixLQUFLO1lBT04sZ0JBQWdCO2tCQURmLEtBQUs7WUFNSSxXQUFXO2tCQUFwQixNQUFNO1lBS0csa0JBQWtCO2tCQUEzQixNQUFNO1lBT0csZ0JBQWdCO2tCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBPbkluaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT3B0aW9uYWwsXHJcbiAgU2VsZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgRW50aXR5S2V5LFxyXG4gIEVudGl0eVJlY29yZCxcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlTdG9yZSxcclxuICBFbnRpdHlUYWJsZVRlbXBsYXRlLFxyXG4gIEVudGl0eVRhYmxlQ29sdW1uLFxyXG4gIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIsXHJcbiAgRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSxcclxuICBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yXHJcbn0gZnJvbSAnLi4vc2hhcmVkJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBFbnRpdHlUYWJsZVBhZ2luYXRvck9wdGlvbnMgfSBmcm9tICcuLi9lbnRpdHktdGFibGUtcGFnaW5hdG9yL2VudGl0eS10YWJsZS1wYWdpbmF0b3IuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQge1xyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBOZ0NvbnRyb2wsXHJcbiAgTmdGb3JtLFxyXG4gIEZvcm1Db250cm9sTmFtZSxcclxuICBVbnR5cGVkRm9ybUdyb3VwXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XHJcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgbW9tZW50IH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgU3RyaW5nVXRpbHMgfSBmcm9tICdAaWdvMi91dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1lbnRpdHktdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VudGl0eS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRW50aXR5VGFibGVDb21wb25lbnQgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVudGl0eVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgZW50aXR5U29ydENoYW5nZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG5cclxuICBwdWJsaWMgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xyXG5cclxuICBwdWJsaWMgZmlsdGVyZWRPcHRpb25zID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgY29sdW1uIHJlbmRlcmVyIHR5cGVzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciA9IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgc2VsZWN0aW9uJ3Mgc3RhdGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlID0gRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgc2VsZWN0aW9uLHMgc3RhdGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICByZWFkb25seSBzZWxlY3Rpb25TdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlPiA9XHJcbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgc3RvcmUncyBzZWxlY3Rpb25cclxuICAgKi9cclxuICBwcml2YXRlIHNlbGVjdGlvbiQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgZGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGF0YVNvdXJjZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsYXN0IHJlY29yZCBjaGVja2VkLiBVc2VmdWwgZm9yIHNlbGVjdGluZ1xyXG4gICAqIG11bHRpcGxlIHJlY29yZHMgYnkgaG9sZGluZyB0aGUgc2hpZnQga2V5IGFuZCBjaGVja2luZ1xyXG4gICAqIGNoZWNrYm94ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsYXN0UmVjb3JkQ2hlY2tlZEtleTogRW50aXR5S2V5O1xyXG5cclxuICAvKipcclxuICAgKiBFbnRpdHkgc3RvcmVcclxuICAgKi9cclxuICBASW5wdXQoKSBzdG9yZTogRW50aXR5U3RvcmU8b2JqZWN0PjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgcGFnaW5hdG9yXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XHJcbiAgICB0aGlzLl9wYWdpbmF0b3IgPSB2YWx1ZTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBwYWdpbmF0b3IoKTogTWF0UGFnaW5hdG9yIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3I7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG5cclxuICAvKipcclxuICAgKiBUYWJsZSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBFbnRpdHlUYWJsZVRlbXBsYXRlO1xyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGwgYmVoYXZpb3Igb24gc2VsZWN0aW9uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzY3JvbGxCZWhhdmlvcjogRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvciA9IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IuQXV0bztcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBudWxscyBzaG91bGQgYmUgZmlyc3Qgd2hlbiBzb3J0aW5nXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzb3J0TnVsbHNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTaG93IHRoZSB0YWJsZSBwYWdpbmF0b3Igb3Igbm90LiBGYWxzZSBieSBkZWZhdWx0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgd2l0aFBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBQYWdpbmF0b3Igb3B0aW9uc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcGFnaW5hdG9yT3B0aW9uczogRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZW50aXR5IChyb3cpIGlzIGNsaWNrZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlbnRpdHlTZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGFkZGVkOiBvYmplY3RbXTtcclxuICB9PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHRhYmxlIHNvcnQgaXMgY2hhbmdlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5U29ydENoYW5nZTogRXZlbnRFbWl0dGVyPHtcclxuICAgIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW47XHJcbiAgICBkaXJlY3Rpb246IHN0cmluZztcclxuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXIodW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgaGVhZGVyc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBoZWFkZXJzKCk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBjb2x1bW5zID0gdGhpcy50ZW1wbGF0ZS5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pID0+IGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSlcclxuICAgICAgLm1hcCgoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbkNoZWNrYm94ID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbHVtbnMgPSBbJ3NlbGVjdGlvbkNoZWNrYm94J10uY29uY2F0KGNvbHVtbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0YSBzb3VyY2UgY29uc3VtYWJsZSBieSB0aGUgdW5kZXJseWluZyBtYXRlcmlhbCB0YWJsZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPG9iamVjdD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gaXMgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IHNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnNlbGVjdGlvbiB8fCBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgYSBzZWxlY3Rpb24gY2hlY2tib3ggc2hvdWxkIGJlIGRpc3BsYXllZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBzZWxlY3Rpb25DaGVja2JveCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnNlbGVjdGlvbkNoZWNrYm94IHx8IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IHNlbGVjdE1hbnkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3RNYW55IHx8IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IGZpeGVkSGVhZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUuZml4ZWRIZWFkZXIgPT09IHVuZGVmaW5lZFxyXG4gICAgICA/IHRydWVcclxuICAgICAgOiB0aGlzLnRlbXBsYXRlLmZpeGVkSGVhZGVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhYmxlSGVpZ2h0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS50YWJsZUhlaWdodCA/IHRoaXMudGVtcGxhdGUudGFibGVIZWlnaHQgOiAnYXV0byc7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJvdGVjdGVkIF9mb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcclxuICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfcGFyZW50Rm9ybTogTmdGb3JtLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIF9jb250cm9sTmFtZTogRm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxyXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT5cclxuICApIHtcclxuICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKCdmci1DQScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2sgdGhlIHNlbGVjdGlvbiBzdGF0ZSB0byBwcm9wZXJseSBkaXNwbGF5IHRoZSBzZWxlY3Rpb24gY2hlY2tib3hlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBzdG9yZSA9IGNoYW5nZXMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuY3VycmVudFZhbHVlICE9PSBzdG9yZS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyB0ZXh0IG9yIG51bWJlciB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBib29sZWFuIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkJvb2xlYW5WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQuY2hlY2tlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3Mgc2VsZWN0IHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvblNlbGVjdFZhbHVlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4pO1xyXG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgYXV0b2NvbXBsZXRlIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkF1dG9jb21wbGV0ZVZhbHVlQ2hhbmdlKFxyXG4gICAgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbixcclxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sXHJcbiAgICBldmVudFxyXG4gICkge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKGV2ZW50Lm9wdGlvbi52aWV3VmFsdWUpO1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubmFtZSk7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgZGF0ZSB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25EYXRlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xyXG4gICAgY29uc3QgZm9ybWF0ID0gJ1lZWVktTU0tREQnO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtb21lbnQoZXZlbnQudmFsdWUpLmZvcm1hdChmb3JtYXQpO1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4pO1xyXG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuYWJsZSBlZGl0aW9uIG1vZGUgZm9yIG9uZSByb3dcclxuICAgKiBNb3JlIHRoYW4gb25lIHJvdyBjYW4gYmUgZWRpdGVkIGF0IHRoZSBzYW1lIHRpbWVcclxuICAgKi9cclxuICBwcml2YXRlIGVuYWJsZUVkaXQocmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55Pikge1xyXG4gICAgY29uc3QgaXRlbSA9IHJlY29yZC5lbnRpdHkucHJvcGVydGllcyB8fCByZWNvcmQuZW50aXR5O1xyXG4gICAgdGhpcy50ZW1wbGF0ZS5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBjb2x1bW4udGl0bGUgPVxyXG4gICAgICAgIGNvbHVtbi52YWxpZGF0aW9uPy5tYW5kYXRvcnkgJiYgIWNvbHVtbi50aXRsZS5pbmNsdWRlcygnKicpXHJcbiAgICAgICAgICA/IGNvbHVtbi50aXRsZSArICcgKidcclxuICAgICAgICAgIDogY29sdW1uLnRpdGxlO1xyXG5cclxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubmFtZSk7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtW2tleV0gfHwgaXRlbVtrZXldID09PSBudWxsKSB7XHJcbiAgICAgICAgICBpdGVtW2tleV0gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtW2tleV0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBpdGVtW2tleV0gPSBKU09OLnBhcnNlKGl0ZW1ba2V5XS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChcclxuICAgICAgICAgIGNvbHVtbi5uYW1lLFxyXG4gICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKGl0ZW1ba2V5XSlcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbGlzdCcpIHtcclxuICAgICAgICBpZiAoY29sdW1uLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKFxyXG4gICAgICAgICAgICBjb2x1bW4ubmFtZSxcclxuICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFtpdGVtW2tleV1dKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChcclxuICAgICAgICAgICAgY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChpdGVtW2tleV0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHR5cGVvZiBpdGVtW2tleV0gPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgID8gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKHBhcnNlSW50KGl0ZW1ba2V5XSkpXHJcbiAgICAgICAgICAgIDogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXHJcbiAgICAgICAgICBjb2x1bW4ubmFtZSxcclxuICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChpdGVtW2tleV0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbY29sdW1uLm5hbWVdID0gbmV3IE9ic2VydmFibGU8YW55W10+KCk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbY29sdW1uLm5hbWVdID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbXHJcbiAgICAgICAgICBjb2x1bW4ubmFtZVxyXG4gICAgICAgIF0udmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5kb21haW5WYWx1ZXM/LmZpbHRlcigob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXHJcbiAgICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQgPSBvcHRpb24udmFsdWVcclxuICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IGZvcm1Db250cm9sVmFsdWUgPSBpdGVtW2tleV07XHJcbiAgICAgICAgY29sdW1uLmRvbWFpblZhbHVlcy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIGZvcm1Db250cm9sVmFsdWUgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICAgIFN0cmluZ1V0aWxzLmlzVmFsaWROdW1iZXIoZm9ybUNvbnRyb2xWYWx1ZSkgJiZcclxuICAgICAgICAgICAgIVN0cmluZ1V0aWxzLmlzT2N0YWxOdW1iZXIoZm9ybUNvbnRyb2xWYWx1ZSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbFZhbHVlID0gcGFyc2VJbnQoZm9ybUNvbnRyb2xWYWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG9wdGlvbi52YWx1ZSA9PT0gZm9ybUNvbnRyb2xWYWx1ZSB8fFxyXG4gICAgICAgICAgICBvcHRpb24uaWQgPT09IGZvcm1Db250cm9sVmFsdWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbFZhbHVlID0gb3B0aW9uLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoZm9ybUNvbnRyb2xWYWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSkge1xyXG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eSBhcyBhbnk7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoXHJcbiAgICAgICAgICAgIGVudGl0eT8ucHJvcGVydGllc1tcclxuICAgICAgICAgICAgICB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICBpZiAoY29sdW1uLnZpc2libGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtrZXldKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlID0gbW9tZW50KGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgICAgIGl0ZW1ba2V5XSA9IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKGl0ZW1ba2V5XSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0tleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xyXG4gICAgICAgICAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNbbmV3S2V5XSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXHJcbiAgICAgICAgICBjb2x1bW4ubmFtZSxcclxuICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChpdGVtW2tleV0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXSAmJlxyXG4gICAgICAgIHRoaXMuZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ3JlYWRvbmx5JylcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLmRpc2FibGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZURhdGFzb3VyY2UoKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlU3RvcmUoKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlld1xyXG4gICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZWNvcmRzOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PltdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZCA9IHJlY29yZHNbMF07XHJcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgICAgIC5hbGwoKVxyXG4gICAgICAgICAgLmluZGV4T2YoZmlyc3RTZWxlY3RlZCk7XHJcbiAgICAgICAgY29uc3QgcGFnZU1heCA9IHRoaXMucGFnaW5hdG9yXHJcbiAgICAgICAgICA/IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplICogKHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCArIDEpXHJcbiAgICAgICAgICA6IDA7XHJcbiAgICAgICAgY29uc3QgcGFnZU1pbiA9IHRoaXMucGFnaW5hdG9yID8gcGFnZU1heCAtIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplIDogMDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IgJiZcclxuICAgICAgICAgIChmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gPCBwYWdlTWluIHx8XHJcbiAgICAgICAgICAgIGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA+PSBwYWdlTWF4KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgcGFnZVRvUmVhY2ggPSBNYXRoLmZsb29yKFxyXG4gICAgICAgICAgICBmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gLyB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IucGFnZUluZGV4ID0gcGFnZVRvUmVhY2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUkLm5leHQodGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGUocmVjb3JkcykpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSQkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsJCgpLnN1YnNjcmliZSgoYWxsKSA9PiB7XHJcbiAgICAgIGlmIChhbGxbMF0pIHtcclxuICAgICAgICB0aGlzLmVuYWJsZUVkaXQoYWxsWzBdKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGFsbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5iaW5kIHRoZSBzdG9yZSB3YXRjaGVyXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlU3RvcmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVTdG9yZSgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiQkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UkJCkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tieSBmdW5jdGlvblxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHBhcmFtIGluZGV4IFJlY29yZCBpbmRleFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFRyYWNrQnlGdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAoaW5kZXg6IG51bWJlciwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0LCBFbnRpdHlTdGF0ZT4pID0+IHtcclxuICAgICAgcmV0dXJuIHJlY29yZC5yZWY7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlciBhIHJlZnJlc2ggb2YgdGhyZSB0YWJsZS4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW5cclxuICAgKiB0aGUgZGF0YSBzb3VyY2UgZG9lc24ndCBlbWl0IGEgbmV3IHZhbHVlIGJ1dCBmb3Igc29tZSByZWFzb25cclxuICAgKiB0aGUgcmVjb3JkcyBuZWVkIGFuIHVwZGF0ZS5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwYWdpbmF0b3JDaGFuZ2UoZXZlbnQ6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgdGhpcy5wYWdpbmF0b3IgPSBldmVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIHNvcnQsIHNvcnQgdGhlIHN0b3JlXHJcbiAgICogQHBhcmFtIGV2ZW50IFNvcnQgZXZlbnRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblNvcnQoZXZlbnQ6IHsgYWN0aXZlOiBzdHJpbmc7IGRpcmVjdGlvbjogc3RyaW5nIH0pIHtcclxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGV2ZW50LmRpcmVjdGlvbjtcclxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMudGVtcGxhdGUuY29sdW1ucy5maW5kKFxyXG4gICAgICAoYzogRW50aXR5VGFibGVDb2x1bW4pID0+IGMubmFtZSA9PT0gZXZlbnQuYWN0aXZlXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdhc2MnIHx8IGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XHJcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3LnNvcnQoe1xyXG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PlxyXG4gICAgICAgICAgdGhpcy5nZXRWYWx1ZShyZWNvcmQsIGNvbHVtbiksXHJcbiAgICAgICAgZGlyZWN0aW9uLFxyXG4gICAgICAgIG51bGxzRmlyc3Q6IHRoaXMuc29ydE51bGxzRmlyc3RcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZS5lbWl0KHsgY29sdW1uLCBkaXJlY3Rpb24gfSk7XHJcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZSQubmV4dCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3LnNvcnQodW5kZWZpbmVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIGNsaWNrZWQsIGVtaXQgYW4gZXZlbnRcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uUm93Q2xpY2socmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xyXG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xyXG4gICAgdGhpcy5lbnRpdHlDbGljay5lbWl0KHJlY29yZC5lbnRpdHkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgc2VsZWN0ZWQsIHNlbGVjdCBpdCBpbiB0aGUgc3RvcmUgYW5kIGVtaXQgYW4gZXZlbnQuIEV2ZW4gaWZcclxuICAgKiBcIm1hbnlcIiBpcyBzZXQgdG8gdHJ1ZSwgdGhpcyBtZXRob2QgYWx3YXlzIHNlbGVjdCBhIHNpbmdsZSwgZXhjbHVzaXZlIHJvdy4gU2VsZWN0aW5nXHJcbiAgICogbXVsdGlwbGUgcm93cyBzaG91bGQgYmUgYWNoaWV2ZWQgYnkgdXNpbmcgdGhlIGNoZWNrYm94ZXMuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblJvd1NlbGVjdChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7IHNlbGVjdGVkOiB0cnVlIH0sIHRydWUpO1xyXG4gICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7IGFkZGVkOiBbZW50aXR5XSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBvciB1bnNlbGVjdCBhbGwgcm93cyBhdCBvbmNlLiBPbiBzZWxlY3QsIGVtaXQgYW4gZXZlbnQuXHJcbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblRvZ2dsZVJvd3ModG9nZ2xlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7IHNlbGVjdGVkOiB0b2dnbGUgfSk7XHJcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgICAuYWxsKClcclxuICAgICAgICAubWFwKChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiByZWNvcmQuZW50aXR5KTtcclxuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7IGFkZGVkOiBbZW50aXRpZXNdIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgdG9nZ2xlZCwgc2VsZWN0IG9yIHVuc2VsZWN0IGl0IGluIHRoZSBzdG9yZS4gT24gc2VsZWN0LFxyXG4gICAqIGVtaXQgYW4gZXZlbnQuXHJcbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uVG9nZ2xlUm93KHRvZ2dsZTogYm9vbGVhbiwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIGNvbnN0IGV4Y2x1c2l2ZSA9IHRvZ2dsZSA9PT0gdHJ1ZSAmJiAhdGhpcy5zZWxlY3RNYW55O1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7IHNlbGVjdGVkOiB0b2dnbGUgfSwgZXhjbHVzaXZlKTtcclxuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7IGFkZGVkOiBbZW50aXR5XSB9KTtcclxuICAgIH1cclxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHRvZ2dsZWQsIHNlbGVjdCBvciB1bnNlbGVjdCBpdCBpbiB0aGUgc3RvcmUuIE9uIHNlbGVjdCxcclxuICAgKiBlbWl0IGFuIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblNoaWZ0VG9nZ2xlUm93KFxyXG4gICAgdG9nZ2xlOiBib29sZWFuLFxyXG4gICAgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PixcclxuICAgIGV2ZW50OiBNb3VzZUV2ZW50XHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RNYW55ID09PSBmYWxzZSB8fCB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5vblRvZ2dsZVJvdyh0b2dnbGUsIHJlY29yZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBtYXQgY2hlY2tib3ggd3JvbmcgYmVoYXZpb3JcclxuICAgIC8vIHdoZW4gdGhlIHNoaWZ0IGtleSBpcyBoZWxkLlxyXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzYyMzJcclxuICAgIGNvbnN0IHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICByYW5nZS5zZWxlY3ROb2RlKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCgpO1xyXG4gICAgY29uc3QgcmVjb3JkSW5kZXggPSByZWNvcmRzLmluZGV4T2YocmVjb3JkKTtcclxuICAgIGNvbnN0IGxhc3RSZWNvcmRDaGVja2VkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0KFxyXG4gICAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5XHJcbiAgICApO1xyXG4gICAgY29uc3QgbGFzdFJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKGxhc3RSZWNvcmRDaGVja2VkKTtcclxuICAgIGNvbnN0IGluZGV4ZXMgPSBbcmVjb3JkSW5kZXgsIGxhc3RSZWNvcmRJbmRleF07XHJcbiAgICBjb25zdCBzZWxlY3RSZWNvcmRzID0gcmVjb3Jkcy5zbGljZShcclxuICAgICAgTWF0aC5taW4oLi4uaW5kZXhlcyksXHJcbiAgICAgIE1hdGgubWF4KC4uLmluZGV4ZXMpICsgMVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBlbnRpdGllcyA9IHNlbGVjdFJlY29yZHMubWFwKFxyXG4gICAgICAoX3JlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IF9yZWNvcmQuZW50aXR5XHJcbiAgICApO1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGVNYW55KGVudGl0aWVzLCB7IHNlbGVjdGVkOiB0b2dnbGUgfSk7XHJcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoeyBhZGRlZDogZW50aXRpZXMgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wdXRlIHRoZSBzZWxlY3Rpb24gc3RhdGVcclxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGFsbCwgc29tZSBvciBubyByb3dzIGFyZSBzZWxlY3RlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29tcHV0ZVNlbGVjdGlvblN0YXRlKFxyXG4gICAgc2VsZWN0ZWRSZWNvcmRzOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PltdXHJcbiAgKTogRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSB7XHJcbiAgICBjb25zdCBzdGF0ZXMgPSBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uQ291bnQgPSBzZWxlY3RlZFJlY29yZHMubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHNlbGVjdGlvbkNvdW50ID09PSAwXHJcbiAgICAgID8gc3RhdGVzLk5vbmVcclxuICAgICAgOiBzZWxlY3Rpb25Db3VudCA9PT0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuY291bnRcclxuICAgICAgPyBzdGF0ZXMuQWxsXHJcbiAgICAgIDogc3RhdGVzLlNvbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgY29sdW1uIGlzIHNvcnRhYmxlXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgY29sdW1uIGlzIHNvcnRhYmxlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgY29sdW1uSXNTb3J0YWJsZShjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc29ydGFibGUgPSBjb2x1bW4uc29ydDtcclxuICAgIGlmIChzb3J0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHNvcnRhYmxlID0gdGhpcy50ZW1wbGF0ZS5zb3J0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IHRoaXMudGVtcGxhdGUuc29ydDtcclxuICAgIH1cclxuICAgIHJldHVybiBzb3J0YWJsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgYSByb3cgaXMgc2hvdWxkIGJlIHNlbGVjdGVkIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGVudGl0eSBzdGF0ZVxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIHJvdyBzaG91bGQgYmUgc2VsZWN0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICByb3dJc1NlbGVjdGVkKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHN0YXRlID0gcmVjb3JkLnN0YXRlO1xyXG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkID8gc3RhdGUuc2VsZWN0ZWQgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzSW1nKHZhbHVlKSB7XHJcbiAgICBpZiAodGhpcy5pc1VybCh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBbJ2pwZycsICdwbmcnLCAnZ2lmJ10uaW5kZXhPZih2YWx1ZS5zcGxpdCgnLicpLnBvcCgpLnRvTG93ZXJDYXNlKCkpICE9PVxyXG4gICAgICAgIC0xXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1VybCh2YWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB2YWx1ZS5zbGljZSgwLCA4KSA9PT0gJ2h0dHBzOi8vJyB8fCB2YWx1ZS5zbGljZSgwLCA3KSA9PT0gJ2h0dHA6Ly8nXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gYWNjZXNzIGFuIGVudGl0eSdzIHZhbHVlc1xyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBBbnkgdmFsdWVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRWYWx1ZShyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYW55IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBsZXQgdmFsdWU7XHJcbiAgICBpZiAoY29sdW1uLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gY29sdW1uLnZhbHVlQWNjZXNzb3IoZW50aXR5LCByZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGVtcGxhdGUudmFsdWVBY2Nlc3NvciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnZhbHVlQWNjZXNzb3IoZW50aXR5LCBjb2x1bW4ubmFtZSwgcmVjb3JkKTtcclxuICAgIH1cclxuICAgIHZhbHVlID0gdGhpcy5zdG9yZS5nZXRQcm9wZXJ0eShlbnRpdHksIGNvbHVtbi5uYW1lKTtcclxuXHJcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICB2YWx1ZSA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgdmFsdWUgPSBCb29sZWFuKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkpIHtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlID8gJyYjMTAwMDM7JyA6ICcnOyAvLyBjaGVjayBtYXJrXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdsaXN0JyAmJiB2YWx1ZSAmJiBjb2x1bW4uZG9tYWluVmFsdWVzKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHkgYXMgYW55O1xyXG4gICAgICBpZiAoY29sdW1uLm11bHRpcGxlKSB7XHJcbiAgICAgICAgbGV0IGxpc3RfaWQ7XHJcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgPyAobGlzdF9pZCA9IHZhbHVlLm1hdGNoKC9bXFx3Li1dKy9nKS5tYXAoTnVtYmVyKSlcclxuICAgICAgICAgIDogKGxpc3RfaWQgPSB2YWx1ZSk7XHJcbiAgICAgICAgbGV0IGxpc3Rfb3B0aW9uID0gW107XHJcblxyXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAobGlzdF9pZC5pbmNsdWRlcyhvcHRpb24uaWQpKSB7XHJcbiAgICAgICAgICAgIGlmIChyZWNvcmQuZWRpdGlvbikge1xyXG4gICAgICAgICAgICAgIGxpc3Rfb3B0aW9uLnB1c2gob3B0aW9uLmlkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsaXN0X29wdGlvbi5wdXNoKG9wdGlvbi52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0VkaXRpb24ocmVjb3JkKSA/ICh2YWx1ZSA9IGxpc3RfaWQpIDogKHZhbHVlID0gbGlzdF9vcHRpb24pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiBjb2x1bW4ubGlua0NvbHVtbkZvcmNlKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9XHJcbiAgICAgICAgICAgIGVudGl0eT8ucHJvcGVydGllc1tcclxuICAgICAgICAgICAgICB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICAgICAgU3RyaW5nVXRpbHMuaXNWYWxpZE51bWJlcih2YWx1ZSkgJiZcclxuICAgICAgICAgICAgICAhU3RyaW5nVXRpbHMuaXNPY3RhbE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUgfHwgb3B0aW9uLmlkID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNFZGl0aW9uKHJlY29yZClcclxuICAgICAgICAgICAgICAgID8gKHZhbHVlID0gb3B0aW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgOiAodmFsdWUgPSBvcHRpb24udmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIHZhbHVlICYmIGNvbHVtbi5kb21haW5WYWx1ZXMpIHtcclxuICAgICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eSBhcyBhbnk7XHJcbiAgICAgIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiBjb2x1bW4ubGlua0NvbHVtbkZvcmNlKSB7XHJcbiAgICAgICAgdmFsdWUgPVxyXG4gICAgICAgICAgZW50aXR5Py5wcm9wZXJ0aWVzW1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXHJcbiAgICAgICAgICBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICAgICAgU3RyaW5nVXRpbHMuaXNWYWxpZE51bWJlcih2YWx1ZSkgJiZcclxuICAgICAgICAgICAgIVN0cmluZ1V0aWxzLmlzT2N0YWxOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSB8fCBvcHRpb24uaWQgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb3B0aW9uLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgaWYgKHRoaXMuaXNFZGl0aW9uKHJlY29yZCkpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgIGxldCBkYXRlID0gbW9tZW50KHZhbHVlKTtcclxuICAgICAgICAgIHZhbHVlID0gZGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgdmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhbHVlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIGFjY2VzcyBhbiBlbnRpdHkncyB2YWxpZGF0aW9uIHZhbHVlc1xyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25UeXBlIHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIEFueSB2YWx1ZSAoZmFsc2UgaWYgbm8gdmFsaWRhdGlvbiBvciBub3QgdGhlIG9uZSBjb25jZXJuZWQpXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKFxyXG4gICAgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbixcclxuICAgIHZhbGlkYXRpb25UeXBlOiBzdHJpbmdcclxuICApOiBhbnkge1xyXG4gICAgaWYgKFxyXG4gICAgICBjb2x1bW4udmFsaWRhdGlvbiAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIGNvbHVtbi52YWxpZGF0aW9uW3ZhbGlkYXRpb25UeXBlXSAhPT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0aW9uW3ZhbGlkYXRpb25UeXBlXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0VkaXRpb24ocmVjb3JkKSB7XHJcbiAgICByZXR1cm4gcmVjb3JkLmVudGl0eS5lZGl0aW9uID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0eXBlIG9mIHJlbmRlcmVyIG9mIGEgY29sdW1uXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBSZW5kZXJlciB0eXBlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIge1xyXG4gICAgaWYgKGNvbHVtbi5yZW5kZXJlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4ucmVuZGVyZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5EZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0YWJsZSBuZ0NsYXNzXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFRhYmxlQ2xhc3MoKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ2lnby1lbnRpdHktdGFibGUtd2l0aC1zZWxlY3Rpb24nOiB0aGlzLnNlbGVjdGlvblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGhlYWRlciBuZ0NsYXNzXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldEhlYWRlckNsYXNzKCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnRlbXBsYXRlLmhlYWRlckNsYXNzRnVuYztcclxuICAgIGlmIChmdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZ1bmMoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIHJvdyBuZ0NsYXNzXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0Um93Q2xhc3MocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pik6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5yb3dDbGFzc0Z1bmM7XHJcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmdW5jKGVudGl0eSwgcmVjb3JkKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIHJvdyBuZ0NsYXNzXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRDZWxsQ2xhc3MoXHJcbiAgICByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LFxyXG4gICAgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtblxyXG4gICk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBjbHMgPSB7fTtcclxuXHJcbiAgICBjb25zdCB0YWJsZUZ1bmMgPSB0aGlzLnRlbXBsYXRlLmNlbGxDbGFzc0Z1bmM7XHJcbiAgICBpZiAodGFibGVGdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIHRhYmxlRnVuYyhlbnRpdHksIGNvbHVtbiwgcmVjb3JkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sdW1uRnVuYyA9IGNvbHVtbi5jZWxsQ2xhc3NGdW5jO1xyXG4gICAgaWYgKGNvbHVtbkZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICBPYmplY3QuYXNzaWduKGNscywgY29sdW1uRnVuYyhlbnRpdHksIHJlY29yZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjbHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGEgYnV0dG9uIGlzIGNsaWNrZWRcclxuICAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvblxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25CdXR0b25DbGljayhcclxuICAgIGNsaWNrRnVuYzogKGVudGl0eTogb2JqZWN0LCByZWNvcmQ/OiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gdm9pZCxcclxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD5cclxuICApIHtcclxuICAgIHRoaXMuZW5hYmxlRWRpdChyZWNvcmQpO1xyXG4gICAgaWYgKHR5cGVvZiBjbGlja0Z1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY2xpY2tGdW5jKHJlY29yZC5lbnRpdHksIHJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBjb2x1bW4gbmFtZSB3aXRob3V0IGhpcyBcInByb3BlcnRpZXNcIiB0YWcgKHVzZWZ1bCBmb3IgZWRpdGlvbiB3b3Jrc3BhY2UgcHJvcGVydGllcylcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uOiBzdHJpbmcpIHtcclxuICAgIGlmIChjb2x1bW4uaW5jbHVkZXMoJ3Byb3BlcnRpZXMuJykpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi5zcGxpdCgnLicpWzFdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbHVtbjtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiB0YWJsZUhlaWdodCB9XCI+XHJcbiAgPHRhYmxlXHJcbiAgICBpZD1cImN1cnJlbnRXb3Jrc3BhY2VUYWJsZVwiXHJcbiAgICBtYXQtdGFibGVcclxuICAgIG1hdFNvcnRcclxuICAgIFtuZ0NsYXNzXT1cImdldFRhYmxlQ2xhc3MoKVwiXHJcbiAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgIFt0cmFja0J5XT1cImdldFRyYWNrQnlGdW5jdGlvbigpXCJcclxuICAgIChtYXRTb3J0Q2hhbmdlKT1cIm9uU29ydCgkZXZlbnQpXCJcclxuICA+XHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdGlvbkNoZWNrYm94XCIgY2xhc3M9XCJtYXQtY2VsbC1jaGVja2JveFwiPlxyXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RNYW55XCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU3RhdGUkIHwgYXN5bmMgYXMgc2VsZWN0aW9uU3RhdGVcIj5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVSb3dzKCRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuQWxsXCJcclxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlID09PSBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLlNvbWVcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zaGlmdEtleSA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogbnVsbFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICRldmVudC5zaGlmdEtleVxyXG4gICAgICAgICAgICAgID8gb25TaGlmdFRvZ2dsZVJvdyghcm93SXNTZWxlY3RlZChyZWNvcmQpLCByZWNvcmQsICRldmVudClcclxuICAgICAgICAgICAgICA6ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVSb3coJGV2ZW50LmNoZWNrZWQsIHJlY29yZClcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwicm93SXNTZWxlY3RlZChyZWNvcmQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLm5hbWVcIlxyXG4gICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRlbXBsYXRlLmNvbHVtbnNcIlxyXG4gICAgPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcclxuICAgICAgICAgIFttYXRUb29sdGlwXT1cImNvbHVtbi50b29sdGlwID8gY29sdW1uLnRvb2x0aXAgOiB1bmRlZmluZWRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJtYXQtYm9keS0xXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBjb2x1bW4udGl0bGUgfX1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcCA/IGNvbHVtbi50b29sdGlwIDogdW5kZWZpbmVkXCJcclxuICAgICAgICAgIGNsYXNzPVwibWF0LWJvZHktMVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgY29sdW1uLnRpdGxlIH19XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKSBhcyBjb2x1bW5SZW5kZXJlclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7IGVsc2UgaXNBblVybERlZmF1bHRcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfX1cIlxyXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICBpZ29JbWFnZUVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpOyBlbHNlIG5vdEltZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3JjPVwie3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UgfCBhc3luYyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ3RoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nXHJcbiAgICAgICAgICAgICAgICAgICAgPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICA+e3sgJ2lnby5jb21tb24uZW50aXR5LXRhYmxlLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuSFRNTFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7IGVsc2UgaXNBblVybEhUTUxcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgPjwvdGQ+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybEhUTUw+XHJcbiAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfX1cIlxyXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICBpZ29JbWFnZUVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpOyBlbHNlIG5vdEltZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3JjPVwie3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UgfCBhc3luYyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ3RoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nXHJcbiAgICAgICAgICAgICAgICAgICAgPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICA+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9uZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuVW5zYW5pdGl6ZWRIVE1MXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxyXG4gICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dCBlZGl0aW9uXCJcclxuICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc0VkaXRpb24ocmVjb3JkKTsgZWxzZSBpc1Vuc2FuaXRpemVkSFRNTFwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXJcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcclxuICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICAgICAgICAgIFtmb3JdPVwicGlja2VyXCJcclxuICAgICAgICAgICAgICAgID48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7eyBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi50eXBlID09PSAndGltZSdcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICBzdGVwPVwiOTAwXCJcclxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjb2x1bW4ub25Gb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJjb2x1bW4ub25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJjb2x1bW4ub25CbHVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNsYXNzX251bWJlcl9lZGl0aW9uXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgc3RlcD1cInt7IGNvbHVtbi5zdGVwIH19XCJcclxuICAgICAgICAgICAgICAgIHZhbHVlPVwie3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIH19XCJcclxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJ7eyBnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKSB9fVwiXHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInt7XHJcbiAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKVxyXG4gICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgbWluPVwie3sgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21pblZhbHVlJykgfX1cIlxyXG4gICAgICAgICAgICAgICAgbWF4PVwie3sgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21heFZhbHVlJykgfX1cIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLnR5cGUgfHwgY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJ7eyBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfX1cIlxyXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICByZWFkb25seT1cInt7IGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpIH19XCJcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwie3tcclxuICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpXHJcbiAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnYm9vbGVhbidcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkJvb2xlYW5WYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcmVjb3JkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdsaXN0J1wiXHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInt7XHJcbiAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKVxyXG4gICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiY29sdW1uLm11bHRpcGxlXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiXHJcbiAgICAgICAgICAgICAgICAgIG9uU2VsZWN0VmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29sdW1uLmRvbWFpblZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24uaWRcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2F1dG9jb21wbGV0ZSdcIlxyXG4gICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwie3tcclxuICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpXHJcbiAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB9fVwiXHJcbiAgICAgICAgICAgICAgICByZWFkb25seT1cInt7IGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpIH19XCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXHJcbiAgICAgICAgICAgICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiXHJcbiAgICAgICAgICAgICAgICAgIG9uQXV0b2NvbXBsZXRlVmFsdWVDaGFuZ2UoY29sdW1uLCByZWNvcmQsICRldmVudClcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBwYW5lbFdpZHRoPVwiNDMwcHhcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zW2NvbHVtbi5uYW1lXSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc1Vuc2FuaXRpemVkSFRNTD5cclxuICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgaXNBblVybFVuc2FuaXRpemVkSFRNTFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzYW5pdGl6ZUh0bWxcIlxyXG4gICAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybFVuc2FuaXRpemVkSFRNTD5cclxuICAgICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICBocmVmPVwie3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIH19XCJcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWdvSW1hZ2VFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpOyBlbHNlIG5vdEltZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7eyBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzZWN1cmVJbWFnZSB8IGFzeW5jIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ3RoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5JY29uXCI+XHJcbiAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLm9uQ2xpY2tcIlxyXG4gICAgICAgICAgICAgIHN2Z0ljb249XCJ7eyBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfHwgY29sdW1uLmljb24gfX1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4ub25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi5vbkNsaWNrXCJcclxuICAgICAgICAgICAgICBzdmdJY29uPVwie3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHx8IGNvbHVtbi5pY29uIH19XCJcclxuICAgICAgICAgICAgPjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuQnV0dG9uR3JvdXBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XHJcbiAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaXNFZGl0aW9uKHJlY29yZCkgPT09IGJ1dHRvbi5lZGl0TW9kZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5lZGl0TW9kZSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ1dHRvbi5zdHlsZSA9PT0gJ21hdC1pY29uLWJ1dHRvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlnb1N0b3BQcm9wYWdhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJidXR0b24uY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7eyBidXR0b24uaWNvbiB9fVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b24uc3R5bGUgIT09ICdtYXQtaWNvbi1idXR0b24nXCJcclxuICAgICAgICAgICAgICAgICAgICBpZ29TdG9wUHJvcGFnYXRpb25cclxuICAgICAgICAgICAgICAgICAgICBtYXQtbWluaS1mYWJcclxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uLmNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uLmNsaWNrLCByZWNvcmQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3sgYnV0dG9uLmljb24gfX1cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDx0clxyXG4gICAgICBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAqbWF0SGVhZGVyUm93RGVmPVwiaGVhZGVyczsgc3RpY2t5OiBmaXhlZEhlYWRlclwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cImdldEhlYWRlckNsYXNzKClcIlxyXG4gICAgPjwvdHI+XHJcbiAgICA8dHJcclxuICAgICAgbWF0LXJvd1xyXG4gICAgICBpZ29FbnRpdHlUYWJsZVJvd1xyXG4gICAgICAqbWF0Um93RGVmPVwibGV0IHJlY29yZDsgY29sdW1uczogaGVhZGVyc1wiXHJcbiAgICAgIFtzY3JvbGxCZWhhdmlvcl09XCJzY3JvbGxCZWhhdmlvclwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cImdldFJvd0NsYXNzKHJlY29yZClcIlxyXG4gICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiXHJcbiAgICAgIFtzZWxlY3RlZF09XCJyb3dJc1NlbGVjdGVkKHJlY29yZClcIlxyXG4gICAgICAoc2VsZWN0KT1cIm9uUm93U2VsZWN0KHJlY29yZClcIlxyXG4gICAgICAoY2xpY2spPVwib25Sb3dDbGljayhyZWNvcmQpXCJcclxuICAgID48L3RyPlxyXG4gIDwvdGFibGU+XHJcbiAgPGlnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cIndpdGhQYWdpbmF0b3JcIlxyXG4gICAgW3N0b3JlXT1cInN0b3JlXCJcclxuICAgIFtwYWdpbmF0b3JPcHRpb25zXT1cInBhZ2luYXRvck9wdGlvbnNcIlxyXG4gICAgW2VudGl0eVNvcnRDaGFuZ2UkXT1cImVudGl0eVNvcnRDaGFuZ2UkXCJcclxuICAgIChwYWdpbmF0b3JDaGFuZ2UpPVwicGFnaW5hdG9yQ2hhbmdlKCRldmVudClcIlxyXG4gID5cclxuICA8L2lnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yPlxyXG48L2Rpdj5cclxuIl19