@acorex/components 7.5.0 → 7.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/action-sheet/index.d.ts +1 -1
  2. package/action-sheet/lib/action-sheet.component.d.ts +3 -3
  3. package/avatar/index.d.ts +1 -1
  4. package/badge/lib/badge.component.d.ts +3 -3
  5. package/breadcrumbs/index.d.ts +2 -2
  6. package/breadcrumbs/lib/breadcrumbs-item.component.d.ts +1 -1
  7. package/button/lib/button-item.class.d.ts +1 -1
  8. package/button/lib/button-item.component.d.ts +3 -1
  9. package/button/lib/button.component.d.ts +1 -1
  10. package/calendar/lib/calendar.class.d.ts +1 -1
  11. package/calendar/lib/calendar.component.d.ts +6 -4
  12. package/chips/lib/chips.component.d.ts +1 -1
  13. package/collapse/lib/collapse-group.component.d.ts +9 -6
  14. package/collapse/lib/collapse.component.d.ts +21 -8
  15. package/collapse/lib/collapse.module.d.ts +2 -1
  16. package/color-box/lib/color-box.component.d.ts +2 -2
  17. package/color-palette/lib/color-palette-input.component.d.ts +3 -3
  18. package/color-palette/lib/color-palette-picker.component.d.ts +1 -1
  19. package/color-palette/lib/color-palette.class.d.ts +4 -4
  20. package/common/index.d.ts +1 -1
  21. package/common/lib/classes/datasource.class.d.ts +55 -0
  22. package/common/lib/classes/styles.class.d.ts +2 -3
  23. package/common/lib/components/colorlook-component.class.d.ts +2 -2
  24. package/common/lib/components/input-base-value-component.class.d.ts +12 -12
  25. package/common/lib/components/interactive-component.class.d.ts +1 -7
  26. package/common/lib/components/selection-base.component.class.d.ts +5 -6
  27. package/common/lib/directives/delayed-value-changed.directive.d.ts +5 -5
  28. package/common/lib/directives/hotkey.directive.d.ts +2 -2
  29. package/common/lib/directives/responsive.directive.d.ts +1 -1
  30. package/common/lib/directives/ripple.directive.d.ts +2 -1
  31. package/data-table/lib/data-table.component.d.ts +2 -2
  32. package/datetime-box/lib/datetime-box.component.d.ts +4 -3
  33. package/datetime-input/lib/datetime-input.component.d.ts +2 -1
  34. package/datetime-picker/index.d.ts +1 -1
  35. package/datetime-picker/lib/datetime-picker.component.d.ts +1 -2
  36. package/dropdown/lib/dropdown-box.component.d.ts +5 -3
  37. package/dropdown/lib/dropdown-panel.component.d.ts +1 -0
  38. package/esm2022/action-sheet/index.mjs +2 -2
  39. package/esm2022/action-sheet/lib/action-sheet.class.mjs +1 -1
  40. package/esm2022/action-sheet/lib/action-sheet.component.mjs +22 -14
  41. package/esm2022/action-sheet/lib/action-sheet.module.mjs +3 -3
  42. package/esm2022/action-sheet/lib/action-sheet.service.mjs +5 -5
  43. package/esm2022/alert/lib/alert.component.mjs +4 -5
  44. package/esm2022/avatar/index.mjs +2 -2
  45. package/esm2022/avatar/lib/avatar-group.component.mjs +1 -1
  46. package/esm2022/avatar/lib/avatar.component.mjs +4 -4
  47. package/esm2022/badge/lib/badge.component.mjs +6 -6
  48. package/esm2022/badge/lib/badge.module.mjs +2 -2
  49. package/esm2022/breadcrumbs/index.mjs +3 -3
  50. package/esm2022/breadcrumbs/lib/breadcrumbs-item.class.mjs +1 -1
  51. package/esm2022/breadcrumbs/lib/breadcrumbs-item.component.mjs +2 -2
  52. package/esm2022/breadcrumbs/lib/breadcrumbs.component.mjs +1 -1
  53. package/esm2022/breadcrumbs/lib/breadcrumbs.module.mjs +3 -3
  54. package/esm2022/button/lib/button-item.class.mjs +1 -1
  55. package/esm2022/button/lib/button-item.component.mjs +12 -3
  56. package/esm2022/button/lib/button.component.mjs +3 -3
  57. package/esm2022/button-group/lib/button-group.component.mjs +3 -3
  58. package/esm2022/button-group/lib/button-group.module.mjs +2 -2
  59. package/esm2022/calendar/lib/calendar-range.component.mjs +4 -7
  60. package/esm2022/calendar/lib/calendar.class.mjs +3 -68
  61. package/esm2022/calendar/lib/calendar.component.mjs +53 -43
  62. package/esm2022/calendar/lib/calendar.module.mjs +4 -4
  63. package/esm2022/check-box/lib/check-box.component.mjs +9 -9
  64. package/esm2022/check-box/lib/check-box.module.mjs +3 -3
  65. package/esm2022/chips/lib/chips.component.mjs +6 -6
  66. package/esm2022/chips/lib/chips.module.mjs +2 -2
  67. package/esm2022/collapse/lib/collapse-group.component.mjs +23 -14
  68. package/esm2022/collapse/lib/collapse.component.mjs +68 -20
  69. package/esm2022/collapse/lib/collapse.module.mjs +7 -6
  70. package/esm2022/color-box/lib/color-box.component.mjs +7 -7
  71. package/esm2022/color-box/lib/color-box.module.mjs +4 -4
  72. package/esm2022/color-palette/lib/color-palette-input.component.mjs +10 -14
  73. package/esm2022/color-palette/lib/color-palette-picker.component.mjs +29 -31
  74. package/esm2022/color-palette/lib/color-palette-preview.component.mjs +8 -16
  75. package/esm2022/color-palette/lib/color-palette-swatches.component.mjs +5 -5
  76. package/esm2022/color-palette/lib/color-palette.class.mjs +2 -2
  77. package/esm2022/color-palette/lib/color-palette.component.mjs +14 -6
  78. package/esm2022/color-palette/lib/color-palette.module.mjs +12 -12
  79. package/esm2022/common/index.mjs +2 -2
  80. package/esm2022/common/lib/classes/components.class.mjs +1 -1
  81. package/esm2022/common/lib/classes/datalist.class.mjs +1 -53
  82. package/esm2022/common/lib/classes/datasource.class.mjs +106 -0
  83. package/esm2022/common/lib/classes/styles.class.mjs +2 -10
  84. package/esm2022/common/lib/common.module.mjs +4 -2
  85. package/esm2022/common/lib/components/button-base-component.class.mjs +4 -4
  86. package/esm2022/common/lib/components/color-component.class.mjs +2 -2
  87. package/esm2022/common/lib/components/colorlook-component.class.mjs +4 -4
  88. package/esm2022/common/lib/components/input-base-value-component.class.mjs +15 -15
  89. package/esm2022/common/lib/components/interactive-component.class.mjs +13 -13
  90. package/esm2022/common/lib/components/look-component.class.mjs +2 -2
  91. package/esm2022/common/lib/components/selection-base.component.class.mjs +63 -29
  92. package/esm2022/common/lib/components/value-component.class.mjs +3 -3
  93. package/esm2022/common/lib/directives/auto-focus.directive.mjs +4 -12
  94. package/esm2022/common/lib/directives/delayed-value-changed.directive.mjs +16 -14
  95. package/esm2022/common/lib/directives/hotkey.directive.mjs +14 -15
  96. package/esm2022/common/lib/directives/infinite-scroll.directive.mjs +7 -9
  97. package/esm2022/common/lib/directives/responsive.directive.mjs +12 -10
  98. package/esm2022/common/lib/directives/ripple.directive.mjs +14 -8
  99. package/esm2022/common/lib/services/dom.service.mjs +2 -2
  100. package/esm2022/common/lib/services/hotkey.service.mjs +4 -5
  101. package/esm2022/common/lib/types/direction.mjs +1 -1
  102. package/esm2022/common/lib/types/orientation.mjs +1 -1
  103. package/esm2022/common/lib/types/placement.mjs +23 -23
  104. package/esm2022/common/lib/types/range.mjs +1 -1
  105. package/esm2022/data-pager/lib/data-pager-info.component.mjs +3 -3
  106. package/esm2022/data-pager/lib/data-pager-input-selector.component.mjs +1 -1
  107. package/esm2022/data-pager/lib/data-pager-next-buttons.components.mjs +21 -8
  108. package/esm2022/data-pager/lib/data-pager-numeric-selector.component.mjs +3 -3
  109. package/esm2022/data-pager/lib/data-pager-pagesize-dropdown.component.mjs +17 -5
  110. package/esm2022/data-pager/lib/data-pager-prev-buttons.component.mjs +19 -7
  111. package/esm2022/data-pager/lib/data-pager.component.mjs +2 -2
  112. package/esm2022/data-pager/lib/data-pager.module.mjs +30 -16
  113. package/esm2022/data-table/lib/data-column.directive.mjs +2 -2
  114. package/esm2022/data-table/lib/data-table.component.mjs +2 -2
  115. package/esm2022/data-table/lib/data-table.module.mjs +7 -7
  116. package/esm2022/datetime-box/lib/datetime-box.component.mjs +10 -7
  117. package/esm2022/datetime-box/lib/datetime-box.module.mjs +7 -7
  118. package/esm2022/datetime-input/lib/datetime-input.component.mjs +144 -137
  119. package/esm2022/datetime-input/lib/datetime-input.module.mjs +4 -4
  120. package/esm2022/datetime-picker/index.mjs +2 -2
  121. package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +4 -4
  122. package/esm2022/datetime-picker/lib/datetime-picker.config.mjs +4 -4
  123. package/esm2022/decorators/lib/components/clear-button.component.mjs +2 -2
  124. package/esm2022/decorators/lib/components/close-button.component.mjs +8 -4
  125. package/esm2022/decorators/lib/components/generic-content.component.mjs +1 -1
  126. package/esm2022/decorators/lib/components/icon.component.mjs +2 -2
  127. package/esm2022/dialog/lib/dialog.component.mjs +3 -3
  128. package/esm2022/dialog/lib/dialog.module.mjs +26 -10
  129. package/esm2022/drawer/lib/drawer-container.component.mjs +2 -2
  130. package/esm2022/drawer/lib/drawer.component.mjs +2 -2
  131. package/esm2022/drawer/lib/drawer.module.mjs +3 -3
  132. package/esm2022/dropdown/lib/dropdown-box.class.mjs +1 -1
  133. package/esm2022/dropdown/lib/dropdown-box.component.mjs +14 -11
  134. package/esm2022/dropdown/lib/dropdown-panel.component.mjs +5 -4
  135. package/esm2022/dropdown/lib/dropdown.module.mjs +29 -9
  136. package/esm2022/form/index.mjs +2 -2
  137. package/esm2022/form/lib/form-field.component.mjs +4 -4
  138. package/esm2022/form/lib/form.component.mjs +3 -4
  139. package/esm2022/form/lib/form.config.mjs +6 -6
  140. package/esm2022/form/lib/form.module.mjs +3 -11
  141. package/esm2022/form/lib/validation-summary.component.mjs +40 -30
  142. package/esm2022/form/lib/validation.class.mjs +1 -1
  143. package/esm2022/image/lib/image.component.mjs +1 -1
  144. package/esm2022/image/lib/image.module.mjs +2 -2
  145. package/esm2022/label/lib/label.component.mjs +4 -8
  146. package/esm2022/label/lib/label.module.mjs +2 -2
  147. package/esm2022/list/lib/list.component.mjs +77 -80
  148. package/esm2022/list/lib/list.module.mjs +3 -3
  149. package/esm2022/loading/index.mjs +2 -2
  150. package/esm2022/loading/lib/loading-spinner.component.mjs +13 -7
  151. package/esm2022/loading/lib/loading.component.mjs +8 -16
  152. package/esm2022/loading/lib/loading.config.mjs +2 -2
  153. package/esm2022/loading/lib/loading.directive.mjs +2 -2
  154. package/esm2022/menu/index.mjs +1 -2
  155. package/esm2022/menu/lib/class/root-menu.class.mjs +1 -1
  156. package/esm2022/menu/lib/menu-item/menu-item.component.mjs +60 -19
  157. package/esm2022/menu/lib/menu.component.mjs +37 -342
  158. package/esm2022/menu/lib/menu.module.mjs +3 -4
  159. package/esm2022/mixin/lib/base-components.class.mjs +2 -3
  160. package/esm2022/mixin/lib/base-menu-mixin.class.mjs +1 -1
  161. package/esm2022/mixin/lib/button-mixin.class.mjs +1 -1
  162. package/esm2022/mixin/lib/clickable-mixin.class.mjs +8 -8
  163. package/esm2022/mixin/lib/color-look-mixing.class.mjs +3 -3
  164. package/esm2022/mixin/lib/constratctor.mjs +1 -1
  165. package/esm2022/mixin/lib/datalist-component.class.mjs +3 -5
  166. package/esm2022/mixin/lib/datalist.class.mjs +5 -6
  167. package/esm2022/mixin/lib/dropdown-mixin.class.mjs +2 -4
  168. package/esm2022/mixin/lib/interactive-mixin.class.mjs +29 -28
  169. package/esm2022/mixin/lib/mixin.class.mjs +13 -13
  170. package/esm2022/mixin/lib/page-component.class.mjs +3 -3
  171. package/esm2022/mixin/lib/selection-component.class.mjs +1 -1
  172. package/esm2022/mixin/lib/textbox-mixin.class.mjs +29 -20
  173. package/esm2022/mixin/lib/value-mixin.class.mjs +1 -1
  174. package/esm2022/notification/index.mjs +2 -2
  175. package/esm2022/notification/lib/notification.class.mjs +1 -1
  176. package/esm2022/notification/lib/notification.component.mjs +2 -2
  177. package/esm2022/notification/lib/notification.config.mjs +1 -1
  178. package/esm2022/notification/lib/notification.module.mjs +21 -9
  179. package/esm2022/notification/lib/notification.service.mjs +11 -11
  180. package/esm2022/number-box/lib/number-box.component.mjs +6 -6
  181. package/esm2022/number-box/lib/number-box.module.mjs +6 -16
  182. package/esm2022/otp/lib/otp.component.mjs +6 -5
  183. package/esm2022/otp/lib/otp.module.mjs +5 -4
  184. package/esm2022/page/lib/base-page.class.mjs +6 -4
  185. package/esm2022/page/lib/page.component.mjs +3 -3
  186. package/esm2022/page/lib/page.module.mjs +1 -1
  187. package/esm2022/password-box/lib/password-box.component.mjs +6 -6
  188. package/esm2022/password-box/lib/password-box.module.mjs +7 -15
  189. package/esm2022/picker/lib/picker-column.directive.mjs +9 -16
  190. package/esm2022/picker/lib/picker.component.mjs +2 -2
  191. package/esm2022/picker/lib/picker.module.mjs +3 -3
  192. package/esm2022/popover/lib/popover.component.mjs +1 -1
  193. package/esm2022/popover/lib/popover.module.mjs +2 -2
  194. package/esm2022/popup/index.mjs +2 -2
  195. package/esm2022/popup/lib/popup.interface.mjs +1 -1
  196. package/esm2022/popup/lib/popup.module.mjs +2 -2
  197. package/esm2022/progress-bar/lib/progress-bar.component.mjs +5 -5
  198. package/esm2022/progress-bar/lib/progress-bar.module.mjs +2 -2
  199. package/esm2022/radio/lib/radio.component.mjs +8 -8
  200. package/esm2022/radio/lib/radio.module.mjs +2 -2
  201. package/esm2022/range-slider/lib/range-slider.component.mjs +9 -9
  202. package/esm2022/range-slider/lib/range-slider.module.mjs +4 -4
  203. package/esm2022/result/lib/result.component.mjs +4 -4
  204. package/esm2022/result/lib/result.module.mjs +2 -2
  205. package/esm2022/routing-progress/acorex-components-routing-progress.mjs +5 -0
  206. package/esm2022/routing-progress/index.mjs +3 -0
  207. package/esm2022/routing-progress/lib/routing-progress.component.mjs +58 -0
  208. package/esm2022/routing-progress/lib/routing-progress.module.mjs +21 -0
  209. package/esm2022/scheduler/lib/scheduler-month-view.component.mjs +4 -2
  210. package/esm2022/scheduler/lib/scheduler.component.mjs +1 -1
  211. package/esm2022/search-box/lib/search-box.component.mjs +45 -20
  212. package/esm2022/search-box/lib/search-box.module.mjs +8 -8
  213. package/esm2022/select-box/index.mjs +2 -2
  214. package/esm2022/select-box/lib/select-box.component.mjs +168 -308
  215. package/esm2022/select-box/lib/select-box.module.mjs +12 -13
  216. package/esm2022/selection-list/lib/selection-list.component.mjs +20 -10
  217. package/esm2022/selection-list/lib/selection-list.module.mjs +6 -6
  218. package/esm2022/side-menu/acorex-components-side-menu.mjs +5 -0
  219. package/esm2022/side-menu/index.mjs +4 -0
  220. package/esm2022/side-menu/lib/side-menu-item/side-menu-item.compoent.mjs +116 -0
  221. package/esm2022/side-menu/lib/side-menu.component.mjs +15 -0
  222. package/esm2022/side-menu/lib/side-menu.module.mjs +23 -0
  223. package/esm2022/skeleton/acorex-components-skeleton.mjs +5 -0
  224. package/esm2022/skeleton/index.mjs +3 -0
  225. package/esm2022/skeleton/lib/skeleton.component.mjs +24 -0
  226. package/esm2022/skeleton/lib/skeleton.module.mjs +18 -0
  227. package/esm2022/switch/lib/switch-content.component.mjs +1 -1
  228. package/esm2022/switch/lib/switch.component.mjs +11 -18
  229. package/esm2022/switch/lib/switch.module.mjs +4 -4
  230. package/esm2022/tabs/lib/tab-content.directive.mjs +1 -1
  231. package/esm2022/tabs/lib/tab-item.component.mjs +9 -2
  232. package/esm2022/tabs/lib/tabs.component.mjs +2 -2
  233. package/esm2022/tabs/lib/tabs.module.mjs +5 -5
  234. package/esm2022/tag/lib/tag.component.mjs +7 -13
  235. package/esm2022/tag/lib/tag.module.mjs +2 -2
  236. package/esm2022/text-area/lib/text-area.component.mjs +14 -16
  237. package/esm2022/text-area/lib/text-area.module.mjs +2 -2
  238. package/esm2022/text-box/lib/text-box.component.mjs +6 -6
  239. package/esm2022/text-box/lib/text-box.module.mjs +4 -18
  240. package/esm2022/toast/index.mjs +2 -2
  241. package/esm2022/toast/lib/toast.class.mjs +1 -1
  242. package/esm2022/toast/lib/toast.component.mjs +4 -4
  243. package/esm2022/toast/lib/toast.config.mjs +3 -3
  244. package/esm2022/toast/lib/toast.module.mjs +6 -10
  245. package/esm2022/toast/lib/toast.service.mjs +16 -14
  246. package/esm2022/tooltip/lib/tooltip.component.mjs +2 -2
  247. package/esm2022/tooltip/lib/tooltip.directive.mjs +4 -4
  248. package/esm2022/tooltip/lib/tooltip.module.mjs +3 -3
  249. package/esm2022/uploader/index.mjs +3 -1
  250. package/esm2022/uploader/lib/uploader-drop-zone.component.mjs +3 -3
  251. package/esm2022/uploader/lib/uploader-list.component.mjs +41 -7
  252. package/esm2022/uploader/lib/uploader-overlay.component.mjs +2 -2
  253. package/esm2022/uploader/lib/uploader-zone.directive.mjs +53 -0
  254. package/esm2022/uploader/lib/uploader.module.mjs +26 -7
  255. package/esm2022/uploader/lib/uploader.service.mjs +30 -0
  256. package/fesm2022/acorex-components-action-sheet.mjs +23 -15
  257. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  258. package/fesm2022/acorex-components-alert.mjs +3 -4
  259. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  260. package/fesm2022/acorex-components-avatar.mjs +16 -16
  261. package/fesm2022/acorex-components-avatar.mjs.map +1 -1
  262. package/fesm2022/acorex-components-badge.mjs +5 -5
  263. package/fesm2022/acorex-components-badge.mjs.map +1 -1
  264. package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
  265. package/fesm2022/acorex-components-button-group.mjs +2 -2
  266. package/fesm2022/acorex-components-button-group.mjs.map +1 -1
  267. package/fesm2022/acorex-components-button.mjs +13 -4
  268. package/fesm2022/acorex-components-button.mjs.map +1 -1
  269. package/fesm2022/acorex-components-calendar.mjs +52 -110
  270. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  271. package/fesm2022/acorex-components-check-box.mjs +9 -9
  272. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  273. package/fesm2022/acorex-components-chips.mjs +5 -5
  274. package/fesm2022/acorex-components-chips.mjs.map +1 -1
  275. package/fesm2022/acorex-components-collapse.mjs +92 -34
  276. package/fesm2022/acorex-components-collapse.mjs.map +1 -1
  277. package/fesm2022/acorex-components-color-box.mjs +6 -6
  278. package/fesm2022/acorex-components-color-box.mjs.map +1 -1
  279. package/fesm2022/acorex-components-color-palette.mjs +53 -59
  280. package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
  281. package/fesm2022/acorex-components-common.mjs +277 -223
  282. package/fesm2022/acorex-components-common.mjs.map +1 -1
  283. package/fesm2022/acorex-components-data-pager.mjs +70 -19
  284. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  285. package/fesm2022/acorex-components-data-table.mjs +1 -1
  286. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  287. package/fesm2022/acorex-components-datetime-box.mjs +10 -7
  288. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  289. package/fesm2022/acorex-components-datetime-input.mjs +143 -136
  290. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  291. package/fesm2022/acorex-components-datetime-picker.mjs +9 -9
  292. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  293. package/fesm2022/acorex-components-decorators.mjs +8 -4
  294. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  295. package/fesm2022/acorex-components-dialog.mjs +20 -4
  296. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  297. package/fesm2022/acorex-components-drawer.mjs +1 -1
  298. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  299. package/fesm2022/acorex-components-dropdown.mjs +43 -19
  300. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  301. package/fesm2022/acorex-components-form.mjs +76 -75
  302. package/fesm2022/acorex-components-form.mjs.map +1 -1
  303. package/fesm2022/acorex-components-image.mjs.map +1 -1
  304. package/fesm2022/acorex-components-label.mjs +2 -6
  305. package/fesm2022/acorex-components-label.mjs.map +1 -1
  306. package/fesm2022/acorex-components-list.mjs +77 -80
  307. package/fesm2022/acorex-components-list.mjs.map +1 -1
  308. package/fesm2022/acorex-components-loading.mjs +19 -21
  309. package/fesm2022/acorex-components-loading.mjs.map +1 -1
  310. package/fesm2022/acorex-components-menu.mjs +78 -382
  311. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  312. package/fesm2022/acorex-components-mixin.mjs +70 -66
  313. package/fesm2022/acorex-components-mixin.mjs.map +1 -1
  314. package/fesm2022/acorex-components-notification.mjs +45 -33
  315. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  316. package/fesm2022/acorex-components-number-box.mjs +7 -17
  317. package/fesm2022/acorex-components-number-box.mjs.map +1 -1
  318. package/fesm2022/acorex-components-otp.mjs +8 -6
  319. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  320. package/fesm2022/acorex-components-page.mjs +6 -4
  321. package/fesm2022/acorex-components-page.mjs.map +1 -1
  322. package/fesm2022/acorex-components-password-box.mjs +7 -15
  323. package/fesm2022/acorex-components-password-box.mjs.map +1 -1
  324. package/fesm2022/acorex-components-picker.mjs +10 -17
  325. package/fesm2022/acorex-components-picker.mjs.map +1 -1
  326. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  327. package/fesm2022/acorex-components-popup.mjs +1 -1
  328. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  329. package/fesm2022/acorex-components-progress-bar.mjs +3 -3
  330. package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
  331. package/fesm2022/acorex-components-radio.mjs +6 -6
  332. package/fesm2022/acorex-components-radio.mjs.map +1 -1
  333. package/fesm2022/acorex-components-range-slider.mjs +7 -7
  334. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  335. package/fesm2022/acorex-components-result.mjs +2 -2
  336. package/fesm2022/acorex-components-result.mjs.map +1 -1
  337. package/fesm2022/acorex-components-routing-progress.mjs +83 -0
  338. package/fesm2022/acorex-components-routing-progress.mjs.map +1 -0
  339. package/fesm2022/acorex-components-scheduler.mjs +3 -1
  340. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  341. package/fesm2022/acorex-components-search-box.mjs +48 -25
  342. package/fesm2022/acorex-components-search-box.mjs.map +1 -1
  343. package/fesm2022/acorex-components-select-box.mjs +171 -401
  344. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  345. package/fesm2022/acorex-components-selection-list.mjs +22 -12
  346. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  347. package/fesm2022/acorex-components-side-menu.mjs +153 -0
  348. package/fesm2022/acorex-components-side-menu.mjs.map +1 -0
  349. package/fesm2022/acorex-components-skeleton.mjs +46 -0
  350. package/fesm2022/acorex-components-skeleton.mjs.map +1 -0
  351. package/fesm2022/acorex-components-switch.mjs +9 -16
  352. package/fesm2022/acorex-components-switch.mjs.map +1 -1
  353. package/fesm2022/acorex-components-tabs.mjs +11 -4
  354. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  355. package/fesm2022/acorex-components-tag.mjs +5 -11
  356. package/fesm2022/acorex-components-tag.mjs.map +1 -1
  357. package/fesm2022/acorex-components-text-area.mjs +13 -15
  358. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  359. package/fesm2022/acorex-components-text-box.mjs +8 -22
  360. package/fesm2022/acorex-components-text-box.mjs.map +1 -1
  361. package/fesm2022/acorex-components-toast.mjs +43 -45
  362. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  363. package/fesm2022/acorex-components-tooltip.mjs +2 -2
  364. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  365. package/fesm2022/acorex-components-uploader.mjs +146 -18
  366. package/fesm2022/acorex-components-uploader.mjs.map +1 -1
  367. package/form/index.d.ts +1 -1
  368. package/form/lib/form.component.d.ts +2 -2
  369. package/form/lib/validation-summary.component.d.ts +3 -3
  370. package/list/lib/list.component.d.ts +26 -27
  371. package/loading/index.d.ts +1 -1
  372. package/loading/lib/loading.component.d.ts +1 -1
  373. package/menu/index.d.ts +0 -1
  374. package/menu/lib/class/root-menu.class.d.ts +2 -0
  375. package/menu/lib/menu-item/menu-item.component.d.ts +19 -6
  376. package/menu/lib/menu.component.d.ts +10 -40
  377. package/menu/lib/menu.module.d.ts +7 -8
  378. package/mixin/lib/base-components.class.d.ts +2 -2
  379. package/mixin/lib/base-menu-mixin.class.d.ts +5 -5
  380. package/mixin/lib/button-mixin.class.d.ts +2 -2
  381. package/mixin/lib/clickable-mixin.class.d.ts +9 -9
  382. package/mixin/lib/color-look-mixing.class.d.ts +2 -2
  383. package/mixin/lib/datalist-component.class.d.ts +10 -10
  384. package/mixin/lib/datalist.class.d.ts +1 -1
  385. package/mixin/lib/dropdown-mixin.class.d.ts +3 -3
  386. package/mixin/lib/interactive-mixin.class.d.ts +25 -22
  387. package/mixin/lib/mixin.class.d.ts +62 -62
  388. package/mixin/lib/page-component.class.d.ts +4 -4
  389. package/mixin/lib/selection-component.class.d.ts +3 -3
  390. package/mixin/lib/sizable-mixin.class.d.ts +2 -2
  391. package/mixin/lib/textbox-mixin.class.d.ts +20 -20
  392. package/mixin/lib/value-mixin.class.d.ts +9 -9
  393. package/notification/index.d.ts +1 -1
  394. package/notification/lib/notification.class.d.ts +3 -3
  395. package/notification/lib/notification.config.d.ts +1 -1
  396. package/number-box/lib/number-box.component.d.ts +3 -3
  397. package/otp/lib/otp.component.d.ts +3 -3
  398. package/otp/lib/otp.module.d.ts +2 -1
  399. package/package.json +19 -7
  400. package/page/lib/base-page.class.d.ts +1 -1
  401. package/page/lib/page.component.d.ts +1 -1
  402. package/password-box/lib/password-box.component.d.ts +4 -4
  403. package/popup/index.d.ts +1 -1
  404. package/popup/lib/popup.interface.d.ts +2 -2
  405. package/routing-progress/README.md +3 -0
  406. package/routing-progress/index.d.ts +2 -0
  407. package/routing-progress/lib/routing-progress.component.d.ts +14 -0
  408. package/routing-progress/lib/routing-progress.module.d.ts +8 -0
  409. package/search-box/lib/search-box.component.d.ts +11 -4
  410. package/select-box/index.d.ts +1 -1
  411. package/select-box/lib/select-box.component.d.ts +37 -59
  412. package/select-box/lib/select-box.module.d.ts +14 -15
  413. package/selection-list/lib/selection-list.component.d.ts +6 -3
  414. package/side-menu/README.md +3 -0
  415. package/side-menu/index.d.ts +3 -0
  416. package/side-menu/lib/side-menu-item/side-menu-item.compoent.d.ts +37 -0
  417. package/side-menu/lib/side-menu.component.d.ts +8 -0
  418. package/side-menu/lib/side-menu.module.d.ts +10 -0
  419. package/skeleton/README.md +3 -0
  420. package/skeleton/index.d.ts +2 -0
  421. package/skeleton/lib/skeleton.component.d.ts +8 -0
  422. package/skeleton/lib/skeleton.module.d.ts +8 -0
  423. package/tabs/lib/tab-item.component.d.ts +2 -1
  424. package/tag/lib/tag.component.d.ts +3 -4
  425. package/text-area/lib/text-area.component.d.ts +3 -3
  426. package/text-box/lib/text-box.component.d.ts +3 -3
  427. package/toast/index.d.ts +1 -1
  428. package/toast/lib/toast.class.d.ts +1 -1
  429. package/toast/lib/toast.component.d.ts +2 -1
  430. package/toast/lib/toast.config.d.ts +1 -1
  431. package/tooltip/lib/tooltip.directive.d.ts +1 -1
  432. package/uploader/index.d.ts +2 -0
  433. package/uploader/lib/uploader-list.component.d.ts +14 -1
  434. package/uploader/lib/uploader-zone.directive.d.ts +18 -0
  435. package/uploader/lib/uploader.module.d.ts +6 -4
  436. package/uploader/lib/uploader.service.d.ts +10 -0
  437. package/common/lib/components/appearance-component.class.d.ts +0 -12
  438. package/context-menu/README.md +0 -3
  439. package/context-menu/index.d.ts +0 -2
  440. package/context-menu/lib/context-menu.component.d.ts +0 -34
  441. package/context-menu/lib/context-menu.module.d.ts +0 -13
  442. package/esm2022/common/lib/components/appearance-component.class.mjs +0 -25
  443. package/esm2022/context-menu/acorex-components-context-menu.mjs +0 -5
  444. package/esm2022/context-menu/index.mjs +0 -3
  445. package/esm2022/context-menu/lib/context-menu.component.mjs +0 -262
  446. package/esm2022/context-menu/lib/context-menu.module.mjs +0 -36
  447. package/esm2022/menu/lib/menu2.component.mjs +0 -45
  448. package/esm2022/select-box/lib/select-box2.component.mjs +0 -97
  449. package/fesm2022/acorex-components-context-menu.mjs +0 -300
  450. package/fesm2022/acorex-components-context-menu.mjs.map +0 -1
  451. package/menu/lib/menu2.component.d.ts +0 -12
  452. package/select-box/lib/select-box2.component.d.ts +0 -25
