@acorex/components 18.5.16 → 18.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (332) hide show
  1. package/action-sheet/lib/action-sheet.component.d.ts +26 -0
  2. package/alert/lib/alert.component.d.ts +50 -2
  3. package/audio-wave/lib/audio-wave.component.d.ts +53 -0
  4. package/avatar/lib/avatar.component.d.ts +20 -1
  5. package/badge/lib/badge.component.d.ts +8 -0
  6. package/bottom-navigation/lib/bottom-navigation.component.d.ts +16 -0
  7. package/breadcrumbs/lib/breadcrumbs-item.component.d.ts +11 -0
  8. package/breadcrumbs/lib/breadcrumbs.component.d.ts +11 -0
  9. package/button/lib/button-item-list.component.d.ts +34 -0
  10. package/button/lib/button-item.component.d.ts +47 -0
  11. package/button/lib/button.component.d.ts +36 -0
  12. package/button-group/lib/button-group.component.d.ts +56 -0
  13. package/calendar/lib/calendar-range.component.d.ts +48 -0
  14. package/calendar/lib/calendar.component.d.ts +114 -0
  15. package/check-box/lib/check-box.component.d.ts +36 -0
  16. package/chips/lib/chips.component.d.ts +13 -0
  17. package/circular-progress/lib/circular-progress.component.d.ts +51 -21
  18. package/collapse/lib/collapse-group.component.d.ts +38 -0
  19. package/collapse/lib/collapse.component.d.ts +55 -0
  20. package/color-box/lib/color-box.component.d.ts +28 -1
  21. package/color-palette/lib/color-palette-input.component.d.ts +35 -0
  22. package/color-palette/lib/color-palette-picker.component.d.ts +53 -0
  23. package/color-palette/lib/color-palette-preview.component.d.ts +17 -0
  24. package/color-palette/lib/color-palette-swatches.component.d.ts +30 -0
  25. package/color-palette/lib/color-palette.component.d.ts +8 -0
  26. package/comment/lib/comment-container/comment-container.component.d.ts +5 -0
  27. package/comment/lib/comment-item/comment-item.component.d.ts +16 -2
  28. package/comment/lib/comment-like/comment-like.component.d.ts +8 -0
  29. package/comment/lib/comment-reply/comment-reply.component.d.ts +4 -0
  30. package/comment/lib/comment-view/comment-view.component.d.ts +4 -0
  31. package/common/lib/components/base-component.class.d.ts +8 -0
  32. package/common/lib/components/button-base-component.class.d.ts +21 -0
  33. package/common/lib/components/interactive-component.class.d.ts +15 -0
  34. package/conversation/lib/conversation-container/conversation-container.component.d.ts +4 -0
  35. package/conversation/lib/conversation-input/conversation-input.component.d.ts +79 -2
  36. package/conversation/lib/conversation-message/conversation-message.component.d.ts +41 -0
  37. package/conversation/lib/conversation-messages/conversation-message-audio/conversation-message-audio.component.d.ts +62 -0
  38. package/conversation/lib/conversation-messages/conversation-message-file/conversation-message-file.component.d.ts +34 -0
  39. package/conversation/lib/conversation-messages/conversation-message-image/conversation-message-image.component.d.ts +21 -0
  40. package/conversation/lib/conversation-messages/conversation-message-image-popup/conversation-message-image-popup.component.d.ts +11 -0
  41. package/conversation/lib/conversation-messages/conversation-message-text/conversation-message-text.component.d.ts +29 -0
  42. package/conversation/lib/conversation-messages/conversation-message-video/conversation-message-video.component.d.ts +11 -0
  43. package/conversation/lib/conversation-messages/conversation-message-voice/conversation-message-voice.component.d.ts +72 -0
  44. package/conversation/lib/conversation-view/conversation-view.component.d.ts +22 -0
  45. package/data-pager/lib/data-pager-base.component.d.ts +9 -0
  46. package/data-pager/lib/data-pager-info.component.d.ts +14 -0
  47. package/data-pager/lib/data-pager-input-selector.component.d.ts +17 -0
  48. package/data-pager/lib/data-pager-next-buttons.components.d.ts +20 -0
  49. package/data-pager/lib/data-pager-numeric-selector.component.d.ts +14 -0
  50. package/data-pager/lib/data-pager-pagesize-dropdown.component.d.ts +28 -0
  51. package/data-pager/lib/data-pager-prev-buttons.component.d.ts +20 -0
  52. package/data-pager/lib/data-pager.component.d.ts +111 -0
  53. package/data-table/lib/columns/data-text-column.component.d.ts +58 -0
  54. package/data-table/lib/columns/row-command-column.component.d.ts +83 -0
  55. package/data-table/lib/columns/row-index-column.component.d.ts +51 -0
  56. package/data-table/lib/columns/row-select-column.component.d.ts +47 -0
  57. package/data-table/lib/data-table/data-table.component.d.ts +200 -0
  58. package/data-table/lib/infinite-scroll-data-table/infinite-scroll-data-table.component.d.ts +185 -0
  59. package/datetime-box/lib/datetime-box.component.d.ts +59 -1
  60. package/datetime-input/lib/datetime-input.component.d.ts +133 -0
  61. package/datetime-picker/lib/datetime-picker.component.d.ts +95 -0
  62. package/decorators/lib/components/clear-button.component.d.ts +25 -0
  63. package/decorators/lib/components/close-button.component.d.ts +22 -0
  64. package/decorators/lib/components/generic-content.component.d.ts +4 -0
  65. package/decorators/lib/components/icon.component.d.ts +12 -0
  66. package/dialog/lib/dialog.component.d.ts +20 -0
  67. package/drawer/lib/drawer-container.component.d.ts +7 -0
  68. package/drawer/lib/drawer.component.d.ts +104 -0
  69. package/dropdown/lib/dropdown-box.component.d.ts +66 -0
  70. package/dropdown/lib/dropdown-panel.component.d.ts +85 -0
  71. package/dropdown-button/lib/dropdown-button.component.d.ts +38 -0
  72. package/esm2022/action-sheet/lib/action-sheet.component.mjs +21 -1
  73. package/esm2022/alert/lib/alert.component.mjs +48 -3
  74. package/esm2022/audio-wave/lib/audio-wave.component.mjs +48 -1
  75. package/esm2022/avatar/lib/avatar.component.mjs +21 -2
  76. package/esm2022/badge/lib/badge.component.mjs +9 -1
  77. package/esm2022/bottom-navigation/lib/bottom-navigation.component.mjs +14 -1
  78. package/esm2022/breadcrumbs/lib/breadcrumbs-item.component.mjs +9 -1
  79. package/esm2022/breadcrumbs/lib/breadcrumbs.component.mjs +6 -1
  80. package/esm2022/button/lib/button-item-list.component.mjs +35 -1
  81. package/esm2022/button/lib/button-item.component.mjs +36 -1
  82. package/esm2022/button/lib/button.component.mjs +37 -1
  83. package/esm2022/button-group/lib/button-group.component.mjs +51 -1
  84. package/esm2022/calendar/lib/calendar-range.component.mjs +46 -1
  85. package/esm2022/calendar/lib/calendar.component.mjs +112 -1
  86. package/esm2022/check-box/lib/check-box.component.mjs +34 -1
  87. package/esm2022/chips/lib/chips.component.mjs +14 -1
  88. package/esm2022/circular-progress/lib/circular-progress.component.mjs +73 -74
  89. package/esm2022/collapse/lib/collapse-group.component.mjs +39 -1
  90. package/esm2022/collapse/lib/collapse.component.mjs +53 -1
  91. package/esm2022/color-box/lib/color-box.component.mjs +23 -2
  92. package/esm2022/color-palette/lib/color-palette-input.component.mjs +36 -1
  93. package/esm2022/color-palette/lib/color-palette-picker.component.mjs +54 -1
  94. package/esm2022/color-palette/lib/color-palette-preview.component.mjs +18 -1
  95. package/esm2022/color-palette/lib/color-palette-swatches.component.mjs +28 -1
  96. package/esm2022/color-palette/lib/color-palette.component.mjs +9 -1
  97. package/esm2022/comment/lib/comment-container/comment-container.component.mjs +6 -1
  98. package/esm2022/comment/lib/comment-item/comment-item.component.mjs +15 -1
  99. package/esm2022/comment/lib/comment-like/comment-like.component.mjs +9 -1
  100. package/esm2022/comment/lib/comment-reply/comment-reply.component.mjs +5 -1
  101. package/esm2022/comment/lib/comment-view/comment-view.component.mjs +5 -1
  102. package/esm2022/common/lib/components/base-component.class.mjs +9 -1
  103. package/esm2022/common/lib/components/button-base-component.class.mjs +22 -1
  104. package/esm2022/common/lib/components/interactive-component.class.mjs +16 -1
  105. package/esm2022/conversation/lib/conversation-container/conversation-container.component.mjs +5 -1
  106. package/esm2022/conversation/lib/conversation-input/conversation-input.component.mjs +75 -1
  107. package/esm2022/conversation/lib/conversation-message/conversation-message.component.mjs +39 -1
  108. package/esm2022/conversation/lib/conversation-messages/conversation-message-audio/conversation-message-audio.component.mjs +63 -1
  109. package/esm2022/conversation/lib/conversation-messages/conversation-message-file/conversation-message-file.component.mjs +35 -1
  110. package/esm2022/conversation/lib/conversation-messages/conversation-message-image/conversation-message-image.component.mjs +22 -1
  111. package/esm2022/conversation/lib/conversation-messages/conversation-message-image-popup/conversation-message-image-popup.component.mjs +9 -1
  112. package/esm2022/conversation/lib/conversation-messages/conversation-message-text/conversation-message-text.component.mjs +30 -1
  113. package/esm2022/conversation/lib/conversation-messages/conversation-message-video/conversation-message-video.component.mjs +12 -1
  114. package/esm2022/conversation/lib/conversation-messages/conversation-message-voice/conversation-message-voice.component.mjs +70 -1
  115. package/esm2022/conversation/lib/conversation-view/conversation-view.component.mjs +23 -1
  116. package/esm2022/data-pager/lib/data-pager-base.component.mjs +7 -1
  117. package/esm2022/data-pager/lib/data-pager-info.component.mjs +9 -1
  118. package/esm2022/data-pager/lib/data-pager-input-selector.component.mjs +18 -1
  119. package/esm2022/data-pager/lib/data-pager-next-buttons.components.mjs +18 -1
  120. package/esm2022/data-pager/lib/data-pager-numeric-selector.component.mjs +15 -1
  121. package/esm2022/data-pager/lib/data-pager-pagesize-dropdown.component.mjs +23 -1
  122. package/esm2022/data-pager/lib/data-pager-prev-buttons.component.mjs +18 -1
  123. package/esm2022/data-pager/lib/data-pager.component.mjs +109 -1
  124. package/esm2022/data-table/lib/columns/data-text-column.component.mjs +32 -1
  125. package/esm2022/data-table/lib/columns/row-command-column.component.mjs +63 -1
  126. package/esm2022/data-table/lib/columns/row-index-column.component.mjs +40 -1
  127. package/esm2022/data-table/lib/columns/row-select-column.component.mjs +39 -1
  128. package/esm2022/data-table/lib/data-table/data-table.component.mjs +183 -1
  129. package/esm2022/data-table/lib/infinite-scroll-data-table/infinite-scroll-data-table.component.mjs +159 -1
  130. package/esm2022/datetime-box/lib/datetime-box.component.mjs +51 -2
  131. package/esm2022/datetime-input/lib/datetime-input.component.mjs +122 -1
  132. package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +90 -1
  133. package/esm2022/decorators/lib/components/clear-button.component.mjs +26 -1
  134. package/esm2022/decorators/lib/components/close-button.component.mjs +23 -1
  135. package/esm2022/decorators/lib/components/generic-content.component.mjs +5 -1
  136. package/esm2022/decorators/lib/components/icon.component.mjs +13 -1
  137. package/esm2022/dialog/lib/dialog.component.mjs +18 -1
  138. package/esm2022/drawer/lib/drawer-container.component.mjs +8 -1
  139. package/esm2022/drawer/lib/drawer.component.mjs +102 -1
  140. package/esm2022/dropdown/lib/dropdown-box.component.mjs +58 -1
  141. package/esm2022/dropdown/lib/dropdown-panel.component.mjs +77 -1
  142. package/esm2022/dropdown-button/lib/dropdown-button.component.mjs +36 -1
  143. package/esm2022/form/lib/form-field.component.mjs +40 -1
  144. package/esm2022/form/lib/form.component.mjs +59 -1
  145. package/esm2022/form/lib/validation-summary.component.mjs +41 -1
  146. package/esm2022/image/lib/image.component.mjs +47 -1
  147. package/esm2022/label/lib/label.component.mjs +32 -1
  148. package/esm2022/list/lib/list.component.mjs +84 -1
  149. package/esm2022/loading/lib/loading-spinner.component.mjs +17 -1
  150. package/esm2022/loading/lib/loading.component.mjs +27 -1
  151. package/esm2022/popup/lib/popup.component.mjs +2 -2
  152. package/esm2022/progress-bar/lib/progress-bar.component.mjs +1 -1
  153. package/esm2022/scheduler/lib/scheduler-month-view.component.mjs +20 -1
  154. package/esm2022/scheduler/lib/scheduler-week-view.component.mjs +5 -1
  155. package/esm2022/scheduler/lib/scheduler.component.mjs +10 -1
  156. package/esm2022/search-box/lib/search-box.component.mjs +19 -2
  157. package/esm2022/select-box/lib/select-box.component.mjs +50 -2
  158. package/esm2022/selection-list/lib/selection-list.component.mjs +51 -1
  159. package/esm2022/side-menu/lib/side-menu.component.mjs +5 -1
  160. package/esm2022/skeleton/lib/skeleton.component.mjs +11 -1
  161. package/esm2022/slider/lib/slider.component.mjs +52 -2
  162. package/esm2022/step-wizard/lib/step-wizard.component.mjs +23 -1
  163. package/esm2022/switch/lib/switch-content.component.mjs +5 -1
  164. package/esm2022/switch/lib/switch.component.mjs +11 -1
  165. package/esm2022/tabs/lib/tab-item.component.mjs +24 -1
  166. package/esm2022/tabs/lib/tabs.component.mjs +36 -1
  167. package/esm2022/tag/lib/tag.component.mjs +2 -1
  168. package/esm2022/text-area/lib/text-area.component.mjs +8 -1
  169. package/esm2022/text-box/lib/text-box.component.mjs +13 -1
  170. package/esm2022/toast/lib/toast.component.mjs +6 -1
  171. package/esm2022/tooltip/lib/tooltip.component.mjs +5 -1
  172. package/esm2022/uploader/index.mjs +5 -5
  173. package/esm2022/uploader/lib/{uploader-dialog-container.component.mjs → uploader-dialog-container/uploader-dialog-container.component.mjs} +17 -2
  174. package/esm2022/uploader/lib/uploader-drop-zone/uploader-drop-zone.component.mjs +27 -0
  175. package/esm2022/uploader/lib/uploader-list/uploader-list.component.mjs +26 -0
  176. package/esm2022/uploader/lib/uploader-zone.directive.mjs +23 -16
  177. package/esm2022/uploader/lib/uploader.models.mjs +19 -1
  178. package/esm2022/uploader/lib/uploader.module.mjs +18 -13
  179. package/esm2022/uploader/lib/uploader.service.mjs +14 -7
  180. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-container/wysiwyg-container.component.mjs +66 -9
  181. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-toolbar/wysiwyg-toolbar.component.mjs +105 -43
  182. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-view/wysiwyg-view.component.mjs +9 -1
  183. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg.service.mjs +4 -1
  184. package/fesm2022/acorex-components-action-sheet.mjs +20 -0
  185. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  186. package/fesm2022/acorex-components-alert.mjs +47 -2
  187. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  188. package/fesm2022/acorex-components-audio-wave.mjs +47 -0
  189. package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
  190. package/fesm2022/acorex-components-avatar.mjs +20 -1
  191. package/fesm2022/acorex-components-avatar.mjs.map +1 -1
  192. package/fesm2022/acorex-components-badge.mjs +8 -0
  193. package/fesm2022/acorex-components-badge.mjs.map +1 -1
  194. package/fesm2022/acorex-components-bottom-navigation.mjs +13 -0
  195. package/fesm2022/acorex-components-bottom-navigation.mjs.map +1 -1
  196. package/fesm2022/acorex-components-breadcrumbs.mjs +13 -0
  197. package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
  198. package/fesm2022/acorex-components-button-group.mjs +50 -0
  199. package/fesm2022/acorex-components-button-group.mjs.map +1 -1
  200. package/fesm2022/acorex-components-button.mjs +105 -0
  201. package/fesm2022/acorex-components-button.mjs.map +1 -1
  202. package/fesm2022/acorex-components-calendar.mjs +156 -0
  203. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  204. package/fesm2022/acorex-components-check-box.mjs +33 -0
  205. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  206. package/fesm2022/acorex-components-chips.mjs +13 -0
  207. package/fesm2022/acorex-components-chips.mjs.map +1 -1
  208. package/fesm2022/acorex-components-circular-progress.mjs +72 -73
  209. package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
  210. package/fesm2022/acorex-components-collapse.mjs +90 -0
  211. package/fesm2022/acorex-components-collapse.mjs.map +1 -1
  212. package/fesm2022/acorex-components-color-box.mjs +22 -1
  213. package/fesm2022/acorex-components-color-box.mjs.map +1 -1
  214. package/fesm2022/acorex-components-color-palette.mjs +140 -0
  215. package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
  216. package/fesm2022/acorex-components-comment.mjs +35 -0
  217. package/fesm2022/acorex-components-comment.mjs.map +1 -1
  218. package/fesm2022/acorex-components-common.mjs +44 -0
  219. package/fesm2022/acorex-components-common.mjs.map +1 -1
  220. package/fesm2022/acorex-components-conversation.mjs +372 -0
  221. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  222. package/fesm2022/acorex-components-data-pager.mjs +209 -0
  223. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  224. package/fesm2022/acorex-components-data-table.mjs +510 -0
  225. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  226. package/fesm2022/acorex-components-datetime-box.mjs +50 -1
  227. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  228. package/fesm2022/acorex-components-datetime-input.mjs +121 -0
  229. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  230. package/fesm2022/acorex-components-datetime-picker.mjs +89 -0
  231. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  232. package/fesm2022/acorex-components-decorators.mjs +63 -0
  233. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  234. package/fesm2022/acorex-components-dialog.mjs +17 -0
  235. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  236. package/fesm2022/acorex-components-drawer.mjs +108 -0
  237. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  238. package/fesm2022/acorex-components-dropdown-button.mjs +35 -0
  239. package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
  240. package/fesm2022/acorex-components-dropdown.mjs +133 -0
  241. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  242. package/fesm2022/acorex-components-form.mjs +137 -0
  243. package/fesm2022/acorex-components-form.mjs.map +1 -1
  244. package/fesm2022/acorex-components-image.mjs +46 -0
  245. package/fesm2022/acorex-components-image.mjs.map +1 -1
  246. package/fesm2022/acorex-components-label.mjs +31 -0
  247. package/fesm2022/acorex-components-label.mjs.map +1 -1
  248. package/fesm2022/acorex-components-list.mjs +83 -0
  249. package/fesm2022/acorex-components-list.mjs.map +1 -1
  250. package/fesm2022/acorex-components-loading.mjs +42 -0
  251. package/fesm2022/acorex-components-loading.mjs.map +1 -1
  252. package/fesm2022/acorex-components-popup.mjs +1 -1
  253. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  254. package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
  255. package/fesm2022/acorex-components-scheduler.mjs +32 -0
  256. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  257. package/fesm2022/acorex-components-search-box.mjs +18 -1
  258. package/fesm2022/acorex-components-search-box.mjs.map +1 -1
  259. package/fesm2022/acorex-components-select-box.mjs +49 -1
  260. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  261. package/fesm2022/acorex-components-selection-list.mjs +50 -0
  262. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  263. package/fesm2022/acorex-components-side-menu.mjs +4 -0
  264. package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
  265. package/fesm2022/acorex-components-skeleton.mjs +10 -0
  266. package/fesm2022/acorex-components-skeleton.mjs.map +1 -1
  267. package/fesm2022/acorex-components-slider.mjs +51 -1
  268. package/fesm2022/acorex-components-slider.mjs.map +1 -1
  269. package/fesm2022/acorex-components-step-wizard.mjs +22 -0
  270. package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
  271. package/fesm2022/acorex-components-switch.mjs +14 -0
  272. package/fesm2022/acorex-components-switch.mjs.map +1 -1
  273. package/fesm2022/acorex-components-tabs.mjs +58 -0
  274. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  275. package/fesm2022/acorex-components-tag.mjs +1 -0
  276. package/fesm2022/acorex-components-tag.mjs.map +1 -1
  277. package/fesm2022/acorex-components-text-area.mjs +7 -0
  278. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  279. package/fesm2022/acorex-components-text-box.mjs +12 -0
  280. package/fesm2022/acorex-components-text-box.mjs.map +1 -1
  281. package/fesm2022/acorex-components-toast.mjs +5 -0
  282. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  283. package/fesm2022/acorex-components-tooltip.mjs +4 -0
  284. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  285. package/fesm2022/acorex-components-uploader.mjs +100 -32
  286. package/fesm2022/acorex-components-uploader.mjs.map +1 -1
  287. package/fesm2022/acorex-components-wysiwyg.mjs +179 -50
  288. package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
  289. package/form/lib/form-field.component.d.ts +45 -0
  290. package/form/lib/form.component.d.ts +58 -0
  291. package/form/lib/validation-summary.component.d.ts +49 -0
  292. package/image/lib/image.component.d.ts +61 -0
  293. package/label/lib/label.component.d.ts +34 -0
  294. package/list/lib/list.component.d.ts +98 -0
  295. package/loading/lib/loading-spinner.component.d.ts +20 -0
  296. package/loading/lib/loading.component.d.ts +35 -0
  297. package/package.json +58 -58
  298. package/progress-bar/lib/progress-bar.component.d.ts +0 -1
  299. package/scheduler/lib/scheduler-month-view.component.d.ts +20 -0
  300. package/scheduler/lib/scheduler-week-view.component.d.ts +4 -0
  301. package/scheduler/lib/scheduler.component.d.ts +10 -0
  302. package/search-box/lib/search-box.component.d.ts +19 -1
  303. package/select-box/lib/select-box.component.d.ts +78 -1
  304. package/selection-list/lib/selection-list.component.d.ts +55 -0
  305. package/side-menu/lib/side-menu.component.d.ts +4 -0
  306. package/skeleton/lib/skeleton.component.d.ts +10 -0
  307. package/slider/lib/slider.component.d.ts +51 -1
  308. package/step-wizard/lib/step-wizard.component.d.ts +23 -0
  309. package/switch/lib/switch-content.component.d.ts +4 -0
  310. package/switch/lib/switch.component.d.ts +14 -0
  311. package/tabs/lib/tab-item.component.d.ts +32 -0
  312. package/tabs/lib/tabs.component.d.ts +42 -0
  313. package/tag/lib/tag.component.d.ts +4 -0
  314. package/text-area/lib/text-area.component.d.ts +13 -0
  315. package/text-box/lib/text-box.component.d.ts +27 -0
  316. package/toast/lib/toast.component.d.ts +6 -0
  317. package/tooltip/lib/tooltip.component.d.ts +13 -0
  318. package/uploader/index.d.ts +4 -4
  319. package/uploader/lib/{uploader-dialog-container.component.d.ts → uploader-dialog-container/uploader-dialog-container.component.d.ts} +15 -0
  320. package/uploader/lib/uploader-drop-zone/uploader-drop-zone.component.d.ts +12 -0
  321. package/uploader/lib/{uploader-list.component.d.ts → uploader-list/uploader-list.component.d.ts} +6 -1
  322. package/uploader/lib/uploader-zone.directive.d.ts +1 -0
  323. package/uploader/lib/uploader.models.d.ts +9 -0
  324. package/uploader/lib/uploader.module.d.ts +4 -4
  325. package/uploader/lib/uploader.service.d.ts +2 -1
  326. package/wysiwyg/lib/wysiwyg/wysiwyg-container/wysiwyg-container.component.d.ts +35 -6
  327. package/wysiwyg/lib/wysiwyg/wysiwyg-toolbar/wysiwyg-toolbar.component.d.ts +61 -21
  328. package/wysiwyg/lib/wysiwyg/wysiwyg-view/wysiwyg-view.component.d.ts +4 -0
  329. package/wysiwyg/lib/wysiwyg/wysiwyg.service.d.ts +3 -0
  330. package/esm2022/uploader/lib/uploader-drop-zone.component.mjs +0 -14
  331. package/esm2022/uploader/lib/uploader-list.component.mjs +0 -21
  332. package/uploader/lib/uploader-drop-zone.component.d.ts +0 -6
