@fundamental-ngx/platform 0.48.0-rc.9 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/approval-flow/approval-flow-node/approval-flow-node.component.d.ts +0 -2
  2. package/button/button.component.d.ts +7 -8
  3. package/dynamic-page/dynamic-page.component.d.ts +24 -15
  4. package/dynamic-page/dynamic-page.tokens.d.ts +3 -0
  5. package/dynamic-page/index.d.ts +2 -1
  6. package/dynamic-page/platform-dynamic-page.interface.d.ts +22 -0
  7. package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +4 -4
  8. package/esm2022/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.mjs +4 -4
  9. package/esm2022/approval-flow/approval-flow-messages/approval-flow-messages.component.mjs +3 -3
  10. package/esm2022/approval-flow/approval-flow-node/approval-flow-drop-zone.directive.mjs +3 -3
  11. package/esm2022/approval-flow/approval-flow-node/approval-flow-node.component.mjs +5 -7
  12. package/esm2022/approval-flow/approval-flow-select-type/approval-flow-select-type.component.mjs +3 -3
  13. package/esm2022/approval-flow/approval-flow-team-list/approval-flow-team-list.component.mjs +3 -3
  14. package/esm2022/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.mjs +3 -3
  15. package/esm2022/approval-flow/approval-flow-user-details/approval-flow-user-details.component.mjs +3 -3
  16. package/esm2022/approval-flow/approval-flow-user-list/approval-flow-user-list.component.mjs +3 -3
  17. package/esm2022/approval-flow/approval-flow.component.mjs +5 -5
  18. package/esm2022/approval-flow/approval-flow.module.mjs +4 -4
  19. package/esm2022/approval-flow/services/approval-flow-add-node-view.service.mjs +3 -3
  20. package/esm2022/button/button.component.mjs +14 -15
  21. package/esm2022/button/button.module.mjs +4 -4
  22. package/esm2022/dynamic-page/directives/dynamic-page-header-subtitle.directive.mjs +3 -3
  23. package/esm2022/dynamic-page/directives/dynamic-page-header-title.directive.mjs +3 -3
  24. package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content-host.component.mjs +3 -3
  25. package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content.component.mjs +3 -3
  26. package/esm2022/dynamic-page/dynamic-page-footer/dynamic-page-footer.component.mjs +3 -3
  27. package/esm2022/dynamic-page/dynamic-page-header/actions/global-actions/dynamic-page-global-actions.component.mjs +3 -3
  28. package/esm2022/dynamic-page/dynamic-page-header/actions/layout-actions/dynamic-page-layout-actions.component.mjs +3 -3
  29. package/esm2022/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +3 -3
  30. package/esm2022/dynamic-page/dynamic-page-header/key-info/dynamic-page-key-info.component.mjs +3 -3
  31. package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title-image.component.mjs +3 -3
  32. package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title.component.mjs +3 -3
  33. package/esm2022/dynamic-page/dynamic-page.component.mjs +48 -35
  34. package/esm2022/dynamic-page/dynamic-page.config.mjs +3 -3
  35. package/esm2022/dynamic-page/dynamic-page.module.mjs +4 -4
  36. package/esm2022/dynamic-page/dynamic-page.tokens.mjs +3 -0
  37. package/esm2022/dynamic-page/index.mjs +3 -2
  38. package/esm2022/dynamic-page/platform-dynamic-page.interface.mjs +2 -0
  39. package/esm2022/feed-input/feed-input.component.mjs +6 -6
  40. package/esm2022/feed-input/feed-input.module.mjs +4 -4
  41. package/esm2022/form/auto-complete/auto-complete.directive.mjs +3 -3
  42. package/esm2022/form/auto-complete/auto-complete.module.mjs +4 -4
  43. package/esm2022/form/checkbox/checkbox.component.mjs +11 -43
  44. package/esm2022/form/checkbox/checkbox.module.mjs +4 -4
  45. package/esm2022/form/checkbox-group/checkbox-group.component.mjs +21 -63
  46. package/esm2022/form/checkbox-group/checkbox-group.module.mjs +4 -4
  47. package/esm2022/form/combobox/combobox/combobox.component.mjs +33 -63
  48. package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +15 -22
  49. package/esm2022/form/combobox/combobox-mobile/combobox-mobile.module.mjs +4 -4
  50. package/esm2022/form/combobox/combobox.config.mjs +3 -3
  51. package/esm2022/form/combobox/combobox.module.mjs +4 -4
  52. package/esm2022/form/combobox/commons/base-combobox.mjs +24 -58
  53. package/esm2022/form/combobox/directives/combobox-item.directive.mjs +15 -15
  54. package/esm2022/form/date-picker/date-picker.component.mjs +21 -57
  55. package/esm2022/form/date-picker/date-picker.module.mjs +4 -4
  56. package/esm2022/form/datetime-picker/datetime-picker.component.mjs +22 -60
  57. package/esm2022/form/datetime-picker/datetime-picker.module.mjs +4 -4
  58. package/esm2022/form/form-generator/base-dynamic-form-generator-control.mjs +3 -3
  59. package/esm2022/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.mjs +5 -9
  60. package/esm2022/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.mjs +5 -9
  61. package/esm2022/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.mjs +5 -9
  62. package/esm2022/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.mjs +5 -9
  63. package/esm2022/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.mjs +5 -9
  64. package/esm2022/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.mjs +4 -4
  65. package/esm2022/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.mjs +5 -9
  66. package/esm2022/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.mjs +5 -9
  67. package/esm2022/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.mjs +5 -9
  68. package/esm2022/form/form-generator/dynamic-form-control-field.directive.mjs +3 -3
  69. package/esm2022/form/form-generator/dynamic-form-control.directive.mjs +3 -3
  70. package/esm2022/form/form-generator/fdp-form-generator.module.mjs +4 -4
  71. package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +27 -13
  72. package/esm2022/form/form-generator/form-generator-components-accessor.service.mjs +3 -3
  73. package/esm2022/form/form-generator/form-generator-field/form-generator-field.component.mjs +3 -3
  74. package/esm2022/form/form-generator/form-generator.service.mjs +11 -16
  75. package/esm2022/form/form-generator/interfaces/dynamic-form-item.mjs +1 -1
  76. package/esm2022/form/form-generator/pipes/get-hint-options.pipe.mjs +3 -3
  77. package/esm2022/form/form-generator/pipes/get-ordered-form-controls.pipe.mjs +3 -3
  78. package/esm2022/form/form-group/fdp-form.module.mjs +4 -4
  79. package/esm2022/form/form-group/form-field/form-field.component.mjs +40 -47
  80. package/esm2022/form/form-group/form-field-error/form-field-error-description.directive.mjs +3 -3
  81. package/esm2022/form/form-group/form-field-error/form-field-error-heading.directive.mjs +3 -3
  82. package/esm2022/form/form-group/form-field-error/form-field-error.directive.mjs +3 -3
  83. package/esm2022/form/form-group/form-field-extras/form-field-extras.component.mjs +3 -3
  84. package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +4 -4
  85. package/esm2022/form/form-group/form-group-header/form-group-header.component.mjs +3 -3
  86. package/esm2022/form/form-group/form-group.component.mjs +40 -50
  87. package/esm2022/form/form-group/pipes/field-group-row-value.pipe.mjs +3 -3
  88. package/esm2022/form/form-group/services/form-field-layout.service.mjs +3 -3
  89. package/esm2022/form/input/fdp-input.module.mjs +4 -4
  90. package/esm2022/form/input/input.component.mjs +16 -48
  91. package/esm2022/form/input-group/addon-body.component.mjs +4 -5
  92. package/esm2022/form/input-group/addon.component.mjs +3 -3
  93. package/esm2022/form/input-group/input-group.component.mjs +13 -46
  94. package/esm2022/form/input-group/input-group.config.mjs +3 -3
  95. package/esm2022/form/input-group/input-group.module.mjs +4 -4
  96. package/esm2022/form/input-group/input.component.mjs +3 -3
  97. package/esm2022/form/input-message-group-with-template/input-message-group-with-template.component.mjs +3 -3
  98. package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +64 -102
  99. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +25 -71
  100. package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +18 -26
  101. package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.mjs +4 -4
  102. package/esm2022/form/multi-combobox/multi-combobox.config.mjs +3 -3
  103. package/esm2022/form/multi-combobox/multi-combobox.interface.mjs +1 -1
  104. package/esm2022/form/multi-combobox/multi-combobox.module.mjs +4 -4
  105. package/esm2022/form/multi-input/base-multi-input.mjs +43 -83
  106. package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +13 -21
  107. package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.module.mjs +4 -4
  108. package/esm2022/form/multi-input/multi-input.component.mjs +32 -91
  109. package/esm2022/form/multi-input/multi-input.config.mjs +3 -3
  110. package/esm2022/form/multi-input/multi-input.module.mjs +4 -4
  111. package/esm2022/form/radio-group/radio/radio.component.mjs +12 -44
  112. package/esm2022/form/radio-group/radio-group.component.mjs +32 -74
  113. package/esm2022/form/radio-group/radio-group.module.mjs +4 -4
  114. package/esm2022/form/select/commons/base-select.mjs +59 -101
  115. package/esm2022/form/select/select/select.component.mjs +17 -60
  116. package/esm2022/form/select/select.config.mjs +3 -3
  117. package/esm2022/form/select/select.module.mjs +4 -4
  118. package/esm2022/form/step-input/base.step-input.mjs +72 -85
  119. package/esm2022/form/step-input/number/number-step-input.component.mjs +14 -53
  120. package/esm2022/form/step-input/step-input-action-button.mjs +9 -13
  121. package/esm2022/form/step-input/step-input-control.directive.mjs +3 -3
  122. package/esm2022/form/step-input/step-input-decrement.directive.mjs +9 -13
  123. package/esm2022/form/step-input/step-input-increment.directive.mjs +9 -13
  124. package/esm2022/form/step-input/step-input.config.mjs +3 -3
  125. package/esm2022/form/step-input/step-input.module.mjs +4 -4
  126. package/esm2022/form/switch/switch/switch.component.mjs +12 -49
  127. package/esm2022/form/switch/switch/switch.config.mjs +3 -3
  128. package/esm2022/form/switch/switch.module.mjs +4 -4
  129. package/esm2022/form/text-area/text-area.component.mjs +14 -45
  130. package/esm2022/form/text-area/text-area.config.mjs +3 -3
  131. package/esm2022/form/text-area/text-area.module.mjs +4 -4
  132. package/esm2022/form/time-picker/time-picker.component.mjs +11 -42
  133. package/esm2022/form/time-picker/time-picker.module.mjs +4 -4
  134. package/esm2022/fundamental-ngx.module.mjs +4 -4
  135. package/esm2022/icon-tab-bar/components/closable-icon-tab-bar.class.mjs +6 -6
  136. package/esm2022/icon-tab-bar/components/icon-tab-bar-base.class.mjs +85 -90
  137. package/esm2022/icon-tab-bar/components/icon-tab-bar-filter-type/icon-tab-bar-filter-type.component.mjs +21 -9
  138. package/esm2022/icon-tab-bar/components/icon-tab-bar-icon-type/icon-tab-bar-icon-type.component.mjs +26 -9
  139. package/esm2022/icon-tab-bar/components/icon-tab-bar-process-type/icon-tab-bar-process-type.component.mjs +40 -26
  140. package/esm2022/icon-tab-bar/components/icon-tab-bar-tab/icon-tab-bar-tab.component.mjs +76 -0
  141. package/esm2022/icon-tab-bar/components/icon-tab-bar-text-type/icon-tab-bar-text-type.component.mjs +28 -16
  142. package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover/icon-tab-bar-popover.component.mjs +14 -5
  143. package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover-base.class.mjs +3 -3
  144. package/esm2022/icon-tab-bar/components/popovers/text-type-popover/text-type-popover.component.mjs +5 -5
  145. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.mjs +12 -21
  146. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.mjs +10 -12
  147. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.mjs +10 -11
  148. package/esm2022/icon-tab-bar/directives/icon-tab-bar-free-content.directive.mjs +14 -0
  149. package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +208 -27
  150. package/esm2022/icon-tab-bar/icon-tab-bar.module.mjs +19 -9
  151. package/esm2022/icon-tab-bar/index.mjs +3 -1
  152. package/esm2022/icon-tab-bar/interfaces/tab-config.interface.mjs +1 -1
  153. package/esm2022/info-label/info-label.component.mjs +6 -4
  154. package/esm2022/info-label/info-label.module.mjs +4 -4
  155. package/esm2022/link/link.component.mjs +15 -23
  156. package/esm2022/link/link.module.mjs +4 -4
  157. package/esm2022/list/action-list-item/action-list-item.component.mjs +5 -5
  158. package/esm2022/list/action-list-item/action-list-item.module.mjs +4 -4
  159. package/esm2022/list/base-list-item.mjs +20 -22
  160. package/esm2022/list/display-list-item/display-list-item.component.mjs +5 -5
  161. package/esm2022/list/display-list-item/display-list-item.module.mjs +4 -4
  162. package/esm2022/list/free-content-list-item/free-content-list-item.component.mjs +5 -5
  163. package/esm2022/list/list-group-footer.component.mjs +5 -5
  164. package/esm2022/list/list-group-header.component.mjs +7 -7
  165. package/esm2022/list/list.component.mjs +25 -66
  166. package/esm2022/list/list.config.mjs +3 -3
  167. package/esm2022/list/list.module.mjs +4 -4
  168. package/esm2022/list/load-more-content.directive.mjs +3 -3
  169. package/esm2022/list/object-list-item/object-list-item-row.component.mjs +6 -6
  170. package/esm2022/list/object-list-item/object-list-item.component.mjs +5 -5
  171. package/esm2022/list/object-list-item/object-list-item.module.mjs +4 -4
  172. package/esm2022/list/standard-list-item/standard-list-item.component.mjs +5 -5
  173. package/esm2022/list/standard-list-item/standard-list-item.module.mjs +4 -4
  174. package/esm2022/menu/menu-item.component.mjs +5 -5
  175. package/esm2022/menu/menu-trigger.directive.mjs +3 -3
  176. package/esm2022/menu/menu.component.mjs +5 -6
  177. package/esm2022/menu/menu.module.mjs +4 -4
  178. package/esm2022/menu-button/menu-button.component.mjs +14 -9
  179. package/esm2022/menu-button/menu-button.module.mjs +4 -4
  180. package/esm2022/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.mjs +11 -14
  181. package/esm2022/message-popover/components/message-view/message-view.component.mjs +4 -4
  182. package/esm2022/message-popover/directives/message-popover-form-item.directive.mjs +3 -3
  183. package/esm2022/message-popover/message-popover.component.mjs +53 -54
  184. package/esm2022/message-popover/models/message-popover-wrapper.interface.mjs +1 -1
  185. package/esm2022/message-popover/platform-message-popover.module.mjs +4 -4
  186. package/esm2022/object-marker/object-marker.component.mjs +10 -5
  187. package/esm2022/object-marker/object-marker.module.mjs +4 -4
  188. package/esm2022/object-status/object-status.component.mjs +13 -8
  189. package/esm2022/object-status/object-status.module.mjs +4 -4
  190. package/esm2022/page-footer/page-footer.component.mjs +8 -10
  191. package/esm2022/page-footer/page-footer.module.mjs +4 -4
  192. package/esm2022/panel/panel-actions.component.mjs +3 -3
  193. package/esm2022/panel/panel-content/panel-content.component.mjs +3 -3
  194. package/esm2022/panel/panel.component.mjs +8 -9
  195. package/esm2022/panel/panel.config.mjs +3 -3
  196. package/esm2022/panel/panel.module.mjs +4 -4
  197. package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +12 -22
  198. package/esm2022/search-field/search-field.component.mjs +36 -42
  199. package/esm2022/search-field/search-field.module.mjs +4 -4
  200. package/esm2022/settings-generator/controls/theme-selector-list/theme-selector-list.component.mjs +6 -6
  201. package/esm2022/settings-generator/default-config.mjs +2 -2
  202. package/esm2022/settings-generator/layouts/base-settings-generator-layout.mjs +3 -3
  203. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +3 -3
  204. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +3 -3
  205. package/esm2022/settings-generator/models/settings.model.mjs +1 -1
  206. package/esm2022/settings-generator/settings-generator-content/settings-generator-content.component.mjs +34 -28
  207. package/esm2022/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.mjs +4 -5
  208. package/esm2022/settings-generator/settings-generator-layout-accessor.service.mjs +3 -3
  209. package/esm2022/settings-generator/settings-generator.component.mjs +6 -6
  210. package/esm2022/settings-generator/settings-generator.module.mjs +4 -4
  211. package/esm2022/settings-generator/settings-generator.service.mjs +12 -13
  212. package/esm2022/shared/base.mjs +30 -18
  213. package/esm2022/shared/form/base.input.mjs +70 -69
  214. package/esm2022/shared/form/collection-base.input.mjs +7 -49
  215. package/esm2022/shared/form/inline-layout-collection-base.input.mjs +25 -66
  216. package/esm2022/shared/pipes/convert-bytes/convert-bytes.pipe.mjs +3 -3
  217. package/esm2022/shared/pipes/pipe.module.mjs +4 -4
  218. package/esm2022/shared/platform.config.mjs +3 -3
  219. package/esm2022/slider/slider.component.mjs +11 -43
  220. package/esm2022/slider/slider.module.mjs +4 -4
  221. package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/base-smart-filter-bar-condition-field.mjs +11 -14
  222. package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/smart-filter-bar-condition-field.component.mjs +8 -16
  223. package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +6 -6
  224. package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +13 -18
  225. package/esm2022/smart-filter-bar/directives/smart-filter-bar-field-definition.directive.mjs +22 -47
  226. package/esm2022/smart-filter-bar/directives/smart-filter-bar-subject.directive.mjs +12 -10
  227. package/esm2022/smart-filter-bar/directives/smart-filter-bar-toolbar-item.directive.mjs +3 -3
  228. package/esm2022/smart-filter-bar/smart-filter-bar.class.mjs +3 -3
  229. package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +73 -57
  230. package/esm2022/smart-filter-bar/smart-filter-bar.module.mjs +4 -4
  231. package/esm2022/smart-filter-bar/smart-filter-bar.service.mjs +3 -3
  232. package/esm2022/split-menu-button/split-menu-button.component.mjs +17 -24
  233. package/esm2022/split-menu-button/split-menu-button.module.mjs +4 -4
  234. package/esm2022/table/components/no-data-wrapper/no-data-wrapper.component.mjs +3 -3
  235. package/esm2022/table/components/reset-button/reset-button.component.mjs +8 -9
  236. package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +10 -9
  237. package/esm2022/table/components/table-column/table-column.component.mjs +3 -3
  238. package/esm2022/table/components/table-column-resizer/table-column-resizer.component.mjs +11 -14
  239. package/esm2022/table/components/table-editable-cell/table-editable-cell.component.mjs +4 -4
  240. package/esm2022/table/components/table-group-row/table-group-row.component.mjs +6 -10
  241. package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +31 -15
  242. package/esm2022/table/components/table-header-row/table-header-row.component.mjs +19 -24
  243. package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +9 -11
  244. package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +4 -4
  245. package/esm2022/table/components/table-p13-dialog/filtering/filtering.component.mjs +8 -11
  246. package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +8 -11
  247. package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +11 -14
  248. package/esm2022/table/components/table-p13-dialog/table-p13-columns.component.mjs +3 -3
  249. package/esm2022/table/components/table-p13-dialog/table-p13-dialog.component.mjs +3 -3
  250. package/esm2022/table/components/table-p13-dialog/table-p13-filter.component.mjs +3 -3
  251. package/esm2022/table/components/table-p13-dialog/table-p13-group.component.mjs +3 -3
  252. package/esm2022/table/components/table-p13-dialog/table-p13-sort.component.mjs +3 -3
  253. package/esm2022/table/components/table-popping-row/table-popping-row.component.mjs +7 -8
  254. package/esm2022/table/components/table-row/table-row.component.mjs +12 -17
  255. package/esm2022/table/components/table-toolbar/table-toolbar-actions.component.mjs +3 -3
  256. package/esm2022/table/components/table-toolbar/table-toolbar-left-actions.component.mjs +3 -3
  257. package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +38 -23
  258. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-custom.component.mjs +3 -3
  259. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.mjs +3 -3
  260. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-single-select.component.mjs +3 -3
  261. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-step.component.mjs +4 -4
  262. package/esm2022/table/components/table-view-settings-dialog/filtering/filters-list-step.component.mjs +4 -4
  263. package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +8 -11
  264. package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +9 -12
  265. package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +9 -12
  266. package/esm2022/table/components/table-view-settings-dialog/table-view-settings-dialog.component.mjs +3 -3
  267. package/esm2022/table/components/table-view-settings-dialog/table-view-settings-filter.component.mjs +3 -3
  268. package/esm2022/table/table.component.mjs +138 -62
  269. package/esm2022/table/table.module.mjs +4 -4
  270. package/esm2022/table-helpers/directives/platform-table-column-responsive.directive.mjs +3 -3
  271. package/esm2022/table-helpers/directives/table-cell-header-popover.directive.mjs +4 -4
  272. package/esm2022/table-helpers/directives/table-cell-resizable.directive.mjs +20 -23
  273. package/esm2022/table-helpers/directives/table-cell-selectable.directive.mjs +3 -3
  274. package/esm2022/table-helpers/directives/table-cell.directive.mjs +12 -12
  275. package/esm2022/table-helpers/directives/table-data-source.directive.mjs +10 -9
  276. package/esm2022/table-helpers/directives/table-draggable.directive.mjs +3 -3
  277. package/esm2022/table-helpers/directives/table-header-resizer.directive.mjs +3 -3
  278. package/esm2022/table-helpers/directives/table-header.directive.mjs +6 -6
  279. package/esm2022/table-helpers/directives/table-initial-state.directive.mjs +5 -5
  280. package/esm2022/table-helpers/directives/table-scrollable.directive.mjs +3 -3
  281. package/esm2022/table-helpers/directives/table-view-settings-filter-custom.directive.mjs +3 -3
  282. package/esm2022/table-helpers/directives/table-virtual-scroll.directive.mjs +3 -3
  283. package/esm2022/table-helpers/pipes/cell-styles.pipe.mjs +3 -3
  284. package/esm2022/table-helpers/pipes/column-resizable-side.pipe.mjs +3 -3
  285. package/esm2022/table-helpers/pipes/column-sorting-direction.pipe.mjs +3 -3
  286. package/esm2022/table-helpers/pipes/row-classes.pipe.mjs +3 -3
  287. package/esm2022/table-helpers/pipes/selection-cell-styles.pipe.mjs +3 -3
  288. package/esm2022/table-helpers/services/table-column-resize.service.mjs +22 -20
  289. package/esm2022/table-helpers/services/table-responsive.service.mjs +9 -14
  290. package/esm2022/table-helpers/services/table-row.service.mjs +3 -3
  291. package/esm2022/table-helpers/services/table-scroll-dispatcher.service.mjs +3 -3
  292. package/esm2022/table-helpers/services/table.service.mjs +23 -21
  293. package/esm2022/table-helpers/table-helpers.module.mjs +4 -4
  294. package/esm2022/table-helpers/table.mjs +1 -1
  295. package/esm2022/value-help-dialog/components/base-tab/vhd-base-tab.component.mjs +3 -3
  296. package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +4 -4
  297. package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +28 -8
  298. package/esm2022/value-help-dialog/components/value-help-dialog-filter/value-help-dialog-filter.component.mjs +9 -5
  299. package/esm2022/value-help-dialog/directives/condition-count-message.directive.mjs +3 -3
  300. package/esm2022/value-help-dialog/directives/value-help-column-def.directive.mjs +24 -0
  301. package/esm2022/value-help-dialog/directives/value-help-filter-def.directive.mjs +22 -0
  302. package/esm2022/value-help-dialog/index.mjs +3 -1
  303. package/esm2022/value-help-dialog/models/vhd-component.model.mjs +3 -0
  304. package/esm2022/value-help-dialog/models/vhd-filter.model.mjs +1 -1
  305. package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +59 -32
  306. package/esm2022/value-help-dialog/value-help-dialog.module.mjs +4 -4
  307. package/esm2022/variant-management/components/manage-variant-item/manage-variant-item.component.mjs +4 -4
  308. package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +6 -6
  309. package/esm2022/variant-management/components/variant-management-wrapper/variant-management-wrapper.component.mjs +3 -3
  310. package/esm2022/variant-management/directives/variant-management-dirty-label.directive.mjs +3 -3
  311. package/esm2022/variant-management/variant-management.component.mjs +47 -13
  312. package/esm2022/variant-management/variant-management.module.mjs +4 -4
  313. package/esm2022/wizard-generator/base-wizard-generator.mjs +21 -28
  314. package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +19 -19
  315. package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +12 -18
  316. package/esm2022/wizard-generator/components/wizard-generator/wizard-generator.component.mjs +7 -12
  317. package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +11 -10
  318. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.mjs +4 -4
  319. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.mjs +3 -3
  320. package/esm2022/wizard-generator/directives/wizard-generator-finish-button.directive.mjs +3 -3
  321. package/esm2022/wizard-generator/directives/wizard-generator-go-next-button.directive.mjs +3 -3
  322. package/esm2022/wizard-generator/directives/wizard-generator-review-button.directive.mjs +3 -3
  323. package/esm2022/wizard-generator/directives/wizard-generator-summary-step.directive.mjs +3 -3
  324. package/esm2022/wizard-generator/wizard-dialog-generator.service.mjs +3 -3
  325. package/esm2022/wizard-generator/wizard-generator.module.mjs +4 -4
  326. package/esm2022/wizard-generator/wizard-generator.service.mjs +3 -3
  327. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +42 -44
  328. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  329. package/fesm2022/fundamental-ngx-platform-button.mjs +16 -17
  330. package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
  331. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +88 -130
  332. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  333. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +9 -9
  334. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  335. package/fesm2022/fundamental-ngx-platform-form.mjs +853 -1636
  336. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  337. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +532 -220
  338. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
  339. package/fesm2022/fundamental-ngx-platform-info-label.mjs +9 -7
  340. package/fesm2022/fundamental-ngx-platform-info-label.mjs.map +1 -1
  341. package/fesm2022/fundamental-ngx-platform-link.mjs +18 -26
  342. package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
  343. package/fesm2022/fundamental-ngx-platform-list.mjs +104 -143
  344. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  345. package/fesm2022/fundamental-ngx-platform-menu-button.mjs +16 -11
  346. package/fesm2022/fundamental-ngx-platform-menu-button.mjs.map +1 -1
  347. package/fesm2022/fundamental-ngx-platform-menu.mjs +16 -16
  348. package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
  349. package/fesm2022/fundamental-ngx-platform-message-popover.mjs +71 -74
  350. package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
  351. package/fesm2022/fundamental-ngx-platform-object-marker.mjs +13 -8
  352. package/fesm2022/fundamental-ngx-platform-object-marker.mjs.map +1 -1
  353. package/fesm2022/fundamental-ngx-platform-object-status.mjs +16 -11
  354. package/fesm2022/fundamental-ngx-platform-object-status.mjs.map +1 -1
  355. package/fesm2022/fundamental-ngx-platform-page-footer.mjs +10 -12
  356. package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
  357. package/fesm2022/fundamental-ngx-platform-panel.mjs +19 -20
  358. package/fesm2022/fundamental-ngx-platform-panel.mjs.map +1 -1
  359. package/fesm2022/fundamental-ngx-platform-search-field.mjs +49 -77
  360. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  361. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +75 -72
  362. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
  363. package/fesm2022/fundamental-ngx-platform-shared.mjs +162 -218
  364. package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
  365. package/fesm2022/fundamental-ngx-platform-slider.mjs +12 -44
  366. package/fesm2022/fundamental-ngx-platform-slider.mjs.map +1 -1
  367. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +144 -162
  368. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  369. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +20 -27
  370. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
  371. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +143 -148
  372. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  373. package/fesm2022/fundamental-ngx-platform-table.mjs +366 -291
  374. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  375. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +144 -53
  376. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  377. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +63 -30
  378. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  379. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +82 -98
  380. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
  381. package/fesm2022/fundamental-ngx-platform.mjs +4 -4
  382. package/form/checkbox/checkbox.component.d.ts +4 -6
  383. package/form/checkbox-group/checkbox-group.component.d.ts +3 -8
  384. package/form/combobox/combobox/combobox.component.d.ts +4 -12
  385. package/form/combobox/combobox-mobile/combobox/combobox-mobile.component.d.ts +5 -8
  386. package/form/combobox/commons/base-combobox.d.ts +4 -9
  387. package/form/date-picker/date-picker.component.d.ts +8 -11
  388. package/form/datetime-picker/datetime-picker.component.d.ts +9 -11
  389. package/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.d.ts +0 -2
  390. package/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.d.ts +0 -2
  391. package/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.d.ts +0 -2
  392. package/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.d.ts +0 -2
  393. package/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.d.ts +0 -2
  394. package/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.d.ts +0 -2
  395. package/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.d.ts +0 -2
  396. package/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.d.ts +0 -2
  397. package/form/form-generator/form-generator/form-generator.component.d.ts +3 -1
  398. package/form/form-generator/form-generator.service.d.ts +3 -7
  399. package/form/form-generator/interfaces/dynamic-form-item.d.ts +5 -5
  400. package/form/form-group/form-field/form-field.component.d.ts +16 -20
  401. package/form/form-group/form-group.component.d.ts +36 -35
  402. package/form/input/input.component.d.ts +3 -6
  403. package/form/input-group/addon-body.component.d.ts +0 -1
  404. package/form/input-group/input-group.component.d.ts +4 -5
  405. package/form/multi-combobox/commons/base-multi-combobox.d.ts +13 -16
  406. package/form/multi-combobox/multi-combobox/multi-combobox.component.d.ts +4 -12
  407. package/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.d.ts +6 -9
  408. package/form/multi-combobox/multi-combobox.interface.d.ts +3 -3
  409. package/form/multi-input/base-multi-input.d.ts +10 -15
  410. package/form/multi-input/multi-input-mobile/multi-input-mobile.component.d.ts +5 -8
  411. package/form/multi-input/multi-input.component.d.ts +7 -37
  412. package/form/radio-group/radio/radio.component.d.ts +4 -5
  413. package/form/radio-group/radio-group.component.d.ts +7 -11
  414. package/form/select/commons/base-select.d.ts +11 -18
  415. package/form/select/select/select.component.d.ts +2 -15
  416. package/form/step-input/base.step-input.d.ts +13 -14
  417. package/form/step-input/number/number-step-input.component.d.ts +2 -7
  418. package/form/step-input/step-input-action-button.d.ts +4 -7
  419. package/form/step-input/step-input-decrement.directive.d.ts +2 -5
  420. package/form/step-input/step-input-increment.directive.d.ts +2 -5
  421. package/form/switch/switch/switch.component.d.ts +5 -8
  422. package/form/text-area/text-area.component.d.ts +4 -5
  423. package/form/time-picker/time-picker.component.d.ts +4 -5
  424. package/fundamental-ngx-platform-v0.48.0.tgz +0 -0
  425. package/icon-tab-bar/components/icon-tab-bar-base.class.d.ts +19 -20
  426. package/icon-tab-bar/components/icon-tab-bar-icon-type/icon-tab-bar-icon-type.component.d.ts +2 -0
  427. package/icon-tab-bar/components/icon-tab-bar-tab/icon-tab-bar-tab.component.d.ts +45 -0
  428. package/icon-tab-bar/components/icon-tab-bar-text-type/icon-tab-bar-text-type.component.d.ts +1 -3
  429. package/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.d.ts +5 -8
  430. package/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.d.ts +1 -1
  431. package/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.d.ts +1 -1
  432. package/icon-tab-bar/directives/icon-tab-bar-free-content.directive.d.ts +5 -0
  433. package/icon-tab-bar/icon-tab-bar.component.d.ts +82 -8
  434. package/icon-tab-bar/icon-tab-bar.module.d.ts +7 -1
  435. package/icon-tab-bar/index.d.ts +2 -0
  436. package/icon-tab-bar/interfaces/tab-config.interface.d.ts +13 -5
  437. package/info-label/info-label.component.d.ts +2 -2
  438. package/link/link.component.d.ts +4 -7
  439. package/list/base-list-item.d.ts +4 -6
  440. package/list/list.component.d.ts +6 -15
  441. package/menu-button/menu-button.component.d.ts +7 -4
  442. package/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.d.ts +2 -4
  443. package/message-popover/message-popover.component.d.ts +13 -20
  444. package/message-popover/models/message-popover-wrapper.interface.d.ts +2 -2
  445. package/object-marker/object-marker.component.d.ts +4 -1
  446. package/object-status/object-status.component.d.ts +4 -1
  447. package/package.json +4 -4
  448. package/page-footer/page-footer.component.d.ts +2 -4
  449. package/panel/panel.component.d.ts +2 -3
  450. package/search-field/search-field-mobile/search-field/search-field-mobile.component.d.ts +7 -10
  451. package/search-field/search-field.component.d.ts +10 -19
  452. package/settings-generator/models/settings.model.d.ts +7 -6
  453. package/settings-generator/settings-generator-content/settings-generator-content.component.d.ts +31 -12
  454. package/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.d.ts +0 -2
  455. package/settings-generator/settings-generator.component.d.ts +3 -3
  456. package/settings-generator/settings-generator.service.d.ts +1 -1
  457. package/shared/base.d.ts +11 -4
  458. package/shared/form/base.input.d.ts +24 -16
  459. package/shared/form/collection-base.input.d.ts +1 -9
  460. package/shared/form/inline-layout-collection-base.input.d.ts +5 -12
  461. package/slider/slider.component.d.ts +3 -6
  462. package/smart-filter-bar/components/smart-filter-bar-condition-field/base-smart-filter-bar-condition-field.d.ts +3 -5
  463. package/smart-filter-bar/components/smart-filter-bar-condition-field/smart-filter-bar-condition-field.component.d.ts +0 -5
  464. package/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.d.ts +4 -8
  465. package/smart-filter-bar/directives/smart-filter-bar-field-definition.directive.d.ts +8 -17
  466. package/smart-filter-bar/directives/smart-filter-bar-subject.directive.d.ts +2 -0
  467. package/smart-filter-bar/smart-filter-bar.component.d.ts +28 -22
  468. package/split-menu-button/split-menu-button.component.d.ts +11 -14
  469. package/table/components/reset-button/reset-button.component.d.ts +2 -3
  470. package/table/components/table-cell-header-popover/table-cell-header-popover.component.d.ts +4 -3
  471. package/table/components/table-column-resizer/table-column-resizer.component.d.ts +4 -5
  472. package/table/components/table-group-row/table-group-row.component.d.ts +2 -5
  473. package/table/components/table-header-cell-content/table-header-cell-content.component.d.ts +11 -6
  474. package/table/components/table-header-row/table-header-row.component.d.ts +1 -3
  475. package/table/components/table-p13-dialog/columns/columns.component.d.ts +2 -4
  476. package/table/components/table-p13-dialog/filtering/filtering.component.d.ts +1 -4
  477. package/table/components/table-p13-dialog/grouping/grouping.component.d.ts +1 -4
  478. package/table/components/table-p13-dialog/sorting/sorting.component.d.ts +1 -4
  479. package/table/components/table-row/table-row.component.d.ts +2 -2
  480. package/table/components/table-toolbar/table-toolbar.component.d.ts +24 -8
  481. package/table/components/table-view-settings-dialog/filtering/filters.component.d.ts +1 -4
  482. package/table/components/table-view-settings-dialog/grouping/grouping.component.d.ts +1 -4
  483. package/table/components/table-view-settings-dialog/sorting/sorting.component.d.ts +1 -4
  484. package/table/table.component.d.ts +29 -19
  485. package/table-helpers/directives/table-cell-header-popover.directive.d.ts +2 -3
  486. package/table-helpers/directives/table-cell-resizable.directive.d.ts +1 -3
  487. package/table-helpers/directives/table-data-source.directive.d.ts +1 -1
  488. package/table-helpers/services/table-column-resize.service.d.ts +4 -2
  489. package/table-helpers/services/table-responsive.service.d.ts +3 -5
  490. package/table-helpers/services/table.service.d.ts +12 -10
  491. package/table-helpers/table.d.ts +1 -0
  492. package/value-help-dialog/components/select-tab/select-tab.component.d.ts +9 -2
  493. package/value-help-dialog/components/value-help-dialog-filter/value-help-dialog-filter.component.d.ts +5 -1
  494. package/value-help-dialog/directives/value-help-column-def.directive.d.ts +17 -0
  495. package/value-help-dialog/directives/value-help-filter-def.directive.d.ts +15 -0
  496. package/value-help-dialog/index.d.ts +2 -0
  497. package/value-help-dialog/models/vhd-component.model.d.ts +5 -0
  498. package/value-help-dialog/models/vhd-filter.model.d.ts +3 -0
  499. package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +14 -7
  500. package/variant-management/variant-management.component.d.ts +19 -6
  501. package/wizard-generator/base-wizard-generator.d.ts +9 -12
  502. package/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.d.ts +2 -3
  503. package/wizard-generator/components/wizard-body/wizard-body.component.d.ts +3 -7
  504. package/wizard-generator/components/wizard-generator/wizard-generator.component.d.ts +1 -4
  505. package/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.d.ts +1 -1
  506. package/dynamic-page/dynamic-page.service.d.ts +0 -35
  507. package/esm2022/dynamic-page/dynamic-page.service.mjs +0 -58
  508. package/esm2022/search-field/search-field-mobile/search-field-mobile.module.mjs +0 -16
  509. package/fundamental-ngx-platform-v0.48.0-rc.9.tgz +0 -0
  510. package/search-field/search-field-mobile/search-field-mobile.module.d.ts +0 -7
