keevo-components 1.8.264 → 1.8.266

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 (572) hide show
  1. package/esm2022/keevo-components.mjs +5 -0
  2. package/esm2022/lib/api/base-components/base-component-button.mjs +39 -0
  3. package/esm2022/lib/api/base-components/base-component-chart.mjs +92 -0
  4. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +304 -0
  5. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +93 -0
  6. package/esm2022/lib/api/base-components/base-component-crud.mjs +80 -0
  7. package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +31 -0
  8. package/esm2022/lib/api/base-components/base-component-dropdown.mjs +187 -0
  9. package/esm2022/lib/api/base-components/base-component-input.mjs +101 -0
  10. package/esm2022/lib/api/base-components/base-component-multi-select.mjs +130 -0
  11. package/esm2022/lib/api/base-components/base-component-table.mjs +351 -0
  12. package/esm2022/lib/api/base-components/base-component.mjs +51 -0
  13. package/esm2022/lib/api/components/chart/chart.config.mjs +2 -0
  14. package/esm2022/lib/api/components/chart/chart.model.mjs +2 -0
  15. package/esm2022/lib/api/components/chart/orchart.config.mjs +2 -0
  16. package/esm2022/lib/api/components/chart/orchart.item.mjs +2 -0
  17. package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +2 -0
  18. package/esm2022/lib/api/components/stepper/kv-stepperpanel.mjs +2 -0
  19. package/esm2022/lib/api/components/table/action-item.mjs +2 -0
  20. package/esm2022/lib/api/components/table/kv-menuitem.mjs +46 -0
  21. package/esm2022/lib/api/components/table/table-dropdown-control.mjs +2 -0
  22. package/esm2022/lib/api/components/table/table.config.column.mjs +2 -0
  23. package/esm2022/lib/api/components/table/table.config.mjs +2 -0
  24. package/esm2022/lib/api/components/table/table.paginate.mjs +9 -0
  25. package/esm2022/lib/api/components/table/tabledit.config.mjs +2 -0
  26. package/esm2022/lib/api/components/table/tableedit.config.column.mjs +2 -0
  27. package/esm2022/lib/api/components/tree-table/tree-table.config.mjs +3 -0
  28. package/esm2022/lib/api/directives/directives.module.mjs +30 -0
  29. package/esm2022/lib/api/directives/drag/drag.directive.mjs +52 -0
  30. package/esm2022/lib/api/directives/stepper/dynamicinput.directive.mjs +31 -0
  31. package/esm2022/lib/api/directives/template/template.directive.mjs +24 -0
  32. package/esm2022/lib/api/helpers/component-providers.mjs +16 -0
  33. package/esm2022/lib/api/helpers/keevo-validators.mjs +106 -0
  34. package/esm2022/lib/api/helpers/translate-primeng.mjs +23 -0
  35. package/esm2022/lib/api/modules/primeng.module.mjs +271 -0
  36. package/esm2022/lib/api/pipes/capitalize.pipe.mjs +28 -0
  37. package/esm2022/lib/api/pipes/cpfcnpj.pipe.mjs +25 -0
  38. package/esm2022/lib/api/pipes/mask.pipe.mjs +29 -0
  39. package/esm2022/lib/api/pipes/pipes.module.mjs +39 -0
  40. package/esm2022/lib/api/pipes/telefone.pipe.mjs +45 -0
  41. package/esm2022/lib/api/services/base.api.service.mjs +74 -0
  42. package/esm2022/lib/api/services/breadcrumbs.service.mjs +73 -0
  43. package/esm2022/lib/api/services/component.service.mjs +27 -0
  44. package/esm2022/lib/api/services/docs.service.mjs +129 -0
  45. package/esm2022/lib/api/services/form.service.mjs +93 -0
  46. package/esm2022/lib/api/services/imagens.service.mjs +28 -0
  47. package/esm2022/lib/api/services/notification.service.mjs +69 -0
  48. package/esm2022/lib/api/services/object.service.mjs +39 -0
  49. package/esm2022/lib/api/types/breadcrumb.model.mjs +2 -0
  50. package/esm2022/lib/api/types/severity.mjs +2 -0
  51. package/esm2022/lib/components/keevo-components.module.mjs +193 -0
  52. package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +140 -0
  53. package/esm2022/lib/components/kv-avatar/kv-avatar.module.mjs +57 -0
  54. package/esm2022/lib/components/kv-button/kv-button.component.mjs +36 -0
  55. package/esm2022/lib/components/kv-button/kv-button.module.mjs +28 -0
  56. package/esm2022/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.mjs +25 -0
  57. package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +34 -0
  58. package/esm2022/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.mjs +17 -0
  59. package/esm2022/lib/components/kv-buttons/kv-button-success/kv-button-success.component.mjs +17 -0
  60. package/esm2022/lib/components/kv-buttons/kv-button.module.mjs +39 -0
  61. package/esm2022/lib/components/kv-carousel/kv-carousel.component.mjs +30 -0
  62. package/esm2022/lib/components/kv-carousel/kv-carousel.module.mjs +28 -0
  63. package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +145 -0
  64. package/esm2022/lib/components/kv-chart/kv-chart.module.mjs +32 -0
  65. package/esm2022/lib/components/kv-error/kv-error.component.mjs +26 -0
  66. package/esm2022/lib/components/kv-error/kv-error.module.mjs +35 -0
  67. package/esm2022/lib/components/kv-file-upload/kv-file-upload.component.mjs +118 -0
  68. package/esm2022/lib/components/kv-file-upload/kv-file-upload.module.mjs +18 -0
  69. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.component.mjs +40 -0
  70. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.module.mjs +20 -0
  71. package/esm2022/lib/components/kv-filter-card/kv-filter-card.component.mjs +26 -0
  72. package/esm2022/lib/components/kv-filter-card/kv-filter-card.module.mjs +34 -0
  73. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.mjs +26 -0
  74. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.mjs +28 -0
  75. package/esm2022/lib/components/kv-g-icon/kv-g-icon.component.mjs +11 -0
  76. package/esm2022/lib/components/kv-g-icon/kv-g-icon.module.mjs +19 -0
  77. package/esm2022/lib/components/kv-home-card/kv-home-card.component.mjs +27 -0
  78. package/esm2022/lib/components/kv-home-card/kv-home-card.module.mjs +32 -0
  79. package/esm2022/lib/components/kv-image-upload/kv-image-upload.component.mjs +89 -0
  80. package/esm2022/lib/components/kv-image-upload/kv-image-upload.module.mjs +18 -0
  81. package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +29 -0
  82. package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +44 -0
  83. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +112 -0
  84. package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +96 -0
  85. package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +30 -0
  86. package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +59 -0
  87. package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +33 -0
  88. package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +25 -0
  89. package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +42 -0
  90. package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +43 -0
  91. package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +24 -0
  92. package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +122 -0
  93. package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +44 -0
  94. package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +60 -0
  95. package/esm2022/lib/components/kv-inputs/kv-select-button/kv-select-button.component.mjs +46 -0
  96. package/esm2022/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.mjs +31 -0
  97. package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +41 -0
  98. package/esm2022/lib/components/kv-label/kv-label.component.mjs +15 -0
  99. package/esm2022/lib/components/kv-label/kv-label.module.mjs +24 -0
  100. package/esm2022/lib/components/kv-layout/dropdown-master/dropdown-master.component.mjs +28 -0
  101. package/esm2022/lib/components/kv-layout/kv-layout.module.mjs +50 -0
  102. package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +250 -0
  103. package/esm2022/lib/components/kv-loader/kv-loader.component.mjs +17 -0
  104. package/esm2022/lib/components/kv-loader/kv-loader.module.mjs +28 -0
  105. package/esm2022/lib/components/kv-loader/kv-loader.service.mjs +29 -0
  106. package/esm2022/lib/components/kv-login/kv-login.component.mjs +52 -0
  107. package/esm2022/lib/components/kv-login/kv-login.module.mjs +47 -0
  108. package/esm2022/lib/components/kv-modal/kv-modal.component.mjs +97 -0
  109. package/esm2022/lib/components/kv-modal/kv-modal.module.mjs +20 -0
  110. package/esm2022/lib/components/kv-orgchart/kv-orgchart.component.mjs +100 -0
  111. package/esm2022/lib/components/kv-orgchart/kv-orgchart.module.mjs +24 -0
  112. package/esm2022/lib/components/kv-page-form/kv-page-form.component.mjs +191 -0
  113. package/esm2022/lib/components/kv-page-form/kv-page-form.module.mjs +41 -0
  114. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.component.mjs +207 -0
  115. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.module.mjs +47 -0
  116. package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +78 -0
  117. package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +32 -0
  118. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.component.mjs +58 -0
  119. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.module.mjs +28 -0
  120. package/esm2022/lib/components/kv-report/kv-report.component.mjs +53 -0
  121. package/esm2022/lib/components/kv-report/kv-report.module.mjs +24 -0
  122. package/esm2022/lib/components/kv-stepper/kv-stepper.component.mjs +55 -0
  123. package/esm2022/lib/components/kv-stepper/kv-stepper.module.mjs +32 -0
  124. package/esm2022/lib/components/kv-table/kv-table.component.mjs +584 -0
  125. package/esm2022/lib/components/kv-table/kv-table.module.mjs +40 -0
  126. package/esm2022/lib/components/kv-table-edit/kv-table-edit.component.mjs +322 -0
  127. package/esm2022/lib/components/kv-table-edit/kv-table-edit.module.mjs +41 -0
  128. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.component.mjs +485 -0
  129. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.module.mjs +36 -0
  130. package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +298 -0
  131. package/esm2022/lib/components/kv-tree-table/kv-tree-table.module.mjs +39 -0
  132. package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +30 -0
  133. package/esm2022/lib/components/kv-tree-view/kv-tree-view.module.mjs +28 -0
  134. package/esm2022/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.mjs +72 -0
  135. package/esm2022/lib/components/kv-workspace/kv-workspace.module.mjs +60 -0
  136. package/esm2022/lib/components/kv-workspace/logo/kv-workspace-logo.component.mjs +22 -0
  137. package/esm2022/lib/components/kv-workspace/master/kv-workspace-master.component.mjs +63 -0
  138. package/esm2022/lib/components/kv-workspace/workspace/kv-workspace.component.mjs +64 -0
  139. package/esm2022/public-api.mjs +236 -0
  140. package/fesm2022/keevo-components.mjs +8130 -0
  141. package/fesm2022/keevo-components.mjs.map +1 -0
  142. package/index.d.ts +5 -0
  143. package/lib/api/base-components/base-component-button.d.ts +15 -0
  144. package/lib/api/base-components/base-component-chart.d.ts +40 -0
  145. package/lib/api/base-components/base-component-crud-form.d.ts +149 -0
  146. package/lib/api/base-components/base-component-crud-list.d.ts +70 -0
  147. package/lib/api/base-components/base-component-crud.d.ts +36 -0
  148. package/lib/api/base-components/base-component-dropdown-external.d.ts +15 -0
  149. package/lib/api/base-components/base-component-dropdown.d.ts +47 -0
  150. package/lib/api/base-components/base-component-input.d.ts +33 -0
  151. package/lib/api/base-components/base-component-multi-select.d.ts +35 -0
  152. package/lib/api/base-components/base-component-table.d.ts +87 -0
  153. package/lib/api/base-components/base-component.d.ts +22 -0
  154. package/lib/api/components/chart/chart.config.d.ts +11 -0
  155. package/lib/api/components/chart/chart.model.d.ts +9 -0
  156. package/lib/api/components/chart/orchart.config.d.ts +35 -0
  157. package/lib/api/components/chart/orchart.item.d.ts +26 -0
  158. package/lib/api/components/dropdown/filtro.combo.d.ts +4 -0
  159. package/lib/api/components/stepper/kv-stepperpanel.d.ts +9 -0
  160. package/lib/api/components/table/action-item.d.ts +12 -0
  161. package/lib/api/components/table/kv-menuitem.d.ts +152 -0
  162. package/lib/api/components/table/table-dropdown-control.d.ts +6 -0
  163. package/lib/api/components/table/table.config.column.d.ts +28 -0
  164. package/lib/api/components/table/table.config.d.ts +32 -0
  165. package/lib/api/components/table/table.paginate.d.ts +6 -0
  166. package/lib/api/components/table/tabledit.config.d.ts +8 -0
  167. package/lib/api/components/table/tableedit.config.column.d.ts +10 -0
  168. package/lib/api/components/tree-table/tree-table.config.d.ts +28 -0
  169. package/lib/api/directives/directives.module.d.ts +9 -0
  170. package/lib/api/directives/drag/drag.directive.d.ts +11 -0
  171. package/lib/api/directives/stepper/dynamicinput.directive.d.ts +15 -0
  172. package/lib/api/directives/template/template.directive.d.ts +11 -0
  173. package/lib/api/helpers/component-providers.d.ts +2 -0
  174. package/lib/api/helpers/keevo-validators.d.ts +14 -0
  175. package/lib/api/helpers/translate-primeng.d.ts +4 -0
  176. package/lib/api/modules/primeng.module.d.ts +66 -0
  177. package/lib/api/pipes/capitalize.pipe.d.ts +8 -0
  178. package/lib/api/pipes/cpfcnpj.pipe.d.ts +7 -0
  179. package/lib/api/pipes/mask.pipe.d.ts +7 -0
  180. package/lib/api/pipes/pipes.module.d.ts +11 -0
  181. package/lib/api/pipes/telefone.pipe.d.ts +7 -0
  182. package/lib/api/services/base.api.service.d.ts +25 -0
  183. package/lib/api/services/breadcrumbs.service.d.ts +16 -0
  184. package/lib/api/services/component.service.d.ts +11 -0
  185. package/lib/api/services/docs.service.d.ts +12 -0
  186. package/lib/api/services/form.service.d.ts +31 -0
  187. package/lib/api/services/imagens.service.d.ts +10 -0
  188. package/lib/api/services/notification.service.d.ts +26 -0
  189. package/lib/api/services/object.service.d.ts +9 -0
  190. package/lib/api/types/breadcrumb.model.d.ts +5 -0
  191. package/{src/lib/api/types/severity.ts → lib/api/types/severity.d.ts} +2 -3
  192. package/lib/components/keevo-components.module.d.ts +32 -0
  193. package/lib/components/kv-avatar/kv-avatar.component.d.ts +34 -0
  194. package/lib/components/kv-avatar/kv-avatar.module.d.ts +15 -0
  195. package/lib/components/kv-button/kv-button.component.d.ts +15 -0
  196. package/lib/components/kv-button/kv-button.module.d.ts +9 -0
  197. package/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.d.ts +11 -0
  198. package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +14 -0
  199. package/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.d.ts +7 -0
  200. package/lib/components/kv-buttons/kv-button-success/kv-button-success.component.d.ts +7 -0
  201. package/lib/components/kv-buttons/kv-button.module.d.ts +11 -0
  202. package/lib/components/kv-carousel/kv-carousel.component.d.ts +16 -0
  203. package/lib/components/kv-carousel/kv-carousel.module.d.ts +9 -0
  204. package/lib/components/kv-chart/kv-chart.component.d.ts +56 -0
  205. package/lib/components/kv-chart/kv-chart.module.d.ts +10 -0
  206. package/lib/components/kv-error/kv-error.component.d.ts +12 -0
  207. package/lib/components/kv-error/kv-error.module.d.ts +10 -0
  208. package/lib/components/kv-file-upload/kv-file-upload.component.d.ts +29 -0
  209. package/lib/components/kv-file-upload/kv-file-upload.module.d.ts +8 -0
  210. package/lib/components/kv-file-viewer/kv-file-viewer.component.d.ts +19 -0
  211. package/lib/components/kv-file-viewer/kv-file-viewer.module.d.ts +8 -0
  212. package/lib/components/kv-filter-card/kv-filter-card.component.d.ts +12 -0
  213. package/lib/components/kv-filter-card/kv-filter-card.module.d.ts +10 -0
  214. package/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.d.ts +10 -0
  215. package/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.d.ts +9 -0
  216. package/lib/components/kv-g-icon/kv-g-icon.component.d.ts +5 -0
  217. package/lib/components/kv-g-icon/kv-g-icon.module.d.ts +9 -0
  218. package/lib/components/kv-home-card/kv-home-card.component.d.ts +24 -0
  219. package/lib/components/kv-home-card/kv-home-card.module.d.ts +11 -0
  220. package/lib/components/kv-image-upload/kv-image-upload.component.d.ts +25 -0
  221. package/lib/components/kv-image-upload/kv-image-upload.module.d.ts +8 -0
  222. package/lib/components/kv-inputs/kv-check/kv-check.component.d.ts +12 -0
  223. package/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.d.ts +16 -0
  224. package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +27 -0
  225. package/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.d.ts +29 -0
  226. package/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.d.ts +12 -0
  227. package/lib/components/kv-inputs/kv-input-number/kv-input-number.component.d.ts +19 -0
  228. package/lib/components/kv-inputs/kv-input-password/kv-input-password.component.d.ts +13 -0
  229. package/lib/components/kv-inputs/kv-input-text/kv-input-text.component.d.ts +10 -0
  230. package/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.d.ts +16 -0
  231. package/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.d.ts +16 -0
  232. package/lib/components/kv-inputs/kv-input-time/kv-input-time.component.d.ts +10 -0
  233. package/lib/components/kv-inputs/kv-inputs.module.d.ts +28 -0
  234. package/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.d.ts +15 -0
  235. package/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.d.ts +20 -0
  236. package/lib/components/kv-inputs/kv-select-button/kv-select-button.component.d.ts +19 -0
  237. package/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.d.ts +16 -0
  238. package/lib/components/kv-inputs/kv-switch/kv-switch.component.d.ts +16 -0
  239. package/lib/components/kv-label/kv-label.component.d.ts +7 -0
  240. package/lib/components/kv-label/kv-label.module.d.ts +8 -0
  241. package/lib/components/kv-layout/dropdown-master/dropdown-master.component.d.ts +12 -0
  242. package/lib/components/kv-layout/kv-layout.module.d.ts +14 -0
  243. package/lib/components/kv-layout/layout/kv-layout.component.d.ts +109 -0
  244. package/lib/components/kv-loader/kv-loader.component.d.ts +8 -0
  245. package/lib/components/kv-loader/kv-loader.module.d.ts +9 -0
  246. package/lib/components/kv-loader/kv-loader.service.d.ts +10 -0
  247. package/lib/components/kv-login/kv-login.component.d.ts +30 -0
  248. package/lib/components/kv-login/kv-login.module.d.ts +13 -0
  249. package/lib/components/kv-modal/kv-modal.component.d.ts +27 -0
  250. package/lib/components/kv-modal/kv-modal.module.d.ts +10 -0
  251. package/lib/components/kv-orgchart/kv-orgchart.component.d.ts +27 -0
  252. package/lib/components/kv-orgchart/kv-orgchart.module.d.ts +9 -0
  253. package/lib/components/kv-page-form/kv-page-form.component.d.ts +100 -0
  254. package/lib/components/kv-page-form/kv-page-form.module.d.ts +12 -0
  255. package/lib/components/kv-page-stepper/kv-page-stepper.component.d.ts +84 -0
  256. package/lib/components/kv-page-stepper/kv-page-stepper.module.d.ts +13 -0
  257. package/lib/components/kv-pick-list/kv-pick-list.component.d.ts +30 -0
  258. package/lib/components/kv-pick-list/kv-pick-list.module.d.ts +10 -0
  259. package/lib/components/kv-progress-bar/kv-progress-bar.component.d.ts +67 -0
  260. package/lib/components/kv-progress-bar/kv-progress-bar.module.d.ts +9 -0
  261. package/lib/components/kv-report/kv-report.component.d.ts +20 -0
  262. package/lib/components/kv-report/kv-report.module.d.ts +8 -0
  263. package/lib/components/kv-stepper/kv-stepper.component.d.ts +25 -0
  264. package/lib/components/kv-stepper/kv-stepper.module.d.ts +10 -0
  265. package/lib/components/kv-table/kv-table.component.d.ts +138 -0
  266. package/lib/components/kv-table/kv-table.module.d.ts +12 -0
  267. package/lib/components/kv-table-edit/kv-table-edit.component.d.ts +60 -0
  268. package/lib/components/kv-table-edit/kv-table-edit.module.d.ts +14 -0
  269. package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +110 -0
  270. package/lib/components/kv-table-expandable/kv-table-expandable.module.d.ts +12 -0
  271. package/lib/components/kv-tree-table/kv-tree-table.component.d.ts +76 -0
  272. package/lib/components/kv-tree-table/kv-tree-table.module.d.ts +11 -0
  273. package/lib/components/kv-tree-view/kv-tree-view.component.d.ts +14 -0
  274. package/lib/components/kv-tree-view/kv-tree-view.module.d.ts +9 -0
  275. package/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.d.ts +20 -0
  276. package/lib/components/kv-workspace/kv-workspace.module.d.ts +17 -0
  277. package/lib/components/kv-workspace/logo/kv-workspace-logo.component.d.ts +11 -0
  278. package/lib/components/kv-workspace/master/kv-workspace-master.component.d.ts +18 -0
  279. package/lib/components/kv-workspace/workspace/kv-workspace.component.d.ts +26 -0
  280. package/package.json +45 -32
  281. package/{src/public-api.ts → public-api.d.ts} +232 -272
  282. package/ng-package.json +0 -7
  283. package/src/assets/.gitkeep +0 -0
  284. package/src/assets/images/LogoEvo.png +0 -0
  285. package/src/assets/images/LogoPequenaEvo.png +0 -0
  286. package/src/assets/images/background.png +0 -0
  287. package/src/assets/images/keepass-logo.png +0 -0
  288. package/src/assets/images/keepass-logo.svg +0 -74
  289. package/src/assets/images/keevo-logo.png +0 -0
  290. package/src/assets/images/logokeevo_2.png +0 -0
  291. package/src/index.ts +0 -1
  292. package/src/lib/api/base-components/base-component-button.ts +0 -29
  293. package/src/lib/api/base-components/base-component-chart.ts +0 -105
  294. package/src/lib/api/base-components/base-component-crud-form.ts +0 -368
  295. package/src/lib/api/base-components/base-component-crud-list.ts +0 -136
  296. package/src/lib/api/base-components/base-component-crud.ts +0 -83
  297. package/src/lib/api/base-components/base-component-dropdown-external.ts +0 -29
  298. package/src/lib/api/base-components/base-component-dropdown-new.ts +0 -112
  299. package/src/lib/api/base-components/base-component-dropdown.ts +0 -192
  300. package/src/lib/api/base-components/base-component-input.ts +0 -121
  301. package/src/lib/api/base-components/base-component-multi-select.ts +0 -136
  302. package/src/lib/api/base-components/base-component-table.ts +0 -364
  303. package/src/lib/api/base-components/base-component.ts +0 -47
  304. package/src/lib/api/components/chart/chart.config.ts +0 -12
  305. package/src/lib/api/components/chart/chart.model.ts +0 -9
  306. package/src/lib/api/components/chart/orchart.config.ts +0 -41
  307. package/src/lib/api/components/chart/orchart.item.ts +0 -33
  308. package/src/lib/api/components/dropdown/filtro.combo.ts +0 -4
  309. package/src/lib/api/components/stepper/kv-stepperpanel.ts +0 -10
  310. package/src/lib/api/components/table/action-item.ts +0 -12
  311. package/src/lib/api/components/table/kv-menuitem.ts +0 -198
  312. package/src/lib/api/components/table/table-dropdown-control.ts +0 -6
  313. package/src/lib/api/components/table/table.config.column.ts +0 -31
  314. package/src/lib/api/components/table/table.config.ts +0 -36
  315. package/src/lib/api/components/table/table.paginate.ts +0 -6
  316. package/src/lib/api/components/table/tabledit.config.ts +0 -10
  317. package/src/lib/api/components/table/tableedit.config.column.ts +0 -12
  318. package/src/lib/api/components/tree-table/tree-table.config.ts +0 -31
  319. package/src/lib/api/directives/directives.module.ts +0 -19
  320. package/src/lib/api/directives/drag/drag.directive.ts +0 -40
  321. package/src/lib/api/directives/stepper/dynamicinput.directive.ts +0 -23
  322. package/src/lib/api/directives/template/template.directive.ts +0 -15
  323. package/src/lib/api/helpers/component-providers.ts +0 -16
  324. package/src/lib/api/helpers/keevo-validators.ts +0 -126
  325. package/src/lib/api/helpers/severity-color.ts +0 -77
  326. package/src/lib/api/helpers/translate-primeng.ts +0 -25
  327. package/src/lib/api/modules/primeng.module.ts +0 -138
  328. package/src/lib/api/pipes/capitalize.pipe.ts +0 -23
  329. package/src/lib/api/pipes/cpfcnpj.pipe.ts +0 -21
  330. package/src/lib/api/pipes/mask.pipe.ts +0 -24
  331. package/src/lib/api/pipes/pipes.module.ts +0 -26
  332. package/src/lib/api/pipes/telefone.pipe.ts +0 -38
  333. package/src/lib/api/services/base.api.service.ts +0 -115
  334. package/src/lib/api/services/breadcrumbs.service.ts +0 -60
  335. package/src/lib/api/services/component.service.ts +0 -32
  336. package/src/lib/api/services/docs.service.ts +0 -129
  337. package/src/lib/api/services/form.service.ts +0 -137
  338. package/src/lib/api/services/imagens.service.ts +0 -28
  339. package/src/lib/api/services/notification.service.ts +0 -88
  340. package/src/lib/api/services/object.service.ts +0 -33
  341. package/src/lib/api/types/stimulsoft.reports.d.ts +0 -67463
  342. package/src/lib/components/keevo-components-styles.scss +0 -194
  343. package/src/lib/components/keevo-components.module.ts +0 -88
  344. package/src/lib/components/kv-avatar/kv-avatar.component.html +0 -13
  345. package/src/lib/components/kv-avatar/kv-avatar.component.scss +0 -58
  346. package/src/lib/components/kv-avatar/kv-avatar.component.spec.ts +0 -23
  347. package/src/lib/components/kv-avatar/kv-avatar.component.ts +0 -142
  348. package/src/lib/components/kv-avatar/kv-avatar.module.ts +0 -35
  349. package/src/lib/components/kv-avatar/kv-crop-image/kv-crop-image.component.html +0 -11
  350. package/src/lib/components/kv-avatar/kv-crop-image/kv-crop-image.component.scss +0 -27
  351. package/src/lib/components/kv-avatar/kv-crop-image/kv-crop-image.component.ts +0 -217
  352. package/src/lib/components/kv-button/kv-button.component.html +0 -13
  353. package/src/lib/components/kv-button/kv-button.component.scss +0 -152
  354. package/src/lib/components/kv-button/kv-button.component.spec.ts +0 -23
  355. package/src/lib/components/kv-button/kv-button.component.ts +0 -21
  356. package/src/lib/components/kv-button/kv-button.module.ts +0 -20
  357. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.html +0 -14
  358. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.scss +0 -6
  359. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.ts +0 -25
  360. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.html +0 -12
  361. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.scss +0 -71
  362. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.ts +0 -36
  363. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.html +0 -12
  364. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.scss +0 -18
  365. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.ts +0 -14
  366. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.html +0 -11
  367. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.scss +0 -17
  368. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.ts +0 -14
  369. package/src/lib/components/kv-buttons/kv-button.module.ts +0 -26
  370. package/src/lib/components/kv-carousel/kv-carousel.component.html +0 -25
  371. package/src/lib/components/kv-carousel/kv-carousel.component.scss +0 -32
  372. package/src/lib/components/kv-carousel/kv-carousel.component.spec.ts +0 -23
  373. package/src/lib/components/kv-carousel/kv-carousel.component.ts +0 -38
  374. package/src/lib/components/kv-carousel/kv-carousel.module.ts +0 -19
  375. package/src/lib/components/kv-chart/kv-chart.component.html +0 -38
  376. package/src/lib/components/kv-chart/kv-chart.component.scss +0 -0
  377. package/src/lib/components/kv-chart/kv-chart.component.spec.ts +0 -28
  378. package/src/lib/components/kv-chart/kv-chart.component.ts +0 -153
  379. package/src/lib/components/kv-chart/kv-chart.module.ts +0 -21
  380. package/src/lib/components/kv-error/kv-error.component.html +0 -3
  381. package/src/lib/components/kv-error/kv-error.component.scss +0 -5
  382. package/src/lib/components/kv-error/kv-error.component.ts +0 -27
  383. package/src/lib/components/kv-error/kv-error.module.ts +0 -26
  384. package/src/lib/components/kv-file-upload/kv-file-upload.component.html +0 -53
  385. package/src/lib/components/kv-file-upload/kv-file-upload.component.scss +0 -9
  386. package/src/lib/components/kv-file-upload/kv-file-upload.component.spec.ts +0 -23
  387. package/src/lib/components/kv-file-upload/kv-file-upload.component.ts +0 -128
  388. package/src/lib/components/kv-file-upload/kv-file-upload.module.ts +0 -10
  389. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.html +0 -16
  390. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.scss +0 -18
  391. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.ts +0 -40
  392. package/src/lib/components/kv-file-viewer/kv-file-viewer.module.ts +0 -14
  393. package/src/lib/components/kv-filter-card/kv-filter-card.component.html +0 -13
  394. package/src/lib/components/kv-filter-card/kv-filter-card.component.scss +0 -74
  395. package/src/lib/components/kv-filter-card/kv-filter-card.component.spec.ts +0 -23
  396. package/src/lib/components/kv-filter-card/kv-filter-card.component.ts +0 -17
  397. package/src/lib/components/kv-filter-card/kv-filter-card.module.ts +0 -23
  398. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.html +0 -21
  399. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.scss +0 -22
  400. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.spec.ts +0 -23
  401. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.ts +0 -20
  402. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.ts +0 -20
  403. package/src/lib/components/kv-g-icon/kv-g-icon.component.html +0 -1
  404. package/src/lib/components/kv-g-icon/kv-g-icon.component.scss +0 -0
  405. package/src/lib/components/kv-g-icon/kv-g-icon.component.spec.ts +0 -23
  406. package/src/lib/components/kv-g-icon/kv-g-icon.component.ts +0 -10
  407. package/src/lib/components/kv-g-icon/kv-g-icon.module.ts +0 -11
  408. package/src/lib/components/kv-home-card/kv-home-card.component.html +0 -35
  409. package/src/lib/components/kv-home-card/kv-home-card.component.scss +0 -5
  410. package/src/lib/components/kv-home-card/kv-home-card.component.spec.ts +0 -23
  411. package/src/lib/components/kv-home-card/kv-home-card.component.ts +0 -33
  412. package/src/lib/components/kv-home-card/kv-home-card.module.ts +0 -18
  413. package/src/lib/components/kv-image-upload/kv-image-upload.component.html +0 -64
  414. package/src/lib/components/kv-image-upload/kv-image-upload.component.scss +0 -0
  415. package/src/lib/components/kv-image-upload/kv-image-upload.component.ts +0 -84
  416. package/src/lib/components/kv-image-upload/kv-image-upload.module.ts +0 -10
  417. package/src/lib/components/kv-inputs/kv-check/kv-check.component.html +0 -12
  418. package/src/lib/components/kv-inputs/kv-check/kv-check.component.scss +0 -32
  419. package/src/lib/components/kv-inputs/kv-check/kv-check.component.ts +0 -33
  420. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.html +0 -91
  421. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.scss +0 -21
  422. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.ts +0 -40
  423. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.html +0 -113
  424. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.scss +0 -45
  425. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.ts +0 -138
  426. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.html +0 -31
  427. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.scss +0 -19
  428. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.ts +0 -96
  429. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.html +0 -24
  430. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.scss +0 -0
  431. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.ts +0 -35
  432. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.html +0 -23
  433. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.scss +0 -0
  434. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.ts +0 -61
  435. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.html +0 -24
  436. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.scss +0 -0
  437. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.ts +0 -26
  438. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.html +0 -23
  439. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.scss +0 -18
  440. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.ts +0 -27
  441. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.html +0 -35
  442. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.scss +0 -0
  443. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.spec.ts +0 -23
  444. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.ts +0 -43
  445. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.html +0 -23
  446. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.scss +0 -0
  447. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.ts +0 -40
  448. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.html +0 -24
  449. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.scss +0 -0
  450. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.ts +0 -27
  451. package/src/lib/components/kv-inputs/kv-inputs.module.ts +0 -78
  452. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.html +0 -45
  453. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.scss +0 -13
  454. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.ts +0 -44
  455. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.html +0 -19
  456. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.scss +0 -21
  457. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.ts +0 -63
  458. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.html +0 -26
  459. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.scss +0 -5
  460. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.spec.ts +0 -21
  461. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.ts +0 -30
  462. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.html +0 -19
  463. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.scss +0 -25
  464. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.spec.ts +0 -23
  465. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.ts +0 -29
  466. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.html +0 -20
  467. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.scss +0 -23
  468. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.ts +0 -54
  469. package/src/lib/components/kv-label/kv-label.component.html +0 -6
  470. package/src/lib/components/kv-label/kv-label.component.scss +0 -9
  471. package/src/lib/components/kv-label/kv-label.component.spec.ts +0 -23
  472. package/src/lib/components/kv-label/kv-label.component.ts +0 -14
  473. package/src/lib/components/kv-label/kv-label.module.ts +0 -17
  474. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.html +0 -16
  475. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.scss +0 -0
  476. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.spec.ts +0 -28
  477. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.ts +0 -34
  478. package/src/lib/components/kv-layout/kv-layout.module.ts +0 -35
  479. package/src/lib/components/kv-layout/layout/kv-layout.component.html +0 -373
  480. package/src/lib/components/kv-layout/layout/kv-layout.component.scss +0 -216
  481. package/src/lib/components/kv-layout/layout/kv-layout.component.spec.ts +0 -23
  482. package/src/lib/components/kv-layout/layout/kv-layout.component.ts +0 -277
  483. package/src/lib/components/kv-loader/kv-loader.component.html +0 -1
  484. package/src/lib/components/kv-loader/kv-loader.component.ts +0 -15
  485. package/src/lib/components/kv-loader/kv-loader.module.ts +0 -17
  486. package/src/lib/components/kv-loader/kv-loader.service.ts +0 -31
  487. package/src/lib/components/kv-login/kv-login.component.html +0 -116
  488. package/src/lib/components/kv-login/kv-login.component.scss +0 -99
  489. package/src/lib/components/kv-login/kv-login.component.spec.ts +0 -23
  490. package/src/lib/components/kv-login/kv-login.component.ts +0 -81
  491. package/src/lib/components/kv-login/kv-login.module.ts +0 -33
  492. package/src/lib/components/kv-modal/kv-modal.component.html +0 -20
  493. package/src/lib/components/kv-modal/kv-modal.component.scss +0 -33
  494. package/src/lib/components/kv-modal/kv-modal.component.spec.ts +0 -21
  495. package/src/lib/components/kv-modal/kv-modal.component.ts +0 -111
  496. package/src/lib/components/kv-modal/kv-modal.module.ts +0 -12
  497. package/src/lib/components/kv-orgchart/kv-orgchart.component.html +0 -58
  498. package/src/lib/components/kv-orgchart/kv-orgchart.component.scss +0 -21
  499. package/src/lib/components/kv-orgchart/kv-orgchart.component.ts +0 -110
  500. package/src/lib/components/kv-orgchart/kv-orgchart.module.ts +0 -14
  501. package/src/lib/components/kv-page-form/kv-page-form.component.html +0 -103
  502. package/src/lib/components/kv-page-form/kv-page-form.component.scss +0 -76
  503. package/src/lib/components/kv-page-form/kv-page-form.component.spec.ts +0 -28
  504. package/src/lib/components/kv-page-form/kv-page-form.component.ts +0 -167
  505. package/src/lib/components/kv-page-form/kv-page-form.module.ts +0 -33
  506. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.html +0 -251
  507. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.scss +0 -129
  508. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.spec.ts +0 -23
  509. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.ts +0 -223
  510. package/src/lib/components/kv-page-stepper/kv-page-stepper.module.ts +0 -34
  511. package/src/lib/components/kv-pick-list/kv-pick-list.component.html +0 -23
  512. package/src/lib/components/kv-pick-list/kv-pick-list.component.scss +0 -5
  513. package/src/lib/components/kv-pick-list/kv-pick-list.component.spec.ts +0 -26
  514. package/src/lib/components/kv-pick-list/kv-pick-list.component.ts +0 -60
  515. package/src/lib/components/kv-pick-list/kv-pick-list.module.ts +0 -21
  516. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.html +0 -38
  517. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.scss +0 -130
  518. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.spec.ts +0 -21
  519. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.ts +0 -75
  520. package/src/lib/components/kv-progress-bar/kv-progress-bar.module.ts +0 -19
  521. package/src/lib/components/kv-report/kv-report.component.html +0 -12
  522. package/src/lib/components/kv-report/kv-report.component.scss +0 -21
  523. package/src/lib/components/kv-report/kv-report.component.spec.ts +0 -28
  524. package/src/lib/components/kv-report/kv-report.component.ts +0 -50
  525. package/src/lib/components/kv-report/kv-report.module.ts +0 -18
  526. package/src/lib/components/kv-stepper/kv-stepper.component.html +0 -66
  527. package/src/lib/components/kv-stepper/kv-stepper.component.scss +0 -41
  528. package/src/lib/components/kv-stepper/kv-stepper.component.spec.ts +0 -23
  529. package/src/lib/components/kv-stepper/kv-stepper.component.ts +0 -48
  530. package/src/lib/components/kv-stepper/kv-stepper.module.ts +0 -20
  531. package/src/lib/components/kv-table/kv-table.component.html +0 -504
  532. package/src/lib/components/kv-table/kv-table.component.scss +0 -130
  533. package/src/lib/components/kv-table/kv-table.component.spec.ts +0 -28
  534. package/src/lib/components/kv-table/kv-table.component.ts +0 -676
  535. package/src/lib/components/kv-table/kv-table.module.ts +0 -25
  536. package/src/lib/components/kv-table-edit/kv-table-edit.component.html +0 -825
  537. package/src/lib/components/kv-table-edit/kv-table-edit.component.scss +0 -712
  538. package/src/lib/components/kv-table-edit/kv-table-edit.component.ts +0 -391
  539. package/src/lib/components/kv-table-edit/kv-table-edit.module.ts +0 -28
  540. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.html +0 -440
  541. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.scss +0 -372
  542. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.ts +0 -519
  543. package/src/lib/components/kv-table-expandable/kv-table-expandable.module.ts +0 -22
  544. package/src/lib/components/kv-tree-table/kv-tree-table.component.html +0 -568
  545. package/src/lib/components/kv-tree-table/kv-tree-table.component.scss +0 -96
  546. package/src/lib/components/kv-tree-table/kv-tree-table.component.spec.ts +0 -21
  547. package/src/lib/components/kv-tree-table/kv-tree-table.component.ts +0 -326
  548. package/src/lib/components/kv-tree-table/kv-tree-table.module.ts +0 -23
  549. package/src/lib/components/kv-tree-view/kv-tree-view.component.html +0 -9
  550. package/src/lib/components/kv-tree-view/kv-tree-view.component.scss +0 -0
  551. package/src/lib/components/kv-tree-view/kv-tree-view.component.spec.ts +0 -23
  552. package/src/lib/components/kv-tree-view/kv-tree-view.component.ts +0 -31
  553. package/src/lib/components/kv-tree-view/kv-tree-view.module.ts +0 -19
  554. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.html +0 -14
  555. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.scss +0 -0
  556. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.spec.ts +0 -28
  557. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.ts +0 -77
  558. package/src/lib/components/kv-workspace/kv-workspace.module.ts +0 -41
  559. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.html +0 -20
  560. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.scss +0 -0
  561. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.spec.ts +0 -28
  562. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.ts +0 -18
  563. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.html +0 -12
  564. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.scss +0 -0
  565. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.spec.ts +0 -28
  566. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.ts +0 -72
  567. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.html +0 -36
  568. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.scss +0 -17
  569. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.ts +0 -54
  570. package/tsconfig.lib.json +0 -14
  571. package/tsconfig.lib.prod.json +0 -10
  572. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,584 @@