@@ -12,51 +12,154 @@ import * as i2 from "@angular/cdk/scrolling";
12
12
  import * as i3 from "@acorex/components/decorators";
13
13
  import * as i4 from "@acorex/components/skeleton";
14
14
  import * as i5 from "@acorex/components/button";
15
+ /**
16
+ * Component for a data table with infinite scrolling capabilities.
17
+ *
18
+ * @category Components
19
+ */
15
20
  export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
16
21
  constructor() {
17
22
  super(...arguments);
18
23
  this.ngZone = inject(NgZone);
24
+ /**
25
+ * Emits an event when the page changes.
26
+ *
27
+ * @event
28
+ */
19
29
  this.onPageChanged = new EventEmitter();
30
+ /**
31
+ * @ignore
32
+ */
20
33
  this.clickSubject = new Subject();
34
+ /**
35
+ * Emits an event when a row is clicked.
36
+ *
37
+ * @event
38
+ */
21
39
  this.onRowClick = new EventEmitter();
40
+ /**
41
+ * Emits an event when a row is double-clicked.
42
+ *
43
+ * @event
44
+ */
22
45
  this.onRowDbClick = new EventEmitter();
46
+ /**
47
+ * Controls the visibility of the table header.
48
+ *
49
+ * @defaultValue true
50
+ */
23
51
  this.showHeader = true;
52
+ /**
53
+ * Defines the mode for fetching data.
54
+ *
55
+ * @defaultValue 'auto'
56
+ */
24
57
  this.fetchDataMode = 'auto';
58
+ /**
59
+ * Configuration for the loading state of the data table.
60
+ *
61
+ * @defaultValue { enabled: true, animation: true }
62
+ */
25
63
  this.loading = {
26
64
  enabled: true,
27
65
  animation: true,
28
66
  };
67
+ /**
68
+ * @ignore
69
+ */
29
70
  this.isLoading = signal(true);
71
+ /**
72
+ * @ignore
73
+ */
30
74
  this.hasItems = false;
75
+ /**
76
+ * @ignore
77
+ */
31
78
  this.totalRows = 0;
79
+ /**
80
+ * @ignore
81
+ */
32
82
  this.currentPage = 0;
83
+ /**
84
+ * @ignore
85
+ */
33
86
  this.totalPages = 0;
87
+ /**
88
+ * @ignore
89
+ */
34
90
  this.startRowIndex = 0;
91
+ /**
92
+ * @ignore
93
+ */
35
94
  this.lastIndex = 0;
95
+ /**
96
+ * Event emitted when the focused row changes.
97
+ *
98
+ * @event
99
+ */
36
100
  this.focusedRowChange = new EventEmitter();
101
+ /**
102
+ * Defines the height of each item in the table.
103
+ *
104
+ * @default 40
105
+ */
37
106
  this.itemHeight = 40;
107
+ /**
108
+ * @ignore
109
+ */
38
110
  this.width = '100%';
111
+ /**
112
+ * @ignore
113
+ */
39
114
  this.height = '100%';
115
+ /**
116
+ * Emitted when the scroll index changes in the table.
117
+ *
118
+ * @event
119
+ */
40
120
  this.onScrolledIndexChanged = new EventEmitter();
41
121
  }