@@ -1,10 +1,12 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, EventEmitter, Inject, Input, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation, inject } from '@angular/core';
2
2
  import { FormGroupDirective, FormsModule, NgForm, ReactiveFormsModule } from '@angular/forms';
3
- import { FDP_DO_CHECK } from '@fundamental-ngx/platform/shared';
3
+ import { destroyObservable } from '@fundamental-ngx/cdk/utils';
4
+ import { FDP_DO_CHECK, FDP_FORM_SUBMIT } from '@fundamental-ngx/platform/shared';
4
5
  import { BehaviorSubject, Subject, isObservable, merge, of } from 'rxjs';
5
- import { debounceTime, filter, startWith, switchMap, take, takeUntil } from 'rxjs/operators';
6
+ import { debounceTime, filter, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';
6
7
  import { FormGeneratorFieldComponent } from '../form-generator-field/form-generator-field.component';
7
8
  import { NgTemplateOutlet } from '@angular/common';
9
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
10
  import { BusyIndicatorModule } from '@fundamental-ngx/core/busy-indicator';
9
11
  import { SkeletonComponent } from '@fundamental-ngx/core/skeleton';
10
12
  import { DefaultGapLayout, DefaultVerticalFieldLayout, DefaultVerticalLabelLayout } from '../../form-group/constants';
@@ -102,6 +104,8 @@ export class FormGeneratorComponent {
102
104
  this.formSubmittedStatus = new EventEmitter();
103
105
  /** @hidden */
104
106
  this.doCheck$ = new Subject();
107
+ /** @hidden */
108
+ this.ngSubmit$ = new Subject();
105
109
  /**
106
110
  * Set of flags representing if particular form item should be visible to the user.
107
111
  */
@@ -135,7 +139,7 @@ export class FormGeneratorComponent {
135
139
  * @hidden
136
140
  * An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing)
137
141
  */
138
- this._onDestroy$ = new Subject();
142
+ this._destroyRef = inject(DestroyRef);
139
143
  /** @hidden */
140
144
  this._mappedFormitems = new Map();
141
145
  this._defaultHintOptions = {
@@ -165,8 +169,6 @@ export class FormGeneratorComponent {
165
169
  * @hidden
166
170
  */
167
171
  ngOnDestroy() {
168
- this._onDestroy$.next();
169
- this._onDestroy$.complete();
170
172
  this._ngSubmitSubscription?.unsubscribe();
171
173
  }
172
174
  /**
@@ -254,7 +256,7 @@ export class FormGeneratorComponent {
254
256
  this.formControlItems = this._getOrderedControls(form.controls);
255
257
  this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);
256
258
  this._formValueSubscription = this.form.valueChanges
257
- .pipe(debounceTime(50), takeUntil(this._onDestroy$))
259
+ .pipe(debounceTime(50), takeUntilDestroyed(this._destroyRef))
258
260
  .subscribe(async () => {
259
261
  this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);
260
262
  this._cd.markForCheck();
@@ -290,7 +292,9 @@ export class FormGeneratorComponent {
290
292
  _listenToSubmit() {
291
293
  this._ngSubmitSubscription?.unsubscribe();
292
294
  this._ngSubmitSubscription = this.formGroup.ngSubmit
293
- .pipe(switchMap(() => this.formGroup.statusChanges.pipe(startWith(this.formGroup.status), filter((status) => status !== 'PENDING'), take(1), takeUntil(this._onDestroy$))))
295
+ .pipe(tap(() => {
296
+ this.ngSubmit$.next();
297
+ }), switchMap(() => this.formGroup.statusChanges.pipe(startWith(this.formGroup.status), filter((status) => status !== 'PENDING'), take(1), takeUntilDestroyed(this._destroyRef))))
294
298
  .subscribe(async () => {
295
299
  await this._onSubmit();
296
300
  this._listenToSubmit();
@@ -301,7 +305,7 @@ export class FormGeneratorComponent {
301
305
  this._refresh$.next();
302
306
  this._refresh$.complete();
303
307
  this._refresh$ = new Subject();
304
- items.pipe(takeUntil(merge(this._refresh$, this._onDestroy$))).subscribe((formItems) => {
308
+ items.pipe(takeUntil(merge(this._refresh$, destroyObservable(this._destroyRef)))).subscribe((formItems) => {
305
309
  this._mappedFormitems = mapFormItems(formItems);
306
310
  this._generateForm();
307
311
  });
@@ -342,22 +346,32 @@ export class FormGeneratorComponent {
342
346
  }
343
347
  parentItem.items?.delete(name);
344
348
  }
345
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: FormGeneratorComponent, deps: [{ token: i1.FormGeneratorService }, { token: i0.ChangeDetectorRef }, { token: FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS }], target: i0.ɵɵFactoryTarget.Component }); }
346
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.4", type: FormGeneratorComponent, isStandalone: true, selector: "fdp-form-generator", inputs: { formName: "formName", formItems: "formItems", mainTitle: "mainTitle", hideMainTItle: "hideMainTItle", hint: "hint", columnLayout: "columnLayout", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", unifiedLayout: "unifiedLayout", inlineColumnLayout: "inlineColumnLayout", noAdditionalContent: "noAdditionalContent" }, outputs: { formCreated: "formCreated", formSubmitted: "formSubmitted", formSubmittedStatus: "formSubmittedStatus" }, providers: [
349
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormGeneratorComponent, deps: [{ token: i1.FormGeneratorService }, { token: i0.ChangeDetectorRef }, { token: FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS }], target: i0.ɵɵFactoryTarget.Component }); }
350
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", type: FormGeneratorComponent, isStandalone: true, selector: "fdp-form-generator", inputs: { formName: "formName", formItems: "formItems", mainTitle: "mainTitle", hideMainTItle: "hideMainTItle", hint: "hint", columnLayout: "columnLayout", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", unifiedLayout: "unifiedLayout", inlineColumnLayout: "inlineColumnLayout", noAdditionalContent: "noAdditionalContent" }, outputs: { formCreated: "formCreated", formSubmitted: "formSubmitted", formSubmittedStatus: "formSubmittedStatus" }, providers: [
347
351
  {
348
352
  provide: FDP_DO_CHECK,
349
353
  useFactory: (formGenerator) => formGenerator.doCheck$,
350
354
  deps: [FormGeneratorComponent]
355
+ },
356
+ {
357
+ provide: FDP_FORM_SUBMIT,
358
+ useFactory: (formGenerator) => formGenerator.ngSubmit$,
359
+ deps: [FormGeneratorComponent]
351
360
  }
352
361
  ], viewQueries: [{ propertyName: "ngForm", first: true, predicate: NgForm, descendants: true }, { propertyName: "formGroup", first: true, predicate: FormGroupDirective, descendants: true }, { propertyName: "fields", predicate: FormGeneratorFieldComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (_firstLoadingDone) {\n <fd-busy-indicator [loading]=\"formLoading\" [block]=\"true\">\n @if (form) {\n <fdp-form-group\n [hint]=\"hint\"\n [mainTitle]=\"mainTitle\"\n [hideMainTItle]=\"hideMainTItle\"\n [formGroup]=\"form\"\n [columnLayout]=\"columnLayout\"\n [labelColumnLayout]=\"labelColumnLayout\"\n [fieldColumnLayout]=\"fieldColumnLayout\"\n [gapColumnLayout]=\"gapColumnLayout\"\n [unifiedLayout]=\"unifiedLayout\"\n [inlineColumnLayout]=\"inlineColumnLayout\"\n [useForm]=\"true\"\n >\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n @for (field of formControlItems; track _trackFn($index, field)) {\n <ng-template\n [ngTemplateOutlet]=\"field.type === 'field' ? fieldRenderer : groupRenderer\"\n [ngTemplateOutletContext]=\"{\n field: field,\n formFieldName: field.formItem.name,\n rank: field.formItem?.rank || 0\n }\"\n ></ng-template>\n <ng-template\n #fieldRenderer\n let-field=\"field\"\n let-formFieldName=\"formFieldName\"\n let-formGroupName=\"formGroupName\"\n let-rank=\"rank\"\n >\n <ng-container\n *fdpDynamicFormControlField=\"field; show: shouldShowFields[field.formItem.name] !== false\"\n >\n <fdp-form-generator-field\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [shouldShow]=\"shouldShowFields[field.formItem.name] !== false\"\n [field]=\"field\"\n [formFieldName]=\"formFieldName\"\n [formGroupNamePath]=\"formGroupName\"\n [rank]=\"rank\"\n ></fdp-form-generator-field>\n </ng-container>\n </ng-template>\n <ng-template #groupRenderer>\n <fdp-form-field-group\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [label]=\"field.formItem.message || ''\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [formName]=\"field.formItem.name\"\n >\n @for (\n groupField of field | getOrderedFieldControls;\n track _groupTrackFn($index, groupField)\n ) {\n <ng-container\n *fdpDynamicFormControlField=\"\n groupField;\n show: shouldShowFields[groupField.formItem.name!] !== false\n \"\n >\n <fdp-form-generator-field\n [hintOptions]=\"groupField.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [field]=\"groupField\"\n [shouldShow]=\"shouldShowFields[groupField.formItem.name!] !== false\"\n [formFieldName]=\"groupField.formItem.name\"\n [formGroupNamePath]=\"field.formItem.name\"\n [rank]=\"groupField.formItem.rank || 0\"\n ></fdp-form-generator-field>\n </ng-container>\n }\n </fdp-form-field-group>\n </ng-template>\n }\n @if (!noAdditionalContent) {\n <fdp-form-field [column]=\"1\" [rank]=\"formControlItems.length + 1\">\n <!-- For user-defined elements, like submit button -->\n <ng-content></ng-content>\n </fdp-form-field>\n }\n </fdp-form-group>\n }\n </fd-busy-indicator>\n} @else {\n <fd-skeleton width=\"100%\" height=\"100px\" [style.padding.rem]=\"1\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n}\n", dependencies: [{ kind: "ngmodule", type: BusyIndicatorModule }, { kind: "component", type: i2.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "ngmodule", type: FdpFormGroupModule }, { kind: "component", type: i3.FormGroupComponent, selector: "fdp-form-group", inputs: ["id", "name", "editable", "noLabelLayout", "class", "hint", "inlineColumnLayout", "labelColumnLayout", "fieldColumnLayout", "gapColumnLayout", "formGroup", "topTitle", "mainTitle", "hideMainTItle", "object", "i18Strings", "useForm", "columnLayout", "unifiedLayout"], outputs: ["onSubmit"] }, { kind: "component", type: i4.FormFieldComponent, selector: "fdp-form-field", inputs: ["label", "id", "hint", "noLabelLayout", "validators", "rank", "placeholder", "column", "columnLayout", "labelColumnLayout", "fieldColumnLayout", "gapColumnLayout", "i18Strings", "required", "editable", "columns", "disabled", "colon", "formGroupContainer"], outputs: ["onChange", "onColumnChange"] }, { kind: "component", type: i5.FormFieldGroupComponent, selector: "fdp-form-field-group", inputs: ["label", "formName", "formGroupContainer", "labelColumnLayout", "fieldColumnLayout", "gapColumnLayout", "hintOptions"] }, { kind: "directive", type: i6.FormFieldErrorDirective, selector: "[fdpFormFieldError]", inputs: ["fdpFormFieldErrorAs", "fdpFormFieldError", "fdpFormFieldErrorType"] }, { kind: "directive", type: i7.FormFieldErrorHeadingDirective, selector: "[fdpFormFieldErrorHeading]", inputs: ["fdpFormFieldErrorHeadingAs", "fdpFormFieldErrorHeadingType"] }, { kind: "directive", type: i8.FormFieldErrorDescriptionDirective, selector: "[fdpFormFieldErrorDescription]", inputs: ["fdpFormFieldErrorDescriptionAs"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: DynamicFormControlFieldDirective, selector: "[fdpDynamicFormControlField]", inputs: ["fdpDynamicFormControlField", "fdpDynamicFormControlFieldShow"] }, { kind: "component", type: FormGeneratorFieldComponent, selector: "fdp-form-generator-field", inputs: ["field", "form", "i18n", "formFieldName", "formGroupNamePath", "rank", "shouldShow", "hintOptions"] }, { kind: "component", type: SkeletonComponent, selector: "fd-skeleton", inputs: ["animated", "type", "textLines", "width", "height"] }, { kind: "pipe", type: GetOrderedFieldControlsPipe, name: "getOrderedFieldControls" }, { kind: "pipe", type: GetHintOptionsPipe, name: "getHintOptions" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
353
362
  }
354
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: FormGeneratorComponent, decorators: [{
363
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormGeneratorComponent, decorators: [{
355
364
  type: Component,
356
365
  args: [{ selector: 'fdp-form-generator', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
357
366
  {
358
367
  provide: FDP_DO_CHECK,
359
368
  useFactory: (formGenerator) => formGenerator.doCheck$,
360
369
  deps: [FormGeneratorComponent]
370
+ },
371
+ {
372
+ provide: FDP_FORM_SUBMIT,
373
+ useFactory: (formGenerator) => formGenerator.ngSubmit$,
374
+ deps: [FormGeneratorComponent]
361
375
  }
362
376
  ], standalone: true, imports: [
363
377
  BusyIndicatorModule,
@@ -414,4 +428,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
414
428
  type: ViewChildren,
415
429
  args: [FormGeneratorFieldComponent]
416
430
  }] } });
417
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9mb3JtL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZm9ybS9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQixrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakgsT0FBTyxFQUVILFlBQVksRUFLZixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFnQixZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUVyRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxP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RFosS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBU04sbUJBQW1CO3NCQURsQixLQUFLO2dCQVFOLFdBQVc7c0JBRFYsTUFBTTtnQkFRUCxhQUFhO3NCQURaLE1BQU07Z0JBT1AsbUJBQW1CO3NCQURsQixNQUFNO2dCQU9QLE1BQU07c0JBREwsU0FBUzt1QkFBQyxNQUFNO2dCQUtqQixTQUFTO3NCQURSLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUs3QixNQUFNO3NCQURMLFlBQVk7dUJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xTdGF0dXMsIEZvcm1Hcm91cERpcmVjdGl2ZSwgRm9ybXNNb2R1bGUsIE5nRm9ybSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW5MYXlvdXQsXG4gICAgRkRQX0RPX0NIRUNLLFxuICAgIEZpZWxkSGludE9wdGlvbnMsXG4gICAgSGludElucHV0LFxuICAgIEhpbnRPcHRpb25zLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgaXNPYnNlcnZhYmxlLCBtZXJnZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRm9ybUdlbmVyYXRvckZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1nZW5lcmF0b3ItZmllbGQvZm9ybS1nZW5lcmF0b3ItZmllbGQuY29tcG9uZW50JztcblxuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCdXN5SW5kaWNhdG9yTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1c3ktaW5kaWNhdG9yJztcbmltcG9ydCB7IFNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NrZWxldG9uJztcbmltcG9ydCB7IERlZmF1bHRHYXBMYXlvdXQsIERlZmF1bHRWZXJ0aWNhbEZpZWxkTGF5b3V0LCBEZWZhdWx0VmVydGljYWxMYWJlbExheW91dCB9IGZyb20gJy4uLy4uL2Zvcm0tZ3JvdXAvY29uc3RhbnRzJztcbmltcG9ydCB7IEZkcEZvcm1Hcm91cE1vZHVsZSB9IGZyb20gJy4uLy4uL2Zvcm0tZ3JvdXAvZmRwLWZvcm0ubW9kdWxlJztcbmltcG9ydCB7IGRlZmF1bHRGb3JtR2VuZXJhdG9ySGludE9wdGlvbnMgfSBmcm9tICcuLi9jb25maWcvZGVmYXVsdC1mb3JtLWdlbmVyYXRvci1oaW50LW9wdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBEeW5hbWljRm9ybUNvbnRyb2wsXG4gICAgRHluYW1pY0Zvcm1Db250cm9sR3JvdXAsXG4gICAgRHluYW1pY0Zvcm1Hcm91cENvbnRyb2wsXG4gICAgRHluYW1pY0Zvcm1Hcm91cENvbnRyb2xzXG59IGZyb20gJy4uL2R5bmFtaWMtZm9ybS1jb250cm9sJztcbmltcG9ydCB7IER5bmFtaWNGb3JtQ29udHJvbEZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHluYW1pYy1mb3JtLWNvbnRyb2wtZmllbGQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vZm9ybS1nZW5lcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBGRFBfRk9STV9HRU5FUkFUT1JfREVGQVVMVF9ISU5UX09QVElPTlMgfSBmcm9tICcuLi9mb3JtLWdlbmVyYXRvci50b2tlbnMnO1xuaW1wb3J0IHsgZ2V0UGFyZW50SXRlbSwgaXNGb3JtRmllbGRJdGVtLCBtYXBGb3JtSXRlbXMsIHRyYW5zZm9ybUZvcm1JdGVtIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBEeW5hbWljRm9ybUdyb3VwIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9keW5hbWljLWZvcm0tZ3JvdXAnO1xuaW1wb3J0IHtcbiAgICBEeW5hbWljRm9ybUl0ZW0sXG4gICAgRHluYW1pY0Zvcm1JdGVtTWFwLFxuICAgIER5bmFtaWNGb3JtSXRlbVZhbGlkYXRpb25PYmplY3QsXG4gICAgRHluYW1pY0Zvcm1WYWx1ZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2R5bmFtaWMtZm9ybS1pdGVtJztcbmltcG9ydCB7IEdldEhpbnRPcHRpb25zUGlwZSB9IGZyb20gJy4uL3BpcGVzL2dldC1oaW50LW9wdGlvbnMucGlwZSc7XG5pbXBvcnQgeyBHZXRPcmRlcmVkRmllbGRDb250cm9sc1BpcGUgfSBmcm9tICcuLi9waXBlcy9nZXQtb3JkZXJlZC1mb3JtLWNvbnRyb2xzLnBpcGUnO1xuXG5sZXQgZm9ybVVuaXF1ZUlkID0gMDtcblxuZXhwb3J0IHR5cGUgRm9ybUdlbmVyYXRvckFjY2VwdGFibGVJdGVtcyA9IER5bmFtaWNGb3JtSXRlbVtdIHwgT2JzZXJ2YWJsZTxEeW5hbWljRm9ybUl0ZW1bXT47XG5cbmV4cG9ydCBjb25zdCBGRFBfRk9STV9JR05PUkVEX1NUQVRVU0VTOiBGb3JtQ29udHJvbFN0YXR1c1tdID0gWydJTlZBTElEJywgJ1BFTkRJTkcnLCAnRElTQUJMRUQnXTtcblxuZXhwb3J0IGludGVyZmFjZSBTdWJtaXRGb3JtRXZlbnRSZXN1bHQge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBJbmRpY2F0b3IgaWYgdmFsaWRhdGlvbiBoYXMgYmVlbiBwYXNzZWQuXG4gICAgICovXG4gICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRm9ybWF0dGVkIGZvcm0gdmFsdWUuXG4gICAgICovXG4gICAgdmFsdWU6IER5bmFtaWNGb3JtVmFsdWUgfCBudWxsO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGb3JtIEdlbmVyYXRvciBjb21wb25lbnQgcmVwcmVzZW50cyBhIGhpZ2gtbGV2ZWwgY29tcG9uZW50XG4gKiB3aGljaCBpbmNsdWRlcyBAc2VlIEZvcm1Hcm91cCBpbnNpZGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWZvcm0tZ2VuZXJhdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEUF9ET19DSEVDSyxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IChmb3JtR2VuZXJhdG9yOiBGb3JtR2VuZXJhdG9yQ29tcG9uZW50KSA9PiBmb3JtR2VuZXJhdG9yLmRvQ2hlY2skLFxuICAgICAgICAgICAgZGVwczogW0Zvcm1HZW5lcmF0b3JDb21wb25lbnRdXG4gICAgICAgIH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBCdXN5SW5kaWNhdG9yTW9kdWxlLFxuICAgICAgICBGZHBGb3JtR3JvdXBNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBEeW5hbWljRm9ybUNvbnRyb2xGaWVsZERpcmVjdGl2ZSxcbiAgICAgICAgRm9ybUdlbmVyYXRvckZpZWxkQ29tcG9uZW50LFxuICAgICAgICBTa2VsZXRvbkNvbXBvbmVudCxcbiAgICAgICAgR2V0T3JkZXJlZEZpZWxkQ29udHJvbHNQaXBlLFxuICAgICAgICBHZXRIaW50T3B0aW9uc1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1HZW5lcmF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBVbmlxdWUgZm9ybSBuYW1lICovXG4gICAgQElucHV0KClcbiAgICBmb3JtTmFtZSA9IGBmZHAtZm9ybS1nZW5lcmF0b3ItJHtmb3JtVW5pcXVlSWQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExpc3Qgb2YgQHNlZSBEeW5hbWljRm9ybUl0ZW0gcmVwcmVzZW50aW5nIHRoZSBsaXN0IG9mIGl0ZW1zXG4gICAgICogdG8gYmUgcmVuZGVyZWQgaW4gdGhlIGZvcm0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZm9ybUl0ZW1zKGZvcm1JdGVtczogRm9ybUdlbmVyYXRvckFjY2VwdGFibGVJdGVtcykge1xuICAgICAgICBpZiAoIWZvcm1JdGVtcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybUl0ZW1zID0gaXNPYnNlcnZhYmxlKGZvcm1JdGVtcykgPyBmb3JtSXRlbXMgOiBvZihmb3JtSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX29uRm9ybUl0ZW1zQ2hhbmdlKGZvcm1JdGVtcyk7XG4gICAgfVxuICAgIGdldCBmb3JtSXRlbXMoKTogRm9ybUdlbmVyYXRvckFjY2VwdGFibGVJdGVtcyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZvcm0gbWFpbiB0aXRsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1haW5UaXRsZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gaGlkZSBtYWluIHRpdGxlLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZU1haW5USXRsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogSGludCBmb3IgdGhlIG1haW4gdGl0bGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGhpbnQ6IEhpbnRJbnB1dDtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTcGVjaWZ5IHRoZSBjb2x1bW4gbGF5b3V0IGluIHRoZSBmb3JtYXQgYFhMbi1Mbi1Nbi1TbmBcbiAgICAgKiB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgY29sdW1ucyBhbmQgY2FuIGJlIGRpZmZlcmVudCBmb3IgZWFjaCBzaXplLlxuICAgICAqIGVnOiBYTDItTDItTTItUzEgd291bGQgY3JlYXRlIDItY29sdW1uIGxheW91dHMgZm9yIFhMLCBMLFxuICAgICAqIGFuZCBNIHNpemVzIGFuZCBzaW5nbGUtY29sdW1uIGxheW91dCBmb3IgUyBzaXplLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uTGF5b3V0OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBsYWJlbCdzIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsYWJlbENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0ID0gRGVmYXVsdFZlcnRpY2FsTGFiZWxMYXlvdXQ7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGZpZWxkJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpZWxkQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQgPSBEZWZhdWx0VmVydGljYWxGaWVsZExheW91dDtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgZ2FwIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnYXBDb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dCA9IERlZmF1bHRHYXBMYXlvdXQ7XG5cbiAgICAvKiogV2hldGhlciBhbGwgZm9ybSBpdGVtcyBzaG91bGQgaGF2ZSBpZGVudGljYWwgbGF5b3V0IHByb3ZpZGVkIGZvciBmb3JtIGdyb3VwLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdW5pZmllZExheW91dCA9IHRydWU7XG5cbiAgICAvKiogSW5saW5lIGNvbHVtbiBsYXlvdXQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlubGluZUNvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0ID0gRGVmYXVsdFZlcnRpY2FsRmllbGRMYXlvdXQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVtb3ZlcyBleHRyYSBlbXB0eSByb3cuXG4gICAgICogVE9ETzogcmVtb3ZlIGFmdGVyICM3NTMzIGhhcyBiZWVuIGZpeGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9BZGRpdGlvbmFsQ29udGVudCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IHdoaWNoIG5vdGlmaWVzIHBhcmVudCBjb21wb25lbnQgdGhhdCB0aGUgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZFxuICAgICAqIGFuZCBhbGwgY29udHJvbHMgYXJlIGluIHBsYWNlLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1DcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRm9ybUdyb3VwPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IHdoaWNoIG5vdGlmaWVzIHBhcmVudCBjb21wb25lbnQgdGhhdCB0aGUgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkXG4gICAgICogYW5kIHN1Ym1pdHRlZC4gQ29udGFpbnMgZm9ybVxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1TdWJtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNGb3JtVmFsdWU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgd2hpY2ggbm90aWZpZXMgcGFyZW50IGNvbXBvbmVudCB0aGF0IHRoZSBmb3JtIHdhcyBzdWJtaXR0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybVN1Ym1pdHRlZFN0YXR1cyA9IG5ldyBFdmVudEVtaXR0ZXI8U3VibWl0Rm9ybUV2ZW50UmVzdWx0PigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgdGhlIGZvcm0gaW5zdGFuY2UuIEBzZWUgTmdGb3JtXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChOZ0Zvcm0pXG4gICAgbmdGb3JtOiBOZ0Zvcm07XG5cbiAgICAvKiogSW5uZXIgZm9ybSBncm91cCBkaXJlY3RpdmUuICovXG4gICAgQFZpZXdDaGlsZChGb3JtR3JvdXBEaXJlY3RpdmUpXG4gICAgZm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmU7XG5cbiAgICAvKiogSW5uZXIgZm9ybSBmaWVsZHMgKi9cbiAgICBAVmlld0NoaWxkcmVuKEZvcm1HZW5lcmF0b3JGaWVsZENvbXBvbmVudClcbiAgICBmaWVsZHM6IFF1ZXJ5TGlzdDxGb3JtR2VuZXJhdG9yRmllbGRDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkb0NoZWNrJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQXJyYXkgb2YgZm9ybSBmaWVsZCBjb250cm9scy4gKi9cbiAgICBnZXQgZm9ybUZpZWxkcygpOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2xbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkc1xuICAgICAgICAgICAgPy50b0FycmF5KClcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkKSA9PiAhIWZpZWxkLmZpZWxkUmVuZGVyZXI/LmNvbnRyb2wpXG4gICAgICAgICAgICAubWFwKChmaWVsZCkgPT4gZmllbGQuZmllbGRSZW5kZXJlci5jb250cm9sISk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIER5bmFtaWNhbGx5IGdlbmVyYXRlZCBmb3JtLiBAc2VlIEZvcm1HZW5lcmF0b3JTZXJ2aWNlXG4gICAgICovXG4gICAgZm9ybTogRHluYW1pY0Zvcm1Hcm91cDtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTGlzdCBvZiB0aGUgZm9ybSBjb250cm9scy5cbiAgICAgKi9cbiAgICBmb3JtQ29udHJvbEl0ZW1zOiBEeW5hbWljRm9ybUdyb3VwQ29udHJvbFtdO1xuXG4gICAgLyoqXG4gICAgICogU2V0IG9mIGZsYWdzIHJlcHJlc2VudGluZyBpZiBwYXJ0aWN1bGFyIGZvcm0gaXRlbSBzaG91bGQgYmUgdmlzaWJsZSB0byB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBzaG91bGRTaG93RmllbGRzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRmxhZyByZXByZXNlbnRpbmcgdGhhdCBmb3JtIGlzIGxvYWRpbmdcbiAgICAgKi9cbiAgICBmb3JtTG9hZGluZyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTdHJlYW0gb2YgZm9ybSBsb2FkaW5nIHN0YXRlLlxuICAgICAqL1xuICAgIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0aGlzLmZvcm1Mb2FkaW5nKTtcblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSBvZiBsYXN0IGZvcm0gc3VibWlzc2lvbiBzdGF0dXMuXG4gICAgICovXG4gICAgZm9ybVN1Ym1pdHRlZFN0YXR1cyQgPSBuZXcgU3ViamVjdDxTdWJtaXRGb3JtRXZlbnRSZXN1bHQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBTdHJlYW0gb2YgbGFzdCBmb3JtIHN1Ym1pc3Npb24gdmFsdWUuXG4gICAgICovXG4gICAgZm9ybVZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RHluYW1pY0Zvcm1WYWx1ZT4oe30pO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaXJzdCBsb2FkaW5nIHdoZW4gc2tlbGV0b25zIGJlIHNob3duIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzIHdoZW4gYnVzeSBpbmRpY2F0b3IgYmUgc2hvd25cbiAgICAgKi9cbiAgICBfZmlyc3RMb2FkaW5nRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhpbnRPcHRpb25zOiBIaW50T3B0aW9ucztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Vycm9yTW9kZWxzOiB7IHR5cGU6IHN0cmluZzsgdmFsdWU6IGFueSB9W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtSXRlbXM6IEZvcm1HZW5lcmF0b3JBY2NlcHRhYmxlSXRlbXM7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9ybVZhbHVlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2gkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRIaW50T3B0aW9uczogRmllbGRIaW50T3B0aW9ucztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmdTdWJtaXRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWFwcGVkRm9ybWl0ZW1zOiBNYXA8c3RyaW5nLCBEeW5hbWljRm9ybUl0ZW1NYXA+ID0gbmV3IE1hcCgpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZmdTZXJ2aWNlOiBGb3JtR2VuZXJhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KEZEUF9GT1JNX0dFTkVSQVRPUl9ERUZBVUxUX0hJTlRfT1BUSU9OUykgX3Byb3ZpZGVkSGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnNcbiAgICApIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEhpbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgLi4uZGVmYXVsdEZvcm1HZW5lcmF0b3JIaW50T3B0aW9ucyxcbiAgICAgICAgICAgIC4uLl9wcm92aWRlZEhpbnRPcHRpb25zXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fZXJyb3JNb2RlbHMgPSB0aGlzLl9nZXRFcnJvcnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaGludCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhpbnQgPT09ICdzdHJpbmcnIHx8IHRoaXMuaGludCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdEhpbnRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLmhpbnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0SGludE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuaGludFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX25nU3VibWl0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZnJlc2hlcyBmb3JtIGl0ZW1zIHZpc2liaWxpdHkgd2l0aCAnd2hlbicgY29uZGl0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHJlZnJlc2hTdGVwc1Zpc2liaWxpdHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuc2hvdWxkU2hvd0ZpZWxkcyA9IGF3YWl0IHRoaXMuX2ZnU2VydmljZS5jaGVja1Zpc2libGVGb3JtSXRlbXModGhpcy5mb3JtKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGFzeW5jIF9vblN1Ym1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmRvQ2hlY2skLm5leHQoKTtcblxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBhd2FpdCB0aGlzLl9mZ1NlcnZpY2UuZ2V0Rm9ybVZhbHVlKHRoaXMuZm9ybSk7XG5cbiAgICAgICAgdGhpcy5mb3JtU3VibWl0dGVkU3RhdHVzLmVtaXQoeyBzdWNjZXNzOiAhdGhpcy5mb3JtLmludmFsaWQsIHZhbHVlOiBmb3JtVmFsdWUgfSk7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdHRlZFN0YXR1cyQubmV4dCh7IHN1Y2Nlc3M6ICF0aGlzLmZvcm0uaW52YWxpZCwgdmFsdWU6IGZvcm1WYWx1ZSB9KTtcblxuICAgICAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1TdWJtaXR0ZWQuZW1pdChmb3JtVmFsdWUpO1xuICAgICAgICB0aGlzLmZvcm1WYWx1ZSQubmV4dChmb3JtVmFsdWUpO1xuXG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbmV3IGNvbnRyb2wgdG8gYW4gZXhpc3RpbmcgZm9ybS5cbiAgICAgKiBAcGFyYW0gY29udHJvbCBDb250cm9sIGNvbmZpZ3VyYXRpb24gdG8gYWRkLlxuICAgICAqIEBwYXJhbSBwYXRoIFBhdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICovXG4gICAgYXN5bmMgYWRkQ29udHJvbChjb250cm9sOiBEeW5hbWljRm9ybUl0ZW0sIHBhdGg/OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9hZGRDb250cm9sVG9Gb3JtSXRlbXMoY29udHJvbCwgcGF0aCk7XG4gICAgICAgIHRoaXMuX2ZnU2VydmljZS5hZGRDb250cm9sKGNvbnRyb2wsIHRoaXMuZm9ybSwgcGF0aCk7XG5cbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbEl0ZW1zID0gdGhpcy5fZ2V0T3JkZXJlZENvbnRyb2xzKHRoaXMuZm9ybS5jb250cm9scyk7XG5cbiAgICAgICAgdGhpcy5zaG91bGRTaG93RmllbGRzID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmNoZWNrVmlzaWJsZUZvcm1JdGVtcyh0aGlzLmZvcm0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBieSB0aGUgZ2l2ZW4gcGF0aC5cbiAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBjb250cm9sLlxuICAgICAqIEBwYXJhbSBwYXRoIFBhdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICovXG4gICAgYXN5bmMgcmVtb3ZlQ29udHJvbChuYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUNvbnRyb2xGcm9tSXRlbXMobmFtZSwgcGF0aCk7XG4gICAgICAgIHRoaXMuX2ZnU2VydmljZS5yZW1vdmVDb250cm9sKG5hbWUsIHRoaXMuZm9ybSwgcGF0aCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xJdGVtcyA9IHRoaXMuX2dldE9yZGVyZWRDb250cm9scyh0aGlzLmZvcm0uY29udHJvbHMpO1xuXG4gICAgICAgIHRoaXMuc2hvdWxkU2hvd0ZpZWxkcyA9IGF3YWl0IHRoaXMuX2ZnU2VydmljZS5jaGVja1Zpc2libGVGb3JtSXRlbXModGhpcy5mb3JtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfdHJhY2tGbihpbmRleDogbnVtYmVyLCB2YWx1ZTogRHluYW1pY0Zvcm1Hcm91cENvbnRyb2wpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7aW5kZXh9XyR7dmFsdWUuZm9ybUl0ZW0ubmFtZX1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dyb3VwVHJhY2tGbihpbmRleDogbnVtYmVyLCB2YWx1ZTogRHluYW1pY0Zvcm1Hcm91cENvbnRyb2wpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gKHZhbHVlIGFzIER5bmFtaWNGb3JtQ29udHJvbEdyb3VwKS5mb3JtSXRlbS5uYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uIFByb2dyYW1tYXRpY2FsbHkgc3VibWl0IGZvcm0uXG4gICAgICogVGhpcyBtZXRob2QgYWxzbyBjYWxscyB2YWxpZGF0aW9uIGZvciB0aGUgZm9ybSBpdGVtcy5cbiAgICAgKi9cbiAgICBzdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLm9uU3VibWl0KG5ldyBFdmVudCgnc3VibWl0JykpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzQWR2YW5jZWRFcnJvcihlcnJvcjogYW55KTogZXJyb3IgaXMgRHluYW1pY0Zvcm1JdGVtVmFsaWRhdGlvbk9iamVjdCB7XG4gICAgICAgIHJldHVybiBlcnJvci5oZWFkaW5nICYmIGVycm9yLmRlc2NyaXB0aW9uICYmIGVycm9yLnR5cGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZXJyb3JzVHJhY2tCeShfOiBudW1iZXIsIGVycm9yOiB7IHR5cGU6IHN0cmluZzsgdmFsdWU6IGFueSB9KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGVycm9yLnR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2dlbmVyYXRlRm9ybSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0aGlzLmZvcm1Mb2FkaW5nKTtcblxuICAgICAgICBjb25zdCBmb3JtID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmdlbmVyYXRlRm9ybSh0aGlzLmZvcm1OYW1lLCB0aGlzLl9tYXBwZWRGb3JtaXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1WYWx1ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xJdGVtcyA9IHRoaXMuX2dldE9yZGVyZWRDb250cm9scyhmb3JtLmNvbnRyb2xzKTtcblxuICAgICAgICB0aGlzLnNob3VsZFNob3dGaWVsZHMgPSBhd2FpdCB0aGlzLl9mZ1NlcnZpY2UuY2hlY2tWaXNpYmxlRm9ybUl0ZW1zKHRoaXMuZm9ybSk7XG5cbiAgICAgICAgdGhpcy5fZm9ybVZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG91bGRTaG93RmllbGRzID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmNoZWNrVmlzaWJsZUZvcm1JdGVtcyh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb3JtTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9maXJzdExvYWRpbmdEb25lID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5mb3JtQ3JlYXRlZC5lbWl0KHRoaXMuZm9ybSk7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0aGlzLmZvcm1Mb2FkaW5nKTtcblxuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1N1Ym1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3JkZXJlZENvbnRyb2xzKGNvbnRyb2xzOiBEeW5hbWljRm9ybUdyb3VwQ29udHJvbHMpOiAoRHluYW1pY0Zvcm1Db250cm9sIHwgRHluYW1pY0Zvcm1Db250cm9sR3JvdXApW10ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhjb250cm9scykuc29ydChcbiAgICAgICAgICAgIChhLCBiKSA9PiAoYS5mb3JtSXRlbT8ucmFuayA/PyAtSW5maW5pdHkpIC0gKGIuZm9ybUl0ZW0/LnJhbmsgPz8gLUluZmluaXR5KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0RXJyb3JzKCk6IHsgdHlwZTogc3RyaW5nOyB2YWx1ZTogYW55IH1bXSB7XG4gICAgICAgIGNvbnN0IHJldHVybkVycm9yczogeyB0eXBlOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdID0gW107XG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyZWRFcnJvcnMgPSB0aGlzLl9mZ1NlcnZpY2UudmFsaWRhdGlvbkVycm9ySGludHM7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlZ2lzdGVyZWRFcnJvcnMpLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtlcnJvclR5cGUsIGVycm9yVmFsdWVdID0gdHlwZTtcblxuICAgICAgICAgICAgcmV0dXJuRXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IGVycm9yVHlwZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXJyb3JWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXR1cm5FcnJvcnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1N1Ym1pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdTdWJtaXRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX25nU3VibWl0U3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtR3JvdXAubmdTdWJtaXRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzIS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUdyb3VwLnN0YXR1cyksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXR1czogRm9ybUNvbnRyb2xTdGF0dXMpID0+IHN0YXR1cyAhPT0gJ1BFTkRJTkcnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX29uU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGlzdGVuVG9TdWJtaXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25Gb3JtSXRlbXNDaGFuZ2UoaXRlbXM6IE9ic2VydmFibGU8RHluYW1pY0Zvcm1JdGVtW10+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCQuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLl9yZWZyZXNoJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAgICAgaXRlbXMucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5fcmVmcmVzaCQsIHRoaXMuX29uRGVzdHJveSQpKSkuc3Vic2NyaWJlKChmb3JtSXRlbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21hcHBlZEZvcm1pdGVtcyA9IG1hcEZvcm1JdGVtcyhmb3JtSXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVGb3JtKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwbHlSYW5rKGl0ZW1zOiBEeW5hbWljRm9ybUl0ZW1bXSk6IER5bmFtaWNGb3JtSXRlbVtdIHtcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLnJhbmsgPSBpdGVtLnJhbmsgfHwgaW5kZXg7XG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcykge1xuICAgICAgICAgICAgICAgIGl0ZW0uaXRlbXMgPSB0aGlzLl9hcHBseVJhbmsoaXRlbS5pdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkQ29udHJvbFRvRm9ybUl0ZW1zKGl0ZW06IER5bmFtaWNGb3JtSXRlbSwgcGF0aD86IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwcGVkRm9ybWl0ZW1zLnNldChpdGVtLm5hbWUsIHRyYW5zZm9ybUZvcm1JdGVtKGl0ZW0sIHRoaXMuX21hcHBlZEZvcm1pdGVtcy5zaXplKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gZ2V0UGFyZW50SXRlbShwYXRoLCB0aGlzLl9tYXBwZWRGb3JtaXRlbXMpO1xuXG4gICAgICAgIGlmICghcGFyZW50SXRlbSB8fCBpc0Zvcm1GaWVsZEl0ZW0ocGFyZW50SXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudEl0ZW0uaXRlbXMgPSBwYXJlbnRJdGVtLml0ZW1zIHx8IG5ldyBNYXAoKTtcbiAgICAgICAgcGFyZW50SXRlbS5pdGVtcy5zZXQoaXRlbS5uYW1lLCB0cmFuc2Zvcm1Gb3JtSXRlbShpdGVtLCBwYXJlbnRJdGVtLml0ZW1zLnNpemUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlbW92ZUNvbnRyb2xGcm9tSXRlbXMobmFtZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXBwZWRGb3JtaXRlbXMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50SXRlbSA9IGdldFBhcmVudEl0ZW0ocGF0aCwgdGhpcy5fbWFwcGVkRm9ybWl0ZW1zKTtcblxuICAgICAgICBpZiAoIXBhcmVudEl0ZW0gfHwgaXNGb3JtRmllbGRJdGVtKHBhcmVudEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnRJdGVtLml0ZW1zPy5kZWxldGUobmFtZSk7XG4gICAgfVxufVxuIiwiQGlmIChfZmlyc3RMb2FkaW5nRG9uZSkge1xuICAgIDxmZC1idXN5LWluZGljYXRvciBbbG9hZGluZ109XCJmb3JtTG9hZGluZ1wiIFtibG9ja109XCJ0cnVlXCI+XG4gICAgICAgIEBpZiAoZm9ybSkge1xuICAgICAgICAgICAgPGZkcC1mb3JtLWdyb3VwXG4gICAgICAgICAgICAgICAgW2hpbnRdPVwiaGludFwiXG4gICAgICAgICAgICAgICAgW21haW5UaXRsZV09XCJtYWluVGl0bGVcIlxuICAgICAgICAgICAgICAgIFtoaWRlTWFpblRJdGxlXT1cImhpZGVNYWluVEl0bGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgW2NvbHVtbkxheW91dF09XCJjb2x1bW5MYXlvdXRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbENvbHVtbkxheW91dF09XCJsYWJlbENvbHVtbkxheW91dFwiXG4gICAgICAgICAgICAgICAgW2ZpZWxkQ29sdW1uTGF5b3V0XT1cImZpZWxkQ29sdW1uTGF5b3V0XCJcbiAgICAgICAgICAgICAgICBbZ2FwQ29sdW1uTGF5b3V0XT1cImdhcENvbHVtbkxheW91dFwiXG4gICAgICAgICAgICAgICAgW3VuaWZpZWRMYXlvdXRdPVwidW5pZmllZExheW91dFwiXG4gICAgICAgICAgICAgICAgW2lubGluZUNvbHVtbkxheW91dF09XCJpbmxpbmVDb2x1bW5MYXlvdXRcIlxuICAgICAgICAgICAgICAgIFt1c2VGb3JtXT1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBmb3IgKGVycm9yIG9mIF9lcnJvck1vZGVsczsgdHJhY2sgX2Vycm9yc1RyYWNrQnkoJGluZGV4LCBlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKmZkcEZvcm1GaWVsZEVycm9yPVwiZXJyb3IudHlwZTsgbGV0IGRpcmVjdGl2ZUVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKF9pc0FkdmFuY2VkRXJyb3IoZGlyZWN0aXZlRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChkaXJlY3RpdmVFcnJvci5oZWFkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpmZHBGb3JtRmllbGRFcnJvckhlYWRpbmc9XCJsZXQgdmFsaWRhdGlvbkVycm9yOyB0eXBlOiBkaXJlY3RpdmVFcnJvci50eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWxpZGF0aW9uRXJyb3IuaGVhZGluZyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZGlyZWN0aXZlRXJyb3IuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKmZkcEZvcm1GaWVsZEVycm9yRGVzY3JpcHRpb249XCJsZXQgdmFsaWRhdGlvbkVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWxpZGF0aW9uRXJyb3IuZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpmZHBGb3JtRmllbGRFcnJvckhlYWRpbmc9XCJsZXQgdmFsaWRhdGlvbkVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVycm9yLnZhbHVlID8gZXJyb3IudmFsdWUgOiB2YWxpZGF0aW9uRXJyb3IgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgZm9ybUNvbnRyb2xJdGVtczsgdHJhY2sgX3RyYWNrRm4oJGluZGV4LCBmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZC50eXBlID09PSAnZmllbGQnID8gZmllbGRSZW5kZXJlciA6IGdyb3VwUmVuZGVyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkTmFtZTogZmllbGQuZm9ybUl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5rOiBmaWVsZC5mb3JtSXRlbT8ucmFuayB8fCAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2ZpZWxkUmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC1maWVsZD1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC1mb3JtRmllbGROYW1lPVwiZm9ybUZpZWxkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtZm9ybUdyb3VwTmFtZT1cImZvcm1Hcm91cE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXJhbms9XCJyYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpmZHBEeW5hbWljRm9ybUNvbnRyb2xGaWVsZD1cImZpZWxkOyBzaG93OiBzaG91bGRTaG93RmllbGRzW2ZpZWxkLmZvcm1JdGVtLm5hbWVdICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC1mb3JtLWdlbmVyYXRvci1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGludE9wdGlvbnNdPVwiZmllbGQuZm9ybUl0ZW0uZ3VpT3B0aW9ucyB8IGdldEhpbnRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG91bGRTaG93XT1cInNob3VsZFNob3dGaWVsZHNbZmllbGQuZm9ybUl0ZW0ubmFtZV0gIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1GaWVsZE5hbWVdPVwiZm9ybUZpZWxkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lUGF0aF09XCJmb3JtR3JvdXBOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JhbmtdPVwicmFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLWZvcm0tZ2VuZXJhdG9yLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZ3JvdXBSZW5kZXJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZHAtZm9ybS1maWVsZC1ncm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaW50T3B0aW9uc109XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zIHwgZ2V0SGludE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZC5mb3JtSXRlbS5tZXNzYWdlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb2x1bW5MYXlvdXRdPVwiZmllbGQuZm9ybUl0ZW0uZ3VpT3B0aW9ucz8ubGFiZWxDb2x1bW5MYXlvdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZENvbHVtbkxheW91dF09XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zPy5maWVsZENvbHVtbkxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dhcENvbHVtbkxheW91dF09XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zPy5nYXBDb2x1bW5MYXlvdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtTmFtZV09XCJmaWVsZC5mb3JtSXRlbS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBGaWVsZCBvZiBmaWVsZCB8IGdldE9yZGVyZWRGaWVsZENvbnRyb2xzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayBfZ3JvdXBUcmFja0ZuKCRpbmRleCwgZ3JvdXBGaWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZkcER5bmFtaWNGb3JtQ29udHJvbEZpZWxkPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBGaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93OiBzaG91bGRTaG93RmllbGRzW2dyb3VwRmllbGQuZm9ybUl0ZW0ubmFtZSFdICE9PSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC1mb3JtLWdlbmVyYXRvci1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaW50T3B0aW9uc109XCJncm91cEZpZWxkLmZvcm1JdGVtLmd1aU9wdGlvbnMgfCBnZXRIaW50T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImdyb3VwRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG91bGRTaG93XT1cInNob3VsZFNob3dGaWVsZHNbZ3JvdXBGaWVsZC5mb3JtSXRlbS5uYW1lIV0gIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUZpZWxkTmFtZV09XCJncm91cEZpZWxkLmZvcm1JdGVtLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lUGF0aF09XCJmaWVsZC5mb3JtSXRlbS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmFua109XCJncm91cEZpZWxkLmZvcm1JdGVtLnJhbmsgfHwgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZHAtZm9ybS1nZW5lcmF0b3ItZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmRwLWZvcm0tZmllbGQtZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoIW5vQWRkaXRpb25hbENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGZkcC1mb3JtLWZpZWxkIFtjb2x1bW5dPVwiMVwiIFtyYW5rXT1cImZvcm1Db250cm9sSXRlbXMubGVuZ3RoICsgMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgdXNlci1kZWZpbmVkIGVsZW1lbnRzLCBsaWtlIHN1Ym1pdCBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZmRwLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9mZHAtZm9ybS1ncm91cD5cbiAgICAgICAgfVxuICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG59IEBlbHNlIHtcbiAgICA8ZmQtc2tlbGV0b24gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwcHhcIiBbc3R5bGUucGFkZGluZy5yZW1dPVwiMVwiPlxuICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMTUlXCIgaGVpZ2h0PVwiOFwiIC8+XG4gICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIyMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMjUlXCIgaGVpZ2h0PVwiMTZcIiAvPlxuICAgICAgICA8c3ZnOnJlY3QgeD1cIjM1JVwiIHk9XCIwXCIgcng9XCI0XCIgd2lkdGg9XCIxNSVcIiBoZWlnaHQ9XCI4XCIgLz5cbiAgICAgICAgPHN2ZzpyZWN0IHg9XCIzNSVcIiB5PVwiMjBcIiByeD1cIjRcIiB3aWR0aD1cIjI1JVwiIGhlaWdodD1cIjE2XCIgLz5cbiAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjYwXCIgcng9XCI0XCIgd2lkdGg9XCIxNSVcIiBoZWlnaHQ9XCI4XCIgLz5cbiAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjgwXCIgcng9XCI0XCIgd2lkdGg9XCIyNSVcIiBoZWlnaHQ9XCIxNlwiIC8+XG4gICAgPC9mZC1za2VsZXRvbj5cbn1cbiJdfQ==
431
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9mb3JtL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZm9ybS9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFCLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqSCxPQUFPLEVBQVksaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RSxPQUFPLEVBRUgsWUFBWSxFQUNaLGVBQWUsRUFLbEIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBRXJHLE9BQU8s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QkFDOUUsSUFBSSxFQUFFLHdCQUF3Qjt5QkFDakM7cUJBQ0osY0FDVyxJQUFJLFdBQ1A7d0JBQ0wsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGdDQUFnQzt3QkFDaEMsMkJBQTJCO3dCQUMzQixpQkFBaUI7d0JBQ2pCLDJCQUEyQjt3QkFDM0Isa0JBQWtCO3FCQUNyQjs7MEJBdU5JLE1BQU07MkJBQUMsdUNBQXVDO3lDQWxObkQsUUFBUTtzQkFEUCxLQUFLO2dCQVFGLFNBQVM7c0JBRFosS0FBSztnQkFrQk4sU0FBUztzQkFEUixLQUFLO2dCQU9OLGFBQWE7c0JBRFosS0FBSztnQkFRTixJQUFJO3NCQURILEtBQUs7Z0JBVU4sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBT04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBU04sbUJBQW1CO3NCQURsQixLQUFLO2dCQVFOLFdBQVc7c0JBRFYsTUFBTTtnQkFRUCxhQUFhO3NCQURaLE1BQU07Z0JBT1AsbUJBQW1CO3NCQURsQixNQUFNO2dCQU9QLE1BQU07c0JBREwsU0FBUzt1QkFBQyxNQUFNO2dCQUtqQixTQUFTO3NCQURSLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUs3QixNQUFNO3NCQURMLFlBQVk7dUJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xTdGF0dXMsIEZvcm1Hcm91cERpcmVjdGl2ZSwgRm9ybXNNb2R1bGUsIE5nRm9ybSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE51bGxhYmxlLCBkZXN0cm95T2JzZXJ2YWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgQ29sdW1uTGF5b3V0LFxuICAgIEZEUF9ET19DSEVDSyxcbiAgICBGRFBfRk9STV9TVUJNSVQsXG4gICAgRmllbGRIaW50T3B0aW9ucyxcbiAgICBIaW50SW5wdXQsXG4gICAgSGludE9wdGlvbnMsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUsIG1lcmdlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZ2VuZXJhdG9yLWZpZWxkL2Zvcm0tZ2VuZXJhdG9yLWZpZWxkLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQnVzeUluZGljYXRvck1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXN5LWluZGljYXRvcic7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9za2VsZXRvbic7XG5pbXBvcnQgeyBEZWZhdWx0R2FwTGF5b3V0LCBEZWZhdWx0VmVydGljYWxGaWVsZExheW91dCwgRGVmYXVsdFZlcnRpY2FsTGFiZWxMYXlvdXQgfSBmcm9tICcuLi8uLi9mb3JtLWdyb3VwL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBGZHBGb3JtR3JvdXBNb2R1bGUgfSBmcm9tICcuLi8uLi9mb3JtLWdyb3VwL2ZkcC1mb3JtLm1vZHVsZSc7XG5pbXBvcnQgeyBkZWZhdWx0Rm9ybUdlbmVyYXRvckhpbnRPcHRpb25zIH0gZnJvbSAnLi4vY29uZmlnL2RlZmF1bHQtZm9ybS1nZW5lcmF0b3ItaGludC1vcHRpb25zJztcbmltcG9ydCB7XG4gICAgRHluYW1pY0Zvcm1Db250cm9sLFxuICAgIER5bmFtaWNGb3JtQ29udHJvbEdyb3VwLFxuICAgIER5bmFtaWNGb3JtR3JvdXBDb250cm9sLFxuICAgIER5bmFtaWNGb3JtR3JvdXBDb250cm9sc1xufSBmcm9tICcuLi9keW5hbWljLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBEeW5hbWljRm9ybUNvbnRyb2xGaWVsZERpcmVjdGl2ZSB9IGZyb20gJy4uL2R5bmFtaWMtZm9ybS1jb250cm9sLWZpZWxkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGb3JtR2VuZXJhdG9yU2VydmljZSB9IGZyb20gJy4uL2Zvcm0tZ2VuZXJhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRkRQX0ZPUk1fR0VORVJBVE9SX0RFRkFVTFRfSElOVF9PUFRJT05TIH0gZnJvbSAnLi4vZm9ybS1nZW5lcmF0b3IudG9rZW5zJztcbmltcG9ydCB7IGdldFBhcmVudEl0ZW0sIGlzRm9ybUZpZWxkSXRlbSwgbWFwRm9ybUl0ZW1zLCB0cmFuc2Zvcm1Gb3JtSXRlbSB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1Hcm91cCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZHluYW1pYy1mb3JtLWdyb3VwJztcbmltcG9ydCB7XG4gICAgRHluYW1pY0Zvcm1JdGVtLFxuICAgIER5bmFtaWNGb3JtSXRlbU1hcCxcbiAgICBEeW5hbWljRm9ybUl0ZW1WYWxpZGF0aW9uT2JqZWN0LFxuICAgIER5bmFtaWNGb3JtVmFsdWVcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9keW5hbWljLWZvcm0taXRlbSc7XG5pbXBvcnQgeyBHZXRIaW50T3B0aW9uc1BpcGUgfSBmcm9tICcuLi9waXBlcy9nZXQtaGludC1vcHRpb25zLnBpcGUnO1xuaW1wb3J0IHsgR2V0T3JkZXJlZEZpZWxkQ29udHJvbHNQaXBlIH0gZnJvbSAnLi4vcGlwZXMvZ2V0LW9yZGVyZWQtZm9ybS1jb250cm9scy5waXBlJztcblxubGV0IGZvcm1VbmlxdWVJZCA9IDA7XG5cbmV4cG9ydCB0eXBlIEZvcm1HZW5lcmF0b3JBY2NlcHRhYmxlSXRlbXMgPSBEeW5hbWljRm9ybUl0ZW1bXSB8IE9ic2VydmFibGU8RHluYW1pY0Zvcm1JdGVtW10+O1xuXG5leHBvcnQgY29uc3QgRkRQX0ZPUk1fSUdOT1JFRF9TVEFUVVNFUzogRm9ybUNvbnRyb2xTdGF0dXNbXSA9IFsnSU5WQUxJRCcsICdQRU5ESU5HJywgJ0RJU0FCTEVEJ107XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VibWl0Rm9ybUV2ZW50UmVzdWx0IHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSW5kaWNhdG9yIGlmIHZhbGlkYXRpb24gaGFzIGJlZW4gcGFzc2VkLlxuICAgICAqL1xuICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZvcm1hdHRlZCBmb3JtIHZhbHVlLlxuICAgICAqL1xuICAgIHZhbHVlOiBEeW5hbWljRm9ybVZhbHVlIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRm9ybSBHZW5lcmF0b3IgY29tcG9uZW50IHJlcHJlc2VudHMgYSBoaWdoLWxldmVsIGNvbXBvbmVudFxuICogd2hpY2ggaW5jbHVkZXMgQHNlZSBGb3JtR3JvdXAgaW5zaWRlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC1mb3JtLWdlbmVyYXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRFBfRE9fQ0hFQ0ssXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvckNvbXBvbmVudCkgPT4gZm9ybUdlbmVyYXRvci5kb0NoZWNrJCxcbiAgICAgICAgICAgIGRlcHM6IFtGb3JtR2VuZXJhdG9yQ29tcG9uZW50XVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRFBfRk9STV9TVUJNSVQsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvckNvbXBvbmVudCkgPT4gZm9ybUdlbmVyYXRvci5uZ1N1Ym1pdCQsXG4gICAgICAgICAgICBkZXBzOiBbRm9ybUdlbmVyYXRvckNvbXBvbmVudF1cbiAgICAgICAgfVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEJ1c3lJbmRpY2F0b3JNb2R1bGUsXG4gICAgICAgIEZkcEZvcm1Hcm91cE1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIER5bmFtaWNGb3JtQ29udHJvbEZpZWxkRGlyZWN0aXZlLFxuICAgICAgICBGb3JtR2VuZXJhdG9yRmllbGRDb21wb25lbnQsXG4gICAgICAgIFNrZWxldG9uQ29tcG9uZW50LFxuICAgICAgICBHZXRPcmRlcmVkRmllbGRDb250cm9sc1BpcGUsXG4gICAgICAgIEdldEhpbnRPcHRpb25zUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybUdlbmVyYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICAvKiogQGRlc2NyaXB0aW9uIFVuaXF1ZSBmb3JtIG5hbWUgKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcm1OYW1lID0gYGZkcC1mb3JtLWdlbmVyYXRvci0ke2Zvcm1VbmlxdWVJZCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTGlzdCBvZiBAc2VlIER5bmFtaWNGb3JtSXRlbSByZXByZXNlbnRpbmcgdGhlIGxpc3Qgb2YgaXRlbXNcbiAgICAgKiB0byBiZSByZW5kZXJlZCBpbiB0aGUgZm9ybS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBmb3JtSXRlbXMoZm9ybUl0ZW1zOiBGb3JtR2VuZXJhdG9yQWNjZXB0YWJsZUl0ZW1zKSB7XG4gICAgICAgIGlmICghZm9ybUl0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtSXRlbXMgPSBpc09ic2VydmFibGUoZm9ybUl0ZW1zKSA/IGZvcm1JdGVtcyA6IG9mKGZvcm1JdGVtcyk7XG5cbiAgICAgICAgdGhpcy5fb25Gb3JtSXRlbXNDaGFuZ2UoZm9ybUl0ZW1zKTtcbiAgICB9XG4gICAgZ2V0IGZvcm1JdGVtcygpOiBGb3JtR2VuZXJhdG9yQWNjZXB0YWJsZUl0ZW1zIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1JdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRm9ybSBtYWluIHRpdGxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFpblRpdGxlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBoaWRlIG1haW4gdGl0bGUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBoaWRlTWFpblRJdGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBIaW50IGZvciB0aGUgbWFpbiB0aXRsZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGludDogSGludElucHV0O1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNwZWNpZnkgdGhlIGNvbHVtbiBsYXlvdXQgaW4gdGhlIGZvcm1hdCBgWExuLUxuLU1uLVNuYFxuICAgICAqIHdoZXJlIG4gaXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGFuZCBjYW4gYmUgZGlmZmVyZW50IGZvciBlYWNoIHNpemUuXG4gICAgICogZWc6IFhMMi1MMi1NMi1TMSB3b3VsZCBjcmVhdGUgMi1jb2x1bW4gbGF5b3V0cyBmb3IgWEwsIEwsXG4gICAgICogYW5kIE0gc2l6ZXMgYW5kIHNpbmdsZS1jb2x1bW4gbGF5b3V0IGZvciBTIHNpemUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW5MYXlvdXQ6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGxhYmVsJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxhYmVsQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQgPSBEZWZhdWx0VmVydGljYWxMYWJlbExheW91dDtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgZmllbGQncyBjb2x1bW4gbGF5b3V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmllbGRDb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dCA9IERlZmF1bHRWZXJ0aWNhbEZpZWxkTGF5b3V0O1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBnYXAgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdhcENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0ID0gRGVmYXVsdEdhcExheW91dDtcblxuICAgIC8qKiBXaGV0aGVyIGFsbCBmb3JtIGl0ZW1zIHNob3VsZCBoYXZlIGlkZW50aWNhbCBsYXlvdXQgcHJvdmlkZWQgZm9yIGZvcm0gZ3JvdXAuICovXG4gICAgQElucHV0KClcbiAgICB1bmlmaWVkTGF5b3V0ID0gdHJ1ZTtcblxuICAgIC8qKiBJbmxpbmUgY29sdW1uIGxheW91dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5saW5lQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQgPSBEZWZhdWx0VmVydGljYWxGaWVsZExheW91dDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZW1vdmVzIGV4dHJhIGVtcHR5IHJvdy5cbiAgICAgKiBUT0RPOiByZW1vdmUgYWZ0ZXIgIzc1MzMgaGFzIGJlZW4gZml4ZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBub0FkZGl0aW9uYWxDb250ZW50ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgd2hpY2ggbm90aWZpZXMgcGFyZW50IGNvbXBvbmVudCB0aGF0IHRoZSBmb3JtIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXG4gICAgICogYW5kIGFsbCBjb250cm9scyBhcmUgaW4gcGxhY2UuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybUNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNGb3JtR3JvdXA+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgd2hpY2ggbm90aWZpZXMgcGFyZW50IGNvbXBvbmVudCB0aGF0IHRoZSBmb3JtIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZWRcbiAgICAgKiBhbmQgc3VibWl0dGVkLiBDb250YWlucyBmb3JtXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybVN1Ym1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RHluYW1pY0Zvcm1WYWx1ZT4oKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCB3aGljaCBub3RpZmllcyBwYXJlbnQgY29tcG9uZW50IHRoYXQgdGhlIGZvcm0gd2FzIHN1Ym1pdHRlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBmb3JtU3VibWl0dGVkU3RhdHVzID0gbmV3IEV2ZW50RW1pdHRlcjxTdWJtaXRGb3JtRXZlbnRSZXN1bHQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVwcmVzZW50cyB0aGUgZm9ybSBpbnN0YW5jZS4gQHNlZSBOZ0Zvcm1cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKE5nRm9ybSlcbiAgICBuZ0Zvcm06IE5nRm9ybTtcblxuICAgIC8qKiBJbm5lciBmb3JtIGdyb3VwIGRpcmVjdGl2ZS4gKi9cbiAgICBAVmlld0NoaWxkKEZvcm1Hcm91cERpcmVjdGl2ZSlcbiAgICBmb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZTtcblxuICAgIC8qKiBJbm5lciBmb3JtIGZpZWxkcyAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oRm9ybUdlbmVyYXRvckZpZWxkQ29tcG9uZW50KVxuICAgIGZpZWxkczogUXVlcnlMaXN0PEZvcm1HZW5lcmF0b3JGaWVsZENvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGRvQ2hlY2skID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdTdWJtaXQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBBcnJheSBvZiBmb3JtIGZpZWxkIGNvbnRyb2xzLiAqL1xuICAgIGdldCBmb3JtRmllbGRzKCk6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRzXG4gICAgICAgICAgICA/LnRvQXJyYXkoKVxuICAgICAgICAgICAgLmZpbHRlcigoZmllbGQpID0+ICEhZmllbGQuZmllbGRSZW5kZXJlcj8uY29udHJvbClcbiAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiBmaWVsZC5maWVsZFJlbmRlcmVyLmNvbnRyb2whKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRHluYW1pY2FsbHkgZ2VuZXJhdGVkIGZvcm0uIEBzZWUgRm9ybUdlbmVyYXRvclNlcnZpY2VcbiAgICAgKi9cbiAgICBmb3JtOiBEeW5hbWljRm9ybUdyb3VwO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMaXN0IG9mIHRoZSBmb3JtIGNvbnRyb2xzLlxuICAgICAqL1xuICAgIGZvcm1Db250cm9sSXRlbXM6IER5bmFtaWNGb3JtR3JvdXBDb250cm9sW107XG5cbiAgICAvKipcbiAgICAgKiBTZXQgb2YgZmxhZ3MgcmVwcmVzZW50aW5nIGlmIHBhcnRpY3VsYXIgZm9ybSBpdGVtIHNob3VsZCBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyLlxuICAgICAqL1xuICAgIHNob3VsZFNob3dGaWVsZHM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIHJlcHJlc2VudGluZyB0aGF0IGZvcm0gaXMgbG9hZGluZ1xuICAgICAqL1xuICAgIGZvcm1Mb2FkaW5nID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSBvZiBmb3JtIGxvYWRpbmcgc3RhdGUuXG4gICAgICovXG4gICAgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRoaXMuZm9ybUxvYWRpbmcpO1xuXG4gICAgLyoqXG4gICAgICogU3RyZWFtIG9mIGxhc3QgZm9ybSBzdWJtaXNzaW9uIHN0YXR1cy5cbiAgICAgKi9cbiAgICBmb3JtU3VibWl0dGVkU3RhdHVzJCA9IG5ldyBTdWJqZWN0PFN1Ym1pdEZvcm1FdmVudFJlc3VsdD4oKTtcblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSBvZiBsYXN0IGZvcm0gc3VibWlzc2lvbiB2YWx1ZS5cbiAgICAgKi9cbiAgICBmb3JtVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEeW5hbWljRm9ybVZhbHVlPih7fSk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGZpcnN0IGxvYWRpbmcgd2hlbiBza2VsZXRvbnMgYmUgc2hvd24gYW5kIHN1YnNlcXVlbnQgbG9hZGluZ3Mgd2hlbiBidXN5IGluZGljYXRvciBiZSBzaG93blxuICAgICAqL1xuICAgIF9maXJzdExvYWRpbmdEb25lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGludE9wdGlvbnM6IEhpbnRPcHRpb25zO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZXJyb3JNb2RlbHM6IHsgdHlwZTogc3RyaW5nOyB2YWx1ZTogYW55IH1bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2Zvcm1JdGVtczogRm9ybUdlbmVyYXRvckFjY2VwdGFibGVJdGVtcztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtVmFsdWVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0SGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX25nU3VibWl0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21hcHBlZEZvcm1pdGVtczogTWFwPHN0cmluZywgRHluYW1pY0Zvcm1JdGVtTWFwPiA9IG5ldyBNYXAoKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2ZnU2VydmljZTogRm9ybUdlbmVyYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChGRFBfRk9STV9HRU5FUkFUT1JfREVGQVVMVF9ISU5UX09QVElPTlMpIF9wcm92aWRlZEhpbnRPcHRpb25zOiBGaWVsZEhpbnRPcHRpb25zXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRIaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRGb3JtR2VuZXJhdG9ySGludE9wdGlvbnMsXG4gICAgICAgICAgICAuLi5fcHJvdmlkZWRIaW50T3B0aW9uc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2Vycm9yTW9kZWxzID0gdGhpcy5fZ2V0RXJyb3JzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmhpbnQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5oaW50ID09PSAnc3RyaW5nJyB8fCB0aGlzLmhpbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgICAgIHRoaXMuaGludE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHRIaW50T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5oaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdEhpbnRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmhpbnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ1N1Ym1pdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWZyZXNoZXMgZm9ybSBpdGVtcyB2aXNpYmlsaXR5IHdpdGggJ3doZW4nIGNvbmRpdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyByZWZyZXNoU3RlcHNWaXNpYmlsaXR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnNob3VsZFNob3dGaWVsZHMgPSBhd2FpdCB0aGlzLl9mZ1NlcnZpY2UuY2hlY2tWaXNpYmxlRm9ybUl0ZW1zKHRoaXMuZm9ybSk7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBhc3luYyBfb25TdWJtaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5kb0NoZWNrJC5uZXh0KCk7XG5cbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmdldEZvcm1WYWx1ZSh0aGlzLmZvcm0pO1xuXG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdHRlZFN0YXR1cy5lbWl0KHsgc3VjY2VzczogIXRoaXMuZm9ybS5pbnZhbGlkLCB2YWx1ZTogZm9ybVZhbHVlIH0pO1xuICAgICAgICB0aGlzLmZvcm1TdWJtaXR0ZWRTdGF0dXMkLm5leHQoeyBzdWNjZXNzOiAhdGhpcy5mb3JtLmludmFsaWQsIHZhbHVlOiBmb3JtVmFsdWUgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtU3VibWl0dGVkLmVtaXQoZm9ybVZhbHVlKTtcbiAgICAgICAgdGhpcy5mb3JtVmFsdWUkLm5leHQoZm9ybVZhbHVlKTtcblxuICAgICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIG5ldyBjb250cm9sIHRvIGFuIGV4aXN0aW5nIGZvcm0uXG4gICAgICogQHBhcmFtIGNvbnRyb2wgQ29udHJvbCBjb25maWd1cmF0aW9uIHRvIGFkZC5cbiAgICAgKiBAcGFyYW0gcGF0aCBQYXRoIG9mIHRoZSBjb250cm9sLlxuICAgICAqL1xuICAgIGFzeW5jIGFkZENvbnRyb2woY29udHJvbDogRHluYW1pY0Zvcm1JdGVtLCBwYXRoPzogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fYWRkQ29udHJvbFRvRm9ybUl0ZW1zKGNvbnRyb2wsIHBhdGgpO1xuICAgICAgICB0aGlzLl9mZ1NlcnZpY2UuYWRkQ29udHJvbChjb250cm9sLCB0aGlzLmZvcm0sIHBhdGgpO1xuXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xJdGVtcyA9IHRoaXMuX2dldE9yZGVyZWRDb250cm9scyh0aGlzLmZvcm0uY29udHJvbHMpO1xuXG4gICAgICAgIHRoaXMuc2hvdWxkU2hvd0ZpZWxkcyA9IGF3YWl0IHRoaXMuX2ZnU2VydmljZS5jaGVja1Zpc2libGVGb3JtSXRlbXModGhpcy5mb3JtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBjb250cm9sIHdpdGggdGhlIGdpdmVuIG5hbWUgYnkgdGhlIGdpdmVuIHBhdGguXG4gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgY29udHJvbC5cbiAgICAgKiBAcGFyYW0gcGF0aCBQYXRoIG9mIHRoZSBjb250cm9sLlxuICAgICAqL1xuICAgIGFzeW5jIHJlbW92ZUNvbnRyb2wobmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVDb250cm9sRnJvbUl0ZW1zKG5hbWUsIHBhdGgpO1xuICAgICAgICB0aGlzLl9mZ1NlcnZpY2UucmVtb3ZlQ29udHJvbChuYW1lLCB0aGlzLmZvcm0sIHBhdGgpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sSXRlbXMgPSB0aGlzLl9nZXRPcmRlcmVkQ29udHJvbHModGhpcy5mb3JtLmNvbnRyb2xzKTtcblxuICAgICAgICB0aGlzLnNob3VsZFNob3dGaWVsZHMgPSBhd2FpdCB0aGlzLl9mZ1NlcnZpY2UuY2hlY2tWaXNpYmxlRm9ybUl0ZW1zKHRoaXMuZm9ybSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX3RyYWNrRm4oaW5kZXg6IG51bWJlciwgdmFsdWU6IER5bmFtaWNGb3JtR3JvdXBDb250cm9sKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2luZGV4fV8ke3ZhbHVlLmZvcm1JdGVtLm5hbWV9YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9ncm91cFRyYWNrRm4oaW5kZXg6IG51bWJlciwgdmFsdWU6IER5bmFtaWNGb3JtR3JvdXBDb250cm9sKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBEeW5hbWljRm9ybUNvbnRyb2xHcm91cCkuZm9ybUl0ZW0ubmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvbiBQcm9ncmFtbWF0aWNhbGx5IHN1Ym1pdCBmb3JtLlxuICAgICAqIFRoaXMgbWV0aG9kIGFsc28gY2FsbHMgdmFsaWRhdGlvbiBmb3IgdGhlIGZvcm0gaXRlbXMuXG4gICAgICovXG4gICAgc3VibWl0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5vblN1Ym1pdChuZXcgRXZlbnQoJ3N1Ym1pdCcpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0FkdmFuY2VkRXJyb3IoZXJyb3I6IGFueSk6IGVycm9yIGlzIER5bmFtaWNGb3JtSXRlbVZhbGlkYXRpb25PYmplY3Qge1xuICAgICAgICByZXR1cm4gZXJyb3IuaGVhZGluZyAmJiBlcnJvci5kZXNjcmlwdGlvbiAmJiBlcnJvci50eXBlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Vycm9yc1RyYWNrQnkoXzogbnVtYmVyLCBlcnJvcjogeyB0eXBlOiBzdHJpbmc7IHZhbHVlOiBhbnkgfSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBlcnJvci50eXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIF9nZW5lcmF0ZUZvcm0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybUxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQodGhpcy5mb3JtTG9hZGluZyk7XG5cbiAgICAgICAgY29uc3QgZm9ybSA9IGF3YWl0IHRoaXMuX2ZnU2VydmljZS5nZW5lcmF0ZUZvcm0odGhpcy5mb3JtTmFtZSwgdGhpcy5fbWFwcGVkRm9ybWl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9mb3JtVmFsdWVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcblxuICAgICAgICB0aGlzLmZvcm1Db250cm9sSXRlbXMgPSB0aGlzLl9nZXRPcmRlcmVkQ29udHJvbHMoZm9ybS5jb250cm9scyk7XG5cbiAgICAgICAgdGhpcy5zaG91bGRTaG93RmllbGRzID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmNoZWNrVmlzaWJsZUZvcm1JdGVtcyh0aGlzLmZvcm0pO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1WYWx1ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkU2hvd0ZpZWxkcyA9IGF3YWl0IHRoaXMuX2ZnU2VydmljZS5jaGVja1Zpc2libGVGb3JtSXRlbXModGhpcy5mb3JtKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZmlyc3RMb2FkaW5nRG9uZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuZm9ybUNyZWF0ZWQuZW1pdCh0aGlzLmZvcm0pO1xuICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQodGhpcy5mb3JtTG9hZGluZyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9TdWJtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE9yZGVyZWRDb250cm9scyhjb250cm9sczogRHluYW1pY0Zvcm1Hcm91cENvbnRyb2xzKTogKER5bmFtaWNGb3JtQ29udHJvbCB8IER5bmFtaWNGb3JtQ29udHJvbEdyb3VwKVtdIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoY29udHJvbHMpLnNvcnQoXG4gICAgICAgICAgICAoYSwgYikgPT4gKGEuZm9ybUl0ZW0/LnJhbmsgPz8gLUluZmluaXR5KSAtIChiLmZvcm1JdGVtPy5yYW5rID8/IC1JbmZpbml0eSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEVycm9ycygpOiB7IHR5cGU6IHN0cmluZzsgdmFsdWU6IGFueSB9W10ge1xuICAgICAgICBjb25zdCByZXR1cm5FcnJvcnM6IHsgdHlwZTogc3RyaW5nOyB2YWx1ZTogYW55IH1bXSA9IFtdO1xuICAgICAgICBjb25zdCByZWdpc3RlcmVkRXJyb3JzID0gdGhpcy5fZmdTZXJ2aWNlLnZhbGlkYXRpb25FcnJvckhpbnRzO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZWdpc3RlcmVkRXJyb3JzKS5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbZXJyb3JUeXBlLCBlcnJvclZhbHVlXSA9IHR5cGU7XG5cbiAgICAgICAgICAgIHJldHVybkVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBlcnJvclR5cGUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGVycm9yVmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmV0dXJuRXJyb3JzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9TdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25nU3VibWl0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9uZ1N1Ym1pdFN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUdyb3VwLm5nU3VibWl0XG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nU3VibWl0JC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMhLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgodGhpcy5mb3JtR3JvdXAuc3RhdHVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoc3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cykgPT4gc3RhdHVzICE9PSAnUEVORElORycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fb25TdWJtaXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9saXN0ZW5Ub1N1Ym1pdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vbkZvcm1JdGVtc0NoYW5nZShpdGVtczogT2JzZXJ2YWJsZTxEeW5hbWljRm9ybUl0ZW1bXT4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCQubmV4dCgpO1xuICAgICAgICB0aGlzLl9yZWZyZXNoJC5jb21wbGV0ZSgpO1xuXG4gICAgICAgIHRoaXMuX3JlZnJlc2gkID0gbmV3IFN1YmplY3QoKTtcblxuICAgICAgICBpdGVtcy5waXBlKHRha2VVbnRpbChtZXJnZSh0aGlzLl9yZWZyZXNoJCwgZGVzdHJveU9ic2VydmFibGUodGhpcy5fZGVzdHJveVJlZikpKSkuc3Vic2NyaWJlKChmb3JtSXRlbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21hcHBlZEZvcm1pdGVtcyA9IG1hcEZvcm1JdGVtcyhmb3JtSXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVGb3JtKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwbHlSYW5rKGl0ZW1zOiBEeW5hbWljRm9ybUl0ZW1bXSk6IER5bmFtaWNGb3JtSXRlbVtdIHtcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLnJhbmsgPSBpdGVtLnJhbmsgfHwgaW5kZXg7XG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcykge1xuICAgICAgICAgICAgICAgIGl0ZW0uaXRlbXMgPSB0aGlzLl9hcHBseVJhbmsoaXRlbS5pdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkQ29udHJvbFRvRm9ybUl0ZW1zKGl0ZW06IER5bmFtaWNGb3JtSXRlbSwgcGF0aD86IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwcGVkRm9ybWl0ZW1zLnNldChpdGVtLm5hbWUsIHRyYW5zZm9ybUZvcm1JdGVtKGl0ZW0sIHRoaXMuX21hcHBlZEZvcm1pdGVtcy5zaXplKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gZ2V0UGFyZW50SXRlbShwYXRoLCB0aGlzLl9tYXBwZWRGb3JtaXRlbXMpO1xuXG4gICAgICAgIGlmICghcGFyZW50SXRlbSB8fCBpc0Zvcm1GaWVsZEl0ZW0ocGFyZW50SXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudEl0ZW0uaXRlbXMgPSBwYXJlbnRJdGVtLml0ZW1zIHx8IG5ldyBNYXAoKTtcbiAgICAgICAgcGFyZW50SXRlbS5pdGVtcy5zZXQoaXRlbS5uYW1lLCB0cmFuc2Zvcm1Gb3JtSXRlbShpdGVtLCBwYXJlbnRJdGVtLml0ZW1zLnNpemUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlbW92ZUNvbnRyb2xGcm9tSXRlbXMobmFtZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXBwZWRGb3JtaXRlbXMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50SXRlbSA9IGdldFBhcmVudEl0ZW0ocGF0aCwgdGhpcy5fbWFwcGVkRm9ybWl0ZW1zKTtcblxuICAgICAgICBpZiAoIXBhcmVudEl0ZW0gfHwgaXNGb3JtRmllbGRJdGVtKHBhcmVudEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnRJdGVtLml0ZW1zPy5kZWxldGUobmFtZSk7XG4gICAgfVxufVxuIiwiQGlmIChfZmlyc3RMb2FkaW5nRG9uZSkge1xuICAgIDxmZC1idXN5LWluZGljYXRvciBbbG9hZGluZ109XCJmb3JtTG9hZGluZ1wiIFtibG9ja109XCJ0cnVlXCI+XG4gICAgICAgIEBpZiAoZm9ybSkge1xuICAgICAgICAgICAgPGZkcC1mb3JtLWdyb3VwXG4gICAgICAgICAgICAgICAgW2hpbnRdPVwiaGludFwiXG4gICAgICAgICAgICAgICAgW21haW5UaXRsZV09XCJtYWluVGl0bGVcIlxuICAgICAgICAgICAgICAgIFtoaWRlTWFpblRJdGxlXT1cImhpZGVNYWluVEl0bGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgW2NvbHVtbkxheW91dF09XCJjb2x1bW5MYXlvdXRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbENvbHVtbkxheW91dF09XCJsYWJlbENvbHVtbkxheW91dFwiXG4gICAgICAgICAgICAgICAgW2ZpZWxkQ29sdW1uTGF5b3V0XT1cImZpZWxkQ29sdW1uTGF5b3V0XCJcbiAgICAgICAgICAgICAgICBbZ2FwQ29sdW1uTGF5b3V0XT1cImdhcENvbHVtbkxheW91dFwiXG4gICAgICAgICAgICAgICAgW3VuaWZpZWRMYXlvdXRdPVwidW5pZmllZExheW91dFwiXG4gICAgICAgICAgICAgICAgW2lubGluZUNvbHVtbkxheW91dF09XCJpbmxpbmVDb2x1bW5MYXlvdXRcIlxuICAgICAgICAgICAgICAgIFt1c2VGb3JtXT1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBmb3IgKGVycm9yIG9mIF9lcnJvck1vZGVsczsgdHJhY2sgX2Vycm9yc1RyYWNrQnkoJGluZGV4LCBlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKmZkcEZvcm1GaWVsZEVycm9yPVwiZXJyb3IudHlwZTsgbGV0IGRpcmVjdGl2ZUVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKF9pc0FkdmFuY2VkRXJyb3IoZGlyZWN0aXZlRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChkaXJlY3RpdmVFcnJvci5oZWFkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpmZHBGb3JtRmllbGRFcnJvckhlYWRpbmc9XCJsZXQgdmFsaWRhdGlvbkVycm9yOyB0eXBlOiBkaXJlY3RpdmVFcnJvci50eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWxpZGF0aW9uRXJyb3IuaGVhZGluZyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZGlyZWN0aXZlRXJyb3IuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKmZkcEZvcm1GaWVsZEVycm9yRGVzY3JpcHRpb249XCJsZXQgdmFsaWRhdGlvbkVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWxpZGF0aW9uRXJyb3IuZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpmZHBGb3JtRmllbGRFcnJvckhlYWRpbmc9XCJsZXQgdmFsaWRhdGlvbkVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVycm9yLnZhbHVlID8gZXJyb3IudmFsdWUgOiB2YWxpZGF0aW9uRXJyb3IgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgZm9ybUNvbnRyb2xJdGVtczsgdHJhY2sgX3RyYWNrRm4oJGluZGV4LCBmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZC50eXBlID09PSAnZmllbGQnID8gZmllbGRSZW5kZXJlciA6IGdyb3VwUmVuZGVyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkTmFtZTogZmllbGQuZm9ybUl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5rOiBmaWVsZC5mb3JtSXRlbT8ucmFuayB8fCAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2ZpZWxkUmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC1maWVsZD1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC1mb3JtRmllbGROYW1lPVwiZm9ybUZpZWxkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtZm9ybUdyb3VwTmFtZT1cImZvcm1Hcm91cE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXJhbms9XCJyYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpmZHBEeW5hbWljRm9ybUNvbnRyb2xGaWVsZD1cImZpZWxkOyBzaG93OiBzaG91bGRTaG93RmllbGRzW2ZpZWxkLmZvcm1JdGVtLm5hbWVdICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC1mb3JtLWdlbmVyYXRvci1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGludE9wdGlvbnNdPVwiZmllbGQuZm9ybUl0ZW0uZ3VpT3B0aW9ucyB8IGdldEhpbnRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG91bGRTaG93XT1cInNob3VsZFNob3dGaWVsZHNbZmllbGQuZm9ybUl0ZW0ubmFtZV0gIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1GaWVsZE5hbWVdPVwiZm9ybUZpZWxkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lUGF0aF09XCJmb3JtR3JvdXBOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JhbmtdPVwicmFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLWZvcm0tZ2VuZXJhdG9yLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZ3JvdXBSZW5kZXJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZHAtZm9ybS1maWVsZC1ncm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaW50T3B0aW9uc109XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zIHwgZ2V0SGludE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZC5mb3JtSXRlbS5tZXNzYWdlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb2x1bW5MYXlvdXRdPVwiZmllbGQuZm9ybUl0ZW0uZ3VpT3B0aW9ucz8ubGFiZWxDb2x1bW5MYXlvdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZENvbHVtbkxheW91dF09XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zPy5maWVsZENvbHVtbkxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dhcENvbHVtbkxheW91dF09XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zPy5nYXBDb2x1bW5MYXlvdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtTmFtZV09XCJmaWVsZC5mb3JtSXRlbS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBGaWVsZCBvZiBmaWVsZCB8IGdldE9yZGVyZWRGaWVsZENvbnRyb2xzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayBfZ3JvdXBUcmFja0ZuKCRpbmRleCwgZ3JvdXBGaWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZkcER5bmFtaWNGb3JtQ29udHJvbEZpZWxkPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBGaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93OiBzaG91bGRTaG93RmllbGRzW2dyb3VwRmllbGQuZm9ybUl0ZW0ubmFtZSFdICE9PSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC1mb3JtLWdlbmVyYXRvci1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaW50T3B0aW9uc109XCJncm91cEZpZWxkLmZvcm1JdGVtLmd1aU9wdGlvbnMgfCBnZXRIaW50T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImdyb3VwRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG91bGRTaG93XT1cInNob3VsZFNob3dGaWVsZHNbZ3JvdXBGaWVsZC5mb3JtSXRlbS5uYW1lIV0gIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUZpZWxkTmFtZV09XCJncm91cEZpZWxkLmZvcm1JdGVtLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lUGF0aF09XCJmaWVsZC5mb3JtSXRlbS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmFua109XCJncm91cEZpZWxkLmZvcm1JdGVtLnJhbmsgfHwgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZHAtZm9ybS1nZW5lcmF0b3ItZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmRwLWZvcm0tZmllbGQtZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoIW5vQWRkaXRpb25hbENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGZkcC1mb3JtLWZpZWxkIFtjb2x1bW5dPVwiMVwiIFtyYW5rXT1cImZvcm1Db250cm9sSXRlbXMubGVuZ3RoICsgMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgdXNlci1kZWZpbmVkIGVsZW1lbnRzLCBsaWtlIHN1Ym1pdCBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZmRwLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9mZHAtZm9ybS1ncm91cD5cbiAgICAgICAgfVxuICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG59IEBlbHNlIHtcbiAgICA8ZmQtc2tlbGV0b24gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwcHhcIiBbc3R5bGUucGFkZGluZy5yZW1dPVwiMVwiPlxuICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMTUlXCIgaGVpZ2h0PVwiOFwiIC8+XG4gICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIyMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMjUlXCIgaGVpZ2h0PVwiMTZcIiAvPlxuICAgICAgICA8c3ZnOnJlY3QgeD1cIjM1JVwiIHk9XCIwXCIgcng9XCI0XCIgd2lkdGg9XCIxNSVcIiBoZWlnaHQ9XCI4XCIgLz5cbiAgICAgICAgPHN2ZzpyZWN0IHg9XCIzNSVcIiB5PVwiMjBcIiByeD1cIjRcIiB3aWR0aD1cIjI1JVwiIGhlaWdodD1cIjE2XCIgLz5cbiAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjYwXCIgcng9XCI0XCIgd2lkdGg9XCIxNSVcIiBoZWlnaHQ9XCI4XCIgLz5cbiAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjgwXCIgcng9XCI0XCIgd2lkdGg9XCIyNSVcIiBoZWlnaHQ9XCIxNlwiIC8+XG4gICAgPC9mZC1za2VsZXRvbj5cbn1cbiJdfQ==
@@ -44,10 +44,10 @@ export class FormGeneratorComponentsAccessorService {
44
44
  getComponentDefinitionByType(type) {
45
45
  return this._formComponentDefinitions.find((c) => c.types?.includes(type));
46
46
  }
47
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: FormGeneratorComponentsAccessorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
48
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: FormGeneratorComponentsAccessorService, providedIn: 'root' }); }
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormGeneratorComponentsAccessorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
48
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormGeneratorComponentsAccessorService, providedIn: 'root' }); }
49
49
  }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: FormGeneratorComponentsAccessorService, decorators: [{
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormGeneratorComponentsAccessorService, decorators: [{
51
51
  type: Injectable,
52
52
  args: [{
53
53
  providedIn: 'root'
@@ -75,10 +75,10 @@ export class FormGeneratorFieldComponent {
75
75
  });
76
76
  return returnErrors;
77
77
  }
78
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: FormGeneratorFieldComponent, deps: [{ token: i1.FormGeneratorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
79
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.4", type: FormGeneratorFieldComponent, isStandalone: true, selector: "fdp-form-generator-field", inputs: { field: "field", form: "form", i18n: "i18n", formFieldName: "formFieldName", formGroupNamePath: "formGroupNamePath", rank: "rank", shouldShow: "shouldShow", hintOptions: "hintOptions" }, providers: [formFieldProvider, formGroupChildProvider], viewQueries: [{ propertyName: "fieldRenderer", first: true, predicate: i0.forwardRef(() => FormFieldComponent), descendants: true }], ngImport: i0, template: "<fdp-form-field\n [hint]=\"hintOptions\"\n [placeholder]=\"_placeholder\"\n [id]=\"field.formItem.id || formFieldName\"\n [column]=\"field.formItem.guiOptions?.column || 1\"\n [columnLayout]=\"field.formItem.guiOptions?.columnLayout\"\n [colon]=\"field.formItem.guiOptions?.appendColon === true\"\n [label]=\"field.formItem.message\"\n [validators]=\"field.formItem.validators || []\"\n [required]=\"field.formItem.required\"\n [rank]=\"rank\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [noLabelLayout]=\"field.formItem.guiOptions?.noLabelLayout || false\"\n [formGroup]=\"form\"\n #formField\n>\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n <ng-container\n [formField]=\"formField\"\n [form]=\"form\"\n [formGroupNamePath]=\"formGroupNamePath\"\n fdpDynamicFormControl\n [id]=\"field.formItem.id || formFieldName\"\n [name]=\"formFieldName\"\n [formItem]=\"field.formItem\"\n >\n </ng-container>\n</fdp-form-field>\n", dependencies: [{ kind: "ngmodule", type: FdpFormGroupModule }, { kind: "component", type: i2.FormFieldComponent, selector: "fdp-form-field", inputs: ["label", "id", "hint", "noLabelLayout", "validators", "rank", "placeholder", "column", "columnLayout", "labelColumnLayout", "fieldColumnLayout", "gapColumnLayout", "i18Strings", "required", "editable", "columns", "disabled", "colon", "formGroupContainer"], outputs: ["onChange", "onColumnChange"] }, { kind: "directive", type: i3.FormFieldErrorDirective, selector: "[fdpFormFieldError]", inputs: ["fdpFormFieldErrorAs", "fdpFormFieldError", "fdpFormFieldErrorType"] }, { kind: "directive", type: i4.FormFieldErrorHeadingDirective, selector: "[fdpFormFieldErrorHeading]", inputs: ["fdpFormFieldErrorHeadingAs", "fdpFormFieldErrorHeadingType"] }, { kind: "directive", type: i5.FormFieldErrorDescriptionDirective, selector: "[fdpFormFieldErrorDescription]", inputs: ["fdpFormFieldErrorDescriptionAs"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: DynamicFormControlDirective, selector: "[fdpDynamicFormControl]", inputs: ["formItem", "id", "name", "form", "formGroupNamePath", "formField"] }], encapsulation: i0.ViewEncapsulation.None }); }
78
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormGeneratorFieldComponent, deps: [{ token: i1.FormGeneratorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
79
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", type: FormGeneratorFieldComponent, isStandalone: true, selector: "fdp-form-generator-field", inputs: { field: "field", form: "form", i18n: "i18n", formFieldName: "formFieldName", formGroupNamePath: "formGroupNamePath", rank: "rank", shouldShow: "shouldShow", hintOptions: "hintOptions" }, providers: [formFieldProvider, formGroupChildProvider], viewQueries: [{ propertyName: "fieldRenderer", first: true, predicate: i0.forwardRef(() => FormFieldComponent), descendants: true }], ngImport: i0, template: "<fdp-form-field\n [hint]=\"hintOptions\"\n [placeholder]=\"_placeholder\"\n [id]=\"field.formItem.id || formFieldName\"\n [column]=\"field.formItem.guiOptions?.column || 1\"\n [columnLayout]=\"field.formItem.guiOptions?.columnLayout\"\n [colon]=\"field.formItem.guiOptions?.appendColon === true\"\n [label]=\"field.formItem.message\"\n [validators]=\"field.formItem.validators || []\"\n [required]=\"field.formItem.required\"\n [rank]=\"rank\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [noLabelLayout]=\"field.formItem.guiOptions?.noLabelLayout || false\"\n [formGroup]=\"form\"\n #formField\n>\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n <ng-container\n [formField]=\"formField\"\n [form]=\"form\"\n [formGroupNamePath]=\"formGroupNamePath\"\n fdpDynamicFormControl\n [id]=\"field.formItem.id || formFieldName\"\n [name]=\"formFieldName\"\n [formItem]=\"field.formItem\"\n >\n </ng-container>\n</fdp-form-field>\n", dependencies: [{ kind: "ngmodule", type: FdpFormGroupModule }, { kind: "component", type: i2.FormFieldComponent, selector: "fdp-form-field", inputs: ["label", "id", "hint", "noLabelLayout", "validators", "rank", "placeholder", "column", "columnLayout", "labelColumnLayout", "fieldColumnLayout", "gapColumnLayout", "i18Strings", "required", "editable", "columns", "disabled", "colon", "formGroupContainer"], outputs: ["onChange", "onColumnChange"] }, { kind: "directive", type: i3.FormFieldErrorDirective, selector: "[fdpFormFieldError]", inputs: ["fdpFormFieldErrorAs", "fdpFormFieldError", "fdpFormFieldErrorType"] }, { kind: "directive", type: i4.FormFieldErrorHeadingDirective, selector: "[fdpFormFieldErrorHeading]", inputs: ["fdpFormFieldErrorHeadingAs", "fdpFormFieldErrorHeadingType"] }, { kind: "directive", type: i5.FormFieldErrorDescriptionDirective, selector: "[fdpFormFieldErrorDescription]", inputs: ["fdpFormFieldErrorDescriptionAs"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: DynamicFormControlDirective, selector: "[fdpDynamicFormControl]", inputs: ["formItem", "id", "name", "form", "formGroupNamePath", "formField"] }], encapsulation: i0.ViewEncapsulation.None }); }
80
80
  }
81
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: FormGeneratorFieldComponent, decorators: [{
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormGeneratorFieldComponent, decorators: [{
82
82
  type: Component,
83
83
  args: [{ selector: 'fdp-form-generator-field', providers: [formFieldProvider, formGroupChildProvider], encapsulation: ViewEncapsulation.None, standalone: true, imports: [FdpFormGroupModule, FormsModule, ReactiveFormsModule, DynamicFormControlDirective], template: "<fdp-form-field\n [hint]=\"hintOptions\"\n [placeholder]=\"_placeholder\"\n [id]=\"field.formItem.id || formFieldName\"\n [column]=\"field.formItem.guiOptions?.column || 1\"\n [columnLayout]=\"field.formItem.guiOptions?.columnLayout\"\n [colon]=\"field.formItem.guiOptions?.appendColon === true\"\n [label]=\"field.formItem.message\"\n [validators]=\"field.formItem.validators || []\"\n [required]=\"field.formItem.required\"\n [rank]=\"rank\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [noLabelLayout]=\"field.formItem.guiOptions?.noLabelLayout || false\"\n [formGroup]=\"form\"\n #formField\n>\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n <ng-container\n [formField]=\"formField\"\n [form]=\"form\"\n [formGroupNamePath]=\"formGroupNamePath\"\n fdpDynamicFormControl\n [id]=\"field.formItem.id || formFieldName\"\n [name]=\"formFieldName\"\n [formItem]=\"field.formItem\"\n >\n </ng-container>\n</fdp-form-field>\n" }]
84
84
  }], ctorParameters: () => [{ type: i1.FormGeneratorService }, { type: i0.ChangeDetectorRef }], propDecorators: { field: [{