@@ -1,7 +1,7 @@
1
- import { Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, forwardRef, inject } from '@angular/core';
2
- import { AXClearableComponent, AXComponent, AXFocusableComponent, AXValuableComponent, MXInputBaseValueComponent } from '@acorex/components/common';
1
+ import { AXClearableComponent, AXComponent, AXFocusableComponent, AXValuableComponent, MXInputBaseValueComponent, } from '@acorex/components/common';
2
+ import { AXCalendarService, } from '@acorex/core/dateTime';
3
3
  import { AXStringUtil } from '@acorex/core/utils';
4
- import { AXCalendarService } from '@acorex/core/dateTime';
4
+ import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation, forwardRef, inject, } from '@angular/core';
5
5
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/forms";
@@ -11,65 +11,66 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
11
11
  this.calendarService = inject(AXCalendarService);
12
12
  this._editingParts = {
13
13
  year: {
14
- key: "year",
15
- placeholder: "yyyy",
16
- placeholders: ["YY", "yy", "YYYY", "yyyy"],
14
+ key: 'year',
15
+ placeholder: 'yyyy',
16
+ placeholders: ['YY', 'yy', 'YYYY', 'yyyy'],
17
17
  enabled: false,
18
18
  default: 2023,
19
19
  typedValue: null,
20
- realValue: () => this.editingDateObj.format(this._editingParts.year.placeholder)
20
+ realValue: () => this.editingDateObj.format(this._editingParts.year.placeholder),
21
21
  },
22
22
  month: {
23
- key: "month",
24
- placeholder: "MM",
25
- placeholders: ["MMM", "MMMM", "MM", "M"],
23
+ key: 'month',
24
+ placeholder: 'MM',
25
+ placeholders: ['MMM', 'MMMM', 'MM', 'M'],
26
26
  enabled: false,
27
27
  default: 1,
28
28
  typedValue: null,
29
- realValue: () => this.editingDateObj.format(this._editingParts.month.placeholder)
29
+ realValue: () => this.editingDateObj.format(this._editingParts.month.placeholder),
30
30
  },
31
31
  day: {
32
- key: "day",
33
- placeholder: "dd",
34
- placeholders: ["dd", "d", "DDDD", "ddd"],
32
+ key: 'day',
33
+ placeholder: 'dd',
34
+ placeholders: ['dd', 'd', 'DDDD', 'ddd'],
35
35
  enabled: false,
36
36
  default: 1,
37
37
  typedValue: null,
38
- realValue: () => this.editingDateObj.format(this._editingParts.day.placeholder)
38
+ realValue: () => this.editingDateObj.format(this._editingParts.day.placeholder),
39
39
  },
40
40
  hour: {
41
- key: "hour",
42
- placeholder: "HH",
43
- placeholders: ["HH", "H", "hh", "h"],
41
+ key: 'hour',
42
+ placeholder: 'HH',
43
+ placeholders: ['HH', 'H', 'hh', 'h'],
44
44
  enabled: false,
45
45
  default: 0,
46
46
  typedValue: null,
47
- realValue: () => this.editingDateObj.format(this._editingParts.hour.placeholder)
47
+ realValue: () => this.editingDateObj.format(this._editingParts.hour.placeholder),
48
48
  },
49
49
  minute: {
50
- key: "minute",
51
- placeholder: "mm",
52
- placeholders: ["mm", "m"],
50
+ key: 'minute',
51
+ placeholder: 'mm',
52
+ placeholders: ['mm', 'm'],
53
53
  enabled: false,
54
54
  default: 0,
55
55
  typedValue: null,
56
- realValue: () => this.editingDateObj.format(this._editingParts.minute.placeholder)
56
+ realValue: () => this.editingDateObj.format(this._editingParts.minute.placeholder),
57
57
  },
58
58
  second: {
59
- key: "second",
60
- placeholder: "ss",
61
- placeholders: ["ss", "s"],
59
+ key: 'second',
60
+ placeholder: 'ss',
61
+ placeholders: ['ss', 's'],
62
62
  enabled: false,
63
63
  default: 0,
64
64
  typedValue: null,
65
- realValue: () => this.editingDateObj.format(this._editingParts.second.placeholder)
66
- }
65
+ realValue: () => this.editingDateObj.format(this._editingParts.second.placeholder),
66
+ },
67
67
  };