122
+ /**
123
+ * @ignore
124
+ */
42
125
  startFixedColumn() {
43
126
  return this.columns?.toArray().filter((c) => c.fixed == 'start') ?? [];
44
127
  }
128
+ /**
129
+ * @ignore
130
+ */
45
131
  endFixedColumn() {
46
132
  return this.columns?.toArray().filter((c) => c.fixed == 'end') ?? [];
47
133
  }
134
+ /**
135
+ * @ignore
136
+ */
48
137
  notFixedColumn() {
49
138
  return this.columns?.toArray().filter((c) => !c.fixed) ?? [];
50
139
  }
140
+ /**
141
+ * @ignore
142
+ */
51
143
  notFixedColumnCount() {
52
144
  return this.columns?.toArray().filter((c) => !c.fixed).length ?? 0;
53
145
  }
146
+ /**
147
+ * @ignore
148
+ */
54
149
  fixedColumnCount() {
55
150
  return this.columns?.toArray().filter((c) => c.fixed).length ?? 0;
56
151
  }
152
+ /**
153
+ * Retrieves the currently focused row.
154
+ */
57
155
  get focusedRow() {
58
156
  return this._focusedRow;
59
157
  }
158
+ /**
159
+ * Sets the currently focused row and emits a change event.
160
+ *
161
+ * @param v - The row data to be set as focused.
162
+ */
60
163
  set focusedRow(v) {
61
164
  this._focusedRow = v;
62
165
  this.focusedRowChange.emit(v);
@@ -64,6 +167,9 @@ export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
64
167
  trackByIdx(i) {
65
168
  return i;
66
169
  }
170
+ /**
171
+ * @ignore
172
+ */
67
173
  ngOnInit() {
68
174
  super.ngOnInit();
69
175
  this.listDataSource = new AXListDataSource({
@@ -86,6 +192,9 @@ export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
86
192
  this.handleRowDoubleClick(clickArray[0].event, clickArray[0].item);
87
193
  });
88
194
  }
195
+ /**
196
+ * @ignore
197
+ */
89
198
  _handleOnscrolledIndexChange(e) {
90
199
  this.lastIndex = e;
91
200
  this.onScrolledIndexChanged.emit({
@@ -94,6 +203,9 @@ export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
94
203
  isUserInteraction: true,
95
204
  });
96
205
  }
206
+ /**
207
+ * @ignore
208
+ */
97
209
  ngDoCheck() {
98
210
  //this.copyFixedColumns();
99
211
  this.updateHScroll();
@@ -103,6 +215,9 @@ export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
103
215
  //
104
216
  this.updateTotalCount();
105
217
  }
218
+ /**
219
+ * @ignore
220
+ */
106
221
  updateTotalCount() {
107
222
  this.startRowIndex = this.lastIndex;
108
223
  if (this.startRowIndex < 1)
@@ -110,15 +225,24 @@ export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
110
225
  if (this.startRowIndex > this.totalRows)
111
226
  this.startRowIndex = this.totalRows;
112
227
  }
228
+ /**
229
+ * @ignore
230
+ */
113
231
  updateHeight() {
114
232
  this.height = `calc(100% - ${(this.headerContainer?.nativeElement.clientHeight ?? 0) + (this.footerContainer?.nativeElement.clientHeight ?? 0)}px)`;
115
233
  }
234
+ /**
235
+ * @ignore
236
+ */
116
237
  updateWidth() {
117
238
  if (this.columns && this.columns.length) {
118
239
  const sumPx = sum(this.columns.toArray().map((c) => (typeof c.width == 'number' ? c.width : Number(c.width.replace('px', '')))));
119
240
  this.width = `${Math.max(sumPx, this.getHostElement().clientWidth - 5)}px`;
120
241
  }
121
242
  }
243
+ /**
244
+ * @ignore
245
+ */
122
246
  updateHScroll() {
123
247
  this.ngZone.runOutsideAngular(() => {
124
248
  if (this.headerContainer) {
@@ -128,6 +252,9 @@ export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
128
252
  }
129
253
  });
130
254
  }
255
+ /**
256
+ * @ignore
257
+ */
131
258
  // Function to copy fixed columns
132
259
  copyFixedColumns() {
133
260
  const originalRows = Array.from(this.viewport._contentWrapper.nativeElement.querySelectorAll('tr'));
@@ -145,19 +272,34 @@ export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
145
272
  const scrollTop = this.getHostElement().querySelector('.cdk-virtual-scrollable').scrollTop;
146
273
  fixedColumnTable.style.transform = `translateY(${-scrollTop}px)`;
147
274
  }
275
+ /**
276
+ * Updates the viewport by checking its size and scrolling to the last index.
277
+ * Marks the component for change detection.
278
+ * @ignore
279
+ */
148
280
  render() {
149
281
  this.viewport.checkViewportSize();
150
282
  this.viewport.scrollToIndex(this.lastIndex);
151
283
  this.cdr.markForCheck();
152
284
  }
285
+ /**
286
+ * Resets the index to zero and refreshes the data source.
287
+ * @ignore
288
+ */
153
289
  refresh() {
154
290
  this.lastIndex = 0;
155
291
  this.listDataSource.refresh();
156
292
  }
293
+ /**
294
+ * @ignore
295
+ */
157
296
  handleRowClick(event, item) {
158
297
  this.handleRowSingleClick(event, item);
159
298
  this.clickSubject.next({ event, item });
160
299
  }
300
+ /**
301
+ * @ignore
302
+ */
161
303
  handleRowSingleClick(event, item) {
162
304
  if (this.focusedRow == item) {
163
305
  this.focusedRow = null;
@@ -172,6 +314,9 @@ export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
172
314
  isUserInteraction: true,
173
315
  });
174
316
  }
317
+ /**
318
+ * @ignore
319
+ */
175
320
  handleRowDoubleClick(e, item) {
176
321
  this.focusedRow = item;
177
322
  //
@@ -181,6 +326,13 @@ export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
181
326
  isUserInteraction: true,
182
327
  });
183
328
  }
329
+ /**
330
+ * Handles column header clicks to toggle sorting on the column.
331
+ *
332
+ * @param e - The mouse event triggered by the click.
333
+ * @param column - The column that was clicked.
334
+ * @ignore
335
+ */
184
336
  handleColumnClick(e, column) {
185
337
  if (column instanceof AXDataTableTextColumnComponent) {
186
338
  const sort = this.dataSource.query.sort.find((c) => c.field == column.dataField);
@@ -201,6 +353,9 @@ export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
201
353
  this.refresh();
202
354
  }
203
355
  }
356
+ /**
357
+ * @ignore
358
+ */
204
359
  getSort(column) {
205
360
  if (column instanceof AXDataTableTextColumnComponent) {
206
361
  const sort = this.dataSource.query.sort.find((c) => c.field == column.dataField);
@@ -208,6 +363,9 @@ export class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
208
363
  }
209
364
  return undefined;
210
365
  }
366
+ /**
367
+ * @ignore
368
+ */
211
369
  _handleOnScroll() {
212
370
  this.updateHScroll();
213
371
  }
@@ -269,4 +427,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
269
427
  type: ViewChild,
270
428
  args: ['scrolling', { static: true }]