1
+ import { DatePipe } from '@angular/common';
2
+ import { Component, ContentChildren, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core';
3
+ import { Table } from 'primeng/table';
4
+ import { getOrExecute, mapToMenuItem, } from '../../api/components/table/kv-menuitem';
5
+ import { TemplateDirective } from '../../api/directives/template/template.directive';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "../../api/pipes/cpfcnpj.pipe";
9
+ import * as i3 from "../../api/pipes/telefone.pipe";
10
+ import * as i4 from "primeng/api";
11
+ import * as i5 from "primeng/autofocus";
12
+ import * as i6 from "primeng/tooltip";
13
+ import * as i7 from "primeng/card";
14
+ import * as i8 from "primeng/checkbox";
15
+ import * as i9 from "primeng/inputtext";
16
+ import * as i10 from "primeng/panel";
17
+ import * as i11 from "primeng/tieredmenu";
18
+ import * as i12 from "primeng/table";
19
+ import * as i13 from "@angular/forms";
20
+ import * as i14 from "../kv-inputs/kv-switch/kv-switch.component";
21
+ import * as i15 from "../kv-button/kv-button.component";
22
+ const imgDefault = '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';
23
+ export class KvTableComponent {
24
+ set setConfig(value) {
25
+ this.config = {
26
+ enableCation: value.enableCation || true,
27
+ enableSelect: value.enableSelect || false,
28
+ enableFilter: value.enableFilter || true,
29
+ ...value,
30
+ };
31
+ if (this.config.enableFilter) {
32
+ this.config.columns.forEach((col) => {
33
+ this.globalFilterFields.push(col.field);
34
+ });
35
+ }
36
+ }
37
+ constructor(datePipe, decimalPipe, cpfCnpjPipe, telefonePipe, renderer, elementRef) {
38
+ this.datePipe = datePipe;
39
+ this.decimalPipe = decimalPipe;
40
+ this.cpfCnpjPipe = cpfCnpjPipe;
41
+ this.telefonePipe = telefonePipe;
42
+ this.renderer = renderer;
43
+ this.elementRef = elementRef;
44
+ this.globalFilterFields = [];
45
+ this.selectedSize = '';
46
+ //menuColumns: KvMenuItem[] = [];
47
+ this.checked = true;
48
+ this.columns = [];
49
+ this.deletedColuns = [];
50
+ this.prepositions = [
51
+ 'de',
52
+ 'da',
53
+ 'do',
54
+ 'em',
55
+ 'no',
56
+ 'na',
57
+ 'para',
58
+ 'por',
59
+ 'com',
60
+ 'a',
61
+ 'o',
62
+ 'e',
63
+ ];
64
+ this.menuFiltro = false;
65
+ this.checkboxClicked = false;
66
+ this.showFiltrosAvancados = false;
67
+ this.collapsed = false;
68
+ this.tableActions = [];
69
+ this.currDataSource = [];
70
+ this.dataIndex = {};
71
+ this.actionsOffset = 0;
72
+ this.defaultSortField = '';
73
+ this.dataSource = [];
74
+ this.selectedItems = [];
75
+ this.paginator = true;
76
+ this.rows = 5;
77
+ this.filterColumnsBtn = false;
78
+ /**
79
+ * @deprecated Essa propriedade não será mais utilizada por esse componente nas próximas versões.
80
+ */
81
+ this.filtrosAvancados = false;
82
+ this.scrollHeight = '';
83
+ this.isTableScrollable = false;
84
+ this.tableCaptalized = false;
85
+ this.rowTrackBy = (index, item) => item;
86
+ this.responsiveLayout = true;
87
+ this.disabledHeaderCheckbox = false;
88
+ /**
89
+ * @deprecated Use a propriedade "tagColor" na configuração da coluna para estilizar a tag
90
+ */
91
+ this.applyStyle = (rowData, col) => '';
92
+ this.onActiveItem = new EventEmitter();
93
+ this.onActiveItemLote = new EventEmitter();
94
+ this.onPaginate = new EventEmitter();
95
+ this.onSelectionChange = new EventEmitter();
96
+ this.doubleClickEvent = new EventEmitter();
97
+ this.filterField = new EventEmitter();
98
+ this.onSwitchTableChange = new EventEmitter();
99
+ this.isRowSelectable = this.isRowSelectable.bind(this);
100
+ }
101
+ ngDoCheck() {
102
+ if (JSON.stringify(this.dataSource) !== JSON.stringify(this.currDataSource)) {
103
+ if (this.dataSource) {
104
+ this.createTableActions();
105
+ this.currDataSource = [...this.dataSource];
106
+ this.dataSource = [...this.dataSource];
107
+ }
108
+ }
109
+ }
110
+ ngOnInit() {
111
+ this.adjustTableSize();
112
+ this.tamanhoTela = window.innerWidth;
113
+ // this.criarMenuColumns();
114
+ this.config.columns.forEach((col) => {
115
+ this.columns.push(col);
116
+ });
117
+ this.checkHideColumns();
118
+ if (this.defaultSortField && this.dataSource) {
119
+ this.dataSource.sort((a, b) => {
120
+ if (typeof a[this.defaultSortField] === 'string' &&
121
+ typeof b[this.defaultSortField] === 'string') {
122
+ return a[this.defaultSortField].localeCompare(b[this.defaultSortField]);
123
+ }
124
+ else if (typeof a[this.defaultSortField] === 'boolean' &&
125
+ typeof b[this.defaultSortField] === 'boolean') {
126
+ return a[this.defaultSortField] === b[this.defaultSortField]
127
+ ? 0
128
+ : a[this.defaultSortField]
129
+ ? 1
130
+ : -1;
131
+ }
132
+ else if (typeof a[this.defaultSortField] === 'number' &&
133
+ typeof b[this.defaultSortField] === 'number') {
134
+ return a[this.defaultSortField] - b[this.defaultSortField];
135
+ }
136
+ else {
137
+ return 0; // Ou outra lógica dependendo do caso
138
+ }
139
+ });
140
+ }
141
+ }
142
+ ngAfterViewInit() {
143
+ document.querySelectorAll('.disabled-row').forEach(row => {
144
+ row.querySelectorAll('td').forEach(cell => {
145
+ cell.addEventListener('click', event => {
146
+ const target = event.target;
147
+ if (!target.classList.contains('tooltip')) {
148
+ event.preventDefault();
149
+ event.stopPropagation();
150
+ }
151
+ });
152
+ });
153
+ });
154
+ }
155
+ resetTable() {
156
+ if (this.ptable)
157
+ this.ptable.reset();
158
+ if (this.inputField)
159
+ this.inputField.nativeElement.value = '';
160
+ }
161
+ onWindowResize() {
162
+ this.adjustTableSize();
163
+ this.tamanhoTela = window.innerWidth;
164
+ }
165
+ activeItem(rowData) {
166
+ this.onActiveItem.emit(rowData);
167
+ }
168
+ getOrExecute(action, data) {
169
+ return getOrExecute(action, data);
170
+ }
171
+ isBooleanField(rowData, col) {
172
+ return typeof rowData[col.field] == 'boolean';
173
+ }
174
+ isChipField(col) {
175
+ return col.fieldType == 'chip';
176
+ }
177
+ isImageField(col) {
178
+ let retorno = col.fieldType && col.fieldType === 'image' ? true : false;
179
+ return retorno;
180
+ }
181
+ isSwitchField(col) {
182
+ let retorno = col.fieldType && col.fieldType === 'switch' ? true : false;
183
+ return retorno;
184
+ }
185
+ isRowSelectable(event) {
186
+ return !this.isDisabledCheckbox(event.data);
187
+ }
188
+ isDisabledCheckbox(rowData) {
189
+ return this.config.disableControlCheckboxFunction
190
+ ? this.config.disableControlCheckboxFunction(rowData)
191
+ : false;
192
+ }
193
+ isDisabledRow(rowData) {
194
+ return this.config.disableRow ? this.config.disableRow(rowData) : false;
195
+ }
196
+ verificaCursor() {
197
+ document.querySelectorAll('.disabled-row').forEach(row => {
198
+ row.querySelectorAll('td').forEach(cell => {
199
+ cell.addEventListener('click', event => {
200
+ const target = event.target;
201
+ if (!target.classList.contains('tooltip')) {
202
+ event.preventDefault();
203
+ event.stopPropagation();
204
+ }
205
+ });
206
+ });
207
+ });
208
+ }
209
+ loadImage(rowData, col) {
210
+ /*
211
+ Nossa coluna de imagem trabalha com strings do tipo: base64 ou url
212
+ */
213
+ let retorno = `data:image/jpg;base64, ${imgDefault}`;
214
+ if (rowData && col && rowData[col.field] && rowData[col.field] !== '') {
215
+ if (rowData[col.field].includes('http'))
216
+ retorno = rowData[col.field];
217
+ else
218
+ retorno = `data:image/jpg;base64, ${rowData[col.field]}`;
219
+ }
220
+ return retorno;
221
+ }
222
+ onGlobalFilter(table, event) {
223
+ this.filterField.emit(event.target.value);
224
+ table.filterGlobal(event.target.value, 'contains');
225
+ }
226
+ paginate(event) {
227
+ if (event) {
228
+ let paginaInicial = (event?.first > 0 ? event.first / event.rows : event.first) + 1;
229
+ let termoPesquisa = '';
230
+ let ordenacao = '';
231
+ if (event.globalFilter)
232
+ termoPesquisa = event.globalFilter;
233
+ if (event.sortField)
234
+ ordenacao = `${event.sortField} ${event.sortOrder === 1 ? 'ASC' : 'DESC'}`;
235
+ const objeto = {
236
+ paginaInicial: paginaInicial,
237
+ tamanhoPagina: event.rows,
238
+ termoPesquisa: termoPesquisa,
239
+ ordenacao: ordenacao,
240
+ };
241
+ this.onPaginate.emit(objeto);
242
+ this.actionsOffset = event.first;
243
+ this.createTableActions();
244
+ }
245
+ }
246
+ selectionChange(value) {
247
+ this.onSelectionChange.emit(value);
248
+ }
249
+ activeItemLote(selectedItems) {
250
+ this.onActiveItemLote.emit(selectedItems);
251
+ }
252
+ returnRowClass(rowData, col) {
253
+ let value = rowData[col.field];
254
+ let rowClass;
255
+ this.tableSize > 800 ? (rowClass = 'text-base') : (rowClass = 'text-sm');
256
+ if (col.expiredDate == true) {
257
+ new Date(value) < new Date()
258
+ ? (rowClass = rowClass + ' text-red-400 font-semibold')
259
+ : '';
260
+ }
261
+ return rowClass;
262
+ }
263
+ expiredFile(rowData, col) {
264
+ let value = rowData['datavencimento'];
265
+ return new Date(value) < new Date() && col.field == 'area';
266
+ }
267
+ transformValue(rowData, col) {
268
+ let value = rowData[col.field];
269
+ if (value != null) {
270
+ if (!col.pipe) {
271
+ return value;
272
+ }
273
+ switch (col.pipe) {
274
+ case 'date':
275
+ return this.transformDate(value);
276
+ case 'datetime':
277
+ return this.datePipe.transform(value, 'dd/MM/yyyy hh:mm');
278
+ case 'dateMonthYear':
279
+ return this.datePipe.transform(value, 'MM/yyyy');
280
+ case 'decimal':
281
+ return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
282
+ case 'cpfcnpj':
283
+ return this.cpfCnpjPipe.transform(value);
284
+ case 'telefone':
285
+ return this.telefonePipe.transform(value);
286
+ case 'capitalize':
287
+ return this.transformCapitalize(value);
288
+ case 'money':
289
+ return this.formatarValor(value);
290
+ case 'percentage':
291
+ return `${value} %`;
292
+ default:
293
+ break;
294
+ }
295
+ }
296
+ }
297
+ transformDate(date) {
298
+ const datePipe = new DatePipe('en-US');
299
+ const utcDate = new Date(date);
300
+ // Ajuste a data para o fuso horário local
301
+ const localDate = new Date(utcDate.getTime() + (utcDate.getTimezoneOffset() * 60000));
302
+ // Transforme a data local para o formato desejado
303
+ return datePipe.transform(localDate, 'dd/MM/yyyy');
304
+ }
305
+ transformCapitalize(value) {
306
+ if (!value)
307
+ return value;
308
+ return value
309
+ .split(' ')
310
+ .map((word, index) => {
311
+ if (index !== 0 &&
312
+ this.prepositions.includes(word.toLocaleLowerCase())) {
313
+ return word.toLocaleLowerCase();
314
+ }
315
+ return (word.charAt(0).toLocaleUpperCase() + word.slice(1).toLocaleLowerCase());
316
+ })
317
+ .join(' ');
318
+ }
319
+ formatarValor(valor) {
320
+ const formatter = new Intl.NumberFormat('pt-BR', {
321
+ style: 'currency',
322
+ currency: 'BRL',
323
+ });
324
+ return formatter.format(valor);
325
+ }
326
+ adjustTableSize() {
327
+ if (this.tableSize < 800) {
328
+ this.selectedSize = 'p-datatable-sm';
329
+ }
330
+ else {
331
+ this.selectedSize = '';
332
+ }
333
+ }
334
+ doubleClick(e, rowData) {
335
+ let eventDoubleClick = { event: e, rowData: rowData };
336
+ let array = [];
337
+ e.target.classList.forEach((x) => array.push(x));
338
+ this.doubleClickEvent.emit(eventDoubleClick);
339
+ }
340
+ // alignColunas(col: any): string {
341
+ // if (col.align) {
342
+ // return `text-align: ${col.align}`;
343
+ // } else return '';
344
+ // }
345
+ // alignColunasHeader(col: any): string {
346
+ // if (col.align) {
347
+ // if (col.align == 'right') return 'justify-content: end';
348
+ // else return '';
349
+ // } else return '';
350
+ // }
351
+ retornarRow(rowData, col, field) {
352
+ const _rowaction = this.config.rows ? this.config.rows[col.field] : null;
353
+ const _field = _rowaction && _rowaction[field]
354
+ ? _rowaction[field].constructor === Function
355
+ ? _rowaction[field].apply(this, [rowData])
356
+ : _rowaction[field]
357
+ : null;
358
+ return _field;
359
+ }
360
+ exibirCampo(field, rowData) {
361
+ let visible = field.visible ? field.visible(rowData) : true;
362
+ return visible;
363
+ }
364
+ returnClassChip(rowData, col) {
365
+ return `chip-style w-auto border-round-2xl p-2 text-${this.retornarRow(rowData, col, 'stylechip')} border-${this.retornarRow(rowData, col, 'stylechip')}`;
366
+ }
367
+ returnClassIcon(rowData, col) {
368
+ return this.retornarRow(rowData, col, 'iconrow');
369
+ }
370
+ returnTooltipIcon(rowData, col) {
371
+ return this.retornarRow(rowData, col, 'tooltipiconrow');
372
+ }
373
+ returnTooltipRow(rowData, col) {
374
+ return this.retornarRow(rowData, col, 'tooltiprow');
375
+ }
376
+ deleteColumn(field) {
377
+ let index;
378
+ let column = this.config.columns.find((x) => x.field == field);
379
+ if (column) {
380
+ index = this.config.columns.indexOf(column);
381
+ this.config.columns.splice(index, 1);
382
+ this.deletedColuns.push(column);
383
+ }
384
+ }
385
+ addColumn(field) {
386
+ let index;
387
+ let column = this.config.columns.find((x) => x.field == field);
388
+ if (!column) {
389
+ let deletedColumn = this.deletedColuns.find((x) => x.field == field);
390
+ if (deletedColumn != undefined) {
391
+ index = this.deletedColuns.indexOf(deletedColumn);
392
+ this.deletedColuns.slice(index, 1);
393
+ this.config.columns.push(deletedColumn);
394
+ }
395
+ }
396
+ }
397
+ dinamicColumnSet(e, col) {
398
+ col.checked = e.checked;
399
+ if (e.checked)
400
+ this.addColumn(col.field);
401
+ else
402
+ this.deleteColumn(col.field);
403
+ if (col.position)
404
+ this.config.columns.sort(this.sortByPosition());
405
+ }
406
+ abrirMenuFiltro(e) {
407
+ this.menuFiltro = !this.menuFiltro;
408
+ this.checkboxClicked = false;
409
+ if (this.tamanhoTela < 700)
410
+ this.styleSetter('left', this.botaoFiltro.nativeElement.offsetLeft - 288 + 'px');
411
+ else
412
+ this.styleSetter('left', this.botaoFiltro.nativeElement.offsetLeft + 40 + 'px');
413
+ this.styleSetter('top', this.botaoFiltro.nativeElement.offsetTop + 'px');
414
+ this.styleSetter('visibility', this.menuFiltro ? 'visible' : 'hidden');
415
+ }
416
+ fecharMenuFiltro() {
417
+ this.menuFiltro = false;
418
+ this.checkboxClicked = false;
419
+ this.styleSetter('visibility', 'hidden');
420
+ }
421
+ onEscapeKey(event) {
422
+ if (this.filterColumnsBtn == true && this.menuFiltro == true) {
423
+ this.fecharMenuFiltro();
424
+ }
425
+ }
426
+ onClickEvent(event) {
427
+ if (this.filterColumnsBtn == true && this.menuFiltro == true) {
428
+ const clickedElement = event.target;
429
+ const menuFiltroDiv = this.elementRef.nativeElement.querySelector('#menuFiltroDiv');
430
+ const botaoFiltro = this.elementRef.nativeElement.querySelector('#botaoFiltro');
431
+ const isCheckboxClicked = clickedElement.classList.toString().includes('p-checkbox') ||
432
+ event.target.classList.toString() == '';
433
+ const isInsideMenu = menuFiltroDiv?.contains(clickedElement) ||
434
+ botaoFiltro?.contains(clickedElement) ||
435
+ isCheckboxClicked;
436
+ if (!isInsideMenu)
437
+ this.fecharMenuFiltro();
438
+ }
439
+ }
440
+ styleSetter(style, data) {
441
+ this.renderer?.setStyle(this.menuFiltroDiv.nativeElement, style, data);
442
+ }
443
+ checkMenuFiltro(col) {
444
+ let deletedColumn = this.deletedColuns.find((x) => x.field == col.field);
445
+ if (deletedColumn)
446
+ col.checked = false;
447
+ else
448
+ col.checked = true;
449
+ }
450
+ sortByPosition() {
451
+ return function (elem1, elem2) {
452
+ if (elem1.position < elem2.position) {
453
+ return -1;
454
+ }
455
+ else if (elem1.position > elem2.position) {
456
+ return 1;
457
+ }
458
+ else {
459
+ return 0;
460
+ }
461
+ };
462
+ }
463
+ dinamicDisableColumn(col) {
464
+ if (col.fixedColumn)
465
+ return col.fixedColumn;
466
+ else
467
+ return false;
468
+ }
469
+ checkHideColumns() {
470
+ let hideColumnsConfig = this.columns.filter((col) => col.hideColumn == true);
471
+ hideColumnsConfig.forEach((col) => this.deleteColumn(col.field));
472
+ }
473
+ getCustomTemplate(templatename) {
474
+ return this._templates[templatename];
475
+ }
476
+ onSwitchChange(estado, rowData, col) {
477
+ this.onSwitchTableChange.emit({
478
+ estado: estado,
479
+ rowData: rowData,
480
+ col: col,
481
+ });
482
+ rowData[col.field] = estado;
483
+ }
484
+ createTableActions() {
485
+ this.tableActions = this.dataSource?.map((x) => this.config.actions
486
+ ? this.config.actions.map((y) => mapToMenuItem(y, x))
487
+ : []);
488
+ }
489
+ onSort(e) {
490
+ this.dataSource = [...this.dataSource];
491
+ }
492
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CpfCnpjPipe }, { token: i3.TelefonePipe }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
493
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTableComponent, selector: "kv-table", inputs: { _templates: ["templates", "_templates"], setConfig: ["config", "setConfig"], defaultSortField: "defaultSortField", dataSource: "dataSource", selectedItems: "selectedItems", totalRecords: "totalRecords", paginator: "paginator", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", tableSize: "tableSize", filterColumnsBtn: "filterColumnsBtn", filtrosAvancados: "filtrosAvancados", scrollHeight: "scrollHeight", isTableScrollable: "isTableScrollable", tableCaptalized: "tableCaptalized", rowTrackBy: "rowTrackBy", responsiveLayout: "responsiveLayout", disabledHeaderCheckbox: "disabledHeaderCheckbox", applyStyle: "applyStyle", pageLinksOptions: "pageLinksOptions", showFirstLastIcon: "showFirstLastIcon" }, outputs: { onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", onSwitchTableChange: "onSwitchTableChange" }, host: { listeners: { "window:resize": "onWindowResize($event)", "document:keydown.escape": "onEscapeKey($event)", "document:click": "onClickEvent($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "ptable", first: true, predicate: Table, descendants: true }, { propertyName: "menuFiltroDiv", first: true, predicate: ["menuFiltroDiv"], descendants: true }, { propertyName: "botaoFiltro", first: true, predicate: ["botaoFiltro"], descendants: true }, { propertyName: "inputField", first: true, predicate: ["inputField"], descendants: true }], ngImport: i0, template: "<div>\r\n @if (filtrosAvancados) {\r\n <p-panel\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n @if (!collapsed) {\r\n <i class=\"pi pi-filter\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n @if (collapsed) {\r\n <i class=\"pi pi-minus\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n } @if (config) {\r\n <p-table\r\n #dt\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n (onSort)=\"onSort($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"tamanhoTela > 960 ? true : false\"\r\n [pageLinks]=\"tamanhoTela > 960 ? 2 : 1\"\r\n [responsive]=\"true\"\r\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n >\r\n @if (config.enableCation) {\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 p-0 m-0\"\r\n [style.background-color]=\"'#EAEAEA'\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n @if (config.title) {\r\n <div class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n } @if (config.subtitle) {\r\n <div class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 gap-1\"\r\n >\r\n @if (config.enableFilter) {\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n autocomplete=\"off\"\r\n #inputField\r\n />\r\n </span>\r\n } @if(filterColumnsBtn) {\r\n <div #botaoFiltro>\r\n <kv-button\r\n id=\"botaoFiltro\"\r\n [icon]=\"'align_vertical_top'\"\r\n (onClick)=\"abrirMenuFiltro($event)\"\r\n severity=\"tertiary\"\r\n pTooltip=\"Ocultar/Exibir colunas\"\r\n >\r\n </kv-button>\r\n </div>\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card styleClass=\"p-2\">\r\n <div\r\n class=\"flex flex-column text-medium w-15rem p-1\"\r\n *ngFor=\"let col of columns\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-row col-2 justify-content-end gap-2\">\r\n @for (action of config.actionsLote; track i; let i = $index) {\r\n <div class=\"flex align-items-center justify-content-center\">\r\n @if ((selectedItems.length > 0 || action.showAcoesLote) &&\r\n (getOrExecute(action.visible, selectedItems) ?? true)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"\r\n (getOrExecute(action.tooltip, selectedItems)?.length ??\r\n 0 > 7) &&\r\n config.actionsLote &&\r\n i == config.actionsLote.length - 1\r\n ? 'left'\r\n : 'bottom'\r\n \"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if (config.enableSelect) {\r\n <th>\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [disabled]=\"disabledHeaderCheckbox\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n } @for (col of columns; track $index) {\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <span>{{ col.header }}</span>\r\n @if (col.sortable) {\r\n <p-sortIcon\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n } @if (col.headerTooltip) {\r\n <span\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n }\r\n </div>\r\n </th>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <th></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n let-rowIndex=\"rowIndex\"\r\n >\r\n <tr\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{ capitalize: tableCaptalized, 'last': rowIndex === dataSource.length - 1 }\"\r\n class=\"tr-td {{isDisabledRow(rowData) ? 'disabled-row' : ''}}\"\r\n >\r\n @if (config.enableSelect) { \r\n <td style=\"width: 8px !important\">\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n } @for (col of columns; track $index) {\r\n <ng-container>\r\n @if (rowgroup && !col.template) {\r\n <td\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n @if (!isChipField(col) && !col.iconField && !isImageField(col)) {\r\n <span\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n }\r\n </span>\r\n\r\n @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n\r\n } @if (isSwitchField(col)) {\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n }\r\n </ng-template>\r\n </td>\r\n } @if (!rowgroup && !col.grouped && !col.template) {\r\n <td class=\"rowTable\" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row gap-2 align-items-center ' +\r\n (col.centralize && 'justify-content-center')\r\n \"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (!isChipField(col) && !col.iconField && !isImageField(col))\r\n {\r\n <span>\r\n @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n }\r\n </span>\r\n\r\n @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n } @if (isSwitchField(col)) {\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n }\r\n </ng-template>\r\n </td>\r\n } @if (col.template) {\r\n <td class=\"rowTable\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n @if (getCustomTemplate(col.template.name)) {\r\n\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col.centralize && ' justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\r\n [style.background-color]=\"col.tagColor(rowData, col)\"\r\n ></div>\r\n }\r\n\r\n <div class=\"w-full\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n </td>\r\n }\r\n </ng-container>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <td>\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz p-1\"\r\n style=\"font-size: 25px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n\r\n <p-tieredMenu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"tableActions[rowIndex - actionsOffset]\"\r\n appendTo=\"body\"\r\n ></p-tieredMenu>\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + 2\"\r\n style=\"text-align: center; border-radius: 10px !important\"\r\n >\r\n <p class=\"font-medium m-0\">Nenhum registro encontrado</p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n }\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>\r\n", styles: ["::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:0!important;border-radius:5px!important}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea}.icon-more-horiz{font-weight:700}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.7rem;height:1rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i8.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i9.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i10.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i11.TieredMenu, selector: "p-tieredMenu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i12.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i12.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i12.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i12.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i12.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i14.KvSwitchComponent, selector: "kv-switch", inputs: ["readonly", "switchValue"], outputs: ["onSwitchChange"] }, { kind: "component", type: i15.KvButtonComponent, selector: "kv-button", inputs: ["label", "icon", "loading", "disabled", "severity", "size", "fullWidth"], outputs: ["onClick"] }] }); }
494
+ }
495
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableComponent, decorators: [{
496
+ type: Component,
497
+ args: [{ selector: 'kv-table', template: "<div>\r\n @if (filtrosAvancados) {\r\n <p-panel\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n @if (!collapsed) {\r\n <i class=\"pi pi-filter\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n @if (collapsed) {\r\n <i class=\"pi pi-minus\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n } @if (config) {\r\n <p-table\r\n #dt\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n (onSort)=\"onSort($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"tamanhoTela > 960 ? true : false\"\r\n [pageLinks]=\"tamanhoTela > 960 ? 2 : 1\"\r\n [responsive]=\"true\"\r\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n >\r\n @if (config.enableCation) {\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 p-0 m-0\"\r\n [style.background-color]=\"'#EAEAEA'\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n @if (config.title) {\r\n <div class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n } @if (config.subtitle) {\r\n <div class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 gap-1\"\r\n >\r\n @if (config.enableFilter) {\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n autocomplete=\"off\"\r\n #inputField\r\n />\r\n </span>\r\n } @if(filterColumnsBtn) {\r\n <div #botaoFiltro>\r\n <kv-button\r\n id=\"botaoFiltro\"\r\n [icon]=\"'align_vertical_top'\"\r\n (onClick)=\"abrirMenuFiltro($event)\"\r\n severity=\"tertiary\"\r\n pTooltip=\"Ocultar/Exibir colunas\"\r\n >\r\n </kv-button>\r\n </div>\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card styleClass=\"p-2\">\r\n <div\r\n class=\"flex flex-column text-medium w-15rem p-1\"\r\n *ngFor=\"let col of columns\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-row col-2 justify-content-end gap-2\">\r\n @for (action of config.actionsLote; track i; let i = $index) {\r\n <div class=\"flex align-items-center justify-content-center\">\r\n @if ((selectedItems.length > 0 || action.showAcoesLote) &&\r\n (getOrExecute(action.visible, selectedItems) ?? true)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"\r\n (getOrExecute(action.tooltip, selectedItems)?.length ??\r\n 0 > 7) &&\r\n config.actionsLote &&\r\n i == config.actionsLote.length - 1\r\n ? 'left'\r\n : 'bottom'\r\n \"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if (config.enableSelect) {\r\n <th>\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [disabled]=\"disabledHeaderCheckbox\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n } @for (col of columns; track $index) {\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <span>{{ col.header }}</span>\r\n @if (col.sortable) {\r\n <p-sortIcon\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n } @if (col.headerTooltip) {\r\n <span\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n }\r\n </div>\r\n </th>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <th></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n let-rowIndex=\"rowIndex\"\r\n >\r\n <tr\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{ capitalize: tableCaptalized, 'last': rowIndex === dataSource.length - 1 }\"\r\n class=\"tr-td {{isDisabledRow(rowData) ? 'disabled-row' : ''}}\"\r\n >\r\n @if (config.enableSelect) { \r\n <td style=\"width: 8px !important\">\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n } @for (col of columns; track $index) {\r\n <ng-container>\r\n @if (rowgroup && !col.template) {\r\n <td\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n @if (!isChipField(col) && !col.iconField && !isImageField(col)) {\r\n <span\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n }\r\n </span>\r\n\r\n @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n\r\n } @if (isSwitchField(col)) {\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n }\r\n </ng-template>\r\n </td>\r\n } @if (!rowgroup && !col.grouped && !col.template) {\r\n <td class=\"rowTable\" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row gap-2 align-items-center ' +\r\n (col.centralize && 'justify-content-center')\r\n \"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (!isChipField(col) && !col.iconField && !isImageField(col))\r\n {\r\n <span>\r\n @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n }\r\n </span>\r\n\r\n @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n } @if (isSwitchField(col)) {\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n }\r\n </ng-template>\r\n </td>\r\n } @if (col.template) {\r\n <td class=\"rowTable\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n @if (getCustomTemplate(col.template.name)) {\r\n\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col.centralize && ' justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\r\n [style.background-color]=\"col.tagColor(rowData, col)\"\r\n ></div>\r\n }\r\n\r\n <div class=\"w-full\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n </td>\r\n }\r\n </ng-container>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <td>\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz p-1\"\r\n style=\"font-size: 25px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n\r\n <p-tieredMenu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"tableActions[rowIndex - actionsOffset]\"\r\n appendTo=\"body\"\r\n ></p-tieredMenu>\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + 2\"\r\n style=\"text-align: center; border-radius: 10px !important\"\r\n >\r\n <p class=\"font-medium m-0\">Nenhum registro encontrado</p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n }\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>\r\n", styles: ["::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:0!important;border-radius:5px!important}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea}.icon-more-horiz{font-weight:700}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.7rem;height:1rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}\n"] }]
498
+ }], ctorParameters: () => [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CpfCnpjPipe }, { type: i3.TelefonePipe }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { templates: [{
499
+ type: ContentChildren,
500
+ args: [TemplateDirective]
501
+ }], _templates: [{
502
+ type: Input,
503
+ args: ['templates']
504
+ }], table: [{
505
+ type: ViewChild,
506
+ args: ['table', { static: false }]
507
+ }], ptable: [{
508
+ type: ViewChild,
509
+ args: [Table]
510
+ }], setConfig: [{
511
+ type: Input,
512
+ args: ['config']
513
+ }], defaultSortField: [{
514
+ type: Input
515
+ }], dataSource: [{
516
+ type: Input
517
+ }], selectedItems: [{
518
+ type: Input
519
+ }], totalRecords: [{
520
+ type: Input
521
+ }], paginator: [{
522
+ type: Input
523
+ }], rowsPerPageOptions: [{
524
+ type: Input
525
+ }], rows: [{
526
+ type: Input
527
+ }], tableSize: [{
528
+ type: Input
529
+ }], filterColumnsBtn: [{
530
+ type: Input
531
+ }], filtrosAvancados: [{
532
+ type: Input
533
+ }], scrollHeight: [{
534
+ type: Input
535
+ }], isTableScrollable: [{
536
+ type: Input
537
+ }], tableCaptalized: [{
538
+ type: Input
539
+ }], rowTrackBy: [{
540
+ type: Input
541
+ }], responsiveLayout: [{
542
+ type: Input
543
+ }], disabledHeaderCheckbox: [{
544
+ type: Input
545
+ }], applyStyle: [{
546
+ type: Input
547
+ }], pageLinksOptions: [{
548
+ type: Input
549
+ }], showFirstLastIcon: [{
550
+ type: Input
551
+ }], onActiveItem: [{
552
+ type: Output
553
+ }], onActiveItemLote: [{
554
+ type: Output
555
+ }], onPaginate: [{
556
+ type: Output
557
+ }], onSelectionChange: [{
558
+ type: Output
559
+ }], doubleClickEvent: [{
560
+ type: Output
561
+ }], filterField: [{
562
+ type: Output
563
+ }], onSwitchTableChange: [{
564
+ type: Output
565
+ }], menuFiltroDiv: [{
566
+ type: ViewChild,
567
+ args: ['menuFiltroDiv']
568
+ }], botaoFiltro: [{
569
+ type: ViewChild,
570
+ args: ['botaoFiltro']
571
+ }], inputField: [{
572
+ type: ViewChild,
573
+ args: ['inputField']
574
+ }], onWindowResize: [{
575
+ type: HostListener,
576
+ args: ['window:resize', ['$event']]
577
+ }], onEscapeKey: [{
578
+ type: HostListener,
579
+ args: ['document:keydown.escape', ['$event']]
580
+ }], onClickEvent: [{
581
+ type: HostListener,
582
+ args: ['document:click', ['$event']]
583
+ }] } });
584
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUva3YtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUva3YtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBZSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUdmLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFLTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0QyxPQUFPLEVBRUwsWUFBWSxFQUVaLGFBQWEsR0FDZCxNQUFNLHdDQUF3QyxDQUFDO0FBS2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVyRixNQUFNLFVBQVUsR0FDZCwwcVBBQTBxUCxDQUFDO0FBTzdxUCxNQUFNLE9BQU8sZ0JBQWdCO0lBc0QzQixJQUFxQixTQUFTLENBQUMsS0FBa0I7UUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUk7WUFDeEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksS0FBSztZQUN6QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJO1lBQ3hDLEdBQUcsS0FBSztTQUNULENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0Is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YWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIERvQ2hlY2ssXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuXHJcbmltcG9ydCB7IENwZkNucGpQaXBlIH0gZnJvbSAnLi4vLi4vYXBpL3BpcGVzL2NwZmNucGoucGlwZSc7XHJcbmltcG9ydCB7XHJcbiAgS3ZNZW51SXRlbSxcclxuICBnZXRPckV4ZWN1dGUsXHJcbiAgVmFsdWVPckZuLFxyXG4gIG1hcFRvTWVudUl0ZW0sXHJcbn0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUva3YtbWVudWl0ZW0nO1xyXG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZyc7XHJcbmltcG9ydCB7IFRhYmxlQ29uZmlnQ29sdW1uIH0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29uZmlnLmNvbHVtbic7XHJcbmltcG9ydCB7IFRhYmxlUGFnaW5hdGUgfSBmcm9tICcuLi8uLi9hcGkvY29tcG9uZW50cy90YWJsZS90YWJsZS5wYWdpbmF0ZSc7XHJcbmltcG9ydCB7IFRlbGVmb25lUGlwZSB9IGZyb20gJy4uLy4uL2FwaS9waXBlcy90ZWxlZm9uZS5waXBlJztcclxuaW1wb3J0IHsgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9hcGkvZGlyZWN0aXZlcy90ZW1wbGF0ZS90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5cclxuY29uc3QgaW1nRGVmYXVsdCA9XHJcbiAgJy85ai80QUFRU2taSlJnQUJBUUlBZGdCMkFBRC80UUJpUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVTQUFNQUFBQUJBQUVBQUFFYUFBVUFBQUFCQUFBQVNnRWJBQVVBQUFBQkFBQUFVZ0VvQUFNQUFBQUJBQU1BQUFJVEFBTUFBQUFCQUFFQUFBQUFBQUFBQUFCMkFBQUFBUUFBQUhZQUFBQUIvOXNBUXdBREFnSUNBZ0lEQWdJQ0F3TURBd1FHQkFRRUJBUUlCZ1lGQmdrSUNnb0pDQWtKQ2d3UERBb0xEZ3NKQ1EwUkRRNFBFQkFSRUFvTUVoTVNFQk1QRUJBUS85c0FRd0VEQXdNRUF3UUlCQVFJRUFzSkN4QVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRLzhBQUVRZ0FrQUNRQXdFUkFBSVJBUU1SQWYvRUFCMEFBUUFCQkFNQkFBQUFBQUFBQUFBQUFBQUdBUUlIQ0FNRUNRWC94QUJCRUFBQ0FRUUFCUUlDQ0FRREJBc0FBQUFCQWdNQUJBVVJCZ2NTSVRFVFFRaFJDUlFWR1NKVmxkRXlZWUdSUWxKaUZpTTNPRk5qY1hOMWRwS1RzYk8wLzhRQUdnRUJBQUlEQVFBQUFBQUFBQUFBQUFBQUFBRUZBd1FHQXYvRUFESVJBQUlBQkFNRkNBRUZBUUVCQUFBQUFBQUJBZ01FRVNFeFVRVVNRWkh3RXhVeVlYR0JvYkhSSWpOQ3dlRTA4U1AvMmdBTUF3RUFBaEVERVFBL0FQS3FnRkFLQVVCZERETGNTcEJCRThrc2pCRVJGSlptSjBBQVBKSnFVbkU3SWh0UXE3eUo1dzl5ZHoyVmkrczVlNFhGUk11MFYwOVNVNzBSdEFSMGpSUGs5UUkwVjk2czVHeXBreFhtUGQrWC9uMzVGYk8ycEtsNFFmcWZ4eko5ak9VL0JtTzZXa3NaYjZSSkJJcjNVcE90YTBwVmVsU08zZ2c3MmQ3SGFyT1hzMm5nelYvWHBJcTQ5cFZNZkczb3Z6ZGttc01UaXNYMS9abU10TFAxZGRmb1FMSDFhM3JmU0J2V3ovZXR1Q1hCTHZ1SksrbUJweHpJNWx0OXQyMXhPM1dROENnT3BmNG5GWlRvKzA4WmFYbnBiNlByRUN5ZE85YjExQTYzb2YyckhITGdtZU5KK3FQY0V5T1hmY2JWOU1DTTVQbFB3WmtlcG83R1d4a2VReU05cktSdmU5cUZicVVMMzhBRFdoclE3VnFUTm0wOGVTdDZQLzFHNUJ0S29nNDM5VitMTWdQRVBKM1BZcUw2emlMaGNyR3E3ZEVUMDVSclpPa0pQVU5BZUQxRW5RWDNxc243S21TMXZTM3ZmRC8zNzhpMGs3VWxUSHV4cmRmeHovd2djME0xdk05dmNSUEZMRXhSMGRTckt3T2lDRDRJUHRWWTA0WFpsa21vbGRaRnRRU0tBVUFvQlFDZ0ZBU2pnL2w5bWVMWlJLRmV5c09rc2J1U0lsVzdrYVFkdXM3QkIwZERSMmQ2QjNhV2htVk9PVU92NDFOS3NyWWFWWVl4YWRYL0FOK1Ztemg3aEhBY01SQk1UWUlrcFhwZTRmOEFGSy9ZYjJ4OWowZzlJMHUvWVYwTWltbFU2dEFzZGVKenMycG16LzNJci9YU3kxMVo5bXM1Z0toVFVrWEs2RkJjYUZDTGpRb0xqUW9UY29WTkJjcFVFbnh1SWVFY0J4UkNVeTFnalNoZWxMaFB3eXAyT3RNTzVBNmllazdYZnRXQ2ZTeXFoZnJXT3ZFenlhaWJJZjhBODRyZVhEcDVYejBaaFBqSGwvbCtFWmZVSWE4c0NvSXU0NHlGVTdBMDQ3OUIyUnJaMGRqUjNzRG5hcWltVXJ1OFZyK2REb0tTdmwxS3RGYUdLK1Y4ODhzcjRLNzArU0wxcG0rS0FVQW9CUUU1NWRjdTVlSnBseXVXUjQ4VEczWWJLdGNzRDNWVDdLRDJMZjBIZlpXeW9hRjFEMzQvRDk5Y2VyVnRkWEtuWFp5L0Y5ZjdwMWZPTU1NVnZFbHZieEpIRkdvUkVSUUZWUU5BQUR3QVBhdWlTVUtzc2puVzNFN3Q0bklCODY5SGhzclFnclVBVUFvQlFDZ0ZBVXFRVUlvVGM0NW9ZcDRuZ25pU1NPUlNqbzZobFpTTkVFSHNRUjdWRFNpVm5rZWszQzdwNG1EZVluTHVYaGlWc3Jpa2VURlNOM0hjdGJNVDJWajdxVDRiK2g3NkxjNVhVTHAzMmt2dy9YK2VmVDZPaHJsVUxzNW5pKy85MTZ0QjZyU3lGQUtBbEhML0FJT2w0dXkrcENxMkZteVNYWkpPMlVudEdORUhiYUkzN0FFK2RBN2xGU3VxbVdlU3ovSHVhRmZWcW1sN3F2dlJYdDVlZVRXRjhubnBhNXNGREZGQkVrRUVTUnh4cUVSRVVCVlVEUUFBOEFEMnJxVWtsWkhNdHQ0czVRS2s4dGxhZ2dVQW9DZmNwdVJQTkxuYmtueC9MdmhhNHlFY0RCYm05Y2lLMXR0LzlKSzJsQjEzNlJ0aVBBTllaMVJMcDFlWXpQSXBwdFE3UzBiUDRUNkxianU0dEZrNGg1cVlLd3VTTm1LenNacnBBZmwxc1kvL0FJcXVpMnZBbittRmxsRHNlTnI5VVNJcnpCK2piNTI4SzJjdVI0U3llRzR0aWlCWTI5czdXMTJRUGNSeWZnUC9BR0NUWjlnYXlTdHF5WTNhSzZNVTNaTTZCWGdhWnF2bHNUbGNEa3JuRFp2RzNXUHY3T1F4WEZyZFJORkxFNDhxeU1BVlA4alZrbW9sZFpGWkZDNFhhTE02bFNRS0FVQmFSVTVrcG5ITkRGY1JQYjNFU1NSU0tVZEhVTXJLUm9nZytRYWhwTk5NOXd4T0Y3eXpOZmVZSEIwdkNPWUlqNlRZWGpQSmFFSHVxZ2phSFpKMnV3Tis0MGZPd09XcmFWMHN6RHd2TDhleDB0QlZxcGw3cjhVS1YvUHp5U3h0a3N1UkY2MHpmTG9ZWmJpVklJSW5rbGtZSWlJcExNeE9nQUI1Sk5TazRuWkVOcUZYZVJzcHduZ0l1R2VIN1REb0l6SkVuVk82QWY3eVZ1N0hZQUxEZllFamZTRkh0WFcwMGhVOHBTMTcrdlh3Y2hVVGUybXhUTWNYcS9UVjJ5eFN3dmQ1dG4yQUsyREF5Nm9JRkFLQXlwOE5YSXpKZkVCelFzdUM0SlpMWEZ3SWIzTDNpQWJndEVJRGRPKzNXeEtvdm51MnlDQWExNnFvVk5MY2ZIZ2JOSlRPcG1xRGh4UFluZ3pndmhmbDd3MVk4SWNIWWEzeG1KeDhZamd0NFYwQjgyWStXWW51V095U1NTU2E1V1pNaW14T0tOM1oxa3VYREtoVUVDc2o3ZGVEMktBMXkrTVQ0VzhOeno0TnV1SStIOGRGRHh6aHJkcGJDNGpVSzEvR2cyYldRLzR0amZRVC9DMnU0QmJlL1ExanA0OTJMd3Y0OHpRcnFOVk1HOUN2MUw1OGp5VmRIamRvNUZLc3BJWlNORUg1R3VtT1dLVUFvQlFGcEh2VWtvK054ZHc5RHhSZ0xyRXlCUks2OWR1N2FIUktQNFR2UjBOOWpvYjZTUjcxcjFVaFZFcHkzN2Vwc1UwM3NKc016VDYvdjM0MlpyWk5ETmJ6UGIzRVR4U3hNVWRIVXF5c0RvZ2crQ0Q3VnlUVGhkbWRjbW9sZFpFODVPOFBSWlhQeTVhNUN0RmlsVjFRNk81WDJFT2lEMkFWanZZSVlLYXN0bHlWTW03Ny9qOTlmSldiVXFITGxxV3Y1Y2ZKVysvcTVtK3VqT2RMcUhrclVBVUFvRDBpK2k3NFZzN1RscnhkeHI2Uy9XOGxtMXhwY2p1SXJlQkpBQjhnV3VXL3NQbFZEdGVOdVpEQm9yOWNqb05qd0pTNG85WDlmK202MVZCY0NnRkFLQThZL2kyNFZ0T0RQaVA0OHdWaEVzVnY5cC9Ya1JSb0lMbU5ManBBOWdQVzBCOHE2eWlqY3lSREU5UHJBNUd1Z1V1b2poV3YzaVlqclpOVVVBb0NsU0Myb1BSaERuRnc5RmlzL0ZsN2JvV1BLcXpzZzdhbFRRYzZBQTBReW5leVN4WW4ycm50cVNGTG1LWXY1ZmEvUDNjNlBaYzV6Slc0ODRmcmgvWlB1VStNK3p1RExhUmtsU1Mra2t1bldRYTFzOUtsUnIrRW9pa2VkNzM0SXF6MmJMM0tkUFc3NjlrVmUwbzkrb2ZsWmYzOXNtUUZiNW9NdXFEeUtBVUFvRDBiK2k2NHhzN25nUGpEZ0ZwVkYzajhzbVdWQ2U3UlR3cEVTUG1BMXVOL0xySHpxaDJ2TGFqaGo4ckhRYkhtSndSUWFPNXU3VlFYQW9CUUNnUEZ6NHFPTWJQano0aHVPdUpjZktzdHJKbEd0SUpGTzFranQwVzNWd2ZrUkVDUDVHdXNvNWJseUlZWHA5NG5JMXN4VEtpS0phL1dCaXF0azFSUUNnRkFXa1ZKS0lkell4bjJqd1hjeUtrenlXVWtkMGl4OS9CNldMRFI3QkhjKzJ0YjNvR3EvYVV0ektkMjRZOWN5dzJkTVV1b1YrT0hYdWtTWEVXSDJWaXJMR2VyNnYxTzNqZzYrbnA2dWhRdTliT3Q2OGJyY2x3ZG5Bb05GWTA1a2ZhUnVQVjM1bmRIaXNoalpXb0lGQUtBVUJrYmtCem96ZklYbVpqdVBjUkdiaUNNRzJ5Vm4xZEl1N055UFVqMzdIc3JLZlprVW5ZMkRncVpDcVpiZ1pzVTFSRlRURkdqMko1YmN6T0MrYlhDbHJ4bHdMbW9jampycFJ2cElFa0VtdG1LVlBLT045MVA4aU5nZ25sWnNxT1RGdVJyRTZ5Vk9nbnc3OER1aVUxak1nb0RWajQwdml6dzNLUGhlKzVlOEY1U080NDR5MEJnUG9QdjdKaGNhTXprZnd5bFQrQmZJSkRuc0FHc3FDaWM2SlRJMStsZkpXMTlhcEVMZ2dmNm44SGxkNXJvem1SUUNnRkFLQW8zaXBKUjBzdFlESzRxOHhabTlJWGx2SkI2blQxZEhXcFhldGpldCtOMWptUWRwQTROVTF6TWt1UHM0MUdsZXp1ZHVzaDRSY1BGRHl5dFFCUUNnRkFLQWxQTHptanpCNVVaci9hRGw1eFZmWVM5SUN5R0J3WTVsQjJGa2pZRkpGMzdNQ0t4elpNRTVic3hYTXNxZE1rUGVsdXhzbmhQcE51ZWVQdEZ0c3Z3MXdqbFpFR3ZyRDJzOE1qSDVzRWxDZjJVVlh4YkprdDROb3NJZHJ6a3NVbVJUbUQ5SUQ4UlBIVm5MamJMTTQ3aGExbUJWeGc3Wm9wbVgvdnBHZVJUL05DcHJMTDJiSWx1N1YvVXhUZHAxRXhXVHQ2R3VWemMzRjVjUzNkM1BKUFBNNWtrbGtZczdzVHNzeFBja24zTmI2VnNFVjdiZUxPT2dGQUtBVUFvQ2g4VklSYlE5Q2dSY1BGRHl5dFFCUUNnRkFTZmcvbGZ6SDVneWVud1B3TG5jNE9ycFo3R3drbGpRLzZuVWRLLzFJckhIT2x5dkhFa1pKY21aTjhFTFptREEvQUo4VCtiUlpadUJyWEZSdjNEWCtVdDFPdjVxanN3L3FCV3JGdEtuaC9sZjJOdUhabFRGL0czdVN1SDZNLzRoSlVEU1pmZ3VFLzVYeVU1SS84QVRBUldQdldSbyt2Y3lyWk0vVmRleDFiL0FPamIrSTJ6UXRidHdyZkVEK0czeWpnbi93QnlOUlVyYXNoNjhpSHNtb1duTXg5eFI4RzN4TDhKSTgyUjVUNVc2aVFiNjhZOFYvc2ZNTEF6dC9jVm5ncnFlUEtMK3Zzd1IwRlJCbkR5eCtqRU9UeGVUd3Q3SmpzeGpycXh1NFRxU0M1aGFLUkQvTldBSXJaVFVTdWpVY0xoZG1kYXBJRkFLQVVCUStLa0l0b2VqcVltL3dEdFRGV1dUOUwwdnJsdkhQMGRYVjA5YWh0YjBONjM1MVdPWEgya0NqMVNaN21RZG5HNEwzczdjanVqeFdReHNyVUVDZ01qOGtPUVBNUG43eEljRHdSamxGdmJkTFgrU3VkcmEyU0h3WFlBN1k2T2tVRmpvOXRBa1lLaXBsMDBPOUdiRlBUVEttTGRnNW5vOXliK0F2a2p5d2dndnVJc1d2R21jUUF2ZDVhSU5iSzMvVjJ1eWdIaitQcmI1RWVLb1orMFowN0NGN3E4dnlkQkkyYkprNHhMZWZuK0RZNjJ0YmF5dDQ3U3p0NG9JSWxDUnhSSUZSRkhnQURzQldnMjNpeXdTdGdqbHFBS0FVQW9DT2NhOHVPQXVZK09PSzQ3NFF4V2N0dEVLdDdiTEkwZS9kSEk2a1A4MUlOWkpjMk9VN3dPeGptU29KcXRHcm1rL1A3Nk51M2p0TG5pYmtIZlRlckdHa2ZoNi9tNnVzZkszbmJ2djVMSVR2OEF6anNEYjAyMWNkMmZ6L0pUMU95VmJla2N2d2FGWkhIWkRENUM1eFdXc3A3TzlzNVdndUxlZU1wSkZJcDB5TXA3Z2dnZ2cxZEpxSlhSU05PRjJlWjE2RUNnS0h4VWtvNldXdnhpc1ZlWlF3K3FMTzNrbjlQcTZldm9VdHJlanJldk9xeHpJK3pnY2VpYjVHU1hBNWthZ1R0ZDI1a2E1VDVNWkhndTFqWjVua3NaSkxWMmtPL0I2bENuWi9DRWRBUEd0YThBVnA3Tm1PWlRwUGhoMXpOemFNdnM2aDI0NDllNlpNUWFzQ3ZaZFVFSFp4bU91OHZrclRFMkVmcVhON1BIYndwdlhWSTdCVkg5eUtodFFxN0pTY1RzajIyNUw4cGVIT1NuTHZGY0JjT1c4WVd6aURYbHlGMDk1ZEVEMVozUGtsajQzNFVLbzdBVnlOUk9pcUpqamlPeHA1RU5QTFVFSk9hd21ZVUFvQlFDZ0ZBS0FVQm9WOUpmeVZ3OFdNeFhQSEMya2NGKzEwbUp6UHBycjZ3ckl4Z21iL1V2UVVKOGtNZzhMVjFzcW9kM0pmcWlrMnZUcXluTFBKbm41VjJVUW9DMG1wSlJEdWJHVCt6dUM3cU5YbVNTOWtqdFVhTTYxczlUQmpzZmhLSTQ5OTcxclJOViswcGpsMDd0eHc2NUcvczZXcGxRcjhNZXZkb2dISjNpQ0xGWitYRTNKVllzcXFvcm5RMU1teWcyU094RE1QQkpZcUtyTmx6MUxtN2p5aSsrQlo3VmtPWkxVeUgrUER5ZnR3NVd2NUdiNjZJNTR1cVR5U3psTC94VjRNLzh3WTcvQVBUSFdLZCsxRjZNeXlQM1lmVkh1YlhISFppZ0ZBS0FVQW9CUUNnRkFheS9TSi84cytTLzhWc1Avc3F3MlovMEwwWlhiVS81bjZvOG9hNlU1Z29lMVNDMm9QUmhEbkZ4RERsYzlGaWJib2FQRkt5TTQ3a3l2b3VOZ2thSFNvOEFodW9IMnJudHF6MU1tS1hEL0g3ZjQrN25SN0xrdVhLY2NXY1gxdy9zZ2NNMHR2S2s4RXJ4eXhzSFIwWWhsWUhZSUk4RUdxeE53dTZMSnBSS3p5TmxPRXMvSHhOdy9aNWRUR0pKVTZaMFVqOEVxOW1HZ1NWNzl3RDM2U3A5NjYybW5xb2xLTmUvcjE4SElWRXZzWjBVclQxeXpYREgxV0Y3ck5NK3dEN1ZzR0JuZndlWXZlSHMxajgvaldSYnZHWFVWNWJsMTZsRWtiaDFKSHVOZ2RxOHhRcUpPRjhSREU0V29sd05qdnZGUGlYL0FEbkJmcE1mNzFvZDJVK2o1bGgzclVhcmtQdkZQaVgvQURuQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUQ3eFQ0bC96bkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmOEFPY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjg1d1g2VEgrOU83S2ZSOHgzclVhcmtQdkZQaVgvT2NGK2t4L3ZUdXluMGZNZDYxR3E1RVA1cWZHQnpwNXljSVRjRDhiNUhGell1ZWFLNGRiZkhwRS9YR2RyK0lkL05aWk5ESmtSYjhHWmluVjA2b2czSThqQ2xiWnBscFB0VWtwSHhlTHVJWXVGOEJkWlp5aGxSZWkzUnY4Y3A3S05iR3g3blIzMGcxcjFNOVU4cHpIN2V2WHdiRlBLN2ViREwxK3Y2OThMMk5iWnBwYmlWNTU1WGtsa1l1N3V4TE14T3lTVDVKTmNrMjRuZDVuWEpLRldSYlVFa281ZjhZeThJNWNHVHBOaGVNa2QyQ0R0VkJPcEJvRTdYWk92Y0Vqem9qY29xcDBzekh3dlA4QVBzYUZmU0twbDd5dnZRM3Q1K1dPR05zK0d0cm13VU0wVnhFbHhieXBKRklvZEhSZ3lzcEd3UVI1QnJxVTdxNk9aYWF3WnlBMU9aNWFMcWdnVUFvQlFDZ0ZBS0FVQW9CUUZwTlRrU2tjYzAwVnZFOXhjU3BIRkdwZDNkZ3Fxb0d5U1Q0QXFHMGsyejNEQzRudXJNMTk1Z2NZeThYWmdtUHBGaFpzOGRvQU83S1NOeUhZQjIzU0RyMkdoNTJUeTFiVk9xbVhXU3kvSjB0QlNLbWw3ejhVU1YvTHl6YXd2bXMrUkY2MHpmRkFLQW5ITHZtSkx3eEt1S3lydkppcEc3SHV6V3pFOTJVZTZrK1YvcU8rdzFsUTF6cDMyY3p3L1grZVhUcmE2aFZRdCtYNHZ2cmgxYk9VTTBWeEVrOEVxU1JTS0hSMFlGV1VqWUlJOGdpdWpUVFYwem5HbW5abzVBZm5VbmxvclVFRmFBVUFvQlFDZ0ZBVTNxcEJRbjVVSlNPT2FhSzNpZTR1SlVqaWpVdTd1d0Nxb0d5U1Q0QUZRMmxpejBsZDJSZzNtSnpFbDRtbGJGWXAzanhVYmR6M0RYTEE5bVlleWoyWCtwNzZDODVYVnpxSHVRZUg3NjY4dWpvYUZVNjdTUHhmWFhYbkI2clN5RkFLQVVBb0NVOEg4dzgxd25Jc0pkNzdIaENnczVaU0ZUdVczR2UvUWVwaVRvYU96c2IwUnVVdGJNcG5iT0hUOGFGZlZiT2wxRjRvTFF4TjNidG5rc2NyNEt5ZkN5NFlHYmNCeFpnT0pvZzJJeU1jc2dRTzhEZmhsajdLVHRUM0lCWUFzTnJ2d1RYUlNhbVZVSzh0KzNIcjRPZm0wODZUKzVEYkYvZmxmUE5YeHRtazhENjlaekNWREdwSXNWNmhRV0d4ODZFV0d4ODZDdzZoUW14UXNhQ3hTb0pQa1ovaTNoL2htTXRsOGpIRklVTHBBdjRwWk96RWFVZHhzcVFHT2wzNUlyQlBxWlZPcnpIN2Nldmd6U3FlYlA4QTI0YjRwY01PZHNzM3h0a204RENQR1BNREw4WFMrbVMxbllCUUJhUnlrcXgyRHR6MjZ6c0RXeG9hR2h2WlBPMVZiTXFuWjRMVDg2blJVdEJMcGtuRmFLTFczcmxuYkIyZXZ3UmV0TTNoUUNnRkFLQVVBb0M2R2FXM2xTZUNWNDVZMkRvNk1ReXNEc0VFZUNEVXB1RjNSRFNpVm5rVHpoN25GbjhWRUxiTFFKbFlsWFNNNytuS093QTI0QjZoMlBrRmlUc21yS1R0U2JMVm8xdkw1NitmTXE1K3lwY3gzbHZkMTRyankrcksxaWY0em14d1hrZWxaTDZXeWtlVDAxUzZoSzc4YVlzdlVxanY1TERXanZRNzFaeTlwVTh4MnZiMTZaV3pOblZFdFh0ZjA2VCtDUzJHV3hXVkVoeGVTdGJ3UmE5VDBKbGs2TjcxdnBKMXZSL3NhM0lKa0V6d05QMGR6VGpseHk3S05OWDFPM1dROENnT3BmNWZFNHJvKzA4bmFXZnE3S2V2TXNmVnJ6cnFJMzVIOTZ4eHpJSmZqYVhxekpCTGptZUJOK2lJMWsrYS9CZU42bFMvbHZaRWxNYkpheEZ2RzlzR2JwUmw3ZVF4M3NhMk85YWN6YVZQTGRyMzlPbDhHMUwyZFVURmUxdlhwdGNpQWNRYzRzL2xZamJZbUJNVkV5NmRrZjFKVHNFSFRrQUtPNDhEcUJHdzFWay9hazJaaEIrbGZQTXRKR3lwY3Q3MHg3Mm5CY09mSHl4eTRrRG1tbXVKbnVMaVY1WlpXTHU3c1dabUoyU1NlNUpQdlZhMjRuZGxta29WWlpGdFFTS0FVQW9ELzlrPSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2t2LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdlRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrLCBBZnRlclZpZXdJbml0IHtcclxuICBjb25maWchOiBUYWJsZUNvbmZpZztcclxuICBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHNlbGVjdGVkU2l6ZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHRhbWFuaG9UZWxhITogbnVtYmVyO1xyXG5cclxuICAvL21lbnVDb2x1bW5zOiBLdk1lbnVJdGVtW10gPSBbXTtcclxuICBjaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29sdW1uczogVGFibGVDb25maWdDb2x1bW5bXSA9IFtdO1xyXG4gIGRlbGV0ZWRDb2x1bnM6IFRhYmxlQ29uZmlnQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgcHJlcG9zaXRpb25zOiBzdHJpbmdbXSA9IFtcclxuICAgICdkZScsXHJcbiAgICAnZGEnLFxyXG4gICAgJ2RvJyxcclxuICAgICdlbScsXHJcbiAgICAnbm8nLFxyXG4gICAgJ25hJyxcclxuICAgICdwYXJhJyxcclxuICAgICdwb3InLFxyXG4gICAgJ2NvbScsXHJcbiAgICAnYScsXHJcbiAgICAnbycsXHJcbiAgICAnZScsXHJcbiAgXTtcclxuXHJcbiAgbWVudUZpbHRybzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoZWNrYm94Q2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzaG93RmlsdHJvc0F2YW5jYWRvczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgdGFibGVBY3Rpb25zOiBNZW51SXRlbVtdW10gPSBbXTtcclxuICBjdXJyRGF0YVNvdXJjZTogYW55W10gPSBbXTtcclxuXHJcbiAgZGF0YUluZGV4OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgbWVudUl0ZW1zITogTWVudUl0ZW1bXTtcclxuXHJcbiAgYWN0aW9uc09mZnNldDogbnVtYmVyID0gMDtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PGFueT47XHJcbiAgQElucHV0KCd0ZW1wbGF0ZXMnKSBfdGVtcGxhdGVzITogYW55O1xyXG5cclxuICBAVmlld0NoaWxkKCd0YWJsZScsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZSE6IFRhYmxlO1xyXG4gIGRlbGV0ZWRDb2x1bW5zSW5kZXghOiBhbnlbXTtcclxuXHJcbiAgQFZpZXdDaGlsZChUYWJsZSkgcHRhYmxlITogVGFibGU7XHJcbiAgXHJcblxyXG5cclxuICBASW5wdXQoJ2NvbmZpZycpIHNldCBzZXRDb25maWcodmFsdWU6IFRhYmxlQ29uZmlnKSB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IHtcclxuICAgICAgZW5hYmxlQ2F0aW9uOiB2YWx1ZS5lbmFibGVDYXRpb24gfHwgdHJ1ZSxcclxuICAgICAgZW5hYmxlU2VsZWN0OiB2YWx1ZS5lbmFibGVTZWxlY3QgfHwgZmFsc2UsXHJcbiAgICAgIGVuYWJsZUZpbHRlcjogdmFsdWUuZW5hYmxlRmlsdGVyIHx8IHRydWUsXHJcbiAgICAgIC4uLnZhbHVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlRmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMucHVzaChjb2wuZmllbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RmllbGQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2U6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHMhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgcGFnaW5hdG9yOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByb3dzUGVyUGFnZU9wdGlvbnMhOiBudW1iZXJbXTtcclxuICBASW5wdXQoKSByb3dzOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgpIHRhYmxlU2l6ZSE6IG51bWJlcjtcclxuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zQnRuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIEVzc2EgcHJvcHJpZWRhZGUgbsOjbyBzZXLDoSBtYWlzIHV0aWxpemFkYSBwb3IgZXNzZSBjb21wb25lbnRlIG5hcyBwcsOzeGltYXMgdmVyc8O1ZXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZmlsdHJvc0F2YW5jYWRvczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlzVGFibGVTY3JvbGxhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGFibGVDYXB0YWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHJvd1RyYWNrQnk6IEZ1bmN0aW9uID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4gaXRlbTtcclxuXHJcbiAgQElucHV0KCkgcmVzcG9uc2l2ZUxheW91dDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVkSGVhZGVyQ2hlY2tib3g6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGEgcHJvcHJpZWRhZGUgXCJ0YWdDb2xvclwiIG5hIGNvbmZpZ3VyYcOnw6NvIGRhIGNvbHVuYSBwYXJhIGVzdGlsaXphciBhIHRhZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFwcGx5U3R5bGU6IEZ1bmN0aW9uID0gKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIE8gdmFsb3IgZGUgcGFnZUxpbmtzIMOpIGF0cmlidcOtZG8gZGUgYWNvcmRvIGNvbSBvIHRhbWFuaG8gZGEgdGVsYSwgZXNzYSBwcm9wcmllZGFkZSBuw6NvIGVzdMOhIHNlbmRvIHV0aWxpemFkYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VMaW5rc09wdGlvbnMhOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIEEgcXVhbnRpZGFkZSBkZSBwYWdpbml0b3JQYWdlSWNvbnMgw6kgYXRyaWJ1w61kbyBkZSBhY29yZG8gY29tIG8gdGFtYW5obyBkYSB0ZWxhLCBlc3NhIHByb3ByaWVkYWRlIG7Do28gZXN0w6Egc2VuZG8gdXRpbGl6YWRhXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2hvd0ZpcnN0TGFzdEljb24hOiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtTG90ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uUGFnaW5hdGU6IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2luYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkb3VibGVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyRmllbGQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblN3aXRjaFRhYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWVudUZpbHRyb0RpdicpIG1lbnVGaWx0cm9EaXYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2JvdGFvRmlsdHJvJykgYm90YW9GaWx0cm8hOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0RmllbGQnKSBpbnB1dEZpZWxkITogRWxlbWVudFJlZjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcGZDbnBqUGlwZTogQ3BmQ25walBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbGVmb25lUGlwZTogVGVsZWZvbmVQaXBlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLmlzUm93U2VsZWN0YWJsZSA9IHRoaXMuaXNSb3dTZWxlY3RhYmxlLmJpbmQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YVNvdXJjZSkgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuY3VyckRhdGFTb3VyY2UpXHJcbiAgICApIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlVGFibGVBY3Rpb25zKCk7XHJcbiAgICAgICAgdGhpcy5jdXJyRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYWRqdXN0VGFibGVTaXplKCk7XHJcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICAvLyB0aGlzLmNyaWFyTWVudUNvbHVtbnMoKTtcclxuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5jb2x1bW5zLnB1c2goY29sKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGVja0hpZGVDb2x1bW5zKCk7XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0U29ydEZpZWxkICYmIHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0eXBlb2YgYVt0aGlzLmRlZmF1bHRTb3J0RmllbGRdID09PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgICAgdHlwZW9mIGJbdGhpcy5kZWZhdWx0U29ydEZpZWxkXSA9PT0gJ3N0cmluZydcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiBhW3RoaXMuZGVmYXVsdFNvcnRGaWVsZF0ubG9jYWxlQ29tcGFyZShcclxuICAgICAgICAgICAgYlt0aGlzLmRlZmF1bHRTb3J0RmllbGRdXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0eXBlb2YgYVt0aGlzLmRlZmF1bHRTb3J0RmllbGRdID09PSAnYm9vbGVhbicgJiZcclxuICAgICAgICAgIHR5cGVvZiBiW3RoaXMuZGVmYXVsdFNvcnRGaWVsZF0gPT09ICdib29sZWFuJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIGFbdGhpcy5kZWZhdWx0U29ydEZpZWxkXSA9PT0gYlt0aGlzLmRlZmF1bHRTb3J0RmllbGRdXHJcbiAgICAgICAgICAgID8gMFxyXG4gICAgICAgICAgICA6IGFbdGhpcy5kZWZhdWx0U29ydEZpZWxkXVxyXG4gICAgICAgICAgICA/IDFcclxuICAgICAgICAgICAgOiAtMTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgdHlwZW9mIGFbdGhpcy5kZWZhdWx0U29ydEZpZWxkXSA9PT0gJ251bWJlcicgJiZcclxuICAgICAgICAgIHR5cGVvZiBiW3RoaXMuZGVmYXVsdFNvcnRGaWVsZF0gPT09ICdudW1iZXInXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gYVt0aGlzLmRlZmF1bHRTb3J0RmllbGRdIC0gYlt0aGlzLmRlZmF1bHRTb3J0RmllbGRdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMDsgLy8gT3Ugb3V0cmEgbMOzZ2ljYSBkZXBlbmRlbmRvIGRvIGNhc29cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpc2FibGVkLXJvdycpLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgcm93LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJykuZm9yRWFjaChjZWxsID0+IHtcclxuICAgICAgICBjZWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgaWYgKCF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCd0b29sdGlwJykpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNldFRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMucHRhYmxlKSB0aGlzLnB0YWJsZS5yZXNldCgpO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRGaWVsZCkgdGhpcy5pbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJzsgICAgXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIHRoaXMuYWRqdXN0VGFibGVTaXplKCk7XHJcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWN0aXZlSXRlbShyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtLmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRPckV4ZWN1dGU8VD4oYWN0aW9uOiBWYWx1ZU9yRm48VD4sIGRhdGE6IGFueSk6IFQge1xyXG4gICAgcmV0dXJuIGdldE9yRXhlY3V0ZShhY3Rpb24sIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgaXNCb29sZWFuRmllbGQocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHJvd0RhdGFbY29sLmZpZWxkXSA9PSAnYm9vbGVhbic7XHJcbiAgfVxyXG5cclxuICBpc0NoaXBGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29sLmZpZWxkVHlwZSA9PSAnY2hpcCc7XHJcbiAgfVxyXG5cclxuICBpc0ltYWdlRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldG9ybm8gPSBjb2wuZmllbGRUeXBlICYmIGNvbC5maWVsZFR5cGUgPT09ICdpbWFnZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcblxyXG4gIGlzU3dpdGNoRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldG9ybm8gPSBjb2wuZmllbGRUeXBlICYmIGNvbC5maWVsZFR5cGUgPT09ICdzd2l0Y2gnID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgcmV0dXJuIHJldG9ybm87XHJcbiAgfVxyXG5cclxuICBpc1Jvd1NlbGVjdGFibGUoZXZlbnQ6IGFueSkge1xyXG4gICAgcmV0dXJuICF0aGlzLmlzRGlzYWJsZWRDaGVja2JveChldmVudC5kYXRhKTtcclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWRDaGVja2JveChyb3dEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb25cclxuICAgICAgPyB0aGlzLmNvbmZpZy5kaXNhYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb24ocm93RGF0YSlcclxuICAgICAgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWRSb3cocm93RGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGlzYWJsZVJvdyA/IHRoaXMuY29uZmlnLmRpc2FibGVSb3cocm93RGF0YSkgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHZlcmlmaWNhQ3Vyc29yKCl7XHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGlzYWJsZWQtcm93JykuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICByb3cucXVlcnlTZWxlY3RvckFsbCgndGQnKS5mb3JFYWNoKGNlbGwgPT4ge1xyXG4gICAgICAgIGNlbGwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICBpZiAoIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3Rvb2x0aXAnKSkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBsb2FkSW1hZ2Uocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIC8qXHJcbiAgICAgIE5vc3NhIGNvbHVuYSBkZSBpbWFnZW0gdHJhYmFsaGEgY29tIHN0cmluZ3MgZG8gdGlwbzogYmFzZTY0IG91IHVybFxyXG4gICAgKi9cclxuICAgIGxldCByZXRvcm5vID0gYGRhdGE6aW1hZ2UvanBnO2Jhc2U2NCwgJHtpbWdEZWZhdWx0fWA7XHJcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcclxuICAgICAgaWYgKHJvd0RhdGFbY29sLmZpZWxkXS5pbmNsdWRlcygnaHR0cCcpKSByZXRvcm5vID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICBlbHNlIHJldG9ybm8gPSBgZGF0YTppbWFnZS9qcGc7YmFzZTY0LCAke3Jvd0RhdGFbY29sLmZpZWxkXX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXRvcm5vO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uR2xvYmFsRmlsdGVyKHRhYmxlOiBUYWJsZSwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLmZpbHRlckZpZWxkLmVtaXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XHJcbiAgICB0YWJsZS5maWx0ZXJHbG9iYWwoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSwgJ2NvbnRhaW5zJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFnaW5hdGUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGxldCBwYWdpbmFJbmljaWFsID1cclxuICAgICAgICAoZXZlbnQ/LmZpcnN0ID4gMCA/IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cyA6IGV2ZW50LmZpcnN0KSArIDE7XHJcbiAgICAgIGxldCB0ZXJtb1Blc3F1aXNhID0gJyc7XHJcbiAgICAgIGxldCBvcmRlbmFjYW8gPSAnJztcclxuXHJcbiAgICAgIGlmIChldmVudC5nbG9iYWxGaWx0ZXIpIHRlcm1vUGVzcXVpc2EgPSBldmVudC5nbG9iYWxGaWx0ZXI7XHJcblxyXG4gICAgICBpZiAoZXZlbnQuc29ydEZpZWxkKVxyXG4gICAgICAgIG9yZGVuYWNhbyA9IGAke2V2ZW50LnNvcnRGaWVsZH0gJHtcclxuICAgICAgICAgIGV2ZW50LnNvcnRPcmRlciA9PT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAgICAgfWA7XHJcblxyXG4gICAgICBjb25zdCBvYmpldG86IFRhYmxlUGFnaW5hdGUgPSB7XHJcbiAgICAgICAgcGFnaW5hSW5pY2lhbDogcGFnaW5hSW5pY2lhbCxcclxuICAgICAgICB0YW1hbmhvUGFnaW5hOiBldmVudC5yb3dzLFxyXG4gICAgICAgIHRlcm1vUGVzcXVpc2E6IHRlcm1vUGVzcXVpc2EsXHJcbiAgICAgICAgb3JkZW5hY2FvOiBvcmRlbmFjYW8sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLm9uUGFnaW5hdGUuZW1pdChvYmpldG8pO1xyXG5cclxuICAgICAgdGhpcy5hY3Rpb25zT2Zmc2V0ID0gZXZlbnQuZmlyc3Q7XHJcbiAgICAgIHRoaXMuY3JlYXRlVGFibGVBY3Rpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3Rpb25DaGFuZ2UodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtTG90ZS5lbWl0KHNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XHJcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICBsZXQgcm93Q2xhc3M6IHN0cmluZztcclxuXHJcbiAgICB0aGlzLnRhYmxlU2l6ZSA+IDgwMCA/IChyb3dDbGFzcyA9ICd0ZXh0LWJhc2UnKSA6IChyb3dDbGFzcyA9ICd0ZXh0LXNtJyk7XHJcblxyXG4gICAgaWYgKGNvbC5leHBpcmVkRGF0ZSA9PSB0cnVlKSB7XHJcbiAgICAgIG5ldyBEYXRlKHZhbHVlKSA8IG5ldyBEYXRlKClcclxuICAgICAgICA/IChyb3dDbGFzcyA9IHJvd0NsYXNzICsgJyB0ZXh0LXJlZC00MDAgZm9udC1zZW1pYm9sZCcpXHJcbiAgICAgICAgOiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiByb3dDbGFzcztcclxuICB9XHJcblxyXG4gIGV4cGlyZWRGaWxlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVsnZGF0YXZlbmNpbWVudG8nXTtcclxuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZSgpICYmIGNvbC5maWVsZCA9PSAnYXJlYSc7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuXHJcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoIWNvbC5waXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKGNvbC5waXBlKSB7XHJcbiAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1EYXRlKHZhbHVlKTtcclxuICAgICAgICBjYXNlICdkYXRldGltZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5IGhoOm1tJyk7XHJcbiAgICAgICAgY2FzZSAnZGF0ZU1vbnRoWWVhcic6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdNTS95eXl5Jyk7XHJcbiAgICAgICAgY2FzZSAnZGVjaW1hbCc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsICcxLjItMicsICdwdC1CUicpO1xyXG4gICAgICAgIGNhc2UgJ2NwZmNucGonOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3BmQ25walBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICd0ZWxlZm9uZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZWxlZm9uZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICdjYXBpdGFsaXplJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUNhcGl0YWxpemUodmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ21vbmV5JzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGFyVmFsb3IodmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG4gICAgICAgICAgcmV0dXJuIGAke3ZhbHVlfSAlYDtcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1EYXRlKGRhdGU6IGFueSkge1xyXG4gICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XHJcbiAgICBjb25zdCB1dGNEYXRlID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICBcclxuICAgIC8vIEFqdXN0ZSBhIGRhdGEgcGFyYSBvIGZ1c28gaG9yw6FyaW8gbG9jYWxcclxuICAgIGNvbnN0IGxvY2FsRGF0ZSA9IG5ldyBEYXRlKHV0Y0RhdGUuZ2V0VGltZSgpICsgKHV0Y0RhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XHJcbiAgICBcclxuICAgIC8vIFRyYW5zZm9ybWUgYSBkYXRhIGxvY2FsIHBhcmEgbyBmb3JtYXRvIGRlc2VqYWRvXHJcbiAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGxvY2FsRGF0ZSwgJ2RkL01NL3l5eXknKTtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybUNhcGl0YWxpemUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgIC5zcGxpdCgnICcpXHJcbiAgICAgIC5tYXAoKHdvcmQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaW5kZXggIT09IDAgJiZcclxuICAgICAgICAgIHRoaXMucHJlcG9zaXRpb25zLmluY2x1ZGVzKHdvcmQudG9Mb2NhbGVMb3dlckNhc2UoKSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiB3b3JkLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICB3b3JkLmNoYXJBdCgwKS50b0xvY2FsZVVwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvY2FsZUxvd2VyQ2FzZSgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdGFyVmFsb3IodmFsb3I6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywge1xyXG4gICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcclxuICAgICAgY3VycmVuY3k6ICdCUkwnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsb3IpO1xyXG4gIH1cclxuXHJcbiAgYWRqdXN0VGFibGVTaXplKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVTaXplIDwgODAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJ3AtZGF0YXRhYmxlLXNtJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3VibGVDbGljayhlOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IGV2ZW50RG91YmxlQ2xpY2sgPSB7IGV2ZW50OiBlLCByb3dEYXRhOiByb3dEYXRhIH07XHJcblxyXG4gICAgbGV0IGFycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZS50YXJnZXQuY2xhc3NMaXN0LmZvckVhY2goKHg6IGFueSkgPT4gYXJyYXkucHVzaCh4KSk7XHJcblxyXG4gICAgdGhpcy5kb3VibGVDbGlja0V2ZW50LmVtaXQoZXZlbnREb3VibGVDbGljayk7XHJcbiAgfVxyXG5cclxuICAvLyBhbGlnbkNvbHVuYXMoY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gIC8vICAgaWYgKGNvbC5hbGlnbikge1xyXG4gIC8vICAgICByZXR1cm4gYHRleHQtYWxpZ246ICR7Y29sLmFsaWdufWA7XHJcbiAgLy8gICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gYWxpZ25Db2x1bmFzSGVhZGVyKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAvLyAgIGlmIChjb2wuYWxpZ24pIHtcclxuICAvLyAgICAgaWYgKGNvbC5hbGlnbiA9PSAncmlnaHQnKSByZXR1cm4gJ2p1c3RpZnktY29udGVudDogZW5kJztcclxuICAvLyAgICAgZWxzZSByZXR1cm4gJyc7XHJcbiAgLy8gICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIC8vIH1cclxuXHJcbiAgcmV0b3JuYXJSb3cocm93RGF0YTogYW55LCBjb2w6IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBfcm93YWN0aW9uID0gdGhpcy5jb25maWcucm93cyA/IHRoaXMuY29uZmlnLnJvd3NbY29sLmZpZWxkXSA6IG51bGw7XHJcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9XHJcbiAgICAgIF9yb3dhY3Rpb24gJiYgX3Jvd2FjdGlvbltmaWVsZF1cclxuICAgICAgICA/IF9yb3dhY3Rpb25bZmllbGRdLmNvbnN0cnVjdG9yID09PSBGdW5jdGlvblxyXG4gICAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5hcHBseSh0aGlzLCBbcm93RGF0YV0pXHJcbiAgICAgICAgICA6IF9yb3dhY3Rpb25bZmllbGRdXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgcmV0dXJuIF9maWVsZDtcclxuICB9XHJcblxyXG4gIGV4aWJpckNhbXBvKGZpZWxkOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IHZpc2libGUgPSBmaWVsZC52aXNpYmxlID8gZmllbGQudmlzaWJsZShyb3dEYXRhKSA6IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHZpc2libGU7XHJcbiAgfVxyXG5cclxuICByZXR1cm5DbGFzc0NoaXAocm93RGF0YTogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYGNoaXAtc3R5bGUgdy1hdXRvIGJvcmRlci1yb3VuZC0yeGwgcC0yIHRleHQtJHt0aGlzLnJldG9ybmFyUm93KFxyXG4gICAgICByb3dEYXRhLFxyXG4gICAgICBjb2wsXHJcbiAgICAgICdzdHlsZWNoaXAnXHJcbiAgICApfSBib3JkZXItJHt0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3N0eWxlY2hpcCcpfWA7XHJcbiAgfVxyXG5cclxuICByZXR1cm5DbGFzc0ljb24ocm93RGF0YTogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICdpY29ucm93Jyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhOiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3Rvb2x0aXBpY29ucm93Jyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm5Ub29sdGlwUm93KHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAndG9vbHRpcHJvdycpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQ29sdW1uKGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGxldCBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIGxldCBjb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKFxyXG4gICAgICAoeCkgPT4geC5maWVsZCA9PSBmaWVsZFxyXG4gICAgKTtcclxuICAgIGlmIChjb2x1bW4pIHtcclxuICAgICAgaW5kZXggPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmluZGV4T2YoY29sdW1uKTtcclxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMucHVzaChjb2x1bW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQ29sdW1uKGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGxldCBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIGxldCBjb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKFxyXG4gICAgICAoeCkgPT4geC5maWVsZCA9PSBmaWVsZFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIWNvbHVtbikge1xyXG4gICAgICBsZXQgZGVsZXRlZENvbHVtbjogVGFibGVDb25maWdDb2x1bW4gfCB1bmRlZmluZWQgPVxyXG4gICAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5maW5kKCh4KSA9PiB4LmZpZWxkID09IGZpZWxkKTtcclxuXHJcbiAgICAgIGlmIChkZWxldGVkQ29sdW1uICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGluZGV4ID0gdGhpcy5kZWxldGVkQ29sdW5zLmluZGV4T2YoZGVsZXRlZENvbHVtbik7XHJcbiAgICAgICAgdGhpcy5kZWxldGVkQ29sdW5zLnNsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLnB1c2goZGVsZXRlZENvbHVtbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpbmFtaWNDb2x1bW5TZXQoZTogYW55LCBjb2w6IGFueSkge1xyXG4gICAgY29sLmNoZWNrZWQgPSBlLmNoZWNrZWQ7XHJcbiAgICBpZiAoZS5jaGVja2VkKSB0aGlzLmFkZENvbHVtbihjb2wuZmllbGQpO1xyXG4gICAgZWxzZSB0aGlzLmRlbGV0ZUNvbHVtbihjb2wuZmllbGQpO1xyXG5cclxuICAgIGlmIChjb2wucG9zaXRpb24pIHRoaXMuY29uZmlnLmNvbHVtbnMuc29ydCh0aGlzLnNvcnRCeVBvc2l0aW9uKCkpO1xyXG4gIH1cclxuXHJcbiAgYWJyaXJNZW51RmlsdHJvKGU6IGFueSkge1xyXG4gICAgdGhpcy5tZW51RmlsdHJvID0gIXRoaXMubWVudUZpbHRybztcclxuICAgIHRoaXMuY2hlY2tib3hDbGlja2VkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMudGFtYW5ob1RlbGEgPCA3MDApXHJcbiAgICAgIHRoaXMuc3R5bGVTZXR0ZXIoXHJcbiAgICAgICAgJ2xlZnQnLFxyXG4gICAgICAgIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IC0gMjg4ICsgJ3B4J1xyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnN0eWxlU2V0dGVyKFxyXG4gICAgICAgICdsZWZ0JyxcclxuICAgICAgICB0aGlzLmJvdGFvRmlsdHJvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCArIDQwICsgJ3B4J1xyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3RvcCcsIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyAncHgnKTtcclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCB0aGlzLm1lbnVGaWx0cm8gPyAndmlzaWJsZScgOiAnaGlkZGVuJyk7XHJcbiAgfVxyXG5cclxuICBmZWNoYXJNZW51RmlsdHJvKCkge1xyXG4gICAgdGhpcy5tZW51RmlsdHJvID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoZWNrYm94Q2xpY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXHJcbiAgb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnNCdG4gPT0gdHJ1ZSAmJiB0aGlzLm1lbnVGaWx0cm8gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrRXZlbnQoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyQ29sdW1uc0J0biA9PSB0cnVlICYmIHRoaXMubWVudUZpbHRybyA9PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBjb25zdCBtZW51RmlsdHJvRGl2ID1cclxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjbWVudUZpbHRyb0RpdicpO1xyXG4gICAgICBjb25zdCBib3Rhb0ZpbHRybyA9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2JvdGFvRmlsdHJvJyk7XHJcbiAgICAgIGNvbnN0IGlzQ2hlY2tib3hDbGlja2VkID1cclxuICAgICAgICBjbGlja2VkRWxlbWVudC5jbGFzc0xpc3QudG9TdHJpbmcoKS5pbmNsdWRlcygncC1jaGVja2JveCcpIHx8XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC50b1N0cmluZygpID09ICcnO1xyXG4gICAgICBjb25zdCBpc0luc2lkZU1lbnUgPVxyXG4gICAgICAgIG1lbnVGaWx0cm9EaXY/LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KSB8fFxyXG4gICAgICAgIGJvdGFvRmlsdHJvPy5jb250YWlucyhjbGlja2VkRWxlbWVudCkgfHxcclxuICAgICAgICBpc0NoZWNrYm94Q2xpY2tlZDtcclxuXHJcbiAgICAgIGlmICghaXNJbnNpZGVNZW51KSB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0eWxlU2V0dGVyKHN0eWxlOiBzdHJpbmcsIGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy5tZW51RmlsdHJvRGl2Lm5hdGl2ZUVsZW1lbnQsIHN0eWxlLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGNoZWNrTWVudUZpbHRybyhjb2w6IGFueSkge1xyXG4gICAgbGV0IGRlbGV0ZWRDb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5kZWxldGVkQ29sdW5zLmZpbmQoXHJcbiAgICAgICh4OiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4geC5maWVsZCA9PSBjb2wuZmllbGRcclxuICAgICk7XHJcbiAgICBpZiAoZGVsZXRlZENvbHVtbikgY29sLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgIGVsc2UgY29sLmNoZWNrZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ5UG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW0xOiBhbnksIGVsZW0yOiBhbnkpIHtcclxuICAgICAgaWYgKGVsZW0xLnBvc2l0aW9uIDwgZWxlbTIucG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbTEucG9zaXRpb24gPiBlbGVtMi5wb3NpdGlvbikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZGluYW1pY0Rpc2FibGVDb2x1bW4oY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGNvbC5maXhlZENvbHVtbikgcmV0dXJuIGNvbC5maXhlZENvbHVtbjtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tIaWRlQ29sdW1ucygpIHtcclxuICAgIGxldCBoaWRlQ29sdW1uc0NvbmZpZyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXHJcbiAgICAgIChjb2wpID0+IGNvbC5oaWRlQ29sdW1uID09IHRydWVcclxuICAgICk7XHJcbiAgICBoaWRlQ29sdW1uc0NvbmZpZy5mb3JFYWNoKChjb2wpID0+IHRoaXMuZGVsZXRlQ29sdW1uKGNvbC5maWVsZCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tVGVtcGxhdGUodGVtcGxhdGVuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcclxuICB9XHJcblxyXG4gIG9uU3dpdGNoQ2hhbmdlKGVzdGFkbzogYW55LCByb3dEYXRhOiBhbnksIGNvbDogYW55KSB7XHJcbiAgICB0aGlzLm9uU3dpdGNoVGFibGVDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIGVzdGFkbzogZXN0YWRvLFxyXG4gICAgICByb3dEYXRhOiByb3dEYXRhLFxyXG4gICAgICBjb2w6IGNvbCxcclxuICAgIH0pO1xyXG5cclxuICAgIHJvd0RhdGFbY29sLmZpZWxkXSA9IGVzdGFkbztcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRhYmxlQWN0aW9ucygpIHtcclxuICAgIHRoaXMudGFibGVBY3Rpb25zID0gdGhpcy5kYXRhU291cmNlPy5tYXAoKHgpID0+XHJcbiAgICAgIHRoaXMuY29uZmlnLmFjdGlvbnNcclxuICAgICAgICA/IHRoaXMuY29uZmlnLmFjdGlvbnMubWFwKCh5KSA9PiBtYXBUb01lbnVJdGVtKHksIHgpKVxyXG4gICAgICAgIDogW11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvblNvcnQoZTogYW55KSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICB9XHJcbn1cclxuIiwiPGRpdj5cclxuICBAaWYgKGZpbHRyb3NBdmFuY2Fkb3MpIHtcclxuICA8cC1wYW5lbFxyXG4gICAgaGVhZGVyPVwiRmlsdHJvcyBhdmFuw6dhZG9zXCJcclxuICAgIFt0b2dnbGVhYmxlXT1cInRydWVcIlxyXG4gICAgW2NvbGxhcHNlZF09XCJ0cnVlXCJcclxuICAgIChjb2xsYXBzZWRDaGFuZ2UpPVwiY29sbGFwc2VkID0gIWNvbGxhcHNlZFwiXHJcbiAgICBbc3R5bGVdPVwieyAnbWFyZ2luLWJvdHRvbSc6ICcycHgnIH1cIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJpY29uc1wiPlxyXG4gICAgICBAaWYgKCFjb2xsYXBzZWQpIHtcclxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1maWx0ZXJcIj48L2k+XHJcbiAgICAgIH1cclxuICAgICAgPCEtLSDDjWNvbmUgcXVhbmRvIG8gcGFpbmVsIGVzdMOhIGFiZXJ0byAtLT5cclxuICAgICAgQGlmIChjb2xsYXBzZWQpIHtcclxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1taW51c1wiPjwvaT5cclxuICAgICAgfVxyXG4gICAgICA8IS0tIMONY29uZSBxdWFuZG8gbyBwYWluZWwgZXN0w6EgZmVjaGFkbyAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9wLXBhbmVsPlxyXG4gIH0gQGlmIChjb25maWcpIHtcclxuICA8cC10YWJsZVxyXG4gICAgI2R0XHJcbiAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc21cIlxyXG4gICAgW3ZhbHVlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gICAgW3Jvd1NlbGVjdGFibGVdPVwiaXNSb3dTZWxlY3RhYmxlXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCJcclxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcclxuICAgIFtyb3dzXT1cInJvd3NcIlxyXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxyXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxyXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9XCJcclxuICAgIFtyb3dIb3Zlcl09XCJ0cnVlXCJcclxuICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICAgIFtsYXp5XT1cImNvbmZpZy5sYXp5XCJcclxuICAgIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIlxyXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAob25Tb3J0KT1cIm9uU29ydCgkZXZlbnQpXCJcclxuICAgIHJvd0dyb3VwTW9kZT1cInJvd3NwYW5cIlxyXG4gICAgW2dyb3VwUm93c0J5XT1cImNvbmZpZy5maWVsZEdyb3VwXCJcclxuICAgIFtzaG93Rmlyc3RMYXN0SWNvbl09XCJ0YW1hbmhvVGVsYSA+IDk2MCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICBbcGFnZUxpbmtzXT1cInRhbWFuaG9UZWxhID4gOTYwID8gMiA6IDFcIlxyXG4gICAgW3Jlc3BvbnNpdmVdPVwidHJ1ZVwiXHJcbiAgICBbcmVzcG9uc2l2ZUxheW91dF09XCJyZXNwb25zaXZlTGF5b3V0ID8gJ3N0YWNrJyA6ICcnXCJcclxuICAgIFtzY3JvbGxhYmxlXT1cImlzVGFibGVTY3JvbGxhYmxlXCJcclxuICAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcclxuICAgIFtyb3dUcmFja0J5XT1cInJvd1RyYWNrQnlcIlxyXG4gID5cclxuICAgIEBpZiAoY29uZmlnLmVuYWJsZUNhdGlvbikge1xyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkIGNvbC0xMiBwLTAgbS0wXCJcclxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCInI0VBRUFFQSdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICBAaWYgKGNvbmZpZy50aXRsZSkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgZm9udC1ib2xkIG15LTNcIj5cclxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH0gQGlmIChjb25maWcuc3VidGl0bGUpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIG1iLTQgZm9udC1tZWRpdW1cIj5cclxuICAgICAgICAgICAge3sgY29uZmlnLnN1YnRpdGxlIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBtZDpjb2wtNiBsZzpjb2wtNCB7e1xyXG4gICAgICAgICAgICB0YW1hbmhvVGVsYSA8IDc2OCA/ICdjb2wtMTAnIDogJ2NvbC0xMidcclxuICAgICAgICAgIH19IG10LTEgbWItMiBnYXAtMVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgQGlmIChjb25maWcuZW5hYmxlRmlsdGVyKSB7XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXQtaWNvbi1sZWZ0XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxyXG5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgIHBBdXRvRm9jdXNcclxuICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIoZHQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVzcXVpc2FyLi4uXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImgtMnJlbVwiXHJcbiAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAjaW5wdXRGaWVsZFxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgfSBAaWYoZmlsdGVyQ29sdW1uc0J0bikge1xyXG4gICAgICAgICAgPGRpdiAjYm90YW9GaWx0cm8+XHJcbiAgICAgICAgICAgIDxrdi1idXR0b25cclxuICAgICAgICAgICAgICBpZD1cImJvdGFvRmlsdHJvXCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCInYWxpZ25fdmVydGljYWxfdG9wJ1wiXHJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWJyaXJNZW51RmlsdHJvKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIHNldmVyaXR5PVwidGVydGlhcnlcIlxyXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiT2N1bHRhci9FeGliaXIgY29sdW5hc1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9rdi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICNtZW51RmlsdHJvRGl2XHJcbiAgICAgICAgICAgIGlkPVwibWVudUZpbHRyb0RpdlwiXHJcbiAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cIidoaWRkZW4nXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LTQgYmctZ3JheS0yMDAgbWVudS1jb2x1bW5zLWZpbHRyb1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxwLWNhcmQgc3R5bGVDbGFzcz1cInAtMlwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiB0ZXh0LW1lZGl1bSB3LTE1cmVtIHAtMVwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IGNoZWNrTWVudUZpbHRybyhjb2wpIH19XHJcbiAgICAgICAgICAgICAgICA8cC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAjZmlsdGVyQ29sdW1uc1xyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sLmhlYWRlclwiXHJcbiAgICAgICAgICAgICAgICAgIFtiaW5hcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImRpbmFtaWNDb2x1bW5TZXQoJGV2ZW50LCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2wuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpbmFtaWNEaXNhYmxlQ29sdW1uKGNvbClcIlxyXG4gICAgICAgICAgICAgICAgPjwvcC1jaGVja2JveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9wLWNhcmQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgY29sLTIganVzdGlmeS1jb250ZW50LWVuZCBnYXAtMlwiPlxyXG4gICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zTG90ZTsgdHJhY2sgaTsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIEBpZiAoKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkgJiZcclxuICAgICAgICAgICAgKGdldE9yRXhlY3V0ZShhY3Rpb24udmlzaWJsZSwgc2VsZWN0ZWRJdGVtcykgPz8gdHJ1ZSkpIHtcclxuICAgICAgICAgICAgPGt2LWJ1dHRvblxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImFjdGlvbj8uY29tbWFuZCgpOyBhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImdldE9yRXhlY3V0ZShhY3Rpb24udG9vbHRpcCwgc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiXHJcbiAgICAgICAgICAgICAgICAoZ2V0T3JFeGVjdXRlKGFjdGlvbi50b29sdGlwLCBzZWxlY3RlZEl0ZW1zKT8ubGVuZ3RoID8/XHJcbiAgICAgICAgICAgICAgICAgIDAgPiA3KSAmJlxyXG4gICAgICAgICAgICAgICAgY29uZmlnLmFjdGlvbnNMb3RlICYmXHJcbiAgICAgICAgICAgICAgICBpID09IGNvbmZpZy5hY3Rpb25zTG90ZS5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICAgID8gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICAgIDogJ2JvdHRvbSdcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmRpc2FibGVkLCBzZWxlY3RlZEl0ZW1zKSB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5pY29uLCBzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImFjdGlvbi5zZXZlcml0eSB8fCAndGVydGlhcnknXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIH1cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICBAaWYgKGNvbmZpZy5lbmFibGVTZWxlY3QpIHtcclxuICAgICAgICA8dGg+XHJcbiAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94XHJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZEhlYWRlckNoZWNrYm94XCJcclxuICAgICAgICAgID48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIH0gQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICBjbGFzcz1cInRleHQtc21cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgIGNvbC5jZW50cmFsaXplICYmICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIEBpZiAoY29sLnNvcnRhYmxlKSB7XHJcbiAgICAgICAgICAgIDxwLXNvcnRJY29uXHJcbiAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEwcHhcIlxyXG4gICAgICAgICAgICA+PC9wLXNvcnRJY29uPlxyXG4gICAgICAgICAgICB9IEBpZiAoY29sLmhlYWRlclRvb2x0aXApIHtcclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wuaGVhZGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgPmluZm88L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIH0gQGlmIChjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgcFRlbXBsYXRlPVwiYm9keVwiXHJcbiAgICAgIGxldC1yb3dEYXRhXHJcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICAgIGxldC1yb3dncm91cD1cInJvd2dyb3VwXCJcclxuICAgICAgbGV0LXJvd3NwYW49XCJyb3dzcGFuXCJcclxuICAgICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxyXG4gICAgPlxyXG4gICAgICA8dHJcclxuICAgICAgICAoZGJsY2xpY2spPVwiZG91YmxlQ2xpY2soJGV2ZW50LCByb3dEYXRhKVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBjYXBpdGFsaXplOiB0YWJsZUNhcHRhbGl6ZWQsICdsYXN0Jzogcm93SW5kZXggPT09IGRhdGFTb3VyY2UubGVuZ3RoIC0gMSAgfVwiXHJcbiAgICAgICAgY2xhc3M9XCJ0ci10ZCB7e2lzRGlzYWJsZWRSb3cocm93RGF0YSkgPyAnZGlzYWJsZWQtcm93JyA6ICcnfX1cIlxyXG4gICAgICA+XHJcbiAgICAgICAgQGlmIChjb25maWcuZW5hYmxlU2VsZWN0KSB7IFxyXG4gICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiA4cHggIWltcG9ydGFudFwiPlxyXG4gICAgICAgICAgPHAtdGFibGVDaGVja2JveFxyXG4gICAgICAgICAgICBbdmFsdWVdPVwicm93RGF0YVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YSlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgPjwvcC10YWJsZUNoZWNrYm94PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgfSBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIEBpZiAocm93Z3JvdXAgJiYgIWNvbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwicm93Z3JvdXAgJiYgY29sLmdyb3VwZWQgPyByb3dzcGFuIDogbnVsbFwiXHJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCJcclxuICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBAaWYgKCFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKSkge1xyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyIHt7XHJcbiAgICAgICAgICAgICAgICAgIGNvbC5jZW50cmFsaXplICYmICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcCAmJiBjb2wudG9vbHRpcChyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQGlmKGNvbC50YWdDb2xvcikge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKGNvbC5pY29uKSB7XHJcbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiY29sLmljb24gKyAnIG1yLTInXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICB9IEBpZiAoaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCkge1xyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgID57eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICBAaWYgKGlzSW1hZ2VGaWVsZChjb2wpKSB7XHJcbiAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIH0gQGlmIChjb2wuaWNvbkZpZWxkKSB7XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxyXG4gICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt7IHJldHVybkNsYXNzSWNvbihyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgQGlmICghY29sLmljb25GaWVsZCAmJiAhaXNTd2l0Y2hGaWVsZChjb2wpKSB7XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgICAgICBjb2wuY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdID8gXCJjaGVja1wiIDogXCJjbG9zZVwiIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgfSBAaWYgKGlzU3dpdGNoRmllbGQoY29sKSkge1xyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgICAgICAnIGZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2hcclxuICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgfSBAaWYgKCFyb3dncm91cCAmJiAhY29sLmdyb3VwZWQgJiYgIWNvbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgPHRkIGNsYXNzPVwicm93VGFibGVcIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIlxyXG4gICAgICAgICAgICAgIFtjbGFzc109XCJcclxuICAgICAgICAgICAgICAgIHJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgICAgJyBmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciAnICtcclxuICAgICAgICAgICAgICAgIChjb2wuY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcicpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICBjb2wudG9vbHRpcCAmJiBjb2wudG9vbHRpcChyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgQGlmKGNvbC50YWdDb2xvcikge1xyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGFnXCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXBUYWcgJiZcclxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXBUYWcocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50YWdDb2xvcihyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICB9IEBpZiAoIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpKVxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIEBpZiAoY29sLmljb24pIHtcclxuICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH0gQGlmIChpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5DbGFzc0NoaXAocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgQGlmIChpc0ltYWdlRmllbGQoY29sKSkge1xyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZVwiIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIiAvPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICB9IEBpZiAoY29sLmljb25GaWVsZCkge1xyXG4gICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1pY29ucyc6IGNvbC5pbmRJY29uTWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtci0yJzogIWNvbC5pbmRJY29uTWF0ZXJpYWxcclxuICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxyXG4gICAgICAgICAgICAgIEBpZiAoIWNvbC5pY29uRmllbGQgJiYgIWlzU3dpdGNoRmllbGQoY29sKSkge1xyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIge3tcclxuICAgICAgICAgICAgICAgICAgY29sLmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwICYmIGNvbC50b29sdGlwKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfSBAaWYgKGlzU3dpdGNoRmllbGQoY29sKSkge1xyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgICAgICAnIGZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2hcclxuICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgfSBAaWYgKGNvbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgPHRkIGNsYXNzPVwicm93VGFibGVcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZVwiPnt7IGNvbC5oZWFkZXIgfX06PC9zcGFuPlxyXG4gICAgICAgICAgICBAaWYgKGdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKSkge1xyXG5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIge3tcclxuICAgICAgICAgICAgICAgIGNvbC5jZW50cmFsaXplICYmICcganVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIEBpZihjb2wudGFnQ29sb3IpIHtcclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLnRvb2x0aXBUYWcgJiYgY29sLnRvb2x0aXBUYWcocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvd0RhdGEgfVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICB9IEBpZiAoY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCI+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGN1cnNvci1wb2ludGVyIGljb24tbW9yZS1ob3JpeiBwLTFcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAyNXB4XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBtb3JlX2hvcml6XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxwLXRpZXJlZE1lbnVcclxuICAgICAgICAgICAgICAjbWVudVxyXG4gICAgICAgICAgICAgIFtwb3B1cF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbbW9kZWxdPVwidGFibGVBY3Rpb25zW3Jvd0luZGV4IC0gYWN0aW9uc09mZnNldF1cIlxyXG4gICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgID48L3AtdGllcmVkTWVudT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAyXCJcclxuICAgICAgICAgIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1tZWRpdW0gbS0wXCI+TmVuaHVtIHJlZ2lzdHJvIGVuY29udHJhZG88L3A+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRhYmxlPlxyXG4gIH1cclxuPC9kaXY+XHJcblxyXG48bGlua1xyXG4gIHJlbD1cInN0eWxlc2hlZXRcIlxyXG4gIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2ljb24/ZmFtaWx5PU1hdGVyaWFsK0ljb25zXCJcclxuLz5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9TWF0ZXJpYWwrU3ltYm9scytPdXRsaW5lZDpvcHN6LHdnaHQsRklMTCxHUkFEQDQ4LDQwMCwwLDBcIlxyXG4vPlxyXG4iXX0=