68
68
  this._inputChars = [];
69
69
  this._type = this.calendarService.calendar.name();
70
70
  this._activePart = 'hour';
71
71
  this._editingDateObj = this.calendarService.now(this.type);
72
72
  this.formatChange = new EventEmitter();
73
+ this.onClick = new EventEmitter();
73
74
  this._format = this.calendarService.calendar.formats.dateTimeInput;
74
75
  }
75
76
  get type() {
@@ -114,12 +115,12 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
114
115
  name: 'format',
115
116
  value: v,
116
117
  afterCallback: (o, n) => {
117
- Object.values(this._editingParts).forEach(e => {
118
+ Object.values(this._editingParts).forEach((e) => {
118
119
  e.enabled = false;
119
120
  });
120
121
  const formatParts = n.split(/[^a-zA-Z]+/);
121
- formatParts.forEach(f => {
122
- const found = Object.values(this._editingParts).find(c => c.placeholders.some(d => d == f));
122
+ formatParts.forEach((f) => {
123
+ const found = Object.values(this._editingParts).find((c) => c.placeholders.some((d) => d == f));
123
124
  if (found) {
124
125
  found.enabled = true;
125
126
  found.placeholder = f;
@@ -132,8 +133,8 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
132
133
  // TODO: better spliter format
133
134
  const formatParts = this.format.split(/[^a-zA-Z]+/);
134
135
  const result = [];
135
- formatParts.forEach(f => {
136
- const found = Object.values(this._editingParts).find(c => c.placeholders.some(d => d == f));
136
+ formatParts.forEach((f) => {
137
+ const found = Object.values(this._editingParts).find((c) => c.placeholders.some((d) => d == f));
137
138
  if (found && found.enabled)
138
139
  result.push(found);
139
140
  });
@@ -145,7 +146,7 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
145
146
  _updateText() {
146
147
  let text = this.format;
147
148
  //
148
- Object.values(this._editingParts).forEach(part => {
149
+ Object.values(this._editingParts).forEach((part) => {
149
150
  if (this.activePart == part.key) {
150
151
  if (part.typedValue)
151
152
  text = text.replace(part.placeholder, part.typedValue);
@@ -165,7 +166,7 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
165
166
  if (value) {
166
167
  let editingDate = this.calendarService.create(value, this.type);
167
168
  let applyChanges = false;
168
- Object.values(this._editingParts).forEach(part => {
169
+ Object.values(this._editingParts).forEach((part) => {
169
170
  if (!part.enabled) {
170
171
  editingDate = editingDate.set(part.key, part.default);
171
172
  applyChanges = true;
@@ -181,7 +182,7 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
181
182
  if (value) {
182
183
  this._editingDateObj = this.calendarService.create(value, this.type);
183
184
  }
184
- Object.values(this._editingParts).forEach(part => {
185
+ Object.values(this._editingParts).forEach((part) => {
185
186
  if (value) {
186
187
  if (part.typedValue != part.placeholder)
187
188
  part.typedValue = part.realValue();
@@ -222,8 +223,8 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
222
223
  ignore();
223
224
  e.code === 'ArrowRight' ? goNext() : goPrev();
224
225
  }
225
- /*************** Handle Up and Down **************/
226
226
  else if ((e.code === 'ArrowUp' || e.code === 'ArrowDown') && !e.ctrlKey) {
227
+ /*************** Handle Up and Down **************/
227
228
  if (this.disabled || this.readonly) {
228
229
  ignore();
229
230
  return;
@@ -238,8 +239,8 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
238
239
  this._detectValueChanges();
239
240
  }
240
241
  }
241
- /*************** Handle Backspace **************/
242
242
  else if (e.code == 'Backspace' || e.code == 'Delete') {
243
+ /*************** Handle Backspace **************/
243
244
  if (this.disabled || this.readonly) {
244
245
  return;
245
246
  }
@@ -250,8 +251,8 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
250
251
  goPrev();
251
252
  }
252
253
  }
253
- /*************** Handle Backspace **************/
254
254
  else if (e.code == 'Tab' || e.code == 'Space') {
255
+ /*************** Handle Backspace **************/
255
256
  if (input.value) {
256
257
  if (!e.shiftKey && nextPart) {
257
258
  ignore();
@@ -272,115 +273,114 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
272
273
  const editing = this._editingParts[part.key];
273
274
  //
274
275
  switch (part.key) {
275
- case 'year':
276
- {
277
- if (editing.placeholder.length == 2 && this._inputChars.length == 0) {
278
- this._inputChars.push(...this.calendarService.now(this.type).format('yyyy').substring(0, 2).split(''));
276
+ case 'year': {
277
+ if (editing.placeholder.length == 2 && this._inputChars.length == 0) {
278
+ this._inputChars.push(...this.calendarService.now(this.type).format('yyyy').substring(0, 2).split(''));
279
+ }
280
+ if (this._inputChars.length < 4) {
281
+ editing.typedValue = `${this._inputChars.join('')}${e.key}`;
282
+ this._inputChars.push(e.key);
283
+ if (this._inputChars.length > 3) {
284
+ next = true;
285
+ }
286
+ }
287
+ else {
288
+ next = true;
289
+ }
290
+ editing.typedValue = ('0000' + editing.typedValue).slice(-4);
291
+ const nv = parseInt(editing.typedValue);
292
+ //if (nv > 0) {
293
+ const newVal = this.editingDateObj.set('year', nv);
294
+ this._editingDateObj = newVal;
295
+ this._detectValueChanges();
296
+ //}
297
+ break;
298
+ }
299
+ case 'month': {
300
+ if (this._inputChars.length == 0) {
301
+ this._inputChars.push(e.key);
302
+ editing.typedValue = `0${e.key}`;
303
+ if (parseInt(e.key) > 1) {
304
+ this._clearInputBuffer();
305
+ next = true;
279
306
  }
280
- if (this._inputChars.length < 4) {
281
- editing.typedValue = `${this._inputChars.join('')}${e.key}`;
282
- this._inputChars.push(e.key);
283
- if (this._inputChars.length > 3) {
284
- next = true;
285
- }
307
+ }
308
+ else if (this._inputChars.length == 1) {
309
+ const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
310
+ if (newStr > 12) {
311
+ editing.typedValue = `0${e.key}`;
286
312
  }
287
313
  else {
288
- next = true;
314
+ editing.typedValue = newStr.toString();
289
315
  }
290
- editing.typedValue = ('0000' + editing.typedValue).slice(-4);
291
- const nv = parseInt(editing.typedValue);
292
- //if (nv > 0) {
293
- const newVal = this.editingDateObj.set('year', nv);
316
+ this._clearInputBuffer();
317
+ next = true;
318
+ }
319
+ editing.typedValue =
320
+ editing.typedValue?.length === 1 ? '0' + editing.typedValue : editing.typedValue;
321
+ const nv = parseInt(editing.typedValue);
322
+ if (nv > 0) {
323
+ const newVal = this.editingDateObj.set(part.key, nv);
294
324
  this._editingDateObj = newVal;
295
325
  this._detectValueChanges();
296
- //}
297
- break;
298
326
  }
299
- case 'month':
300
- {
301
- if (this._inputChars.length == 0) {
302
- this._inputChars.push(e.key);
303
- editing.typedValue = `0${e.key}`;
304
- if (parseInt(e.key) > 1) {
305
- this._clearInputBuffer();
306
- next = true;
307
- }
308
- }
309
- else if (this._inputChars.length == 1) {
310
- const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
311
- if (newStr > 12) {
312
- editing.typedValue = `0${e.key}`;
313
- }
314
- else {
315
- editing.typedValue = newStr.toString();
316
- }
327
+ break;
328
+ }
329
+ case 'day': {
330
+ if (this._inputChars.length == 0) {
331
+ this._inputChars.push(e.key);
332
+ editing.typedValue = `0${e.key}`;
333
+ if (parseInt(e.key) > 3) {
317
334
  this._clearInputBuffer();
318
335
  next = true;
319
336
  }
320
- editing.typedValue = editing.typedValue?.length === 1 ? "0" + editing.typedValue : editing.typedValue;
321
- const nv = parseInt(editing.typedValue);
322
- if (nv > 0) {
323
- const newVal = this.editingDateObj.set(part.key, nv);
324
- this._editingDateObj = newVal;
325
- this._detectValueChanges();
326
- }
327
- break;
328
337
  }
329
- case 'day':
330
- {
331
- if (this._inputChars.length == 0) {
332
- this._inputChars.push(e.key);
338
+ else if (this._inputChars.length == 1) {
339
+ const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
340
+ if (newStr > this._editingDateObj.month.totalDays) {
333
341
  editing.typedValue = `0${e.key}`;
334
- if (parseInt(e.key) > 3) {
335
- this._clearInputBuffer();
336
- next = true;
337
- }
338
342
  }
339
- else if (this._inputChars.length == 1) {
340
- const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
341
- if (newStr > this._editingDateObj.month.totalDays) {
342
- editing.typedValue = `0${e.key}`;
343
- }
344
- else {
345
- editing.typedValue = newStr.toString();
346
- }
347
- this._clearInputBuffer();
348
- next = true;
343
+ else {
344
+ editing.typedValue = newStr.toString();
349
345
  }
350
- editing.typedValue = editing.typedValue?.length === 1 ? "0" + editing.typedValue : editing.typedValue;
351
- const nv = parseInt(editing.typedValue);
352
- if (nv > 0) {
353
- const newVal = this.editingDateObj.set(part.key, nv);
354
- this._editingDateObj = newVal;
355
- this._detectValueChanges();
346
+ this._clearInputBuffer();
347
+ next = true;
348
+ }
349
+ editing.typedValue =
350
+ editing.typedValue?.length === 1 ? '0' + editing.typedValue : editing.typedValue;
351
+ const nv = parseInt(editing.typedValue);
352
+ if (nv > 0) {
353
+ const newVal = this.editingDateObj.set(part.key, nv);
354
+ this._editingDateObj = newVal;
355
+ this._detectValueChanges();
356
+ }
357
+ break;
358
+ }
359
+ case 'hour': {
360
+ if (this._inputChars.length == 0) {
361
+ this._inputChars.push(e.key);
362
+ editing.typedValue = `0${e.key}`;
363
+ if (parseInt(e.key) > 2) {
364
+ next = true;
356
365
  }
357
- break;
358
366
  }
359
- case 'hour':
360
- {
361
- if (this._inputChars.length == 0) {
362
- this._inputChars.push(e.key);
367
+ else if (this._inputChars.length == 1) {
368
+ const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
369
+ if (newStr > 23) {
363
370
  editing.typedValue = `0${e.key}`;
364
- if (parseInt(e.key) > 2) {
365
- next = true;
366
- }
367
371
  }
368
- else if (this._inputChars.length == 1) {
369
- const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
370
- if (newStr > 23) {
371
- editing.typedValue = `0${e.key}`;
372
- }
373
- else {
374
- editing.typedValue = newStr.toString();
375
- }
376
- next = true;
372
+ else {
373
+ editing.typedValue = newStr.toString();
377
374
  }
378
- editing.typedValue = editing.typedValue?.length === 1 ? "0" + editing.typedValue : editing.typedValue;
379
- const newVal = this.editingDateObj.set('hour', parseInt(editing.typedValue));
380
- this._editingDateObj = newVal;
381
- this._detectValueChanges();
382
- break;
375
+ next = true;
383
376
  }
377
+ editing.typedValue =
378
+ editing.typedValue?.length === 1 ? '0' + editing.typedValue : editing.typedValue;
379
+ const newVal = this.editingDateObj.set('hour', parseInt(editing.typedValue));
380
+ this._editingDateObj = newVal;
381
+ this._detectValueChanges();
382
+ break;
383
+ }
384
384
  case 'minute':
385
385
  case 'second':
386
386
  if (this._inputChars.length == 0) {
@@ -402,7 +402,8 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
402
402
  this._clearInputBuffer();
403
403
  next = true;
404
404
  }
405
- editing.typedValue = editing.typedValue?.length === 1 ? "0" + editing.typedValue : editing.typedValue;
405
+ editing.typedValue =
406
+ editing.typedValue?.length === 1 ? '0' + editing.typedValue : editing.typedValue;
406
407
  const newVal = this.editingDateObj.set(part.key, parseInt(editing.typedValue));
407
408
  this._editingDateObj = newVal;
408
409
  this._detectValueChanges();
@@ -433,7 +434,11 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
433
434
  setTimeout(() => {
434
435
  this._detectPartAtPosition();
435
436
  }, 0);
436
- super.emitOnClickEvent(e);
437
+ this.onClick.emit({
438
+ component: this,
439
+ htmlElement: this.getHostElement(),
440
+ nativeEvent: e,
441
+ });
437
442
  }
438
443
  _detectPartAtPosition() {
439
444
  const input = this.input.nativeElement;
@@ -443,16 +448,16 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
443
448
  const re = /[a-zA-Z0-9]+/gi;
444
449
  const valueParts = Array.from(input.value.matchAll(re));
445
450
  const orderedParts = this._getOrderedParts();
446
- const index = valueParts.findIndex((c) => c.index <= sStart && (c.index + c[0].length) >= sStart);
451
+ const index = valueParts.findIndex((c) => c.index <= sStart && c.index + c[0].length >= sStart);
447
452
  this.activePart = orderedParts[index].key;
448
453
  this._highlightActivePart();
449
454
  }
450
455
  _highlightActivePart() {
451
- const input = this.input.nativeElement;
452
- if (!input.value || !this.activePart)
456
+ const input = this.input?.nativeElement;
457
+ if (!input || !input.value || !this.activePart)
453
458
  return;
454
459
  const orderedParts = this._getOrderedParts();
455
- const index = orderedParts.findIndex(c => c.key == this.activePart);
460
+ const index = orderedParts.findIndex((c) => c.key == this.activePart);
456
461
  const re = /[a-zA-Z0-9]+/gi;
457
462
  const valueParts = Array.from(input.value.matchAll(re));
458
463
  const { start, end } = AXStringUtil.getWordBoundsAtPosition(input.value, valueParts[index]?.index);
@@ -510,13 +515,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.9", ngImpor
510
515
  type: Input
511
516
  }], formatChange: [{
512
517
  type: Output
518
+ }], onClick: [{
519
+ type: Output
513
520
  }], format: [{
514
521
  type: Input
515
522
  }], _handleOnKeydownEvent: [{
516
523
  type: HostListener,
517
- args: ["keydown", ["$event"]]
524
+ args: ['keydown', ['$event']]
518
525
  }], _handleKeyUpEvent: [{
519
526
  type: HostListener,
520
- args: ["keyup", ["$event"]]
527
+ args: ['keyup', ['$event']]
521
528
  }] } });
522
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWlucHV0L3NyYy9saWIvZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWlucHV0L3NyYy9saWIvZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVLLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwSixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUF5RCxNQUFNLHVCQUF1QixDQUFDO0FBQ2pILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFrQ25ELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSx5QkFBK0I7SUE3QjdFOztRQStCWSxvQkFBZSxHQUFzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUvRCxrQkFBYSxHQUFvQjtZQUNyQyxJQUFJLEVBQUU7Z0JBQ0YsR0FBRyxFQUFFLE1BQU07Z0JBQ1gsV0FBVyxFQUFFLE1BQU07Z0JBQ25CLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztnQkFDMUMsT0FBTyxFQUFFLEtBQUs7Z0JB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QkFDUixTQUFTO3dCQUNULFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7cUJBQ25CLGFBQ1U7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsMEJBQTBCLEVBQUU7d0JBQy9ELEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsMEJBQTBCLEVBQUU7d0JBQ3hFLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsMEJBQTBCLEVBQUU7d0JBQ3ZFLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsMEJBQTBCLEVBQUU7d0JBQ3hFOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDOzRCQUN2RCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjs4QkFzRVUsSUFBSTtzQkFEZCxLQUFLO2dCQStCTixLQUFLO3NCQURKLFNBQVM7dUJBQUMsT0FBTztnQkFJbEIsTUFBTTtzQkFETCxTQUFTO3VCQUFDLFFBQVE7Z0JBS1IsUUFBUTtzQkFEbEIsS0FBSztnQkFVSyxRQUFRO3NCQURsQixLQUFLO2dCQVNOLFlBQVk7c0JBRFgsTUFBTTtnQkFLSSxNQUFNO3NCQURoQixLQUFLO2dCQStGTixxQkFBcUI7c0JBRHBCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXFPbkMsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBmb3J3YXJkUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYQ2xlYXJhYmxlQ29tcG9uZW50LCBBWENvbXBvbmVudCwgQVhGb2N1c2FibGVDb21wb25lbnQsIEFYVmFsdWFibGVDb21wb25lbnQsIE1YSW5wdXRCYXNlVmFsdWVDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IEFYU3RyaW5nVXRpbCB9IGZyb20gJ0BhY29yZXgvY29yZS91dGlscyc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSwgVGltZVVuaXQsIEFYRGF0ZVRpbWVQYXJ0LCBBWERhdGVUaW1lUGFydHMgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZVRpbWUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cblxuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXgtZGF0ZXRpbWUtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRldGltZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBpbnB1dHM6IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAndGFiSW5kZXgnLCAncGxhY2Vob2xkZXInLCAndmFsdWUnLCAnc3RhdGUnLCAnbmFtZScsICdpZCddLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdheC1lZGl0b3ItaW5wdXQnIH0sXG4gICAgb3V0cHV0czogW1xuICAgICAgICAndmFsdWVDaGFuZ2UnLFxuICAgICAgICAnc3RhdGVDaGFuZ2UnLFxuICAgICAgICAnb25WYWx1ZUNoYW5nZWQnLFxuICAgICAgICAnb25CbHVyJyxcbiAgICAgICAgJ29uRm9jdXMnLFxuICAgICAgICAnb25DbGljaycsXG4gICAgICAgICdyZWFkb25seUNoYW5nZScsXG4gICAgICAgICdkaXNhYmxlZENoYW5nZScsXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYRGF0ZVRpbWVJbnB1dENvbXBvbmVudCB9LFxuICAgICAgICB7IHByb3ZpZGU6IEFYRm9jdXNhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUlucHV0Q29tcG9uZW50IH0sXG4gICAgICAgIHsgcHJvdmlkZTogQVhWYWx1YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYRGF0ZVRpbWVJbnB1dENvbXBvbmVudCB9LFxuICAgICAgICB7IHByb3ZpZGU6IEFYQ2xlYXJhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUlucHV0Q29tcG9uZW50IH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQVhEYXRlVGltZUlucHV0Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWVJbnB1dENvbXBvbmVudCBleHRlbmRzIE1YSW5wdXRCYXNlVmFsdWVDb21wb25lbnQ8RGF0ZT4ge1xuXG4gICAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2U6IEFYQ2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgX2VkaXRpbmdQYXJ0czogQVhEYXRlVGltZVBhcnRzID0ge1xuICAgICAgICB5ZWFyOiB7XG4gICAgICAgICAgICBrZXk6IFwieWVhclwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwieXl5eVwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJzOiBbXCJZWVwiLCBcInl5XCIsIFwiWVlZWVwiLCBcInl5eXlcIl0sXG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IDIwMjMsXG4gICAgICAgICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLmVkaXRpbmdEYXRlT2JqLmZvcm1hdCh0aGlzLl9lZGl0aW5nUGFydHMueWVhci5wbGFjZWhvbGRlcilcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGg6IHtcbiAgICAgICAgICAgIGtleTogXCJtb250aFwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiTU1cIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyczogW1wiTU1NXCIsIFwiTU1NTVwiLCBcIk1NXCIsIFwiTVwiXSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgICAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICAgICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5tb250aC5wbGFjZWhvbGRlcilcbiAgICAgICAgfSxcbiAgICAgICAgZGF5OiB7XG4gICAgICAgICAgICBrZXk6IFwiZGF5XCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJkZFwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJzOiBbXCJkZFwiLCBcImRcIiwgXCJEREREXCIsIFwiZGRkXCJdLFxuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgICAgICAgdHlwZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgICAgIHJlYWxWYWx1ZTogKCkgPT4gdGhpcy5lZGl0aW5nRGF0ZU9iai5mb3JtYXQodGhpcy5fZWRpdGluZ1BhcnRzLmRheS5wbGFjZWhvbGRlcilcbiAgICAgICAgfSxcbiAgICAgICAgaG91cjoge1xuICAgICAgICAgICAga2V5OiBcImhvdXJcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkhIXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcnM6IFtcIkhIXCIsIFwiSFwiLCBcImhoXCIsIFwiaFwiXSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgICAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICAgICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5ob3VyLnBsYWNlaG9sZGVyKVxuICAgICAgICB9LFxuICAgICAgICBtaW51dGU6IHtcbiAgICAgICAgICAgIGtleTogXCJtaW51dGVcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIm1tXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcnM6IFtcIm1tXCIsIFwibVwiXSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgICAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICAgICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5taW51dGUucGxhY2Vob2xkZXIpXG4gICAgICAgIH0sXG4gICAgICAgIHNlY29uZDoge1xuICAgICAgICAgICAga2V5OiBcInNlY29uZFwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwic3NcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyczogW1wic3NcIiwgXCJzXCJdLFxuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgICAgICAgdHlwZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgICAgIHJlYWxWYWx1ZTogKCkgPT4gdGhpcy5lZGl0aW5nRGF0ZU9iai5mb3JtYXQodGhpcy5fZWRpdGluZ1BhcnRzLnNlY29uZC5wbGFjZWhvbGRlcilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZWRpdGluZ1RleHQ6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2lucHV0Q2hhcnM6IHN0cmluZ1tdID0gW107XG5cblxuICAgIHByaXZhdGUgX3R5cGU6IHN0cmluZyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyLm5hbWUoKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlIHx8IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyLm5hbWUoKTtcbiAgICB9XG4gICAgcHVibGljIHNldCB0eXBlKHY6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldE9wdGlvbih7XG4gICAgICAgICAgICBuYW1lOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgIGFmdGVyQ2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBfYWN0aXZlUGFydCA9ICdob3VyJztcbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZVBhcnQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhcnQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgYWN0aXZlUGFydCh2OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlUGFydCA9IHY7XG4gICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lZGl0aW5nRGF0ZU9iajogQVhEYXRlVGltZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLm5vdyh0aGlzLnR5cGUpO1xuICAgIHByaXZhdGUgZ2V0IGVkaXRpbmdEYXRlT2JqKCk6IEFYRGF0ZVRpbWUge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdGluZ0RhdGVPYmo7XG4gICAgfVxuXG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dCcpXG4gICAgaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dDInKVxuICAgIGlucHV0MjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIHByaXZhdGUgX21pblZhbHVlOiBEYXRlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pblZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG1pblZhbHVlKHY6IERhdGUpIHtcbiAgICAgICAgdGhpcy5fbWluVmFsdWUgPSB2O1xuICAgIH1cblxuICAgIHByaXZhdGUgX21heFZhbHVlOiBEYXRlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBtYXhWYWx1ZSgpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heFZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG1heFZhbHVlKHY6IERhdGUpIHtcbiAgICAgICAgdGhpcy5fbWF4VmFsdWUgPSB2O1xuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1hdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBfZm9ybWF0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY2FsZW5kYXIuZm9ybWF0cy5kYXRlVGltZUlucHV0O1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBmb3JtYXQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgICB9XG4gICAgcHVibGljIHNldCBmb3JtYXQodjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgICAgICAgIG5hbWU6ICdmb3JtYXQnLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICBhZnRlckNhbGxiYWNrOiAobywgbikgPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRQYXJ0cyA9IG4uc3BsaXQoL1teYS16QS1aXSsvKTtcbiAgICAgICAgICAgICAgICBmb3JtYXRQYXJ0cy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5maW5kKGMgPT4gYy5wbGFjZWhvbGRlcnMuc29tZShkID0+IGQgPT0gZikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQucGxhY2Vob2xkZXIgPSBmO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgX2dldE9yZGVyZWRQYXJ0cygpOiBBWERhdGVUaW1lUGFydFtdIHtcbiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHNwbGl0ZXIgZm9ybWF0XG4gICAgICAgIGNvbnN0IGZvcm1hdFBhcnRzID0gdGhpcy5mb3JtYXQuc3BsaXQoL1teYS16QS1aXSsvKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBBWERhdGVUaW1lUGFydFtdID0gW107XG4gICAgICAgIGZvcm1hdFBhcnRzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5maW5kKGMgPT4gYy5wbGFjZWhvbGRlcnMuc29tZShkID0+IGQgPT0gZikpO1xuICAgICAgICAgICAgaWYgKGZvdW5kICYmIGZvdW5kLmVuYWJsZWQpXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZm91bmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jbGVhcklucHV0QnVmZmVyKCkge1xuICAgICAgICB0aGlzLl9pbnB1dENoYXJzID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlVGV4dCgpIHtcbiAgICAgICAgbGV0IHRleHQgPSB0aGlzLmZvcm1hdDtcbiAgICAgICAgLy9cbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9lZGl0aW5nUGFydHMpLmZvckVhY2gocGFydCA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVQYXJ0ID09IHBhcnQua2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQudHlwZWRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShwYXJ0LnBsYWNlaG9sZGVyLCBwYXJ0LnR5cGVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQudHlwZWRWYWx1ZSAhPSBwYXJ0LnBsYWNlaG9sZGVyICYmIHBhcnQudHlwZWRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocGFydC5wbGFjZWhvbGRlciwgcGFydC5yZWFsVmFsdWUoKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2VkaXRpbmdUZXh0ID0gdGV4dCA9PSB0aGlzLmZvcm1hdCA/ICcnIDogdGV4dDtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlUGFydCkge1xuICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbnRlcm5hbFNldFZhbHVlKHZhbHVlPzogRGF0ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBlZGl0aW5nRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh2YWx1ZSwgdGhpcy50eXBlKTtcbiAgICAgICAgICAgIGxldCBhcHBseUNoYW5nZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcGFydC5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRpbmdEYXRlID0gZWRpdGluZ0RhdGUuc2V0KHBhcnQua2V5IGFzIFRpbWVVbml0LCBwYXJ0LmRlZmF1bHQpO1xuICAgICAgICAgICAgICAgICAgICBhcHBseUNoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFwcGx5Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBlZGl0aW5nRGF0ZS5kYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbnRlcm5hbFZhbHVlQ2hhbmdlZCh2YWx1ZT86IERhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh2YWx1ZSwgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuX2VkaXRpbmdQYXJ0cykuZm9yRWFjaChwYXJ0ID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0LnR5cGVkVmFsdWUgIT0gcGFydC5wbGFjZWhvbGRlcilcbiAgICAgICAgICAgICAgICAgICAgcGFydC50eXBlZFZhbHVlID0gcGFydC5yZWFsVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXJ0LnR5cGVkVmFsdWUgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duXCIsIFtcIiRldmVudFwiXSlcbiAgICBfaGFuZGxlT25LZXlkb3duRXZlbnQoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBpZ25vcmUgPSAoKSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgLy9cbiAgICAgICAgY29uc3Qgb3JkZXJlZFBhcnRzID0gdGhpcy5fZ2V0T3JkZXJlZFBhcnRzKCk7XG4gICAgICAgIGNvbnN0IHBhcnQgPSB0aGlzLmFjdGl2ZVBhcnQgPyB0aGlzLl9lZGl0aW5nUGFydHNbdGhpcy5hY3RpdmVQYXJ0XSA6IG9yZGVyZWRQYXJ0c1swXTtcbiAgICAgICAgY29uc3QgbmV4dFBhcnQgPSBwYXJ0ID8gb3JkZXJlZFBhcnRzW29yZGVyZWRQYXJ0cy5pbmRleE9mKHBhcnQpICsgMV0gOiBudWxsO1xuICAgICAgICBjb25zdCBwcmV2UGFydCA9IHBhcnQgPyBvcmRlcmVkUGFydHNbb3JkZXJlZFBhcnRzLmluZGV4T2YocGFydCkgLSAxXSA6IG51bGw7XG4gICAgICAgIC8vXG4gICAgICAgIGNvbnN0IGdvTmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgIGlmIChuZXh0UGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUGFydCA9IG5leHRQYXJ0LmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBY3RpdmVQYXJ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdvUHJldiA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgIGlmIChwcmV2UGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUGFydCA9IHByZXZQYXJ0LmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBY3RpdmVQYXJ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBMZWZ0IGFuZCBSaWdodCAgKioqKioqKioqKioqKiovXG4gICAgICAgIGlmIChlLmNvZGUgPT09ICdBcnJvd1JpZ2h0JyB8fCBlLmNvZGUgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgICAgIGUuY29kZSA9PT0gJ0Fycm93UmlnaHQnID8gZ29OZXh0KCkgOiBnb1ByZXYoKTtcbiAgICAgICAgfVxuICAgICAgICAvKioqKioqKioqKioqKioqICBIYW5kbGUgVXAgYW5kIERvd24gICoqKioqKioqKioqKioqL1xuICAgICAgICBlbHNlIGlmICgoZS5jb2RlID09PSAnQXJyb3dVcCcgfHwgZS5jb2RlID09PSAnQXJyb3dEb3duJykgJiYgIWUuY3RybEtleSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBlLmNvZGUgPT09ICdBcnJvd1VwJyA/ICsxIDogLTE7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQYXJ0ID0gcGFydC5rZXk7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1ZhbDogQVhEYXRlVGltZSA9IHRoaXMuZWRpdGluZ0RhdGVPYmouYWRkKHBhcnQua2V5LCBzaWduKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0aW5nUGFydHNbcGFydC5rZXldLnR5cGVkVmFsdWUgPSBuZXdWYWwuZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0c1twYXJ0LmtleV0ucGxhY2Vob2xkZXIpXG4gICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqKioqKioqKioqKioqKiAgSGFuZGxlIEJhY2tzcGFjZSAgKioqKioqKioqKioqKiovXG4gICAgICAgIGVsc2UgaWYgKGUuY29kZSA9PSAnQmFja3NwYWNlJyB8fCBlLmNvZGUgPT0gJ0RlbGV0ZScpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0aW5nUGFydHNbcGFydC5rZXldLnR5cGVkVmFsdWUgPSB0aGlzLl9lZGl0aW5nUGFydHNbcGFydC5rZXldLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldGVjdFZhbHVlQ2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIGdvUHJldigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBCYWNrc3BhY2UgICoqKioqKioqKioqKioqL1xuICAgICAgICBlbHNlIGlmIChlLmNvZGUgPT0gJ1RhYicgfHwgZS5jb2RlID09ICdTcGFjZScpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghZS5zaGlmdEtleSAmJiBuZXh0UGFydCkge1xuICAgICAgICAgICAgICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZ29OZXh0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIHByZXZQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgICAgICAgICBnb1ByZXYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZS5rZXk/LnRyaW0oKSAmJiAhaXNOYU4oTnVtYmVyKGUua2V5KSkpIHtcbiAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBuZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBlZGl0aW5nID0gdGhpcy5fZWRpdGluZ1BhcnRzW3BhcnQua2V5XTtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBzd2l0Y2ggKHBhcnQua2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0aW5nLnBsYWNlaG9sZGVyLmxlbmd0aCA9PSAyICYmIHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dENoYXJzLnB1c2goLi4udGhpcy5jYWxlbmRhclNlcnZpY2Uubm93KHRoaXMudHlwZSkuZm9ybWF0KCd5eXl5Jykuc3Vic3RyaW5nKDAsIDIpLnNwbGl0KCcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPCA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYCR7dGhpcy5faW5wdXRDaGFycy5qb2luKCcnKX0ke2Uua2V5fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSAoJzAwMDAnICsgZWRpdGluZy50eXBlZFZhbHVlKS5zbGljZSgtNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudiA9IHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChudiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuZWRpdGluZ0RhdGVPYmouc2V0KCd5ZWFyJywgbnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGAwJHtlLmtleX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0ciA9IHBhcnNlSW50KGAke3RoaXMuX2lucHV0Q2hhcnNbMF19JHtlLmtleX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3RyID4gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBuZXdTdHIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJJbnB1dEJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gZWRpdGluZy50eXBlZFZhbHVlPy5sZW5ndGggPT09IDEgPyBcIjBcIiArIGVkaXRpbmcudHlwZWRWYWx1ZSA6IGVkaXRpbmcudHlwZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG52ID0gcGFyc2VJbnQoZWRpdGluZy50eXBlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLmVkaXRpbmdEYXRlT2JqLnNldChwYXJ0LmtleSwgbnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRpbmdEYXRlT2JqID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RldGVjdFZhbHVlQ2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpID4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0ciA+IHRoaXMuX2VkaXRpbmdEYXRlT2JqLm1vbnRoLnRvdGFsRGF5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IG5ld1N0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBlZGl0aW5nLnR5cGVkVmFsdWU/Lmxlbmd0aCA9PT0gMSA/IFwiMFwiICsgZWRpdGluZy50eXBlZFZhbHVlIDogZWRpdGluZy50eXBlZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnYgPSBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG52ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuZWRpdGluZ0RhdGVPYmouc2V0KHBhcnQua2V5LCBudik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3U3RyID0gcGFyc2VJbnQoYCR7dGhpcy5faW5wdXRDaGFyc1swXX0ke2Uua2V5fWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdHIgPiAyMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IG5ld1N0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGVkaXRpbmcudHlwZWRWYWx1ZT8ubGVuZ3RoID09PSAxID8gXCIwXCIgKyBlZGl0aW5nLnR5cGVkVmFsdWUgOiBlZGl0aW5nLnR5cGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLmVkaXRpbmdEYXRlT2JqLnNldCgnaG91cicsIHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpID4gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3RyID4gNTkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IG5ld1N0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJJbnB1dEJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gZWRpdGluZy50eXBlZFZhbHVlPy5sZW5ndGggPT09IDEgPyBcIjBcIiArIGVkaXRpbmcudHlwZWRWYWx1ZSA6IGVkaXRpbmcudHlwZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsID0gdGhpcy5lZGl0aW5nRGF0ZU9iai5zZXQocGFydC5rZXksIHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgIGdvTmV4dCgpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKioqKioqKioqKioqKiogIEVtaXQgRXZlbnQgICoqKioqKioqKioqKioqL1xuICAgICAgICBzdXBlci5lbWl0T25LZXlkb3duRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcImtleXVwXCIsIFtcIiRldmVudFwiXSlcbiAgICBfaGFuZGxlS2V5VXBFdmVudChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVBhcnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVGb2N1c0V2ZW50KGU6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgLy90aGlzLl9oaWdobGlnaHRBY3RpdmVQYXJ0KCk7XG4gICAgICAgIHN1cGVyLmVtaXRPbkZvY3VzRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVCbHVyRXZlbnQoZTogRm9jdXNFdmVudCkge1xuICAgICAgICBzdXBlci5lbWl0T25CbHVyRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVPbklucHV0Q2xpY2tFdmVudChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZGV0ZWN0UGFydEF0UG9zaXRpb24oKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICAgIHN1cGVyLmVtaXRPbkNsaWNrRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGV0ZWN0UGFydEF0UG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWlucHV0LnZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzU3RhcnQgPSBpbnB1dC5zZWxlY3Rpb25FbmQgfHwgMDtcbiAgICAgICAgY29uc3QgcmUgPSAvW2EtekEtWjAtOV0rL2dpO1xuICAgICAgICBjb25zdCB2YWx1ZVBhcnRzID0gQXJyYXkuZnJvbShpbnB1dC52YWx1ZS5tYXRjaEFsbChyZSkpO1xuICAgICAgICBjb25zdCBvcmRlcmVkUGFydHMgPSB0aGlzLl9nZXRPcmRlcmVkUGFydHMoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB2YWx1ZVBhcnRzLmZpbmRJbmRleCgoYzogYW55KSA9PiBjLmluZGV4IDw9IHNTdGFydCAmJiAoYy5pbmRleCArIGNbMF0ubGVuZ3RoKSA+PSBzU3RhcnQpO1xuICAgICAgICB0aGlzLmFjdGl2ZVBhcnQgPSBvcmRlcmVkUGFydHNbaW5kZXhdLmtleTtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWlucHV0LnZhbHVlIHx8ICF0aGlzLmFjdGl2ZVBhcnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG9yZGVyZWRQYXJ0cyA9IHRoaXMuX2dldE9yZGVyZWRQYXJ0cygpO1xuICAgICAgICBjb25zdCBpbmRleCA9IG9yZGVyZWRQYXJ0cy5maW5kSW5kZXgoYyA9PiBjLmtleSA9PSB0aGlzLmFjdGl2ZVBhcnQpO1xuICAgICAgICBjb25zdCByZSA9IC9bYS16QS1aMC05XSsvZ2k7XG4gICAgICAgIGNvbnN0IHZhbHVlUGFydHMgPSBBcnJheS5mcm9tKGlucHV0LnZhbHVlLm1hdGNoQWxsKHJlKSk7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gQVhTdHJpbmdVdGlsLmdldFdvcmRCb3VuZHNBdFBvc2l0aW9uKFxuICAgICAgICAgICAgaW5wdXQudmFsdWUsIHZhbHVlUGFydHNbaW5kZXhdPy5pbmRleFxuICAgICAgICApO1xuICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kZXRlY3RWYWx1ZUNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY29tbWl0VmFsdWUodGhpcy5fZWRpdGluZ0RhdGVPYmouZGF0ZSwgdHJ1ZSk7XG4gICAgfVxufVxuIiwiPGlucHV0ICNpbnB1dCBpZD1cImlucHV0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgYXV0b2NvcnJlY3Q9XCJvZmZcIiBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGNsYXNzPVwiYXgtaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCIgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5heC1zdGF0ZS1yZWFkb25seV09XCJyZWFkb25seVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZWFkb25seV09XCJ0cnVlXCIgW25nTW9kZWxdPVwiX2VkaXRpbmdUZXh0XCJcbiAgICAobW91c2V1cCk9XCJfaGFuZGxlT25JbnB1dENsaWNrRXZlbnQoJGV2ZW50KVwiIChibHVyKT1cIl9oYW5kbGVCbHVyRXZlbnQoJGV2ZW50KVwiIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNFdmVudCgkZXZlbnQpXCI+XG48bmctY29udGVudCBzZWxlY3Q9XCJheC12YWxpZGF0aW9uLXJ1bGVcIj5cbjwvbmctY29udGVudD4iXX0=
529
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWlucHV0L3NyYy9saWIvZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWlucHV0L3NyYy9saWIvZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUVwQixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix5QkFBeUIsR0FDMUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsaUJBQWlCLEdBS2xCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUErQm5ELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSx5QkFBK0I7SUE3QjdFOztRQThCVSxvQkFBZSxHQUFzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUvRCxrQkFBYSxHQUFvQjtZQUN2QyxJQUFJLEVBQUU7Z0JBQ0osR0FBRyxFQUFFLE1BQU07Z0JBQ1gsV0FBVyxFQUFFLE1BQU07Z0JBQ25CLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztnQkFDMUMsT0FBTyxFQUFFLEtB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QUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBWENsZWFyYWJsZUNvbXBvbmVudCxcbiAgQVhDbGlja0V2ZW50LFxuICBBWENvbXBvbmVudCxcbiAgQVhGb2N1c2FibGVDb21wb25lbnQsXG4gIEFYVmFsdWFibGVDb21wb25lbnQsXG4gIE1YSW5wdXRCYXNlVmFsdWVDb21wb25lbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHtcbiAgQVhDYWxlbmRhclNlcnZpY2UsXG4gIEFYRGF0ZVRpbWUsXG4gIEFYRGF0ZVRpbWVQYXJ0LFxuICBBWERhdGVUaW1lUGFydHMsXG4gIFRpbWVVbml0LFxufSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZVRpbWUnO1xuaW1wb3J0IHsgQVhTdHJpbmdVdGlsIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWRhdGV0aW1lLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGV0aW1lLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGlucHV0czogWydkaXNhYmxlZCcsICdyZWFkb25seScsICd0YWJJbmRleCcsICdwbGFjZWhvbGRlcicsICd2YWx1ZScsICdzdGF0ZScsICduYW1lJywgJ2lkJ10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdheC1lZGl0b3ItaW5wdXQnIH0sXG4gIG91dHB1dHM6IFtcbiAgICAndmFsdWVDaGFuZ2UnLFxuICAgICdzdGF0ZUNoYW5nZScsXG4gICAgJ29uVmFsdWVDaGFuZ2VkJyxcbiAgICAnb25CbHVyJyxcbiAgICAnb25Gb2N1cycsXG4gICAgJ29uQ2xpY2snLFxuICAgICdyZWFkb25seUNoYW5nZScsXG4gICAgJ2Rpc2FibGVkQ2hhbmdlJyxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYRGF0ZVRpbWVJbnB1dENvbXBvbmVudCB9LFxuICAgIHsgcHJvdmlkZTogQVhGb2N1c2FibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWERhdGVUaW1lSW5wdXRDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IEFYVmFsdWFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWERhdGVUaW1lSW5wdXRDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IEFYQ2xlYXJhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUlucHV0Q29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBWERhdGVUaW1lSW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZUlucHV0Q29tcG9uZW50IGV4dGVuZHMgTVhJbnB1dEJhc2VWYWx1ZUNvbXBvbmVudDxEYXRlPiB7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlOiBBWENhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSBfZWRpdGluZ1BhcnRzOiBBWERhdGVUaW1lUGFydHMgPSB7XG4gICAgeWVhcjoge1xuICAgICAga2V5OiAneWVhcicsXG4gICAgICBwbGFjZWhvbGRlcjogJ3l5eXknLFxuICAgICAgcGxhY2Vob2xkZXJzOiBbJ1lZJywgJ3l5JywgJ1lZWVknLCAneXl5eSddLFxuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiAyMDIzLFxuICAgICAgdHlwZWRWYWx1ZTogbnVsbCxcbiAgICAgIHJlYWxWYWx1ZTogKCkgPT4gdGhpcy5lZGl0aW5nRGF0ZU9iai5mb3JtYXQodGhpcy5fZWRpdGluZ1BhcnRzLnllYXIucGxhY2Vob2xkZXIpLFxuICAgIH0sXG4gICAgbW9udGg6IHtcbiAgICAgIGtleTogJ21vbnRoJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnTU0nLFxuICAgICAgcGxhY2Vob2xkZXJzOiBbJ01NTScsICdNTU1NJywgJ01NJywgJ00nXSxcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogMSxcbiAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5tb250aC5wbGFjZWhvbGRlciksXG4gICAgfSxcbiAgICBkYXk6IHtcbiAgICAgIGtleTogJ2RheScsXG4gICAgICBwbGFjZWhvbGRlcjogJ2RkJyxcbiAgICAgIHBsYWNlaG9sZGVyczogWydkZCcsICdkJywgJ0REREQnLCAnZGRkJ10sXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLmVkaXRpbmdEYXRlT2JqLmZvcm1hdCh0aGlzLl9lZGl0aW5nUGFydHMuZGF5LnBsYWNlaG9sZGVyKSxcbiAgICB9LFxuICAgIGhvdXI6IHtcbiAgICAgIGtleTogJ2hvdXInLFxuICAgICAgcGxhY2Vob2xkZXI6ICdISCcsXG4gICAgICBwbGFjZWhvbGRlcnM6IFsnSEgnLCAnSCcsICdoaCcsICdoJ10sXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLmVkaXRpbmdEYXRlT2JqLmZvcm1hdCh0aGlzLl9lZGl0aW5nUGFydHMuaG91ci5wbGFjZWhvbGRlciksXG4gICAgfSxcbiAgICBtaW51dGU6IHtcbiAgICAgIGtleTogJ21pbnV0ZScsXG4gICAgICBwbGFjZWhvbGRlcjogJ21tJyxcbiAgICAgIHBsYWNlaG9sZGVyczogWydtbScsICdtJ10sXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLmVkaXRpbmdEYXRlT2JqLmZvcm1hdCh0aGlzLl9lZGl0aW5nUGFydHMubWludXRlLnBsYWNlaG9sZGVyKSxcbiAgICB9LFxuICAgIHNlY29uZDoge1xuICAgICAga2V5OiAnc2Vjb25kJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnc3MnLFxuICAgICAgcGxhY2Vob2xkZXJzOiBbJ3NzJywgJ3MnXSxcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogMCxcbiAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5zZWNvbmQucGxhY2Vob2xkZXIpLFxuICAgIH0sXG4gIH07XG5cbiAgcHJvdGVjdGVkIF9lZGl0aW5nVGV4dDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2lucHV0Q2hhcnM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY2FsZW5kYXIubmFtZSgpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlIHx8IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyLm5hbWUoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHR5cGUodjogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRPcHRpb24oe1xuICAgICAgbmFtZTogJ3R5cGUnLFxuICAgICAgdmFsdWU6IHYsXG4gICAgICBhZnRlckNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2FjdGl2ZVBhcnQgPSAnaG91cic7XG4gIHB1YmxpYyBnZXQgYWN0aXZlUGFydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYXJ0O1xuICB9XG4gIHB1YmxpYyBzZXQgYWN0aXZlUGFydCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hY3RpdmVQYXJ0ID0gdjtcbiAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gIH1cblxuICBwcml2YXRlIF9lZGl0aW5nRGF0ZU9iajogQVhEYXRlVGltZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLm5vdyh0aGlzLnR5cGUpO1xuICBwcml2YXRlIGdldCBlZGl0aW5nRGF0ZU9iaigpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdGluZ0RhdGVPYmo7XG4gIH1cblxuICBAVmlld0NoaWxkKCdpbnB1dCcpXG4gIGlucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0MicpXG4gIGlucHV0MjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBwcml2YXRlIF9taW5WYWx1ZTogRGF0ZTtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbWluVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBtaW5WYWx1ZSh2OiBEYXRlKSB7XG4gICAgdGhpcy5fbWluVmFsdWUgPSB2O1xuICB9XG5cbiAgcHJpdmF0ZSBfbWF4VmFsdWU6IERhdGU7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX21heFZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VmFsdWUodjogRGF0ZSkge1xuICAgIHRoaXMuX21heFZhbHVlID0gdjtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBmb3JtYXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAT3V0cHV0KClcbiAgb25DbGljazogRXZlbnRFbWl0dGVyPEFYQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYQ2xpY2tFdmVudD4oKTtcblxuICBwcml2YXRlIF9mb3JtYXQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhci5mb3JtYXRzLmRhdGVUaW1lSW5wdXQ7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgfVxuICBwdWJsaWMgc2V0IGZvcm1hdCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldE9wdGlvbih7XG4gICAgICBuYW1lOiAnZm9ybWF0JyxcbiAgICAgIHZhbHVlOiB2LFxuICAgICAgYWZ0ZXJDYWxsYmFjazogKG8sIG4pID0+IHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9lZGl0aW5nUGFydHMpLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICBlLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGZvcm1hdFBhcnRzID0gbi5zcGxpdCgvW15hLXpBLVpdKy8pO1xuICAgICAgICBmb3JtYXRQYXJ0cy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSBPYmplY3QudmFsdWVzKHRoaXMuX2VkaXRpbmdQYXJ0cykuZmluZCgoYykgPT4gYy5wbGFjZWhvbGRlcnMuc29tZSgoZCkgPT4gZCA9PSBmKSk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICBmb3VuZC5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvdW5kLnBsYWNlaG9sZGVyID0gZjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE9yZGVyZWRQYXJ0cygpOiBBWERhdGVUaW1lUGFydFtdIHtcbiAgICAvLyBUT0RPOiBiZXR0ZXIgc3BsaXRlciBmb3JtYXRcbiAgICBjb25zdCBmb3JtYXRQYXJ0cyA9IHRoaXMuZm9ybWF0LnNwbGl0KC9bXmEtekEtWl0rLyk7XG4gICAgY29uc3QgcmVzdWx0OiBBWERhdGVUaW1lUGFydFtdID0gW107XG4gICAgZm9ybWF0UGFydHMuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSBPYmplY3QudmFsdWVzKHRoaXMuX2VkaXRpbmdQYXJ0cykuZmluZCgoYykgPT4gYy5wbGFjZWhvbGRlcnMuc29tZSgoZCkgPT4gZCA9PSBmKSk7XG4gICAgICBpZiAoZm91bmQgJiYgZm91bmQuZW5hYmxlZCkgcmVzdWx0LnB1c2goZm91bmQpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhcklucHV0QnVmZmVyKCkge1xuICAgIHRoaXMuX2lucHV0Q2hhcnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVRleHQoKSB7XG4gICAgbGV0IHRleHQgPSB0aGlzLmZvcm1hdDtcbiAgICAvL1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVQYXJ0ID09IHBhcnQua2V5KSB7XG4gICAgICAgIGlmIChwYXJ0LnR5cGVkVmFsdWUpIHRleHQgPSB0ZXh0LnJlcGxhY2UocGFydC5wbGFjZWhvbGRlciwgcGFydC50eXBlZFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYXJ0LnR5cGVkVmFsdWUgIT0gcGFydC5wbGFjZWhvbGRlciAmJiBwYXJ0LnR5cGVkVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocGFydC5wbGFjZWhvbGRlciwgcGFydC5yZWFsVmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9lZGl0aW5nVGV4dCA9IHRleHQgPT0gdGhpcy5mb3JtYXQgPyAnJyA6IHRleHQ7XG4gICAgaWYgKHRoaXMuYWN0aXZlUGFydCkge1xuICAgICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGludGVybmFsU2V0VmFsdWUodmFsdWU/OiBEYXRlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBsZXQgZWRpdGluZ0RhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodmFsdWUsIHRoaXMudHlwZSk7XG4gICAgICBsZXQgYXBwbHlDaGFuZ2VzID0gZmFsc2U7XG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMuX2VkaXRpbmdQYXJ0cykuZm9yRWFjaCgocGFydCkgPT4ge1xuICAgICAgICBpZiAoIXBhcnQuZW5hYmxlZCkge1xuICAgICAgICAgIGVkaXRpbmdEYXRlID0gZWRpdGluZ0RhdGUuc2V0KHBhcnQua2V5IGFzIFRpbWVVbml0LCBwYXJ0LmRlZmF1bHQpO1xuICAgICAgICAgIGFwcGx5Q2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGFwcGx5Q2hhbmdlcykge1xuICAgICAgICByZXR1cm4gZWRpdGluZ0RhdGUuZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgaW50ZXJuYWxWYWx1ZUNoYW5nZWQodmFsdWU/OiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh2YWx1ZSwgdGhpcy50eXBlKTtcbiAgICB9XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9lZGl0aW5nUGFydHMpLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAocGFydC50eXBlZFZhbHVlICE9IHBhcnQucGxhY2Vob2xkZXIpIHBhcnQudHlwZWRWYWx1ZSA9IHBhcnQucmVhbFZhbHVlKCk7XG4gICAgICB9IGVsc2UgcGFydC50eXBlZFZhbHVlID0gbnVsbDtcbiAgICB9KTtcbiAgICB0aGlzLl91cGRhdGVUZXh0KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgX2hhbmRsZU9uS2V5ZG93bkV2ZW50KGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBpZ25vcmUgPSAoKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG5cbiAgICBjb25zdCBpbnB1dCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgLy9cbiAgICBjb25zdCBvcmRlcmVkUGFydHMgPSB0aGlzLl9nZXRPcmRlcmVkUGFydHMoKTtcbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5hY3RpdmVQYXJ0ID8gdGhpcy5fZWRpdGluZ1BhcnRzW3RoaXMuYWN0aXZlUGFydF0gOiBvcmRlcmVkUGFydHNbMF07XG4gICAgY29uc3QgbmV4dFBhcnQgPSBwYXJ0ID8gb3JkZXJlZFBhcnRzW29yZGVyZWRQYXJ0cy5pbmRleE9mKHBhcnQpICsgMV0gOiBudWxsO1xuICAgIGNvbnN0IHByZXZQYXJ0ID0gcGFydCA/IG9yZGVyZWRQYXJ0c1tvcmRlcmVkUGFydHMuaW5kZXhPZihwYXJ0KSAtIDFdIDogbnVsbDtcbiAgICAvL1xuICAgIGNvbnN0IGdvTmV4dCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgIGlmIChuZXh0UGFydCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVBhcnQgPSBuZXh0UGFydC5rZXk7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvUHJldiA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgIGlmIChwcmV2UGFydCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVBhcnQgPSBwcmV2UGFydC5rZXk7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBMZWZ0IGFuZCBSaWdodCAgKioqKioqKioqKioqKiovXG4gICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93UmlnaHQnIHx8IGUuY29kZSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGlnbm9yZSgpO1xuICAgICAgZS5jb2RlID09PSAnQXJyb3dSaWdodCcgPyBnb05leHQoKSA6IGdvUHJldigpO1xuICAgIH0gZWxzZSBpZiAoKGUuY29kZSA9PT0gJ0Fycm93VXAnIHx8IGUuY29kZSA9PT0gJ0Fycm93RG93bicpICYmICFlLmN0cmxLZXkpIHtcbiAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBVcCBhbmQgRG93biAgKioqKioqKioqKioqKiovXG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgIGlnbm9yZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgY29uc3Qgc2lnbiA9IGUuY29kZSA9PT0gJ0Fycm93VXAnID8gKzEgOiAtMTtcbiAgICAgICAgdGhpcy5hY3RpdmVQYXJ0ID0gcGFydC5rZXk7XG4gICAgICAgIGxldCBuZXdWYWw6IEFYRGF0ZVRpbWUgPSB0aGlzLmVkaXRpbmdEYXRlT2JqLmFkZChwYXJ0LmtleSwgc2lnbik7XG4gICAgICAgIHRoaXMuX2VkaXRpbmdQYXJ0c1twYXJ0LmtleV0udHlwZWRWYWx1ZSA9IG5ld1ZhbC5mb3JtYXQodGhpcy5fZWRpdGluZ1BhcnRzW3BhcnQua2V5XS5wbGFjZWhvbGRlcik7XG4gICAgICAgIHRoaXMuX2VkaXRpbmdEYXRlT2JqID0gbmV3VmFsO1xuICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUuY29kZSA9PSAnQmFja3NwYWNlJyB8fCBlLmNvZGUgPT0gJ0RlbGV0ZScpIHtcbiAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBCYWNrc3BhY2UgICoqKioqKioqKioqKioqL1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQudmFsdWUpIHtcbiAgICAgICAgaWdub3JlKCk7XG4gICAgICAgIHRoaXMuX2VkaXRpbmdQYXJ0c1twYXJ0LmtleV0udHlwZWRWYWx1ZSA9IHRoaXMuX2VkaXRpbmdQYXJ0c1twYXJ0LmtleV0ucGxhY2Vob2xkZXI7XG4gICAgICAgIHRoaXMuX2RldGVjdFZhbHVlQ2hhbmdlcygpO1xuICAgICAgICBnb1ByZXYoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUuY29kZSA9PSAnVGFiJyB8fCBlLmNvZGUgPT0gJ1NwYWNlJykge1xuICAgICAgLyoqKioqKioqKioqKioqKiAgSGFuZGxlIEJhY2tzcGFjZSAgKioqKioqKioqKioqKiovXG4gICAgICBpZiAoaW5wdXQudmFsdWUpIHtcbiAgICAgICAgaWYgKCFlLnNoaWZ0S2V5ICYmIG5leHRQYXJ0KSB7XG4gICAgICAgICAgaWdub3JlKCk7XG4gICAgICAgICAgZ29OZXh0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5zaGlmdEtleSAmJiBwcmV2UGFydCkge1xuICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgIGdvUHJldigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLmtleT8udHJpbSgpICYmICFpc05hTihOdW1iZXIoZS5rZXkpKSkge1xuICAgICAgaWdub3JlKCk7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBuZXh0ID0gZmFsc2U7XG4gICAgICBjb25zdCBlZGl0aW5nID0gdGhpcy5fZWRpdGluZ1BhcnRzW3BhcnQua2V5XTtcbiAgICAgIC8vXG4gICAgICBzd2l0Y2ggKHBhcnQua2V5KSB7XG4gICAgICAgIGNhc2UgJ3llYXInOiB7XG4gICAgICAgICAgaWYgKGVkaXRpbmcucGxhY2Vob2xkZXIubGVuZ3RoID09IDIgJiYgdGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKFxuICAgICAgICAgICAgICAuLi50aGlzLmNhbGVuZGFyU2VydmljZS5ub3codGhpcy50eXBlKS5mb3JtYXQoJ3l5eXknKS5zdWJzdHJpbmcoMCwgMikuc3BsaXQoJycpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoIDwgNCkge1xuICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYCR7dGhpcy5faW5wdXRDaGFycy5qb2luKCcnKX0ke2Uua2V5fWA7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dENoYXJzLnB1c2goZS5rZXkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9ICgnMDAwMCcgKyBlZGl0aW5nLnR5cGVkVmFsdWUpLnNsaWNlKC00KTtcbiAgICAgICAgICBjb25zdCBudiA9IHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSk7XG4gICAgICAgICAgLy9pZiAobnYgPiAwKSB7XG4gICAgICAgICAgY29uc3QgbmV3VmFsID0gdGhpcy5lZGl0aW5nRGF0ZU9iai5zZXQoJ3llYXInLCBudik7XG4gICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gICAgICAgICAgLy99XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbW9udGgnOiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChlLmtleSk7XG4gICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkgPiAxKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICBpZiAobmV3U3RyID4gMTIpIHtcbiAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBuZXdTdHIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPVxuICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlPy5sZW5ndGggPT09IDEgPyAnMCcgKyBlZGl0aW5nLnR5cGVkVmFsdWUgOiBlZGl0aW5nLnR5cGVkVmFsdWU7XG4gICAgICAgICAgY29uc3QgbnYgPSBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpO1xuICAgICAgICAgIGlmIChudiA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuZWRpdGluZ0RhdGVPYmouc2V0KHBhcnQua2V5LCBudik7XG4gICAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IG5ld1ZhbDtcbiAgICAgICAgICAgIHRoaXMuX2RldGVjdFZhbHVlQ2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdkYXknOiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChlLmtleSk7XG4gICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkgPiAzKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICBpZiAobmV3U3RyID4gdGhpcy5fZWRpdGluZ0RhdGVPYmoubW9udGgudG90YWxEYXlzKSB7XG4gICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGAwJHtlLmtleX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gbmV3U3RyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID1cbiAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZT8ubGVuZ3RoID09PSAxID8gJzAnICsgZWRpdGluZy50eXBlZFZhbHVlIDogZWRpdGluZy50eXBlZFZhbHVlO1xuICAgICAgICAgIGNvbnN0IG52ID0gcGFyc2VJbnQoZWRpdGluZy50eXBlZFZhbHVlKTtcbiAgICAgICAgICBpZiAobnYgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLmVkaXRpbmdEYXRlT2JqLnNldChwYXJ0LmtleSwgbnYpO1xuICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnaG91cic6IHtcbiAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGUua2V5KTtcbiAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGAwJHtlLmtleX1gO1xuICAgICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSA+IDIpIHtcbiAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICBpZiAobmV3U3RyID4gMjMpIHtcbiAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBuZXdTdHIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPVxuICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlPy5sZW5ndGggPT09IDEgPyAnMCcgKyBlZGl0aW5nLnR5cGVkVmFsdWUgOiBlZGl0aW5nLnR5cGVkVmFsdWU7XG4gICAgICAgICAgY29uc3QgbmV3VmFsID0gdGhpcy5lZGl0aW5nRGF0ZU9iai5zZXQoJ2hvdXInLCBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpKTtcbiAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IG5ld1ZhbDtcbiAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dENoYXJzLnB1c2goZS5rZXkpO1xuICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpID4gNSkge1xuICAgICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgY29uc3QgbmV3U3RyID0gcGFyc2VJbnQoYCR7dGhpcy5faW5wdXRDaGFyc1swXX0ke2Uua2V5fWApO1xuICAgICAgICAgICAgaWYgKG5ld1N0ciA+IDU5KSB7XG4gICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGAwJHtlLmtleX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gbmV3U3RyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID1cbiAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZT8ubGVuZ3RoID09PSAxID8gJzAnICsgZWRpdGluZy50eXBlZFZhbHVlIDogZWRpdGluZy50eXBlZFZhbHVlO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuZWRpdGluZ0RhdGVPYmouc2V0KHBhcnQua2V5LCBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpKTtcbiAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IG5ld1ZhbDtcbiAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgIGdvTmV4dCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8qKioqKioqKioqKioqKiogIEVtaXQgRXZlbnQgICoqKioqKioqKioqKioqL1xuICAgIHN1cGVyLmVtaXRPbktleWRvd25FdmVudChlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSlcbiAgX2hhbmRsZUtleVVwRXZlbnQoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZVBhcnQpIHtcbiAgICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX2hhbmRsZUZvY3VzRXZlbnQoZTogRm9jdXNFdmVudCkge1xuICAgIC8vdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpO1xuICAgIHN1cGVyLmVtaXRPbkZvY3VzRXZlbnQoZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2hhbmRsZUJsdXJFdmVudChlOiBGb2N1c0V2ZW50KSB7XG4gICAgc3VwZXIuZW1pdE9uQmx1ckV2ZW50KGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9oYW5kbGVPbklucHV0Q2xpY2tFdmVudChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9kZXRlY3RQYXJ0QXRQb3NpdGlvbigpO1xuICAgIH0sIDApO1xuICAgIHRoaXMub25DbGljay5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLmdldEhvc3RFbGVtZW50KCksXG4gICAgICBuYXRpdmVFdmVudDogZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2RldGVjdFBhcnRBdFBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghaW5wdXQudmFsdWUpIHJldHVybjtcbiAgICBjb25zdCBzU3RhcnQgPSBpbnB1dC5zZWxlY3Rpb25FbmQgfHwgMDtcbiAgICBjb25zdCByZSA9IC9bYS16QS1aMC05XSsvZ2k7XG4gICAgY29uc3QgdmFsdWVQYXJ0cyA9IEFycmF5LmZyb20oaW5wdXQudmFsdWUubWF0Y2hBbGwocmUpKTtcbiAgICBjb25zdCBvcmRlcmVkUGFydHMgPSB0aGlzLl9nZXRPcmRlcmVkUGFydHMoKTtcbiAgICBjb25zdCBpbmRleCA9IHZhbHVlUGFydHMuZmluZEluZGV4KChjOiBhbnkpID0+IGMuaW5kZXggPD0gc1N0YXJ0ICYmIGMuaW5kZXggKyBjWzBdLmxlbmd0aCA+PSBzU3RhcnQpO1xuICAgIHRoaXMuYWN0aXZlUGFydCA9IG9yZGVyZWRQYXJ0c1tpbmRleF0ua2V5O1xuICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghaW5wdXQgfHwgIWlucHV0LnZhbHVlIHx8ICF0aGlzLmFjdGl2ZVBhcnQpIHJldHVybjtcbiAgICBjb25zdCBvcmRlcmVkUGFydHMgPSB0aGlzLl9nZXRPcmRlcmVkUGFydHMoKTtcbiAgICBjb25zdCBpbmRleCA9IG9yZGVyZWRQYXJ0cy5maW5kSW5kZXgoKGMpID0+IGMua2V5ID09IHRoaXMuYWN0aXZlUGFydCk7XG4gICAgY29uc3QgcmUgPSAvW2EtekEtWjAtOV0rL2dpO1xuICAgIGNvbnN0IHZhbHVlUGFydHMgPSBBcnJheS5mcm9tKGlucHV0LnZhbHVlLm1hdGNoQWxsKHJlKSk7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBBWFN0cmluZ1V0aWwuZ2V0V29yZEJvdW5kc0F0UG9zaXRpb24oaW5wdXQudmFsdWUsIHZhbHVlUGFydHNbaW5kZXhdPy5pbmRleCk7XG4gICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICBwcml2YXRlIF9kZXRlY3RWYWx1ZUNoYW5nZXMoKSB7XG4gICAgdGhpcy5jb21taXRWYWx1ZSh0aGlzLl9lZGl0aW5nRGF0ZU9iai5kYXRlLCB0cnVlKTtcbiAgfVxufVxuIiwiPGlucHV0ICNpbnB1dCBpZD1cImlucHV0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgYXV0b2NvcnJlY3Q9XCJvZmZcIiBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGNsYXNzPVwiYXgtaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCIgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5heC1zdGF0ZS1yZWFkb25seV09XCJyZWFkb25seVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZWFkb25seV09XCJ0cnVlXCIgW25nTW9kZWxdPVwiX2VkaXRpbmdUZXh0XCJcbiAgICAobW91c2V1cCk9XCJfaGFuZGxlT25JbnB1dENsaWNrRXZlbnQoJGV2ZW50KVwiIChibHVyKT1cIl9oYW5kbGVCbHVyRXZlbnQoJGV2ZW50KVwiIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNFdmVudCgkZXZlbnQpXCI+XG48bmctY29udGVudCBzZWxlY3Q9XCJheC12YWxpZGF0aW9uLXJ1bGVcIj5cbjwvbmctY29udGVudD4iXX0=