271
429
  }] } });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUtc2Nyb2xsLWRhdGEtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGEtdGFibGUvc3JjL2xpYi9pbmZpbml0ZS1zY3JvbGwtZGF0YS10YWJsZS9pbmZpbml0ZS1zY3JvbGwtZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0YS10YWJsZS9zcmMvbGliL2luZmluaXRlLXNjcm9sbC1kYXRhLXRhYmxlL2luZmluaXRlLXNjcm9sbC1kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBdUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFFakIsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUE2RSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7O0FBbUJ2RixNQUFNLE9B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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhMaXN0RGF0YVNvdXJjZSwgQVhQYWdlZENvbXBvbmVudCwgQVhWYWx1ZUNoYW5nZWRFdmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBXcml0YWJsZVNpZ25hbCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCBzdW0gZnJvbSAnbG9kYXNoLWVzL3N1bSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBidWZmZXIsIGRlYm91bmNlVGltZSwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWEJhc2VEYXRhVGFibGUsIEFYRGF0YVRhYmxlUm93Q2xpY2ssIEFYRGF0YVRhYmxlUm93RGJDbGljaywgQVhEYXRhVGFibGVTY3JvbGxJbmRleENoYW5nZWQgfSBmcm9tICcuLi9iYXNlLWRhdGEtdGFibGUuY2xhc3MnO1xuaW1wb3J0IHsgQVhEYXRhVGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9jb2x1bW5zL2RhdGEtdGFibGUtY29sdW1uJztcbmltcG9ydCB7IEFYRGF0YVRhYmxlVGV4dENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvZGF0YS10ZXh0LWNvbHVtbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1pbmZpbml0ZS1zY3JvbGwtZGF0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbmZpbml0ZS1zY3JvbGwtZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2luZmluaXRlLXNjcm9sbC1kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IEFYUGFnZWRDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWEluZmluaXRlU2Nyb2xsRGF0YVRhYmxlQ29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhCYXNlRGF0YVRhYmxlLFxuICAgICAgdXNlRXhpc3Rpbmc6IEFYSW5maW5pdGVTY3JvbGxEYXRhVGFibGVDb21wb25lbnQsXG4gICAgfSxcbiAgXSxcblxuICBvdXRwdXRzOiBbJ3NlbGVjdGVkUm93c0NoYW5nZSddLFxuICBpbnB1dHM6IFsnZGF0YVNvdXJjZSddLFxufSlcbmV4cG9ydCBjbGFzcyBBWEluZmluaXRlU2Nyb2xsRGF0YVRhYmxlQ29tcG9uZW50IGV4dGVuZHMgQVhCYXNlRGF0YVRhYmxlIGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrIHtcbiAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBAQ29udGVudENoaWxkcmVuKEFYRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50KVxuICBwcm90ZWN0ZWQgY29sdW1uczogUXVlcnlMaXN0PEFYRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50PjtcblxuICBwcm90ZWN0ZWQgc3RhcnRGaXhlZENvbHVtbigpOiBBWERhdGFUYWJsZUNvbHVtbkNvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zPy50b0FycmF5KCkuZmlsdGVyKChjKSA9PiBjLmZpeGVkID09ICdzdGFydCcpID8/IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVuZEZpeGVkQ29sdW1uKCk6IEFYRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50W10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnM/LnRvQXJyYXkoKS5maWx0ZXIoKGMpID0+IGMuZml4ZWQgPT0gJ2VuZCcpID8/IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIG5vdEZpeGVkQ29sdW1uKCk6IEFYRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50W10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnM/LnRvQXJyYXkoKS5maWx0ZXIoKGMpID0+ICFjLmZpeGVkKSA/PyBbXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub3RGaXhlZENvbHVtbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucz8udG9BcnJheSgpLmZpbHRlcigoYykgPT4gIWMuZml4ZWQpLmxlbmd0aCA/PyAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpeGVkQ29sdW1uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zPy50b0FycmF5KCkuZmlsdGVyKChjKSA9PiBjLmZpeGVkKS5sZW5ndGggPz8gMDtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBvblBhZ2VDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhWYWx1ZUNoYW5nZWRFdmVudDxudW1iZXI+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhWYWx1ZUNoYW5nZWRFdmVudDxudW1iZXI+PigpO1xuXG4gIHByaXZhdGUgY2xpY2tTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyBldmVudDogTW91c2VFdmVudDsgaXRlbTogYW55IH0+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxBWERhdGFUYWJsZVJvd0NsaWNrPiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhVGFibGVSb3dDbGljaz4oKTtcblxuICBAT3V0cHV0KClcbiAgb25Sb3dEYkNsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYXRhVGFibGVSb3dEYkNsaWNrPiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhVGFibGVSb3dEYkNsaWNrPigpO1xuXG4gIEBJbnB1dCgpXG4gIHJvd1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KClcbiAgZW1wdHlUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpXG4gIHNob3dIZWFkZXIgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGZldGNoRGF0YU1vZGU6ICdhdXRvJyB8ICdtYW51YWwnID0gJ2F1dG8nO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRpbmc6IHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGFuaW1hdGlvbjogYm9vbGVhbjtcbiAgICBsb2FkaW5nVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgfSA9IHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGFuaW1hdGlvbjogdHJ1ZSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgbGlzdERhdGFTb3VyY2U6IEFYTGlzdERhdGFTb3VyY2U8dW5rbm93bj47XG4gIHByb3RlY3RlZCBpc0xvYWRpbmc6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKHRydWUpO1xuICBwcm90ZWN0ZWQgaGFzSXRlbXMgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHRvdGFsUm93cyA9IDA7XG4gIHByb3RlY3RlZCBjdXJyZW50UGFnZSA9IDA7XG4gIHByb3RlY3RlZCB0b3RhbFBhZ2VzID0gMDtcbiAgcHJvdGVjdGVkIHN0YXJ0Um93SW5kZXggPSAwO1xuICBwcml2YXRlIGxhc3RJbmRleCA9IDA7XG5cbiAgQE91dHB1dCgpXG4gIGZvY3VzZWRSb3dDaGFuZ2U6IEV2ZW50RW1pdHRlcjx1bmtub3duPiA9IG5ldyBFdmVudEVtaXR0ZXI8dW5rbm93bj4oKTtcblxuICBwcml2YXRlIF9mb2N1c2VkUm93OiB1bmtub3duO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGZvY3VzZWRSb3coKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzZWRSb3c7XG4gIH1cbiAgcHVibGljIHNldCBmb2N1c2VkUm93KHY6IHVua25vd24pIHtcbiAgICB0aGlzLl9mb2N1c2VkUm93ID0gdjtcbiAgICB0aGlzLmZvY3VzZWRSb3dDaGFuZ2UuZW1pdCh2KTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGl0ZW1IZWlnaHQ6IG51bWJlciB8ICdhdXRvJyA9IDQwO1xuXG4gIHByb3RlY3RlZCB3aWR0aCA9ICcxMDAlJztcbiAgcHJvdGVjdGVkIGhlaWdodCA9ICcxMDAlJztcblxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSB2aWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIEBPdXRwdXQoKVxuICBvblNjcm9sbGVkSW5kZXhDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhEYXRhVGFibGVTY3JvbGxJbmRleENoYW5nZWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFUYWJsZVNjcm9sbEluZGV4Q2hhbmdlZD4oKTtcblxuICB0cmFja0J5SWR4KGkpIHtcbiAgICByZXR1cm4gaTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5saXN0RGF0YVNvdXJjZSA9IG5ldyBBWExpc3REYXRhU291cmNlPHVua25vd24+KHtcbiAgICAgIHNvdXJjZTogdGhpcy5kYXRhU291cmNlLFxuICAgIH0pO1xuICAgIHRoaXMubGlzdERhdGFTb3VyY2Uuc291cmNlLm9uTG9hZGluZ0NoYW5nZWQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZGF0YSk7XG4gICAgfSk7XG4gICAgdGhpcy5saXN0RGF0YVNvdXJjZS5zb3VyY2Uub25DaGFuZ2VkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy50b3RhbFJvd3MgPSBkYXRhLnRvdGFsQ291bnQ7XG4gICAgICB0aGlzLmhhc0l0ZW1zID0gZGF0YS50b3RhbENvdW50ID4gMDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcblxuICAgIC8vXG4gICAgdGhpcy5jbGlja1N1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICBidWZmZXIodGhpcy5jbGlja1N1YmplY3QucGlwZShkZWJvdW5jZVRpbWUoMjUwKSkpLFxuICAgICAgICBmaWx0ZXIoKGNsaWNrQXJyYXkpID0+IGNsaWNrQXJyYXkubGVuZ3RoID09PSAyKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGNsaWNrQXJyYXkpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSb3dEb3VibGVDbGljayhjbGlja0FycmF5WzBdLmV2ZW50LCBjbGlja0FycmF5WzBdLml0ZW0pO1xuICAgICAgfSk7XG4gIH1cbiAgQFZpZXdDaGlsZCgnaGVhZGVyQ29udGFpbmVyJykgaGVhZGVyQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZm9vdGVyQ29udGFpbmVyJykgZm9vdGVyQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzY3JvbGxpbmcnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBzY3JvbGxhYmxlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBwcm90ZWN0ZWQgX2hhbmRsZU9uc2Nyb2xsZWRJbmRleENoYW5nZShlOiBudW1iZXIpIHtcbiAgICB0aGlzLmxhc3RJbmRleCA9IGU7XG4gICAgdGhpcy5vblNjcm9sbGVkSW5kZXhDaGFuZ2VkLmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgaW5kZXg6IHRoaXMubGFzdEluZGV4LFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgLy90aGlzLmNvcHlGaXhlZENvbHVtbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUhTY3JvbGwoKTtcbiAgICAvL1xuICAgIHRoaXMudXBkYXRlV2lkdGgoKTtcbiAgICB0aGlzLnVwZGF0ZUhlaWdodCgpO1xuICAgIC8vXG4gICAgdGhpcy51cGRhdGVUb3RhbENvdW50KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRvdGFsQ291bnQoKSB7XG4gICAgdGhpcy5zdGFydFJvd0luZGV4ID0gdGhpcy5sYXN0SW5kZXg7XG4gICAgaWYgKHRoaXMuc3RhcnRSb3dJbmRleCA8IDEpIHRoaXMuc3RhcnRSb3dJbmRleCA9IDE7XG4gICAgaWYgKHRoaXMuc3RhcnRSb3dJbmRleCA+IHRoaXMudG90YWxSb3dzKSB0aGlzLnN0YXJ0Um93SW5kZXggPSB0aGlzLnRvdGFsUm93cztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSGVpZ2h0KCkge1xuICAgIHRoaXMuaGVpZ2h0ID0gYGNhbGMoMTAwJSAtICR7XG4gICAgICAodGhpcy5oZWFkZXJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ID8/IDApICsgKHRoaXMuZm9vdGVyQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCA/PyAwKVxuICAgIH1weClgO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVXaWR0aCgpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHN1bVB4ID0gc3VtKHRoaXMuY29sdW1ucy50b0FycmF5KCkubWFwKChjKSA9PiAodHlwZW9mIGMud2lkdGggPT0gJ251bWJlcicgPyBjLndpZHRoIDogTnVtYmVyKGMud2lkdGgucmVwbGFjZSgncHgnLCAnJykpKSkpO1xuICAgICAgdGhpcy53aWR0aCA9IGAke01hdGgubWF4KHN1bVB4LCB0aGlzLmdldEhvc3RFbGVtZW50KCkuY2xpZW50V2lkdGggLSA1KX1weGA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVIU2Nyb2xsKCkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmhlYWRlckNvbnRhaW5lcikge1xuICAgICAgICBjb25zdCBoZWFkZXJDb250YWluZXIgPSB0aGlzLmhlYWRlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5zY3JvbGxhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgaGVhZGVyQ29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7LWxlZnR9cHgpYDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIGNvcHkgZml4ZWQgY29sdW1uc1xuICBwcml2YXRlIGNvcHlGaXhlZENvbHVtbnMoKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxSb3dzID0gQXJyYXkuZnJvbSh0aGlzLnZpZXdwb3J0Ll9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykpO1xuICAgIGNvbnN0IGZpeGVkQ29sdW1uVGFibGUgPSB0aGlzLmdldEhvc3RFbGVtZW50KCkucXVlcnlTZWxlY3RvcjxIVE1MVGFibGVFbGVtZW50PignLmF4LWJvZHktZml4ZWQtY29sdW1ucyA+IHRhYmxlID4gdGJvZHknKTtcbiAgICBmaXhlZENvbHVtblRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykuZm9yRWFjaCgobikgPT4gbi5yZW1vdmUoKSk7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygb3JpZ2luYWxSb3dzKSB7XG4gICAgICBjb25zdCBmaXhlZENlbGxzID0gQXJyYXkuZnJvbShyb3cucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtZml4ZWQ9XCJzdGFydFwiXScpKTtcbiAgICAgIGNvbnN0IGZpeGVkUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtcbiAgICAgIGZvciAoY29uc3QgY2VsbCBvZiBmaXhlZENlbGxzKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZENlbGwgPSBjZWxsLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgZml4ZWRSb3cuYXBwZW5kQ2hpbGQoY2xvbmVkQ2VsbCk7XG4gICAgICB9XG4gICAgICBmaXhlZENvbHVtblRhYmxlLmFwcGVuZENoaWxkKGZpeGVkUm93KTtcbiAgICB9XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5nZXRIb3N0RWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5jZGstdmlydHVhbC1zY3JvbGxhYmxlJykuc2Nyb2xsVG9wO1xuICAgIGZpeGVkQ29sdW1uVGFibGUuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHstc2Nyb2xsVG9wfXB4KWA7XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHRoaXMudmlld3BvcnQuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICB0aGlzLnZpZXdwb3J0LnNjcm9sbFRvSW5kZXgodGhpcy5sYXN0SW5kZXgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIHJlZnJlc2goKSB7XG4gICAgdGhpcy5sYXN0SW5kZXggPSAwO1xuICAgIHRoaXMubGlzdERhdGFTb3VyY2UucmVmcmVzaCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVJvd0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiB1bmtub3duKSB7XG4gICAgdGhpcy5oYW5kbGVSb3dTaW5nbGVDbGljayhldmVudCwgaXRlbSk7XG4gICAgdGhpcy5jbGlja1N1YmplY3QubmV4dCh7IGV2ZW50LCBpdGVtIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSb3dTaW5nbGVDbGljayhldmVudDogRXZlbnQsIGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvY3VzZWRSb3cgPT0gaXRlbSkge1xuICAgICAgdGhpcy5mb2N1c2VkUm93ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c2VkUm93ID0gaXRlbTtcbiAgICB9XG4gICAgLy9cbiAgICB0aGlzLm9uUm93Q2xpY2suZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBkYXRhOiBpdGVtLFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlUm93RG91YmxlQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbTogdW5rbm93bikge1xuICAgIHRoaXMuZm9jdXNlZFJvdyA9IGl0ZW07XG4gICAgLy9cbiAgICB0aGlzLm9uUm93RGJDbGljay5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICBpc1VzZXJJbnRlcmFjdGlvbjogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUNvbHVtbkNsaWNrKGU6IE1vdXNlRXZlbnQsIGNvbHVtbjogQVhEYXRhVGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICBpZiAoY29sdW1uIGluc3RhbmNlb2YgQVhEYXRhVGFibGVUZXh0Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICBjb25zdCBzb3J0ID0gdGhpcy5kYXRhU291cmNlLnF1ZXJ5LnNvcnQuZmluZCgoYykgPT4gYy5maWVsZCA9PSBjb2x1bW4uZGF0YUZpZWxkKTtcbiAgICAgIGlmICghc29ydCkge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UucXVlcnkuc29ydC5wdXNoKHtcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmRhdGFGaWVsZCxcbiAgICAgICAgICBkaXI6ICdhc2MnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzb3J0LmRpciA9PSAnYXNjJykge1xuICAgICAgICAgIHNvcnQuZGlyID0gJ2Rlc2MnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5xdWVyeS5zb3J0ID0gdGhpcy5kYXRhU291cmNlLnF1ZXJ5LnNvcnQuZmlsdGVyKChjKSA9PiBjICE9IHNvcnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydChjb2x1bW46IEFYRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoY29sdW1uIGluc3RhbmNlb2YgQVhEYXRhVGFibGVUZXh0Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICBjb25zdCBzb3J0ID0gdGhpcy5kYXRhU291cmNlLnF1ZXJ5LnNvcnQuZmluZCgoYykgPT4gYy5maWVsZCA9PSBjb2x1bW4uZGF0YUZpZWxkKTtcbiAgICAgIHJldHVybiBzb3J0ID8gKHNvcnQuZGlyID09ICdhc2MnID8gJ2F4LWljb24tYXJyb3ctbG9uZy1kb3duJyA6ICdheC1pY29uLWFycm93LWxvbmctdXAnKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfaGFuZGxlT25TY3JvbGwoKSB7XG4gICAgdGhpcy51cGRhdGVIU2Nyb2xsKCk7XG4gIH1cbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cImF4LWhlYWRlclwiPiA8L25nLWNvbnRlbnQ+XG48IS0tLS0tLS0tLS0tLS0tLS0tLS0gSGVhZGVyIGNvbnRlbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0+XG5AaWYgKHNob3dIZWFkZXIpIHtcbiAgPGRpdiBjbGFzcz1cImF4LWhlYWRlci1jb250ZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LWhlYWRlci1jb2x1bW5zXCI+XG4gICAgICA8dGFibGUgdGFiaW5kZXg9XCIwXCIgW3N0eWxlLndpZHRoXT1cIndpZHRoXCIgI2hlYWRlckNvbnRhaW5lcj5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIEBmb3IgKGMgb2Ygbm90Rml4ZWRDb2x1bW4oKTsgdHJhY2sgYy5uYW1lKSB7XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgIFtjbGFzcy5heC1pbnRlcmFjdGl2ZV09XCJjLmFsbG93U29ydGluZ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImMuYWxsb3dTb3J0aW5nID8gaGFuZGxlQ29sdW1uQ2xpY2soJGV2ZW50LCBjKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjLndpZHRoXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYy5yZW5kZXJIZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgQGlmIChnZXRTb3J0KGMpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJheC1pY29uIHt7IGdldFNvcnQoYykgfX1cIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBAaWYoYy5hbGxvd1Jlc2l6aW5nKVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1yZXNpemUtaGFuZGxlXCIgW2F4LXRhYmxlLWNvbHVtbi1yZXNpemJsZV09XCJjXCI+PC9kaXY+XG4gICAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG59XG5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLSBCb2R5IGNvbnRlbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0+XG48ZGl2IFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCIgY2xhc3M9XCJheC1ib2R5LWNvbnRlbnRcIj5cbiAgPGRpdiBjbGFzcz1cImF4LWJvZHktY29sdW1uc1wiPlxuICAgIDxkaXYgY2RrVmlydHVhbFNjcm9sbGluZ0VsZW1lbnQgI3Njcm9sbGluZyBbc3R5bGUuaGVpZ2h0XT1cIicxMDAlJ1wiIChzY3JvbGwpPVwiX2hhbmRsZU9uU2Nyb2xsKClcIj5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgW2l0ZW1TaXplXT1cIml0ZW1IZWlnaHRcIlxuICAgICAgICBbc3R5bGUuLS1pdGVtLWhlaWdodF09XCJpdGVtSGVpZ2h0ICsgJ3B4J1wiXG4gICAgICAgIChzY3JvbGxlZEluZGV4Q2hhbmdlKT1cIl9oYW5kbGVPbnNjcm9sbGVkSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDx0YWJsZSB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImF4LXRhYmxlLWJvZHkgYXgtcmVsYXRpdmVcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIj5cbiAgICAgICAgICA8Y29sZ3JvdXA+XG4gICAgICAgICAgICBAZm9yIChjIG9mIG5vdEZpeGVkQ29sdW1uKCk7IHRyYWNrIGMubmFtZSkge1xuICAgICAgICAgICAgICA8Y29sIFtzdHlsZS53aWR0aF09XCJjLndpZHRoXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxjb2wgLz5cbiAgICAgICAgICA8L2NvbGdyb3VwPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBsaXN0RGF0YVNvdXJjZTsgdGVtcGxhdGVDYWNoZVNpemU6IDEwMDsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUlkeDsgbGV0IHJJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tIGN1c3RvbSByb3cgdGVtcGxhdGUtLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICAgICAgICBAaWYgKHJvd1RlbXBsYXRlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93VGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IGRhdGE6IGl0ZW0sIHJvd0luZGV4OiBySW5kZXggfSB9XCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0gbm9ybWFsIHJvdyB0ZW1wbGF0ZS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZm9jdXNlZF09XCJmb2N1c2VkUm93ICYmIGl0ZW0gPT09IGZvY3VzZWRSb3dcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pbmRleF09XCJySW5kZXhcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXNlbGVjdGVkXT1cInNlbGVjdGVkUm93cy5pbmNsdWRlcyhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUm93Q2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXJ0IGZpeGVkIGNvbHVtbiAtLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0gTm90IGZpeGVkIGNvbHVtbiAtLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBub3RGaXhlZENvbHVtbigpOyB0cmFjayBjLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRkIFthdHRyLmRhdGEtbGFiZWxdPVwiYy5jYXB0aW9uXCIgdGFiaW5kZXg9XCIwXCIgW2NsYXNzXT1cImMuY3NzQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0gJiYgIWlzTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVuZGVyIGNlbGwgLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjLnJlbmRlckNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgZGF0YTogaXRlbSwgcm93SW5kZXg6IHJJbmRleCB9IH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tIHJlbmRlciBsb2FkaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGMubG9hZGluZ0VuYWJsZWQgJiYgbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtc2tlbGV0b24gW2FuaW1hdGVkXT1cImxvYWRpbmcuYW5pbWF0aW9uXCI+PC9heC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiYXgtdGFibGUtZm9vdGVyXCIgI2Zvb3RlckNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cImF4LXRhYmxlLWluZm9cIj5cbiAgICA8ZGl2PlNob3dpbmcge3sgc3RhcnRSb3dJbmRleCB9fSBvZiB7eyB0b3RhbFJvd3MgfX0gaXRlbXM8L2Rpdj5cbiAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIGNsYXNzPVwiYXgtc21cIiAob25DbGljayk9XCJyZWZyZXNoKClcIj5cbiAgICAgIDxheC1pY29uIGljb249XCJheC1pY29uIGF4LWljb24tcmVmcmVzaFwiPjwvYXgtaWNvbj5cbiAgICA8L2F4LWJ1dHRvbj5cbiAgPC9kaXY+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LWZvb3RlclwiPiA8L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUtc2Nyb2xsLWRhdGEtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGEtdGFibGUvc3JjL2xpYi9pbmZpbml0ZS1zY3JvbGwtZGF0YS10YWJsZS9pbmZpbml0ZS1zY3JvbGwtZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0YS10YWJsZS9zcmMvbGliL2luZmluaXRlLXNjcm9sbC1kYXRhLXRhYmxlL2luZmluaXRlLXNjcm9sbC1kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBdUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFFakIsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUE2RSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7O0FBRXZGOzs7O0dBSUc7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O3NCQURoQixlQUFlO3VCQUFDLDBCQUEwQjtnQkEyQzNDLGFBQWE7c0JBRFosTUFBTTtnQkFjUCxVQUFVO3NCQURULE1BQU07Z0JBU1AsWUFBWTtzQkFEWCxNQUFNO2dCQU9QLFdBQVc7c0JBRFYsS0FBSztnQkFPTixhQUFhO3NCQURaLEtBQUs7Z0JBU04sVUFBVTtzQkFEVCxLQUFLO2dCQVNOLGFBQWE7c0JBRFosS0FBSztnQkFTTixPQUFPO3NCQUROLEtBQUs7Z0JBd0ROLGdCQUFnQjtzQkFEZixNQUFNO2dCQVlJLFVBQVU7c0JBRHBCLEtBQUs7Z0JBcUJOLFVBQVU7c0JBRFQsS0FBSztnQkFpQkUsUUFBUTtzQkFEZixTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTckQsc0JBQXNCO3NCQURyQixNQUFNO2dCQXdDdUIsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBS0UsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBTTVCLG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhMaXN0RGF0YVNvdXJjZSwgQVhQYWdlZENvbXBvbmVudCwgQVhWYWx1ZUNoYW5nZWRFdmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBXcml0YWJsZVNpZ25hbCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCBzdW0gZnJvbSAnbG9kYXNoLWVzL3N1bSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBidWZmZXIsIGRlYm91bmNlVGltZSwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWEJhc2VEYXRhVGFibGUsIEFYRGF0YVRhYmxlUm93Q2xpY2ssIEFYRGF0YVRhYmxlUm93RGJDbGljaywgQVhEYXRhVGFibGVTY3JvbGxJbmRleENoYW5nZWQgfSBmcm9tICcuLi9iYXNlLWRhdGEtdGFibGUuY2xhc3MnO1xuaW1wb3J0IHsgQVhEYXRhVGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9jb2x1bW5zL2RhdGEtdGFibGUtY29sdW1uJztcbmltcG9ydCB7IEFYRGF0YVRhYmxlVGV4dENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvZGF0YS10ZXh0LWNvbHVtbi5jb21wb25lbnQnO1xuXG4vKipcbiAqIENvbXBvbmVudCBmb3IgYSBkYXRhIHRhYmxlIHdpdGggaW5maW5pdGUgc2Nyb2xsaW5nIGNhcGFiaWxpdGllcy5cbiAqXG4gKiBAY2F0ZWdvcnkgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1pbmZpbml0ZS1zY3JvbGwtZGF0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbmZpbml0ZS1zY3JvbGwtZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2luZmluaXRlLXNjcm9sbC1kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IEFYUGFnZWRDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWEluZmluaXRlU2Nyb2xsRGF0YVRhYmxlQ29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhCYXNlRGF0YVRhYmxlLFxuICAgICAgdXNlRXhpc3Rpbmc6IEFYSW5maW5pdGVTY3JvbGxEYXRhVGFibGVDb21wb25lbnQsXG4gICAgfSxcbiAgXSxcblxuICBvdXRwdXRzOiBbJ3NlbGVjdGVkUm93c0NoYW5nZSddLFxuICBpbnB1dHM6IFsnZGF0YVNvdXJjZSddLFxufSlcbmV4cG9ydCBjbGFzcyBBWEluZmluaXRlU2Nyb2xsRGF0YVRhYmxlQ29tcG9uZW50IGV4dGVuZHMgQVhCYXNlRGF0YVRhYmxlIGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrIHtcbiAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oQVhEYXRhVGFibGVDb2x1bW5Db21wb25lbnQpXG4gIHByb3RlY3RlZCBjb2x1bW5zOiBRdWVyeUxpc3Q8QVhEYXRhVGFibGVDb2x1bW5Db21wb25lbnQ+O1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXJ0Rml4ZWRDb2x1bW4oKTogQVhEYXRhVGFibGVDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucz8udG9BcnJheSgpLmZpbHRlcigoYykgPT4gYy5maXhlZCA9PSAnc3RhcnQnKSA/PyBbXTtcbiAgfVxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBlbmRGaXhlZENvbHVtbigpOiBBWERhdGFUYWJsZUNvbHVtbkNvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zPy50b0FycmF5KCkuZmlsdGVyKChjKSA9PiBjLmZpeGVkID09ICdlbmQnKSA/PyBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIG5vdEZpeGVkQ29sdW1uKCk6IEFYRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50W10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnM/LnRvQXJyYXkoKS5maWx0ZXIoKGMpID0+ICFjLmZpeGVkKSA/PyBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIG5vdEZpeGVkQ29sdW1uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zPy50b0FycmF5KCkuZmlsdGVyKChjKSA9PiAhYy5maXhlZCkubGVuZ3RoID8/IDA7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBmaXhlZENvbHVtbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucz8udG9BcnJheSgpLmZpbHRlcigoYykgPT4gYy5maXhlZCkubGVuZ3RoID8/IDA7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgcGFnZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAZXZlbnRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBvblBhZ2VDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhWYWx1ZUNoYW5nZWRFdmVudDxudW1iZXI+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhWYWx1ZUNoYW5nZWRFdmVudDxudW1iZXI+PigpO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBjbGlja1N1YmplY3QgPSBuZXcgU3ViamVjdDx7IGV2ZW50OiBNb3VzZUV2ZW50OyBpdGVtOiBhbnkgfT4oKTtcblxuICAvKipcbiAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIHJvdyBpcyBjbGlja2VkLlxuICAgKlxuICAgKiBAZXZlbnRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBvblJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYXRhVGFibGVSb3dDbGljaz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YVRhYmxlUm93Q2xpY2s+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gYSByb3cgaXMgZG91YmxlLWNsaWNrZWQuXG4gICAqXG4gICAqIEBldmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG9uUm93RGJDbGljazogRXZlbnRFbWl0dGVyPEFYRGF0YVRhYmxlUm93RGJDbGljaz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YVRhYmxlUm93RGJDbGljaz4oKTtcblxuICAvKipcbiAgICogVGVtcGxhdGUgZm9yIHJlbmRlcmluZyByb3dzIGluIHRoZSBkYXRhIHRhYmxlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcm93VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAvKipcbiAgICogVGVtcGxhdGUgdG8gZGlzcGxheSB3aGVuIHRoZSBkYXRhIHRhYmxlIGlzIGVtcHR5LlxuICAgKi9cbiAgQElucHV0KClcbiAgZW1wdHlUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgdGFibGUgaGVhZGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNob3dIZWFkZXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBtb2RlIGZvciBmZXRjaGluZyBkYXRhLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlICdhdXRvJ1xuICAgKi9cbiAgQElucHV0KClcbiAgZmV0Y2hEYXRhTW9kZTogJ2F1dG8nIHwgJ21hbnVhbCcgPSAnYXV0byc7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBsb2FkaW5nIHN0YXRlIG9mIHRoZSBkYXRhIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHsgZW5hYmxlZDogdHJ1ZSwgYW5pbWF0aW9uOiB0cnVlIH1cbiAgICovXG4gIEBJbnB1dCgpXG4gIGxvYWRpbmc6IHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGFuaW1hdGlvbjogYm9vbGVhbjtcbiAgICBsb2FkaW5nVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgfSA9IHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGFuaW1hdGlvbjogdHJ1ZSxcbiAgfTtcblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBsaXN0RGF0YVNvdXJjZTogQVhMaXN0RGF0YVNvdXJjZTx1bmtub3duPjtcblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBpc0xvYWRpbmc6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKHRydWUpO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIGhhc0l0ZW1zID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgdG90YWxSb3dzID0gMDtcblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBjdXJyZW50UGFnZSA9IDA7XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgdG90YWxQYWdlcyA9IDA7XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhcnRSb3dJbmRleCA9IDA7XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGxhc3RJbmRleCA9IDA7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZm9jdXNlZCByb3cgY2hhbmdlcy5cbiAgICpcbiAgICogQGV2ZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgZm9jdXNlZFJvd0NoYW5nZTogRXZlbnRFbWl0dGVyPHVua25vd24+ID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duPigpO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNlZFJvdzogdW5rbm93bjtcblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50bHkgZm9jdXNlZCByb3cuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGZvY3VzZWRSb3coKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzZWRSb3c7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY3VycmVudGx5IGZvY3VzZWQgcm93IGFuZCBlbWl0cyBhIGNoYW5nZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHYgLSBUaGUgcm93IGRhdGEgdG8gYmUgc2V0IGFzIGZvY3VzZWQuXG4gICAqL1xuICBwdWJsaWMgc2V0IGZvY3VzZWRSb3codjogdW5rbm93bikge1xuICAgIHRoaXMuX2ZvY3VzZWRSb3cgPSB2O1xuICAgIHRoaXMuZm9jdXNlZFJvd0NoYW5nZS5lbWl0KHYpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGhlaWdodCBvZiBlYWNoIGl0ZW0gaW4gdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCA0MFxuICAgKi9cbiAgQElucHV0KClcbiAgaXRlbUhlaWdodDogbnVtYmVyIHwgJ2F1dG8nID0gNDA7XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgd2lkdGggPSAnMTAwJSc7XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgaGVpZ2h0ID0gJzEwMCUnO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgdmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBzY3JvbGwgaW5kZXggY2hhbmdlcyBpbiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBldmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG9uU2Nyb2xsZWRJbmRleENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWERhdGFUYWJsZVNjcm9sbEluZGV4Q2hhbmdlZD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YVRhYmxlU2Nyb2xsSW5kZXhDaGFuZ2VkPigpO1xuXG4gIHRyYWNrQnlJZHgoaSkge1xuICAgIHJldHVybiBpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMubGlzdERhdGFTb3VyY2UgPSBuZXcgQVhMaXN0RGF0YVNvdXJjZTx1bmtub3duPih7XG4gICAgICBzb3VyY2U6IHRoaXMuZGF0YVNvdXJjZSxcbiAgICB9KTtcbiAgICB0aGlzLmxpc3REYXRhU291cmNlLnNvdXJjZS5vbkxvYWRpbmdDaGFuZ2VkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGRhdGEpO1xuICAgIH0pO1xuICAgIHRoaXMubGlzdERhdGFTb3VyY2Uuc291cmNlLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMudG90YWxSb3dzID0gZGF0YS50b3RhbENvdW50O1xuICAgICAgdGhpcy5oYXNJdGVtcyA9IGRhdGEudG90YWxDb3VudCA+IDA7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSk7XG5cbiAgICAvL1xuICAgIHRoaXMuY2xpY2tTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgYnVmZmVyKHRoaXMuY2xpY2tTdWJqZWN0LnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpKSxcbiAgICAgICAgZmlsdGVyKChjbGlja0FycmF5KSA9PiBjbGlja0FycmF5Lmxlbmd0aCA9PT0gMiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChjbGlja0FycmF5KSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUm93RG91YmxlQ2xpY2soY2xpY2tBcnJheVswXS5ldmVudCwgY2xpY2tBcnJheVswXS5pdGVtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBAVmlld0NoaWxkKCdoZWFkZXJDb250YWluZXInKSBoZWFkZXJDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgQFZpZXdDaGlsZCgnZm9vdGVyQ29udGFpbmVyJykgZm9vdGVyQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgQFZpZXdDaGlsZCgnc2Nyb2xsaW5nJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgc2Nyb2xsYWJsZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX2hhbmRsZU9uc2Nyb2xsZWRJbmRleENoYW5nZShlOiBudW1iZXIpIHtcbiAgICB0aGlzLmxhc3RJbmRleCA9IGU7XG4gICAgdGhpcy5vblNjcm9sbGVkSW5kZXhDaGFuZ2VkLmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgaW5kZXg6IHRoaXMubGFzdEluZGV4LFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIG5nRG9DaGVjaygpIHtcbiAgICAvL3RoaXMuY29weUZpeGVkQ29sdW1ucygpO1xuICAgIHRoaXMudXBkYXRlSFNjcm9sbCgpO1xuICAgIC8vXG4gICAgdGhpcy51cGRhdGVXaWR0aCgpO1xuICAgIHRoaXMudXBkYXRlSGVpZ2h0KCk7XG4gICAgLy9cbiAgICB0aGlzLnVwZGF0ZVRvdGFsQ291bnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUb3RhbENvdW50KCkge1xuICAgIHRoaXMuc3RhcnRSb3dJbmRleCA9IHRoaXMubGFzdEluZGV4O1xuICAgIGlmICh0aGlzLnN0YXJ0Um93SW5kZXggPCAxKSB0aGlzLnN0YXJ0Um93SW5kZXggPSAxO1xuICAgIGlmICh0aGlzLnN0YXJ0Um93SW5kZXggPiB0aGlzLnRvdGFsUm93cykgdGhpcy5zdGFydFJvd0luZGV4ID0gdGhpcy50b3RhbFJvd3M7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlSGVpZ2h0KCkge1xuICAgIHRoaXMuaGVpZ2h0ID0gYGNhbGMoMTAwJSAtICR7XG4gICAgICAodGhpcy5oZWFkZXJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ID8/IDApICsgKHRoaXMuZm9vdGVyQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCA/PyAwKVxuICAgIH1weClgO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVdpZHRoKCkge1xuICAgIGlmICh0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VtUHggPSBzdW0odGhpcy5jb2x1bW5zLnRvQXJyYXkoKS5tYXAoKGMpID0+ICh0eXBlb2YgYy53aWR0aCA9PSAnbnVtYmVyJyA/IGMud2lkdGggOiBOdW1iZXIoYy53aWR0aC5yZXBsYWNlKCdweCcsICcnKSkpKSk7XG4gICAgICB0aGlzLndpZHRoID0gYCR7TWF0aC5tYXgoc3VtUHgsIHRoaXMuZ2V0SG9zdEVsZW1lbnQoKS5jbGllbnRXaWR0aCAtIDUpfXB4YDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlSFNjcm9sbCgpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5oZWFkZXJDb250YWluZXIpIHtcbiAgICAgICAgY29uc3QgaGVhZGVyQ29udGFpbmVyID0gdGhpcy5oZWFkZXJDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMuc2Nyb2xsYWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICAgIGhlYWRlckNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgkey1sZWZ0fXB4KWA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIC8vIEZ1bmN0aW9uIHRvIGNvcHkgZml4ZWQgY29sdW1uc1xuICBwcml2YXRlIGNvcHlGaXhlZENvbHVtbnMoKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxSb3dzID0gQXJyYXkuZnJvbSh0aGlzLnZpZXdwb3J0Ll9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykpO1xuICAgIGNvbnN0IGZpeGVkQ29sdW1uVGFibGUgPSB0aGlzLmdldEhvc3RFbGVtZW50KCkucXVlcnlTZWxlY3RvcjxIVE1MVGFibGVFbGVtZW50PignLmF4LWJvZHktZml4ZWQtY29sdW1ucyA+IHRhYmxlID4gdGJvZHknKTtcbiAgICBmaXhlZENvbHVtblRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykuZm9yRWFjaCgobikgPT4gbi5yZW1vdmUoKSk7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygb3JpZ2luYWxSb3dzKSB7XG4gICAgICBjb25zdCBmaXhlZENlbGxzID0gQXJyYXkuZnJvbShyb3cucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtZml4ZWQ9XCJzdGFydFwiXScpKTtcbiAgICAgIGNvbnN0IGZpeGVkUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtcbiAgICAgIGZvciAoY29uc3QgY2VsbCBvZiBmaXhlZENlbGxzKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZENlbGwgPSBjZWxsLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgZml4ZWRSb3cuYXBwZW5kQ2hpbGQoY2xvbmVkQ2VsbCk7XG4gICAgICB9XG4gICAgICBmaXhlZENvbHVtblRhYmxlLmFwcGVuZENoaWxkKGZpeGVkUm93KTtcbiAgICB9XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5nZXRIb3N0RWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5jZGstdmlydHVhbC1zY3JvbGxhYmxlJykuc2Nyb2xsVG9wO1xuICAgIGZpeGVkQ29sdW1uVGFibGUuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHstc2Nyb2xsVG9wfXB4KWA7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdmlld3BvcnQgYnkgY2hlY2tpbmcgaXRzIHNpemUgYW5kIHNjcm9sbGluZyB0byB0aGUgbGFzdCBpbmRleC5cbiAgICogTWFya3MgdGhlIGNvbXBvbmVudCBmb3IgY2hhbmdlIGRldGVjdGlvbi5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICB0aGlzLnZpZXdwb3J0LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgdGhpcy52aWV3cG9ydC5zY3JvbGxUb0luZGV4KHRoaXMubGFzdEluZGV4KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICAvKipcbiAgICogUmVzZXRzIHRoZSBpbmRleCB0byB6ZXJvIGFuZCByZWZyZXNoZXMgdGhlIGRhdGEgc291cmNlLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmxhc3RJbmRleCA9IDA7XG4gICAgdGhpcy5saXN0RGF0YVNvdXJjZS5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBoYW5kbGVSb3dDbGljayhldmVudDogTW91c2VFdmVudCwgaXRlbTogdW5rbm93bikge1xuICAgIHRoaXMuaGFuZGxlUm93U2luZ2xlQ2xpY2soZXZlbnQsIGl0ZW0pO1xuICAgIHRoaXMuY2xpY2tTdWJqZWN0Lm5leHQoeyBldmVudCwgaXRlbSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVSb3dTaW5nbGVDbGljayhldmVudDogRXZlbnQsIGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvY3VzZWRSb3cgPT0gaXRlbSkge1xuICAgICAgdGhpcy5mb2N1c2VkUm93ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c2VkUm93ID0gaXRlbTtcbiAgICB9XG4gICAgLy9cbiAgICB0aGlzLm9uUm93Q2xpY2suZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBkYXRhOiBpdGVtLFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBoYW5kbGVSb3dEb3VibGVDbGljayhlOiBNb3VzZUV2ZW50LCBpdGVtOiB1bmtub3duKSB7XG4gICAgdGhpcy5mb2N1c2VkUm93ID0gaXRlbTtcbiAgICAvL1xuICAgIHRoaXMub25Sb3dEYkNsaWNrLmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgZGF0YTogaXRlbSxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gKiBIYW5kbGVzIGNvbHVtbiBoZWFkZXIgY2xpY2tzIHRvIHRvZ2dsZSBzb3J0aW5nIG9uIHRoZSBjb2x1bW4uIFxuICogXG4gKiBAcGFyYW0gZSAtIFRoZSBtb3VzZSBldmVudCB0cmlnZ2VyZWQgYnkgdGhlIGNsaWNrLlxuICogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdGhhdCB3YXMgY2xpY2tlZC5cbiAqIEBpZ25vcmVcbiAqL1xuICBoYW5kbGVDb2x1bW5DbGljayhlOiBNb3VzZUV2ZW50LCBjb2x1bW46IEFYRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgaWYgKGNvbHVtbiBpbnN0YW5jZW9mIEFYRGF0YVRhYmxlVGV4dENvbHVtbkNvbXBvbmVudCkge1xuICAgICAgY29uc3Qgc29ydCA9IHRoaXMuZGF0YVNvdXJjZS5xdWVyeS5zb3J0LmZpbmQoKGMpID0+IGMuZmllbGQgPT0gY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICBpZiAoIXNvcnQpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnF1ZXJ5LnNvcnQucHVzaCh7XG4gICAgICAgICAgZmllbGQ6IGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgICAgZGlyOiAnYXNjJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc29ydC5kaXIgPT0gJ2FzYycpIHtcbiAgICAgICAgICBzb3J0LmRpciA9ICdkZXNjJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucXVlcnkuc29ydCA9IHRoaXMuZGF0YVNvdXJjZS5xdWVyeS5zb3J0LmZpbHRlcigoYykgPT4gYyAhPSBzb3J0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0U29ydChjb2x1bW46IEFYRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoY29sdW1uIGluc3RhbmNlb2YgQVhEYXRhVGFibGVUZXh0Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICBjb25zdCBzb3J0ID0gdGhpcy5kYXRhU291cmNlLnF1ZXJ5LnNvcnQuZmluZCgoYykgPT4gYy5maWVsZCA9PSBjb2x1bW4uZGF0YUZpZWxkKTtcbiAgICAgIHJldHVybiBzb3J0ID8gKHNvcnQuZGlyID09ICdhc2MnID8gJ2F4LWljb24tYXJyb3ctbG9uZy1kb3duJyA6ICdheC1pY29uLWFycm93LWxvbmctdXAnKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIF9oYW5kbGVPblNjcm9sbCgpIHtcbiAgICB0aGlzLnVwZGF0ZUhTY3JvbGwoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtaGVhZGVyXCI+IDwvbmctY29udGVudD5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLSBIZWFkZXIgY29udGVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLT5cbkBpZiAoc2hvd0hlYWRlcikge1xuICA8ZGl2IGNsYXNzPVwiYXgtaGVhZGVyLWNvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtaGVhZGVyLWNvbHVtbnNcIj5cbiAgICAgIDx0YWJsZSB0YWJpbmRleD1cIjBcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIiAjaGVhZGVyQ29udGFpbmVyPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgQGZvciAoYyBvZiBub3RGaXhlZENvbHVtbigpOyB0cmFjayBjLm5hbWUpIHtcbiAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LWludGVyYWN0aXZlXT1cImMuYWxsb3dTb3J0aW5nXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYy5hbGxvd1NvcnRpbmcgPyBoYW5kbGVDb2x1bW5DbGljaygkZXZlbnQsIGMpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImMud2lkdGhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjLnJlbmRlckhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICBAaWYgKGdldFNvcnQoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImF4LWljb24ge3sgZ2V0U29ydChjKSB9fVwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEBpZihjLmFsbG93UmVzaXppbmcpXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXJlc2l6ZS1oYW5kbGVcIiBbYXgtdGFibGUtY29sdW1uLXJlc2l6YmxlXT1cImNcIj48L2Rpdj5cbiAgICAgICAgICAgICAgfSAtLT5cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbn1cblxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tIEJvZHkgY29udGVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLT5cbjxkaXYgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIiBjbGFzcz1cImF4LWJvZHktY29udGVudFwiPlxuICA8ZGl2IGNsYXNzPVwiYXgtYm9keS1jb2x1bW5zXCI+XG4gICAgPGRpdiBjZGtWaXJ0dWFsU2Nyb2xsaW5nRWxlbWVudCAjc2Nyb2xsaW5nIFtzdHlsZS5oZWlnaHRdPVwiJzEwMCUnXCIgKHNjcm9sbCk9XCJfaGFuZGxlT25TY3JvbGwoKVwiPlxuICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICBbaXRlbVNpemVdPVwiaXRlbUhlaWdodFwiXG4gICAgICAgIFtzdHlsZS4tLWl0ZW0taGVpZ2h0XT1cIml0ZW1IZWlnaHQgKyAncHgnXCJcbiAgICAgICAgKHNjcm9sbGVkSW5kZXhDaGFuZ2UpPVwiX2hhbmRsZU9uc2Nyb2xsZWRJbmRleENoYW5nZSgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPHRhYmxlIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiYXgtdGFibGUtYm9keSBheC1yZWxhdGl2ZVwiIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiPlxuICAgICAgICAgIDxjb2xncm91cD5cbiAgICAgICAgICAgIEBmb3IgKGMgb2Ygbm90Rml4ZWRDb2x1bW4oKTsgdHJhY2sgYy5uYW1lKSB7XG4gICAgICAgICAgICAgIDxjb2wgW3N0eWxlLndpZHRoXT1cImMud2lkdGhcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGNvbCAvPlxuICAgICAgICAgIDwvY29sZ3JvdXA+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGxpc3REYXRhU291cmNlOyB0ZW1wbGF0ZUNhY2hlU2l6ZTogMTAwOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SWR4OyBsZXQgckluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0gY3VzdG9tIHJvdyB0ZW1wbGF0ZS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgICAgICAgIEBpZiAocm93VGVtcGxhdGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgZGF0YTogaXRlbSwgcm93SW5kZXg6IHJJbmRleCB9IH1cIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLSBub3JtYWwgcm93IHRlbXBsYXRlLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1mb2N1c2VkXT1cImZvY3VzZWRSb3cgJiYgaXRlbSA9PT0gZm9jdXNlZFJvd1wiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWluZGV4XT1cInJJbmRleFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtc2VsZWN0ZWRdPVwic2VsZWN0ZWRSb3dzLmluY2x1ZGVzKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVSb3dDbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhcnQgZml4ZWQgY29sdW1uIC0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLSBOb3QgZml4ZWQgY29sdW1uIC0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgICAgICAgICAgICBAZm9yIChjIG9mIG5vdEZpeGVkQ29sdW1uKCk7IHRyYWNrIGMubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICA8dGQgW2F0dHIuZGF0YS1sYWJlbF09XCJjLmNhcHRpb25cIiB0YWJpbmRleD1cIjBcIiBbY2xhc3NdPVwiYy5jc3NDbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbSAmJiAhaXNMb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLSByZW5kZXIgY2VsbCAtLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImMucmVuZGVyQ2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogeyBkYXRhOiBpdGVtLCByb3dJbmRleDogckluZGV4IH0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVuZGVyIGxvYWRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYy5sb2FkaW5nRW5hYmxlZCAmJiBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1za2VsZXRvbiBbYW5pbWF0ZWRdPVwibG9hZGluZy5hbmltYXRpb25cIj48L2F4LXNrZWxldG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJheC10YWJsZS1mb290ZXJcIiAjZm9vdGVyQ29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiYXgtdGFibGUtaW5mb1wiPlxuICAgIDxkaXY+U2hvd2luZyB7eyBzdGFydFJvd0luZGV4IH19IG9mIHt7IHRvdGFsUm93cyB9fSBpdGVtczwvZGl2PlxuICAgIDxheC1idXR0b24gbG9vaz1cImJsYW5rXCIgY2xhc3M9XCJheC1zbVwiIChvbkNsaWNrKT1cInJlZnJlc2goKVwiPlxuICAgICAgPGF4LWljb24gaWNvbj1cImF4LWljb24gYXgtaWNvbi1yZWZyZXNoXCI+PC9heC1pY29uPlxuICAgIDwvYXgtYnV0dG9uPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtZm9vdGVyXCI+IDwvbmctY29udGVudD5cbjwvZGl2PlxuIl19
@@ -12,55 +12,104 @@ import * as i2 from "@acorex/components/datetime-input";
12
12
  import * as i3 from "@acorex/components/dropdown";
13
13
  import * as i4 from "@acorex/components/datetime-picker";
14
14
  /**
15
- * The Button is a component which detects user interaction and triggers a corresponding event
15
+ * Represents a date and time input component that allows user interaction and triggers events.
16
16
  *
17
17
  * @category Components
18
18
  */
19
19
  export class AXDateTimeBoxComponent extends classes((MXInputBaseValueComponent), MXCalendarBaseComponent, MXDropdownBoxBaseComponent, MXLookComponent) {
20
20
  constructor() {
21
21
  super(...arguments);
22
+ /**
23
+ * Emitted when the format of the component changes.
24
+ *
25
+ * @event
26
+ */
22
27
  this.formatChange = new EventEmitter();
28
+ /**
29
+ * Indicates whether typing is allowed in the component.
30
+ *
31
+ * @defaultValue false
32
+ */
23
33
  this.allowTyping = input(false);
34
+ /**
35
+ * @ignore
36
+ */
24
37
  this._format = this.calendarService.calendar.formats.dateTimeInput;
25
38
  }
39
+ /**
40
+ * Gets the format string used for displaying values.
41
+ */
26
42
  get format() {
27
43
  return this._format;
28
44
  }
45
+ /**
46
+ * Sets the format string for displaying values.
47
+ * @param v The format string to be set.
48
+ */
29
49
  set format(v) {
30
50
  this.setOption({
31
51
  name: 'format',
32
52
  value: v,
33
53
  });
34
54
  }
55
+ /**
56
+ * @ignore
57
+ */
35
58
  _handleInputModelChange(value) {
36
59
  this.commitValue(value, true);
37
60
  }
61
+ /**
62
+ * @ignore
63
+ */
38
64
  _handlePickerModelChange(value) {
39
65
  if (this.isOpen)
40
66
  this.commitValue(value, true);
41
67
  }
68
+ /**
69
+ * @ignore
70
+ */
42
71
  _handleOnOpenedEvent(e) {
43
72
  //this.emitOnFocusEvent(null);
44
73
  this.picker?.refresh();
45
74
  this.emitOnOpenedEvent();
46
75
  }
76
+ /**
77
+ * @ignore
78
+ */
47
79
  _handleOnClosedEvent(e) {
48
80
  //this.emitOnBlurEvent(null);
49
81
  this.input.focus();
50
82
  this.emitOnClosedEvent();
51
83
  }
84
+ /**
85
+ * @ignore
86
+ */
52
87
  _handleInputOnFocusEvent(e) {
53
88
  this.emitOnFocusEvent(e.nativeEvent);
54
89
  }
90
+ /**
91
+ * @ignore
92
+ */
55
93
  _handleInputOnBlurEvent(e) {
56
94
  this.emitOnBlurEvent(e.nativeEvent);
57
95
  }
96
+ /**
97
+ * @ignore
98
+ */
58
99
  _handleCalendarOnNavigate(e) {
59
100
  this.onNavigate.emit(e);
60
101
  }
102
+ /**
103
+ * Handles changes to the internal value.
104
+ * @param value The new value that was set.
105
+ * @ignore
106
+ */
61
107
  internalValueChanged(value) {
62
108
  this.close();
63
109
  }
110
+ /**
111
+ * @ignore
112
+ */
64
113
  _handleInputOnClick() {
65
114
  if (!this.allowTyping()) {
66
115
  this.open();
@@ -134,4 +183,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
134
183
  }], format: [{
135
184
  type: Input
136
185
  }] } });
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS1ib3gvc3JjL2xpYi9kYXRldGltZS1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWJveC9zcmMvbGliL2RhdGV0aW1lLWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTJCLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0YsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixXQUFXLEVBR1gsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsZUFBZSxHQUNoQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFFbkM7Ozs7R0FJRztBQThDSCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsT0FBTyxDQUNqRCxDQUFBLHlCQUErQixDQUFBLEVBQy9CLHVCQUF1QixFQUN2QiwwQkFBMEIsRUFDMUIsZUFBZSxDQUNoQjtJQWxE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Tzt3QkFDUCxNQUFNO3dCQUNOLE9BQU87d0JBQ1AsSUFBSTt3QkFDSixNQUFNO3dCQUNOLE1BQU07d0JBQ04sY0FBYztxQkFDZixXQUNRO3dCQUNQLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLFFBQVE7d0JBQ1IsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLFVBQVU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7cUJBQ2pCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNULEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLHdCQUF3QixFQUFFO3dCQUM3RCxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLHdCQUF3QixFQUFFO3dCQUN0RSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLHdCQUF3QixFQUFFO3dCQUNyRSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLHdCQUF3QixFQUFFO3dCQUN0RTs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsUUFDSyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUU7OEJBU3ZCLEtBQUs7c0JBRGQsU0FBUzt1QkFBQyx3QkFBd0I7Z0JBSXpCLE1BQU07c0JBRGYsU0FBUzt1QkFBQyx5QkFBeUI7Z0JBSTFCLFFBQVE7c0JBRGpCLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUlqQyxZQUFZO3NCQURYLE1BQU07Z0JBT0ksTUFBTTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ2FsZW5kYXJOYXZpZ2F0ZUV2ZW50LCBNWENhbGVuZGFyQmFzZUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jYWxlbmRhcic7XG5pbXBvcnQge1xuICBBWENsZWFyYWJsZUNvbXBvbmVudCxcbiAgQVhDb21wb25lbnQsXG4gIEFYRXZlbnQsXG4gIEFYRm9jdXNFdmVudCxcbiAgQVhGb2N1c2FibGVDb21wb25lbnQsXG4gIEFYVmFsdWFibGVDb21wb25lbnQsXG4gIE1YSW5wdXRCYXNlVmFsdWVDb21wb25lbnQsXG4gIE1YTG9va0NvbXBvbmVudCxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBBWERhdGVUaW1lSW5wdXRDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGF0ZXRpbWUtaW5wdXQnO1xuaW1wb3J0IHsgQVhEYXRlVGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kYXRldGltZS1waWNrZXInO1xuaW1wb3J0IHsgQVhEcm9wZG93bkJveENvbXBvbmVudCwgTVhEcm9wZG93bkJveEJhc2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBmb3J3YXJkUmVmLFxuICBpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNsYXNzZXMgfSBmcm9tICdwb2x5dHlwZSc7XG5cbi8qKlxuICogVGhlIEJ1dHRvbiBpcyBhIGNvbXBvbmVudCB3aGljaCBkZXRlY3RzIHVzZXIgaW50ZXJhY3Rpb24gYW5kIHRyaWdnZXJzIGEgY29ycmVzcG9uZGluZyBldmVudFxuICpcbiAqIEBjYXRlZ29yeSBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWRhdGV0aW1lLWJveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRldGltZS1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBpbnB1dHM6IFtcbiAgICAnZGlzYWJsZWQnLFxuICAgICdyZWFkb25seScsXG4gICAgJ3RhYkluZGV4JyxcbiAgICAncGxhY2Vob2xkZXInLFxuICAgICdtaW5WYWx1ZScsXG4gICAgJ21heFZhbHVlJyxcbiAgICAndmFsdWUnLFxuICAgICdzdGF0ZScsXG4gICAgJ25hbWUnLFxuICAgICdkZXB0aCcsXG4gICAgJ2lkJyxcbiAgICAndHlwZScsXG4gICAgJ2xvb2snLFxuICAgICdob2xpZGF5RGF0ZXMnLFxuICBdLFxuICBvdXRwdXRzOiBbXG4gICAgJ3ZhbHVlQ2hhbmdlJyxcbiAgICAnc3RhdGVDaGFuZ2UnLFxuICAgICdvblZhbHVlQ2hhbmdlZCcsXG4gICAgJ29uQmx1cicsXG4gICAgJ29uRm9jdXMnLFxuICAgICdvbk9wZW5lZCcsXG4gICAgJ29uQ2xvc2VkJyxcbiAgICAncmVhZG9ubHlDaGFuZ2UnLFxuICAgICdkaXNhYmxlZENoYW5nZScsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUJveENvbXBvbmVudCB9LFxuICAgIHsgcHJvdmlkZTogQVhGb2N1c2FibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWERhdGVUaW1lQm94Q29tcG9uZW50IH0sXG4gICAgeyBwcm92aWRlOiBBWFZhbHVhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUJveENvbXBvbmVudCB9LFxuICAgIHsgcHJvdmlkZTogQVhDbGVhcmFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWERhdGVUaW1lQm94Q29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBWERhdGVUaW1lQm94Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIGhvc3Q6IHsgbmdTa2lwSHlkcmF0aW9uOiAndHJ1ZScgfSxcbn0pXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZUJveENvbXBvbmVudCBleHRlbmRzIGNsYXNzZXMoXG4gIE1YSW5wdXRCYXNlVmFsdWVDb21wb25lbnQ8RGF0ZT4sXG4gIE1YQ2FsZW5kYXJCYXNlQ29tcG9uZW50LFxuICBNWERyb3Bkb3duQm94QmFzZUNvbXBvbmVudCxcbiAgTVhMb29rQ29tcG9uZW50LFxuKSB7XG4gIEBWaWV3Q2hpbGQoQVhEYXRlVGltZUlucHV0Q29tcG9uZW50KVxuICBwcm90ZWN0ZWQgaW5wdXQ6IEFYRGF0ZVRpbWVJbnB1dENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKEFYRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQpXG4gIHByb3RlY3RlZCBwaWNrZXI6IEFYRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZChBWERyb3Bkb3duQm94Q29tcG9uZW50KVxuICBwcm90ZWN0ZWQgZHJvcGRvd246IEFYRHJvcGRvd25Cb3hDb21wb25lbnQ7XG5cbiAgQE91dHB1dCgpXG4gIGZvcm1hdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIGFsbG93VHlwaW5nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgX2Zvcm1hdCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyLmZvcm1hdHMuZGF0ZVRpbWVJbnB1dDtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBmb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybWF0O1xuICB9XG4gIHB1YmxpYyBzZXQgZm9ybWF0KHY6IHN0cmluZykge1xuICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgIG5hbWU6ICdmb3JtYXQnLFxuICAgICAgdmFsdWU6IHYsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2hhbmRsZUlucHV0TW9kZWxDaGFuZ2UodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5jb21taXRWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2hhbmRsZVBpY2tlck1vZGVsQ2hhbmdlKHZhbHVlOiBEYXRlIHwgbnVsbCkge1xuICAgIGlmICh0aGlzLmlzT3BlbikgdGhpcy5jb21taXRWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2hhbmRsZU9uT3BlbmVkRXZlbnQoZTogQVhFdmVudCkge1xuICAgIC8vdGhpcy5lbWl0T25Gb2N1c0V2ZW50KG51bGwpO1xuICAgIHRoaXMucGlja2VyPy5yZWZyZXNoKCk7XG4gICAgdGhpcy5lbWl0T25PcGVuZWRFdmVudCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9oYW5kbGVPbkNsb3NlZEV2ZW50KGU6IEFYRXZlbnQpIHtcbiAgICAvL3RoaXMuZW1pdE9uQmx1ckV2ZW50KG51bGwpO1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB0aGlzLmVtaXRPbkNsb3NlZEV2ZW50KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2hhbmRsZUlucHV0T25Gb2N1c0V2ZW50KGU6IEFYRm9jdXNFdmVudCkge1xuICAgIHRoaXMuZW1pdE9uRm9jdXNFdmVudChlLm5hdGl2ZUV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfaGFuZGxlSW5wdXRPbkJsdXJFdmVudChlOiBBWEZvY3VzRXZlbnQpIHtcbiAgICB0aGlzLmVtaXRPbkJsdXJFdmVudChlLm5hdGl2ZUV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfaGFuZGxlQ2FsZW5kYXJPbk5hdmlnYXRlKGU6IEFYQ2FsZW5kYXJOYXZpZ2F0ZUV2ZW50KSB7XG4gICAgdGhpcy5vbk5hdmlnYXRlLmVtaXQoZSk7XG4gIH1cblxuICBvdmVycmlkZSBpbnRlcm5hbFZhbHVlQ2hhbmdlZCh2YWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfaGFuZGxlSW5wdXRPbkNsaWNrKCkge1xuICAgIGlmICghdGhpcy5hbGxvd1R5cGluZygpKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGF4LWRyb3Bkb3duLWJveCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAob25PcGVuZWQpPVwiX2hhbmRsZU9uT3BlbmVkRXZlbnQoJGV2ZW50KVwiXG4gIChvbkNsb3NlZCk9XCJfaGFuZGxlT25DbG9zZWRFdmVudCgkZXZlbnQpXCIgW2xvb2tdPVwibG9va1wiPlxuICA8bmctY29udGFpbmVyIGlucHV0PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LXByZWZpeFwiPiA8L25nLWNvbnRlbnQ+XG4gICAgPGF4LWRhdGV0aW1lLWlucHV0IGlkPVwie3sgaWQgfX0taW5wdXRcIiBbbmdNb2RlbF09XCJ2YWx1ZVwiIFthbGxvd1R5cGluZ109XCJhbGxvd1R5cGluZygpXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIl9oYW5kbGVJbnB1dE1vZGVsQ2hhbmdlKCRldmVudClcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbdHlwZV09XCJ0eXBlXCIgKG9uRm9jdXMpPVwiX2hhbmRsZUlucHV0T25Gb2N1c0V2ZW50KCRldmVudClcIlxuICAgICAgKG9uQmx1cik9XCJfaGFuZGxlSW5wdXRPbkJsdXJFdmVudCgkZXZlbnQpXCIgKG9uQ2xpY2spPVwiX2hhbmRsZUlucHV0T25DbGljaygpXCI+PC9heC1kYXRldGltZS1pbnB1dD5cbiAgICBAaWYodmFsdWUgJiYgIWRpc2FibGVkICYmICFyZWFkb25seSl7XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtY2xlYXItYnV0dG9uXCI+PC9uZy1jb250ZW50PlxuICAgIH1cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1pY29uXCIgW3RhYkluZGV4XT1cIi0xXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGUoKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2FsZW5kYXJcIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtc3VmZml4XCI+IDwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgcGFuZWw+XG4gICAgPGF4LWRhdGV0aW1lLXBpY2tlciBbZGVwdGhdPVwiZGVwdGhcIiBpZD1cInt7IGlkIH19LXBpY2tlclwiICNwaWNrZXIgW25nTW9kZWxdPVwidmFsdWVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiX2hhbmRsZVBpY2tlck1vZGVsQ2hhbmdlKCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgW21pblZhbHVlXT1cIm1pblZhbHVlXCIgW21heFZhbHVlXT1cIm1heFZhbHVlXCIgW2Zvcm1hdF09XCJmb3JtYXRcIiBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgIFtob2xpZGF5RGF0ZXNdPVwiaG9saWRheURhdGVzXCIgW2RlcHRoXT1cImRlcHRoXCIgW3R5cGVdPVwidHlwZVwiXG4gICAgICAob25OYXZpZ2F0ZSk9XCJfaGFuZGxlQ2FsZW5kYXJPbk5hdmlnYXRlKCRldmVudClcIj48L2F4LWRhdGV0aW1lLXBpY2tlcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2F4LWRyb3Bkb3duLWJveD5cbjxuZy1jb250ZW50IHNlbGVjdD1cImF4LXZhbGlkYXRpb24tcnVsZVwiPiA8L25nLWNvbnRlbnQ+Il19
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS1ib3gvc3JjL2xpYi9kYXRldGltZS1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWJveC9zcmMvbGliL2RhdGV0aW1lLWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTJCLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0YsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixXQUFXLEVBR1gsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsZUFBZSxHQUNoQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFFbkM7Ozs7R0FJRztBQThDSCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsT0FBTyxDQUNqRCxDQUFBLHlCQUErQixDQUFBLEVBQy9CLHVCQUF1QixFQUN2QiwwQkFBMEIsRUFDMUIsZUFBZSxDQUNoQjtJQWxE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aEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ2FsZW5kYXJOYXZpZ2F0ZUV2ZW50LCBNWENhbGVuZGFyQmFzZUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jYWxlbmRhcic7XG5pbXBvcnQge1xuICBBWENsZWFyYWJsZUNvbXBvbmVudCxcbiAgQVhDb21wb25lbnQsXG4gIEFYRXZlbnQsXG4gIEFYRm9jdXNFdmVudCxcbiAgQVhGb2N1c2FibGVDb21wb25lbnQsXG4gIEFYVmFsdWFibGVDb21wb25lbnQsXG4gIE1YSW5wdXRCYXNlVmFsdWVDb21wb25lbnQsXG4gIE1YTG9va0NvbXBvbmVudCxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBBWERhdGVUaW1lSW5wdXRDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGF0ZXRpbWUtaW5wdXQnO1xuaW1wb3J0IHsgQVhEYXRlVGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kYXRldGltZS1waWNrZXInO1xuaW1wb3J0IHsgQVhEcm9wZG93bkJveENvbXBvbmVudCwgTVhEcm9wZG93bkJveEJhc2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBmb3J3YXJkUmVmLFxuICBpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNsYXNzZXMgfSBmcm9tICdwb2x5dHlwZSc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGRhdGUgYW5kIHRpbWUgaW5wdXQgY29tcG9uZW50IHRoYXQgYWxsb3dzIHVzZXIgaW50ZXJhY3Rpb24gYW5kIHRyaWdnZXJzIGV2ZW50cy5cbiAqXG4gKiBAY2F0ZWdvcnkgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1kYXRldGltZS1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXRpbWUtYm94LmNvbXBvbmVudC5odG1sJyxcbiAgaW5wdXRzOiBbXG4gICAgJ2Rpc2FibGVkJyxcbiAgICAncmVhZG9ubHknLFxuICAgICd0YWJJbmRleCcsXG4gICAgJ3BsYWNlaG9sZGVyJyxcbiAgICAnbWluVmFsdWUnLFxuICAgICdtYXhWYWx1ZScsXG4gICAgJ3ZhbHVlJyxcbiAgICAnc3RhdGUnLFxuICAgICduYW1lJyxcbiAgICAnZGVwdGgnLFxuICAgICdpZCcsXG4gICAgJ3R5cGUnLFxuICAgICdsb29rJyxcbiAgICAnaG9saWRheURhdGVzJyxcbiAgXSxcbiAgb3V0cHV0czogW1xuICAgICd2YWx1ZUNoYW5nZScsXG4gICAgJ3N0YXRlQ2hhbmdlJyxcbiAgICAnb25WYWx1ZUNoYW5nZWQnLFxuICAgICdvbkJsdXInLFxuICAgICdvbkZvY3VzJyxcbiAgICAnb25PcGVuZWQnLFxuICAgICdvbkNsb3NlZCcsXG4gICAgJ3JlYWRvbmx5Q2hhbmdlJyxcbiAgICAnZGlzYWJsZWRDaGFuZ2UnLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYRGF0ZVRpbWVCb3hDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IEFYRm9jdXNhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUJveENvbXBvbmVudCB9LFxuICAgIHsgcHJvdmlkZTogQVhWYWx1YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYRGF0ZVRpbWVCb3hDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IEFYQ2xlYXJhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUJveENvbXBvbmVudCB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQVhEYXRlVGltZUJveENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBob3N0OiB7IG5nU2tpcEh5ZHJhdGlvbjogJ3RydWUnIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWVCb3hDb21wb25lbnQgZXh0ZW5kcyBjbGFzc2VzKFxuICBNWElucHV0QmFzZVZhbHVlQ29tcG9uZW50PERhdGU+LFxuICBNWENhbGVuZGFyQmFzZUNvbXBvbmVudCxcbiAgTVhEcm9wZG93bkJveEJhc2VDb21wb25lbnQsXG4gIE1YTG9va0NvbXBvbmVudCxcbikge1xuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIEBWaWV3Q2hpbGQoQVhEYXRlVGltZUlucHV0Q29tcG9uZW50KVxuICBwcm90ZWN0ZWQgaW5wdXQ6IEFYRGF0ZVRpbWVJbnB1dENvbXBvbmVudDtcblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIEBWaWV3Q2hpbGQoQVhEYXRlVGltZVBpY2tlckNvbXBvbmVudClcbiAgcHJvdGVjdGVkIHBpY2tlcjogQVhEYXRlVGltZVBpY2tlckNvbXBvbmVudDtcblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIEBWaWV3Q2hpbGQoQVhEcm9wZG93bkJveENvbXBvbmVudClcbiAgcHJvdGVjdGVkIGRyb3Bkb3duOiBBWERyb3Bkb3duQm94Q29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIGZvcm1hdCBvZiB0aGUgY29tcG9uZW50IGNoYW5nZXMuXG4gICAqXG4gICAqIEBldmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGZvcm1hdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0eXBpbmcgaXMgYWxsb3dlZCBpbiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIGZhbHNlXG4gICAqL1xuICBhbGxvd1R5cGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX2Zvcm1hdCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyLmZvcm1hdHMuZGF0ZVRpbWVJbnB1dDtcblxuICAvKipcbiAgICogR2V0cyB0aGUgZm9ybWF0IHN0cmluZyB1c2VkIGZvciBkaXNwbGF5aW5nIHZhbHVlcy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmb3JtYXQgc3RyaW5nIGZvciBkaXNwbGF5aW5nIHZhbHVlcy5cbiAgICogQHBhcmFtIHYgVGhlIGZvcm1hdCBzdHJpbmcgdG8gYmUgc2V0LlxuICAgKi9cbiAgcHVibGljIHNldCBmb3JtYXQodjogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRPcHRpb24oe1xuICAgICAgbmFtZTogJ2Zvcm1hdCcsXG4gICAgICB2YWx1ZTogdixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIF9oYW5kbGVJbnB1dE1vZGVsQ2hhbmdlKHZhbHVlOiBEYXRlIHwgbnVsbCkge1xuICAgIHRoaXMuY29tbWl0VmFsdWUodmFsdWUsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX2hhbmRsZVBpY2tlck1vZGVsQ2hhbmdlKHZhbHVlOiBEYXRlIHwgbnVsbCkge1xuICAgIGlmICh0aGlzLmlzT3BlbikgdGhpcy5jb21taXRWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlT25PcGVuZWRFdmVudChlOiBBWEV2ZW50KSB7XG4gICAgLy90aGlzLmVtaXRPbkZvY3VzRXZlbnQobnVsbCk7XG4gICAgdGhpcy5waWNrZXI/LnJlZnJlc2goKTtcbiAgICB0aGlzLmVtaXRPbk9wZW5lZEV2ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlT25DbG9zZWRFdmVudChlOiBBWEV2ZW50KSB7XG4gICAgLy90aGlzLmVtaXRPbkJsdXJFdmVudChudWxsKTtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgdGhpcy5lbWl0T25DbG9zZWRFdmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX2hhbmRsZUlucHV0T25Gb2N1c0V2ZW50KGU6IEFYRm9jdXNFdmVudCkge1xuICAgIHRoaXMuZW1pdE9uRm9jdXNFdmVudChlLm5hdGl2ZUV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIF9oYW5kbGVJbnB1dE9uQmx1ckV2ZW50KGU6IEFYRm9jdXNFdmVudCkge1xuICAgIHRoaXMuZW1pdE9uQmx1ckV2ZW50KGUubmF0aXZlRXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX2hhbmRsZUNhbGVuZGFyT25OYXZpZ2F0ZShlOiBBWENhbGVuZGFyTmF2aWdhdGVFdmVudCkge1xuICAgIHRoaXMub25OYXZpZ2F0ZS5lbWl0KGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2hhbmdlcyB0byB0aGUgaW50ZXJuYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIHRoYXQgd2FzIHNldC5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb3ZlcnJpZGUgaW50ZXJuYWxWYWx1ZUNoYW5nZWQodmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlSW5wdXRPbkNsaWNrKCkge1xuICAgIGlmICghdGhpcy5hbGxvd1R5cGluZygpKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGF4LWRyb3Bkb3duLWJveCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAob25PcGVuZWQpPVwiX2hhbmRsZU9uT3BlbmVkRXZlbnQoJGV2ZW50KVwiXG4gIChvbkNsb3NlZCk9XCJfaGFuZGxlT25DbG9zZWRFdmVudCgkZXZlbnQpXCIgW2xvb2tdPVwibG9va1wiPlxuICA8bmctY29udGFpbmVyIGlucHV0PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LXByZWZpeFwiPiA8L25nLWNvbnRlbnQ+XG4gICAgPGF4LWRhdGV0aW1lLWlucHV0IGlkPVwie3sgaWQgfX0taW5wdXRcIiBbbmdNb2RlbF09XCJ2YWx1ZVwiIFthbGxvd1R5cGluZ109XCJhbGxvd1R5cGluZygpXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIl9oYW5kbGVJbnB1dE1vZGVsQ2hhbmdlKCRldmVudClcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbdHlwZV09XCJ0eXBlXCIgKG9uRm9jdXMpPVwiX2hhbmRsZUlucHV0T25Gb2N1c0V2ZW50KCRldmVudClcIlxuICAgICAgKG9uQmx1cik9XCJfaGFuZGxlSW5wdXRPbkJsdXJFdmVudCgkZXZlbnQpXCIgKG9uQ2xpY2spPVwiX2hhbmRsZUlucHV0T25DbGljaygpXCI+PC9heC1kYXRldGltZS1pbnB1dD5cbiAgICBAaWYodmFsdWUgJiYgIWRpc2FibGVkICYmICFyZWFkb25seSl7XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtY2xlYXItYnV0dG9uXCI+PC9uZy1jb250ZW50PlxuICAgIH1cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1pY29uXCIgW3RhYkluZGV4XT1cIi0xXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGUoKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2FsZW5kYXJcIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtc3VmZml4XCI+IDwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgcGFuZWw+XG4gICAgPGF4LWRhdGV0aW1lLXBpY2tlciBbZGVwdGhdPVwiZGVwdGhcIiBpZD1cInt7IGlkIH19LXBpY2tlclwiICNwaWNrZXIgW25nTW9kZWxdPVwidmFsdWVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiX2hhbmRsZVBpY2tlck1vZGVsQ2hhbmdlKCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgW21pblZhbHVlXT1cIm1pblZhbHVlXCIgW21heFZhbHVlXT1cIm1heFZhbHVlXCIgW2Zvcm1hdF09XCJmb3JtYXRcIiBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgIFtob2xpZGF5RGF0ZXNdPVwiaG9saWRheURhdGVzXCIgW2RlcHRoXT1cImRlcHRoXCIgW3R5cGVdPVwidHlwZVwiXG4gICAgICAob25OYXZpZ2F0ZSk9XCJfaGFuZGxlQ2FsZW5kYXJPbk5hdmlnYXRlKCRldmVudClcIj48L2F4LWRhdGV0aW1lLXBpY2tlcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2F4LWRyb3Bkb3duLWJveD5cbjxuZy1jb250ZW50IHNlbGVjdD1cImF4LXZhbGlkYXRpb24tcnVsZVwiPiA8L25nLWNvbnRlbnQ+Il19