@acorex/components 6.5.70 → 6.5.90

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 (475) hide show
  1. package/README.md +7 -3
  2. package/esm2022/acorex-components.mjs +5 -0
  3. package/esm2022/index.mjs +158 -0
  4. package/esm2022/lib/accordion/accordion.component.mjs +45 -0
  5. package/esm2022/lib/accordion/accordion.module.mjs +20 -0
  6. package/esm2022/lib/base/base-page.class.mjs +95 -0
  7. package/esm2022/lib/base/components.class.mjs +17 -0
  8. package/esm2022/lib/base/element.class.mjs +301 -0
  9. package/esm2022/lib/base/events.class.mjs +17 -0
  10. package/esm2022/lib/button/button.component.mjs +74 -0
  11. package/esm2022/lib/button/button.module.mjs +21 -0
  12. package/esm2022/lib/calendar/calendar-box/calendar-box.component.mjs +426 -0
  13. package/esm2022/lib/calendar/calendar-box/calendar-box.module.mjs +22 -0
  14. package/esm2022/lib/calendar/scheduler/scheduler-views.property.mjs +59 -0
  15. package/esm2022/lib/calendar/scheduler/scheduler.class.mjs +16 -0
  16. package/esm2022/lib/calendar/scheduler/scheduler.component.mjs +226 -0
  17. package/esm2022/lib/calendar/scheduler/scheduler.module.mjs +68 -0
  18. package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +136 -0
  19. package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +37 -0
  20. package/esm2022/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +49 -0
  21. package/esm2022/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +102 -0
  22. package/esm2022/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +214 -0
  23. package/esm2022/lib/calendar/scheduler/views/scheduler-view.component.mjs +99 -0
  24. package/esm2022/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +85 -0
  25. package/esm2022/lib/checkbox/checkbox.component.mjs +102 -0
  26. package/esm2022/lib/checkbox/checkbox.module.mjs +20 -0
  27. package/esm2022/lib/color-picker/color-box/color-box.component.mjs +423 -0
  28. package/esm2022/lib/color-picker/color-picker.component.mjs +89 -0
  29. package/esm2022/lib/color-picker/color-picker.module.mjs +24 -0
  30. package/esm2022/lib/context-menu/context-menu.component.mjs +68 -0
  31. package/esm2022/lib/context-menu/context-menu.directive.mjs +146 -0
  32. package/esm2022/lib/context-menu/context-menu.module.mjs +20 -0
  33. package/esm2022/lib/data-filter/columns/filter-column-date.component.mjs +140 -0
  34. package/esm2022/lib/data-filter/columns/filter-column-number.component.mjs +119 -0
  35. package/esm2022/lib/data-filter/columns/filter-column-selection.component.mjs +75 -0
  36. package/esm2022/lib/data-filter/columns/filter-column-string.component.mjs +119 -0
  37. package/esm2022/lib/data-filter/filter-panel/filter-panel.component.mjs +267 -0
  38. package/esm2022/lib/data-filter/filter.class.mjs +46 -0
  39. package/esm2022/lib/data-filter/filter.module.mjs +88 -0
  40. package/esm2022/lib/data-filter/toolbar/filter-toolbar.component.mjs +168 -0
  41. package/esm2022/lib/data-list/core/data-list.component.mjs +37 -0
  42. package/esm2022/lib/data-list/list/list.component.mjs +134 -0
  43. package/esm2022/lib/data-list/list/list.module.mjs +22 -0
  44. package/esm2022/lib/data-list/list/toolbar-list-view.component.mjs +84 -0
  45. package/esm2022/lib/data-source/datasource.component.mjs +47 -0
  46. package/esm2022/lib/data-source/datasource.module.mjs +18 -0
  47. package/esm2022/lib/data-source/read-param.mjs +7 -0
  48. package/esm2022/lib/date-picker/date-picker.component.mjs +718 -0
  49. package/esm2022/lib/date-picker/date-picker.module.mjs +49 -0
  50. package/esm2022/lib/dialog/dialog.component.mjs +26 -0
  51. package/esm2022/lib/dialog/dialog.module.mjs +21 -0
  52. package/esm2022/lib/dialog/dialog.service.mjs +160 -0
  53. package/esm2022/lib/drawer/content.component.mjs +18 -0
  54. package/esm2022/lib/drawer/drawer-container.component.mjs +38 -0
  55. package/esm2022/lib/drawer/drawer.component.mjs +146 -0
  56. package/esm2022/lib/drawer/drawer.module.mjs +23 -0
  57. package/esm2022/lib/dropdown/dropdown.component.mjs +186 -0
  58. package/esm2022/lib/dropdown/dropdown.module.mjs +26 -0
  59. package/esm2022/lib/fieldset/fieldset.component.mjs +57 -0
  60. package/esm2022/lib/fieldset/fieldset.module.mjs +19 -0
  61. package/esm2022/lib/form-group/form-group.component.mjs +37 -0
  62. package/esm2022/lib/form-group/form-group.module.mjs +21 -0
  63. package/esm2022/lib/label/label.component.mjs +19 -0
  64. package/esm2022/lib/label/label.module.mjs +21 -0
  65. package/esm2022/lib/loading/loading-indicator.component.mjs +18 -0
  66. package/esm2022/lib/loading/loading-panel.component.mjs +45 -0
  67. package/esm2022/lib/loading/loading.module.mjs +21 -0
  68. package/esm2022/lib/loading/loading.service.mjs +47 -0
  69. package/esm2022/lib/menu/menu-item.component.mjs +50 -0
  70. package/esm2022/lib/menu/menu.component.mjs +98 -0
  71. package/esm2022/lib/menu/menu.module.mjs +22 -0
  72. package/esm2022/lib/menu/menu2.component.mjs +100 -0
  73. package/esm2022/lib/number-box/number-box.component.mjs +628 -0
  74. package/esm2022/lib/number-box/number-box.module.mjs +21 -0
  75. package/esm2022/lib/page/content.component.mjs +27 -0
  76. package/esm2022/lib/page/footer.component.mjs +19 -0
  77. package/esm2022/lib/page/page.component.mjs +57 -0
  78. package/esm2022/lib/page/page.module.mjs +22 -0
  79. package/esm2022/lib/panel-box/panel-box.component.mjs +87 -0
  80. package/esm2022/lib/panel-box/panel-box.module.mjs +19 -0
  81. package/esm2022/lib/password-box/password-box.component.mjs +32 -0
  82. package/esm2022/lib/password-box/password-box.module.mjs +23 -0
  83. package/esm2022/lib/popover/custom-cdk-overlay.service.mjs +50 -0
  84. package/esm2022/lib/popover/overlay.service.mjs +94 -0
  85. package/esm2022/lib/popover/popover.component.mjs +145 -0
  86. package/esm2022/lib/popover/popover.module.mjs +19 -0
  87. package/esm2022/lib/popup/popup.component.mjs +159 -0
  88. package/esm2022/lib/popup/popup.module.mjs +25 -0
  89. package/esm2022/lib/popup/popup.service.mjs +94 -0
  90. package/esm2022/lib/progress-bar/progress-bar.component.mjs +16 -0
  91. package/esm2022/lib/progress-bar/progress-bar.module.mjs +19 -0
  92. package/esm2022/lib/property-editor/editors/check-editor/check-editor.mjs +65 -0
  93. package/esm2022/lib/property-editor/editors/check-editor/check.module.mjs +22 -0
  94. package/esm2022/lib/property-editor/editors/color-editor/color.editor.mjs +41 -0
  95. package/esm2022/lib/property-editor/editors/color-editor/color.module.mjs +24 -0
  96. package/esm2022/lib/property-editor/editors/column-editor/column.editor.mjs +118 -0
  97. package/esm2022/lib/property-editor/editors/column-editor/column.module.mjs +32 -0
  98. package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +216 -0
  99. package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +76 -0
  100. package/esm2022/lib/property-editor/editors/date-editor/date.editor.mjs +87 -0
  101. package/esm2022/lib/property-editor/editors/date-editor/date.module.mjs +24 -0
  102. package/esm2022/lib/property-editor/editors/number-editor/number.editor.mjs +66 -0
  103. package/esm2022/lib/property-editor/editors/number-editor/number.module.mjs +24 -0
  104. package/esm2022/lib/property-editor/editors/range-editor/range.editor.mjs +145 -0
  105. package/esm2022/lib/property-editor/editors/range-editor/range.module.mjs +59 -0
  106. package/esm2022/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +76 -0
  107. package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +75 -0
  108. package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +25 -0
  109. package/esm2022/lib/property-editor/editors/selection-editor/selection-editor.mjs +73 -0
  110. package/esm2022/lib/property-editor/editors/selection-editor/selection.module.mjs +22 -0
  111. package/esm2022/lib/property-editor/editors/switch-editor/number.editor.mjs +30 -0
  112. package/esm2022/lib/property-editor/editors/switch-editor/number.module.mjs +25 -0
  113. package/esm2022/lib/property-editor/editors/text-editor/text.editor.mjs +36 -0
  114. package/esm2022/lib/property-editor/editors/text-editor/text.module.mjs +24 -0
  115. package/esm2022/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +35 -0
  116. package/esm2022/lib/property-editor/editors/textarea-editor/textarea.module.mjs +24 -0
  117. package/esm2022/lib/property-editor/editors/time-editor/time.editor.mjs +47 -0
  118. package/esm2022/lib/property-editor/editors/time-editor/time.module.mjs +24 -0
  119. package/esm2022/lib/property-editor/property-editor-renderer.directive.mjs +167 -0
  120. package/esm2022/lib/property-editor/property-editor.class.mjs +108 -0
  121. package/esm2022/lib/property-editor/property-editor.module.mjs +194 -0
  122. package/esm2022/lib/query-builder/query-builder-group.component.mjs +129 -0
  123. package/esm2022/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +177 -0
  124. package/esm2022/lib/query-builder/query-builder-rule.component.mjs +428 -0
  125. package/esm2022/lib/query-builder/query-builder.class.mjs +42 -0
  126. package/esm2022/lib/query-builder/query-builder.component.mjs +92 -0
  127. package/esm2022/lib/query-builder/query-builder.module.mjs +62 -0
  128. package/esm2022/lib/query-builder/query-builder.service.mjs +199 -0
  129. package/esm2022/lib/search-bar/search-bar.component.mjs +293 -0
  130. package/esm2022/lib/search-bar/search-bar.module.mjs +61 -0
  131. package/esm2022/lib/searchbox/searchbox.component.mjs +82 -0
  132. package/esm2022/lib/searchbox/searchbox.module.mjs +24 -0
  133. package/esm2022/lib/selectbox/selectbox.component.mjs +1025 -0
  134. package/esm2022/lib/selectbox/selectbox.module.mjs +44 -0
  135. package/esm2022/lib/selectbox/selectbox2.component.mjs +617 -0
  136. package/esm2022/lib/selection-list/selection-list.component.mjs +113 -0
  137. package/esm2022/lib/selection-list/selection-list.module.mjs +21 -0
  138. package/esm2022/lib/switch/switch.component.mjs +55 -0
  139. package/esm2022/lib/switch/switch.module.mjs +20 -0
  140. package/esm2022/lib/tab-page/tab-page-Renderer.component.mjs +75 -0
  141. package/esm2022/lib/tab-page/tab-page-host.component.mjs +124 -0
  142. package/esm2022/lib/tab-page/tab-page.module.mjs +21 -0
  143. package/esm2022/lib/tab-page/tab-page.service.mjs +158 -0
  144. package/esm2022/lib/tab-strip/tab-strip.component.mjs +38 -0
  145. package/esm2022/lib/tab-strip/tab-strip.module.mjs +19 -0
  146. package/esm2022/lib/tab-view/dynamic-tabs.directive.mjs +25 -0
  147. package/esm2022/lib/tab-view/tab-view.component.mjs +110 -0
  148. package/esm2022/lib/tab-view/tab-view.module.mjs +21 -0
  149. package/esm2022/lib/tab-view/tab.component.mjs +33 -0
  150. package/esm2022/lib/textarea/textarea.component.mjs +27 -0
  151. package/esm2022/lib/textarea/textarea.module.mjs +21 -0
  152. package/esm2022/lib/textbox/textbox.component.mjs +42 -0
  153. package/esm2022/lib/textbox/textbox.module.mjs +36 -0
  154. package/esm2022/lib/time-picker/time-picker.component.mjs +1104 -0
  155. package/esm2022/lib/time-picker/time-picker.module.mjs +34 -0
  156. package/esm2022/lib/toast/toast-message/toast-message.component.mjs +76 -0
  157. package/esm2022/lib/toast/toast-wrapper/toast-wrapper.component.mjs +13 -0
  158. package/esm2022/lib/toast/toast.module.mjs +21 -0
  159. package/esm2022/lib/toast/toast.service.mjs +45 -0
  160. package/esm2022/lib/toolbar/group-button/toolbar-group-button.component.mjs +77 -0
  161. package/esm2022/lib/toolbar/menu/toolbar-menu.component.mjs +62 -0
  162. package/esm2022/lib/toolbar/search/toolbar-search.component.mjs +56 -0
  163. package/esm2022/lib/toolbar/title/toolbar-title.component.mjs +37 -0
  164. package/esm2022/lib/toolbar/toolbar-item.mjs +4 -0
  165. package/esm2022/lib/toolbar/toolbar.component.mjs +13 -0
  166. package/esm2022/lib/toolbar/toolbar.module.mjs +40 -0
  167. package/esm2022/lib/tooltip/tooltip.directive.mjs +104 -0
  168. package/esm2022/lib/tooltip/tooltip.module.mjs +19 -0
  169. package/esm2022/lib/tree-side-menu/tree-side-menu.component.mjs +697 -0
  170. package/esm2022/lib/tree-side-menu/tree-side-menu.module.mjs +33 -0
  171. package/esm2022/lib/tree-view/tree-view.component.mjs +854 -0
  172. package/esm2022/lib/tree-view/tree-view.module.mjs +22 -0
  173. package/esm2022/lib/upload-file/upload-file.component.mjs +218 -0
  174. package/esm2022/lib/upload-file/upload-file.events.mjs +2 -0
  175. package/esm2022/lib/upload-file/upload-file.module.mjs +24 -0
  176. package/esm2022/lib/validation/validation-form.component.mjs +68 -0
  177. package/esm2022/lib/validation/validation-rule.widget.mjs +114 -0
  178. package/esm2022/lib/validation/validation.class.mjs +2 -0
  179. package/esm2022/lib/validation/validation.component.mjs +89 -0
  180. package/esm2022/lib/validation/validation.module.mjs +34 -0
  181. package/{fesm2020 → fesm2022}/acorex-components.mjs +3987 -3087
  182. package/fesm2022/acorex-components.mjs.map +1 -0
  183. package/lib/accordion/accordion.component.d.ts +1 -1
  184. package/lib/base/base-page.class.d.ts +2 -2
  185. package/lib/base/element.class.d.ts +6 -6
  186. package/lib/button/button.component.d.ts +1 -1
  187. package/lib/calendar/calendar-box/calendar-box.component.d.ts +6 -6
  188. package/lib/calendar/scheduler/scheduler-views.property.d.ts +2 -2
  189. package/lib/calendar/scheduler/scheduler.class.d.ts +1 -1
  190. package/lib/calendar/scheduler/scheduler.component.d.ts +1 -1
  191. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +1 -1
  192. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +1 -1
  193. package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +1 -1
  194. package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +1 -1
  195. package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +1 -1
  196. package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +1 -1
  197. package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +1 -1
  198. package/lib/checkbox/checkbox.component.d.ts +1 -1
  199. package/lib/color-picker/color-box/color-box.component.d.ts +1 -1
  200. package/lib/color-picker/color-picker.component.d.ts +1 -1
  201. package/lib/context-menu/context-menu.component.d.ts +1 -1
  202. package/lib/context-menu/context-menu.directive.d.ts +3 -3
  203. package/lib/data-filter/columns/filter-column-date.component.d.ts +1 -1
  204. package/lib/data-filter/columns/filter-column-number.component.d.ts +1 -1
  205. package/lib/data-filter/columns/filter-column-selection.component.d.ts +1 -1
  206. package/lib/data-filter/columns/filter-column-string.component.d.ts +1 -1
  207. package/lib/data-filter/filter-panel/filter-panel.component.d.ts +1 -1
  208. package/lib/data-filter/filter.class.d.ts +1 -1
  209. package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +1 -1
  210. package/lib/data-list/core/data-list.component.d.ts +1 -1
  211. package/lib/data-list/list/list.component.d.ts +1 -1
  212. package/lib/data-list/list/toolbar-list-view.component.d.ts +2 -2
  213. package/lib/data-source/datasource.component.d.ts +1 -1
  214. package/lib/date-picker/date-picker.component.d.ts +1 -1
  215. package/lib/date-picker/date-picker.module.d.ts +2 -2
  216. package/lib/dialog/dialog.component.d.ts +1 -1
  217. package/lib/drawer/content.component.d.ts +1 -1
  218. package/lib/drawer/drawer-container.component.d.ts +1 -1
  219. package/lib/drawer/drawer.component.d.ts +3 -3
  220. package/lib/dropdown/dropdown.component.d.ts +1 -1
  221. package/lib/fieldset/fieldset.component.d.ts +1 -1
  222. package/lib/form-group/form-group.component.d.ts +1 -1
  223. package/lib/label/label.component.d.ts +1 -1
  224. package/lib/loading/loading-indicator.component.d.ts +1 -1
  225. package/lib/loading/loading-panel.component.d.ts +1 -1
  226. package/lib/menu/menu-item.component.d.ts +1 -1
  227. package/lib/menu/menu.component.d.ts +1 -1
  228. package/lib/menu/menu2.component.d.ts +1 -1
  229. package/lib/number-box/number-box.component.d.ts +1 -1
  230. package/lib/page/content.component.d.ts +1 -1
  231. package/lib/page/footer.component.d.ts +1 -1
  232. package/lib/page/page.component.d.ts +1 -1
  233. package/lib/panel-box/panel-box.component.d.ts +1 -1
  234. package/lib/password-box/password-box.component.d.ts +1 -1
  235. package/lib/popover/popover.component.d.ts +1 -1
  236. package/lib/popup/popup.component.d.ts +1 -1
  237. package/lib/progress-bar/progress-bar.component.d.ts +1 -1
  238. package/lib/property-editor/editors/check-editor/check-editor.d.ts +1 -1
  239. package/lib/property-editor/editors/color-editor/color.editor.d.ts +1 -1
  240. package/lib/property-editor/editors/column-editor/column.editor.d.ts +1 -1
  241. package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +1 -1
  242. package/lib/property-editor/editors/date-editor/date.editor.d.ts +1 -1
  243. package/lib/property-editor/editors/number-editor/number.editor.d.ts +1 -1
  244. package/lib/property-editor/editors/range-editor/range.editor.d.ts +1 -1
  245. package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +1 -1
  246. package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +1 -1
  247. package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +1 -1
  248. package/lib/property-editor/editors/switch-editor/number.editor.d.ts +1 -1
  249. package/lib/property-editor/editors/text-editor/text.editor.d.ts +1 -1
  250. package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +1 -1
  251. package/lib/property-editor/editors/time-editor/time.editor.d.ts +1 -1
  252. package/lib/property-editor/property-editor-renderer.directive.d.ts +1 -1
  253. package/lib/property-editor/property-editor.class.d.ts +3 -3
  254. package/lib/query-builder/query-builder-group.component.d.ts +1 -1
  255. package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +1 -1
  256. package/lib/query-builder/query-builder-rule.component.d.ts +3 -3
  257. package/lib/query-builder/query-builder.class.d.ts +4 -4
  258. package/lib/query-builder/query-builder.component.d.ts +1 -1
  259. package/lib/search-bar/search-bar.component.d.ts +1 -1
  260. package/lib/searchbox/searchbox.component.d.ts +1 -1
  261. package/lib/selectbox/selectbox.component.d.ts +1 -1
  262. package/lib/selectbox/selectbox2.component.d.ts +1 -1
  263. package/lib/selection-list/selection-list.component.d.ts +2 -2
  264. package/lib/switch/switch.component.d.ts +1 -1
  265. package/lib/tab-page/tab-page-Renderer.component.d.ts +1 -1
  266. package/lib/tab-page/tab-page-host.component.d.ts +1 -1
  267. package/lib/tab-strip/tab-strip.component.d.ts +1 -1
  268. package/lib/tab-view/dynamic-tabs.directive.d.ts +1 -1
  269. package/lib/tab-view/tab-view.component.d.ts +1 -1
  270. package/lib/tab-view/tab.component.d.ts +1 -1
  271. package/lib/textarea/textarea.component.d.ts +1 -1
  272. package/lib/textbox/textbox.component.d.ts +1 -1
  273. package/lib/textbox/textbox.module.d.ts +2 -2
  274. package/lib/time-picker/time-picker.component.d.ts +1 -1
  275. package/lib/time-picker/time-picker.module.d.ts +2 -2
  276. package/lib/toast/toast-message/toast-message.component.d.ts +1 -1
  277. package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +1 -1
  278. package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +1 -1
  279. package/lib/toolbar/menu/toolbar-menu.component.d.ts +1 -1
  280. package/lib/toolbar/search/toolbar-search.component.d.ts +1 -1
  281. package/lib/toolbar/title/toolbar-title.component.d.ts +1 -1
  282. package/lib/toolbar/toolbar.component.d.ts +1 -1
  283. package/lib/tooltip/tooltip.directive.d.ts +1 -1
  284. package/lib/tree-side-menu/tree-side-menu.component.d.ts +1 -1
  285. package/lib/tree-view/tree-view.component.d.ts +1 -1
  286. package/lib/upload-file/upload-file.component.d.ts +1 -1
  287. package/lib/validation/validation-form.component.d.ts +1 -1
  288. package/lib/validation/validation-rule.widget.d.ts +1 -1
  289. package/lib/validation/validation.class.d.ts +1 -1
  290. package/lib/validation/validation.component.d.ts +1 -1
  291. package/package.json +15 -20
  292. package/acorex-components.d.ts +0 -5
  293. package/esm2020/acorex-components.mjs +0 -5
  294. package/esm2020/lib/accordion/accordion.component.mjs +0 -44
  295. package/esm2020/lib/accordion/accordion.module.mjs +0 -20
  296. package/esm2020/lib/base/base-page.class.mjs +0 -94
  297. package/esm2020/lib/base/components.class.mjs +0 -17
  298. package/esm2020/lib/base/element.class.mjs +0 -294
  299. package/esm2020/lib/base/events.class.mjs +0 -11
  300. package/esm2020/lib/button/button.component.mjs +0 -71
  301. package/esm2020/lib/button/button.module.mjs +0 -21
  302. package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +0 -413
  303. package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +0 -22
  304. package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +0 -54
  305. package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +0 -18
  306. package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +0 -213
  307. package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +0 -68
  308. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +0 -132
  309. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +0 -37
  310. package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +0 -47
  311. package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +0 -95
  312. package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +0 -204
  313. package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +0 -99
  314. package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +0 -77
  315. package/esm2020/lib/checkbox/checkbox.component.mjs +0 -98
  316. package/esm2020/lib/checkbox/checkbox.module.mjs +0 -20
  317. package/esm2020/lib/color-picker/color-box/color-box.component.mjs +0 -422
  318. package/esm2020/lib/color-picker/color-picker.component.mjs +0 -82
  319. package/esm2020/lib/color-picker/color-picker.module.mjs +0 -24
  320. package/esm2020/lib/context-menu/context-menu.component.mjs +0 -65
  321. package/esm2020/lib/context-menu/context-menu.directive.mjs +0 -135
  322. package/esm2020/lib/context-menu/context-menu.module.mjs +0 -20
  323. package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +0 -138
  324. package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +0 -117
  325. package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +0 -74
  326. package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +0 -117
  327. package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +0 -258
  328. package/esm2020/lib/data-filter/filter.class.mjs +0 -44
  329. package/esm2020/lib/data-filter/filter.module.mjs +0 -90
  330. package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +0 -166
  331. package/esm2020/lib/data-list/core/data-list.component.mjs +0 -40
  332. package/esm2020/lib/data-list/list/list.component.mjs +0 -124
  333. package/esm2020/lib/data-list/list/list.module.mjs +0 -22
  334. package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +0 -85
  335. package/esm2020/lib/data-source/datasource.component.mjs +0 -47
  336. package/esm2020/lib/data-source/datasource.module.mjs +0 -18
  337. package/esm2020/lib/data-source/read-param.mjs +0 -5
  338. package/esm2020/lib/date-picker/date-picker.component.mjs +0 -702
  339. package/esm2020/lib/date-picker/date-picker.module.mjs +0 -25
  340. package/esm2020/lib/dialog/dialog.component.mjs +0 -24
  341. package/esm2020/lib/dialog/dialog.module.mjs +0 -21
  342. package/esm2020/lib/dialog/dialog.service.mjs +0 -150
  343. package/esm2020/lib/drawer/content.component.mjs +0 -18
  344. package/esm2020/lib/drawer/drawer-container.component.mjs +0 -36
  345. package/esm2020/lib/drawer/drawer.component.mjs +0 -142
  346. package/esm2020/lib/drawer/drawer.module.mjs +0 -23
  347. package/esm2020/lib/dropdown/dropdown.component.mjs +0 -176
  348. package/esm2020/lib/dropdown/dropdown.module.mjs +0 -26
  349. package/esm2020/lib/fieldset/fieldset.component.mjs +0 -59
  350. package/esm2020/lib/fieldset/fieldset.module.mjs +0 -19
  351. package/esm2020/lib/form-group/form-group.component.mjs +0 -34
  352. package/esm2020/lib/form-group/form-group.module.mjs +0 -21
  353. package/esm2020/lib/label/label.component.mjs +0 -19
  354. package/esm2020/lib/label/label.module.mjs +0 -21
  355. package/esm2020/lib/loading/loading-indicator.component.mjs +0 -17
  356. package/esm2020/lib/loading/loading-panel.component.mjs +0 -44
  357. package/esm2020/lib/loading/loading.module.mjs +0 -21
  358. package/esm2020/lib/loading/loading.service.mjs +0 -45
  359. package/esm2020/lib/menu/menu-item.component.mjs +0 -47
  360. package/esm2020/lib/menu/menu.component.mjs +0 -86
  361. package/esm2020/lib/menu/menu.module.mjs +0 -22
  362. package/esm2020/lib/menu/menu2.component.mjs +0 -96
  363. package/esm2020/lib/number-box/number-box.component.mjs +0 -622
  364. package/esm2020/lib/number-box/number-box.module.mjs +0 -21
  365. package/esm2020/lib/page/content.component.mjs +0 -32
  366. package/esm2020/lib/page/footer.component.mjs +0 -19
  367. package/esm2020/lib/page/page.component.mjs +0 -53
  368. package/esm2020/lib/page/page.module.mjs +0 -22
  369. package/esm2020/lib/panel-box/panel-box.component.mjs +0 -88
  370. package/esm2020/lib/panel-box/panel-box.module.mjs +0 -19
  371. package/esm2020/lib/password-box/password-box.component.mjs +0 -31
  372. package/esm2020/lib/password-box/password-box.module.mjs +0 -23
  373. package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +0 -48
  374. package/esm2020/lib/popover/overlay.service.mjs +0 -91
  375. package/esm2020/lib/popover/popover.component.mjs +0 -133
  376. package/esm2020/lib/popover/popover.module.mjs +0 -19
  377. package/esm2020/lib/popup/popup.component.mjs +0 -147
  378. package/esm2020/lib/popup/popup.module.mjs +0 -25
  379. package/esm2020/lib/popup/popup.service.mjs +0 -93
  380. package/esm2020/lib/progress-bar/progress-bar.component.mjs +0 -19
  381. package/esm2020/lib/progress-bar/progress-bar.module.mjs +0 -19
  382. package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +0 -61
  383. package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +0 -22
  384. package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +0 -38
  385. package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +0 -24
  386. package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +0 -115
  387. package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +0 -32
  388. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +0 -211
  389. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +0 -78
  390. package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +0 -51
  391. package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +0 -24
  392. package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +0 -63
  393. package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +0 -24
  394. package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +0 -140
  395. package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +0 -61
  396. package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +0 -72
  397. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +0 -71
  398. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +0 -25
  399. package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +0 -69
  400. package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +0 -22
  401. package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +0 -29
  402. package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +0 -25
  403. package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +0 -32
  404. package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +0 -24
  405. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +0 -32
  406. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +0 -24
  407. package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +0 -43
  408. package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +0 -24
  409. package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +0 -157
  410. package/esm2020/lib/property-editor/property-editor.class.mjs +0 -102
  411. package/esm2020/lib/property-editor/property-editor.module.mjs +0 -196
  412. package/esm2020/lib/query-builder/query-builder-group.component.mjs +0 -124
  413. package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +0 -172
  414. package/esm2020/lib/query-builder/query-builder-rule.component.mjs +0 -399
  415. package/esm2020/lib/query-builder/query-builder.class.mjs +0 -20
  416. package/esm2020/lib/query-builder/query-builder.component.mjs +0 -87
  417. package/esm2020/lib/query-builder/query-builder.module.mjs +0 -62
  418. package/esm2020/lib/query-builder/query-builder.service.mjs +0 -197
  419. package/esm2020/lib/search-bar/search-bar.component.mjs +0 -286
  420. package/esm2020/lib/search-bar/search-bar.module.mjs +0 -63
  421. package/esm2020/lib/searchbox/searchbox.component.mjs +0 -79
  422. package/esm2020/lib/searchbox/searchbox.module.mjs +0 -24
  423. package/esm2020/lib/selectbox/selectbox.component.mjs +0 -961
  424. package/esm2020/lib/selectbox/selectbox.module.mjs +0 -44
  425. package/esm2020/lib/selectbox/selectbox2.component.mjs +0 -574
  426. package/esm2020/lib/selection-list/selection-list.component.mjs +0 -108
  427. package/esm2020/lib/selection-list/selection-list.module.mjs +0 -21
  428. package/esm2020/lib/switch/switch.component.mjs +0 -51
  429. package/esm2020/lib/switch/switch.module.mjs +0 -20
  430. package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +0 -71
  431. package/esm2020/lib/tab-page/tab-page-host.component.mjs +0 -114
  432. package/esm2020/lib/tab-page/tab-page.module.mjs +0 -21
  433. package/esm2020/lib/tab-page/tab-page.service.mjs +0 -160
  434. package/esm2020/lib/tab-strip/tab-strip.component.mjs +0 -36
  435. package/esm2020/lib/tab-strip/tab-strip.module.mjs +0 -19
  436. package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +0 -24
  437. package/esm2020/lib/tab-view/tab-view.component.mjs +0 -105
  438. package/esm2020/lib/tab-view/tab-view.module.mjs +0 -21
  439. package/esm2020/lib/tab-view/tab.component.mjs +0 -30
  440. package/esm2020/lib/textarea/textarea.component.mjs +0 -26
  441. package/esm2020/lib/textarea/textarea.module.mjs +0 -21
  442. package/esm2020/lib/textbox/textbox.component.mjs +0 -39
  443. package/esm2020/lib/textbox/textbox.module.mjs +0 -24
  444. package/esm2020/lib/time-picker/time-picker.component.mjs +0 -943
  445. package/esm2020/lib/time-picker/time-picker.module.mjs +0 -22
  446. package/esm2020/lib/toast/toast-message/toast-message.component.mjs +0 -74
  447. package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +0 -13
  448. package/esm2020/lib/toast/toast.module.mjs +0 -21
  449. package/esm2020/lib/toast/toast.service.mjs +0 -44
  450. package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +0 -78
  451. package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +0 -57
  452. package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +0 -54
  453. package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +0 -47
  454. package/esm2020/lib/toolbar/toolbar-item.mjs +0 -6
  455. package/esm2020/lib/toolbar/toolbar.component.mjs +0 -13
  456. package/esm2020/lib/toolbar/toolbar.module.mjs +0 -40
  457. package/esm2020/lib/tooltip/tooltip.directive.mjs +0 -100
  458. package/esm2020/lib/tooltip/tooltip.module.mjs +0 -19
  459. package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +0 -646
  460. package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +0 -35
  461. package/esm2020/lib/tree-view/tree-view.component.mjs +0 -775
  462. package/esm2020/lib/tree-view/tree-view.module.mjs +0 -22
  463. package/esm2020/lib/upload-file/upload-file.component.mjs +0 -208
  464. package/esm2020/lib/upload-file/upload-file.events.mjs +0 -2
  465. package/esm2020/lib/upload-file/upload-file.module.mjs +0 -24
  466. package/esm2020/lib/validation/validation-form.component.mjs +0 -65
  467. package/esm2020/lib/validation/validation-rule.widget.mjs +0 -111
  468. package/esm2020/lib/validation/validation.class.mjs +0 -2
  469. package/esm2020/lib/validation/validation.component.mjs +0 -89
  470. package/esm2020/lib/validation/validation.module.mjs +0 -34
  471. package/esm2020/public-api.mjs +0 -158
  472. package/fesm2015/acorex-components.mjs +0 -16012
  473. package/fesm2015/acorex-components.mjs.map +0 -1
  474. package/fesm2020/acorex-components.mjs.map +0 -1
  475. /package/{public-api.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,1104 @@
1
+ import { Component, ChangeDetectorRef, ElementRef, Input, ChangeDetectionStrategy, EventEmitter, Output, } from '@angular/core';
2
+ import { AXBaseTextComponent, AXValidatableComponent, } from '../base/element.class';
3
+ import { AXValueEvent } from '../base/events.class';
4
+ import { AXTranslator } from '@acorex/core';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "../button/button.component";
9
+ import * as i4 from "ngx-mask";
10
+ export class AXTimePickerItemChangedEvent {
11
+ minute;
12
+ second;
13
+ hour;
14
+ time;
15
+ }
16
+ export class AXTimePickerChangedEvent extends AXValueEvent {
17
+ }
18
+ export class AXTimePickerComponent extends AXBaseTextComponent {
19
+ cdr;
20
+ onValueChanged = new EventEmitter();
21
+ // @ViewChild('input', { static: true })
22
+ // @ContentChild('input', { static: true })
23
+ // input: ElementRef<HTMLInputElement>;
24
+ timeType;
25
+ type = 'HHmm';
26
+ showCurentTime = false;
27
+ clearDisabled = true;
28
+ HHmmss = [
29
+ /[0-2]/,
30
+ /[0-9]/,
31
+ ':',
32
+ /[0-5]/,
33
+ /[0-9]/,
34
+ ':',
35
+ /[0-5]/,
36
+ /[0-9]/,
37
+ ];
38
+ HHmm = [/[0-2]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
39
+ HH = [/[0-2]/, /[0-9]/];
40
+ hhmmss = [
41
+ /[0-1]/,
42
+ /[0-9]/,
43
+ ':',
44
+ /[0-5]/,
45
+ /[0-9]/,
46
+ ':',
47
+ /[0-5]/,
48
+ /[0-9]/,
49
+ ];
50
+ hhmm = [/[0-1]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
51
+ hh = [/[0-1]/, /[0-9]/];
52
+ // TODO: apply am pm from locale
53
+ hhmmssam = [
54
+ /[0-1]/,
55
+ /[0-9]/,
56
+ ':',
57
+ /[0-5]/,
58
+ /[0-9]/,
59
+ ':',
60
+ /[0-5]/,
61
+ /[0-9]/,
62
+ ' ',
63
+ /[a|p|ق|ب]/,
64
+ AXTranslator.get('dateTime.dayTime.m'),
65
+ ];
66
+ hhmmam = [
67
+ /[0-1]/,
68
+ /[0-9]/,
69
+ ':',
70
+ /[0-5]/,
71
+ /[0-9]/,
72
+ ' ',
73
+ /[a|p|ق|ب]/,
74
+ AXTranslator.get('dateTime.dayTime.m'),
75
+ ];
76
+ hham = [
77
+ /[0-1]/,
78
+ /[0-9]/,
79
+ ' ',
80
+ /[a|p|ق|ب]/,
81
+ AXTranslator.get('dateTime.dayTime.m'),
82
+ ];
83
+ textValue = '';
84
+ valueHam = '-- ' + AXTranslator.get('dateTime.dayTime.am');
85
+ valueMam = '--:-- ' + AXTranslator.get('dateTime.dayTime.am');
86
+ valueSam = '--:--:-- ' + AXTranslator.get('dateTime.dayTime.am');
87
+ _values;
88
+ get value() {
89
+ return this._values;
90
+ }
91
+ set value(v) {
92
+ if (v === '' ||
93
+ v == null ||
94
+ v === '--:--:--' ||
95
+ v === '--:--' ||
96
+ v === '--' ||
97
+ v === this.valueSam ||
98
+ v === this.valueMam ||
99
+ v === this.valueHam) {
100
+ this.clearDisabled = false;
101
+ const old = this._values;
102
+ switch (this.type) {
103
+ case 'HHmmss':
104
+ this.textValue = '--:--:--';
105
+ break;
106
+ case 'HHmm':
107
+ this.textValue = '--:--';
108
+ break;
109
+ case 'HH':
110
+ this.textValue = '--';
111
+ break;
112
+ case 'hhmmss':
113
+ this.textValue = '--:--:--';
114
+ break;
115
+ case 'hhmm':
116
+ this.textValue = '--:--';
117
+ break;
118
+ case 'hh':
119
+ this.textValue = '--';
120
+ break;
121
+ case 'hhmmssam':
122
+ this.textValue = this.valueSam;
123
+ break;
124
+ case 'hhmmam':
125
+ this.textValue = this.valueMam;
126
+ break;
127
+ case 'hham':
128
+ this.textValue = this.valueHam;
129
+ break;
130
+ }
131
+ this._values = null;
132
+ if (v !== old) {
133
+ this.valueChange.emit(null);
134
+ this.onValueChanged.emit({
135
+ component: this,
136
+ value: { hour: null, minute: null, second: null, time: null },
137
+ oldValue: { time: old },
138
+ htmlElement: this.ref.nativeElement,
139
+ });
140
+ }
141
+ }
142
+ else {
143
+ this.clearDisabled = true;
144
+ if (this._values && v) {
145
+ const old = this._values;
146
+ const ind1 = v.charAt(0);
147
+ const ind2 = v.charAt(1);
148
+ const ind3 = v.charAt(2);
149
+ const ind4 = v.charAt(3);
150
+ const ind5 = v.charAt(4);
151
+ const ind6 = v.charAt(5);
152
+ const ind7 = v.charAt(6);
153
+ const ind8 = v.charAt(7);
154
+ const ind9 = v.charAt(8);
155
+ const ind10 = v.charAt(9);
156
+ const indOld4 = old.charAt(9);
157
+ const indOld7 = old.charAt(9);
158
+ const indOld10 = old.charAt(9);
159
+ // handle hhmmssAm
160
+ if (ind1 === '-' &&
161
+ ind2 !== '-' &&
162
+ this.timeType.mask === this.hhmmssam) {
163
+ this.textValue =
164
+ '0' +
165
+ ind2 +
166
+ ind3 +
167
+ ind4 +
168
+ ind5 +
169
+ ind6 +
170
+ ind7 +
171
+ ind8 +
172
+ ind9 +
173
+ ind10 +
174
+ AXTranslator.get('dateTime.dayTime.m');
175
+ setTimeout(() => {
176
+ this.setCaretPosition(this.input.nativeElement, 2);
177
+ this.cursorPosition = 2;
178
+ }, 0);
179
+ }
180
+ if (ind4 === '-' &&
181
+ ind5 !== '-' &&
182
+ this.timeType.mask === this.hhmmssam) {
183
+ this.textValue =
184
+ ind1 +
185
+ ind2 +
186
+ ind3 +
187
+ '0' +
188
+ ind5 +
189
+ ind6 +
190
+ ind7 +
191
+ ind8 +
192
+ ind9 +
193
+ ind10 +
194
+ AXTranslator.get('dateTime.dayTime.m');
195
+ setTimeout(() => {
196
+ this.setCaretPosition(this.input.nativeElement, 5);
197
+ this.cursorPosition = 5;
198
+ }, 0);
199
+ }
200
+ if (ind7 === '-' &&
201
+ ind8 !== '-' &&
202
+ this.timeType.mask === this.hhmmssam) {
203
+ this.textValue =
204
+ ind1 +
205
+ ind2 +
206
+ ind3 +
207
+ ind4 +
208
+ ind5 +
209
+ ind6 +
210
+ '0' +
211
+ ind8 +
212
+ ind9 +
213
+ ind10 +
214
+ AXTranslator.get('dateTime.dayTime.m');
215
+ setTimeout(() => {
216
+ this.setCaretPosition(this.input.nativeElement, 8);
217
+ this.cursorPosition = 8;
218
+ }, 0);
219
+ }
220
+ if (indOld10 === '-' && this.timeType.mask === this.hhmmssam) {
221
+ this.textValue =
222
+ ind1 +
223
+ ind2 +
224
+ ind3 +
225
+ ind4 +
226
+ ind5 +
227
+ ind6 +
228
+ ind7 +
229
+ ind8 +
230
+ ind9 +
231
+ AXTranslator.get('dateTime.dayTime.am');
232
+ }
233
+ //
234
+ if (ind1 === '-' &&
235
+ ind2 !== '-' &&
236
+ this.timeType.mask === this.hhmmam) {
237
+ this.textValue =
238
+ '0' +
239
+ ind2 +
240
+ ind3 +
241
+ ind4 +
242
+ ind5 +
243
+ ind6 +
244
+ ind7 +
245
+ AXTranslator.get('dateTime.dayTime.m');
246
+ setTimeout(() => {
247
+ this.setCaretPosition(this.input.nativeElement, 2);
248
+ this.cursorPosition = 2;
249
+ }, 0);
250
+ }
251
+ if (ind4 === '-' &&
252
+ ind5 !== '-' &&
253
+ this.timeType.mask === this.hhmmam) {
254
+ this.textValue =
255
+ ind1 +
256
+ ind2 +
257
+ ind3 +
258
+ '0' +
259
+ ind5 +
260
+ ind6 +
261
+ ind7 +
262
+ AXTranslator.get('dateTime.dayTime.m');
263
+ setTimeout(() => {
264
+ this.setCaretPosition(this.input.nativeElement, 5);
265
+ this.cursorPosition = 5;
266
+ }, 0);
267
+ }
268
+ if (indOld7 === '-' && this.timeType.mask === this.hhmmam) {
269
+ this.textValue =
270
+ ind1 +
271
+ ind2 +
272
+ ind3 +
273
+ ind4 +
274
+ ind5 +
275
+ ind6 +
276
+ AXTranslator.get('dateTime.dayTime.am');
277
+ }
278
+ //
279
+ if (ind1 === '-' && ind2 !== '-' && this.timeType.mask === this.hham) {
280
+ this.textValue =
281
+ '0' + ind2 + ind3 + ind4 + AXTranslator.get('dateTime.dayTime.m');
282
+ setTimeout(() => {
283
+ this.setCaretPosition(this.input.nativeElement, 2);
284
+ this.cursorPosition = 2;
285
+ }, 0);
286
+ }
287
+ if (indOld4 === '-' && this.timeType.mask === this.hham) {
288
+ this.textValue =
289
+ ind1 + ind2 + ind3 + AXTranslator.get('dateTime.dayTime.am');
290
+ }
291
+ //
292
+ if (ind1 === '-' &&
293
+ ind2 !== '-' &&
294
+ (this.timeType.mask === this.hhmmss ||
295
+ this.timeType.mask === this.HHmmss)) {
296
+ this.textValue = '0' + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8;
297
+ setTimeout(() => {
298
+ this.setCaretPosition(this.input.nativeElement, 2);
299
+ this.cursorPosition = 2;
300
+ }, 0);
301
+ }
302
+ if (ind4 === '-' &&
303
+ ind5 !== '-' &&
304
+ (this.timeType.mask === this.hhmmss ||
305
+ this.timeType.mask === this.HHmmss)) {
306
+ this.textValue = ind1 + ind2 + ind3 + '0' + ind5 + ind6 + ind7 + ind8;
307
+ setTimeout(() => {
308
+ this.setCaretPosition(this.input.nativeElement, 6);
309
+ this.cursorPosition = 6;
310
+ }, 0);
311
+ }
312
+ if (ind7 === '-' &&
313
+ ind8 !== '-' &&
314
+ (this.timeType.mask === this.hhmmss ||
315
+ this.timeType.mask === this.HHmmss)) {
316
+ this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + '0' + ind8;
317
+ setTimeout(() => {
318
+ this.setCaretPosition(this.input.nativeElement, 9);
319
+ this.cursorPosition = 9;
320
+ }, 0);
321
+ }
322
+ //
323
+ if (ind1 === '-' &&
324
+ ind2 !== '-' &&
325
+ (this.timeType.mask === this.hhmm || this.timeType.mask === this.HHmm)) {
326
+ this.textValue = '0' + ind2 + ind3 + ind4 + ind5;
327
+ setTimeout(() => {
328
+ this.setCaretPosition(this.input.nativeElement, 2);
329
+ this.cursorPosition = 2;
330
+ }, 0);
331
+ }
332
+ if (ind4 === '-' &&
333
+ ind5 !== '-' &&
334
+ (this.timeType.mask === this.hhmm || this.timeType.mask === this.HHmm)) {
335
+ this.textValue = ind1 + ind2 + ind3 + '0' + ind5;
336
+ setTimeout(() => {
337
+ this.setCaretPosition(this.input.nativeElement, 5);
338
+ this.cursorPosition = 5;
339
+ }, 0);
340
+ }
341
+ //
342
+ if (ind1 === '-' &&
343
+ ind2 !== '-' &&
344
+ (this.timeType.mask === this.hh || this.timeType.mask === this.HH)) {
345
+ this.textValue = '0' + ind2;
346
+ setTimeout(() => {
347
+ this.setCaretPosition(this.input.nativeElement, 2);
348
+ this.cursorPosition = 2;
349
+ }, 0);
350
+ }
351
+ }
352
+ if (v !== this._values) {
353
+ const old = this._values;
354
+ this.textValue = v;
355
+ this._values = v && v.indexOf('-') === -1 ? v : null;
356
+ if (v.indexOf('-') === -1) {
357
+ this.valueChange.emit(v);
358
+ this.onValueChanged.emit({
359
+ component: this,
360
+ value: {
361
+ time: v,
362
+ hour: Number(v[0] + v[1]),
363
+ minute: v[3] &&
364
+ v[3] !== AXTranslator.get('dateTime.dayTime.a') &&
365
+ v[3] !== AXTranslator.get('dateTime.dayTime.p')
366
+ ? Number(v[3] + v[4])
367
+ : null,
368
+ second: v[6] &&
369
+ v[6] !== AXTranslator.get('dateTime.dayTime.a') &&
370
+ v[6] !== AXTranslator.get('dateTime.dayTime.p')
371
+ ? Number(v[6] + v[7])
372
+ : null,
373
+ },
374
+ oldValue: { time: old },
375
+ htmlElement: this.ref.nativeElement,
376
+ });
377
+ this.cdr.detectChanges();
378
+ this.clearValidationStyle(this.input.nativeElement);
379
+ }
380
+ }
381
+ }
382
+ }
383
+ cursorPosition = 0;
384
+ constructor(cdr, ref) {
385
+ super(cdr, ref);
386
+ this.cdr = cdr;
387
+ this.timeType = 'HHmm';
388
+ }
389
+ clearValue() {
390
+ this.clear();
391
+ this.handleInputFocus();
392
+ }
393
+ ngOnInit() {
394
+ switch (this.timeType) {
395
+ case 'HHmmss':
396
+ this.type = 'HHmmss';
397
+ this.timeType = "00:00:00";
398
+ this.textValue = this.value ? this.value : '--:--:--';
399
+ break;
400
+ case 'HHmm':
401
+ this.type = 'HHmm';
402
+ this.timeType = "00:00";
403
+ this.textValue = this.value ? this.value : '--:--';
404
+ break;
405
+ case 'HH':
406
+ this.type = 'HH';
407
+ this.timeType = "00";
408
+ this.textValue = this.value ? this.value : '--';
409
+ break;
410
+ case 'hhmmss':
411
+ this.type = 'hhmmss';
412
+ this.timeType = "00:00:00";
413
+ this.textValue = this.value ? this.value : '--:--:--';
414
+ break;
415
+ case 'hhmm':
416
+ this.type = 'hhmm';
417
+ this.timeType = "00:00";
418
+ this.textValue = this.value ? this.value : '--:--';
419
+ break;
420
+ case 'hh':
421
+ this.type = 'hh';
422
+ this.timeType = "00";
423
+ this.textValue = this.value ? this.value : '--';
424
+ break;
425
+ case 'hhmmssam':
426
+ this.type = 'hhmmssam';
427
+ this.timeType = "00:00:00aa";
428
+ this.textValue = this.value ? this.value : this.valueSam;
429
+ break;
430
+ case 'hhmmam':
431
+ this.type = 'hhmmam';
432
+ this.timeType = "00:00aa";
433
+ this.textValue = this.value ? this.value : this.valueMam;
434
+ break;
435
+ case 'hham':
436
+ this.type = 'hham';
437
+ this.timeType = "9haa";
438
+ this.textValue = this.value ? this.value : this.valueHam;
439
+ break;
440
+ default:
441
+ this.type = 'HHmm';
442
+ this.timeType = "00:00";
443
+ this.textValue = this.value ? this.value : '--:--';
444
+ break;
445
+ }
446
+ if (this.showCurentTime === true) {
447
+ const hour = new Date().getHours() > 10
448
+ ? new Date().getHours()
449
+ : '0' + new Date().getHours();
450
+ let amHour;
451
+ if (new Date().getHours() > 10) {
452
+ if (new Date().getHours() > 12) {
453
+ if (new Date().getHours() - 12 < 10) {
454
+ amHour = '0' + (new Date().getHours() - 12);
455
+ }
456
+ else {
457
+ amHour = new Date().getHours();
458
+ }
459
+ }
460
+ else {
461
+ amHour = new Date().getHours();
462
+ }
463
+ }
464
+ else {
465
+ amHour = '0' + new Date().getHours();
466
+ }
467
+ const min = new Date().getMinutes() > 9
468
+ ? new Date().getMinutes()
469
+ : '0' + new Date().getMinutes();
470
+ const sec = new Date().getSeconds() > 9
471
+ ? new Date().getSeconds()
472
+ : '0' + new Date().getSeconds();
473
+ if (this.type === 'hh' ||
474
+ this.type === 'hhmm' ||
475
+ this.type === 'hhmmss' ||
476
+ this.type === 'hhmmssam') {
477
+ if (hour >= 12) {
478
+ this.value =
479
+ amHour +
480
+ ':' +
481
+ min +
482
+ ':' +
483
+ sec +
484
+ ' ' +
485
+ AXTranslator.get('dateTime.dayTime.pm');
486
+ }
487
+ else {
488
+ this.value =
489
+ amHour +
490
+ ':' +
491
+ min +
492
+ ':' +
493
+ sec +
494
+ ' ' +
495
+ AXTranslator.get('dateTime.dayTime.am');
496
+ }
497
+ }
498
+ else if (this.type === 'hham') {
499
+ if (hour >= 12) {
500
+ this.value = amHour + ' ' + AXTranslator.get('dateTime.dayTime.pm');
501
+ }
502
+ else {
503
+ this.value = amHour + ' ' + AXTranslator.get('dateTime.dayTime.am');
504
+ }
505
+ }
506
+ else if (this.type === 'hhmmam') {
507
+ if (hour >= 12) {
508
+ this.value =
509
+ amHour + ':' + min + ' ' + AXTranslator.get('dateTime.dayTime.pm');
510
+ }
511
+ else {
512
+ this.value =
513
+ amHour + ':' + min + ' ' + AXTranslator.get('dateTime.dayTime.am');
514
+ }
515
+ }
516
+ else {
517
+ this.value = hour + ':' + min + ':' + sec;
518
+ }
519
+ }
520
+ }
521
+ onStartfocus() {
522
+ this.input.nativeElement.style.caretColor = 'transparent';
523
+ setTimeout(() => {
524
+ this.setCaretPosition(this.input.nativeElement, 0);
525
+ this.cursorPosition = 0;
526
+ this.input.nativeElement.style.caretColor = 'auto';
527
+ }, 0);
528
+ }
529
+ handleInputFocus() {
530
+ this.onStartfocus();
531
+ this.input.nativeElement.focus();
532
+ }
533
+ handleInputBlur(e) {
534
+ if (this.textValue.indexOf('-') !== -1) {
535
+ switch (this.type) {
536
+ case 'HHmmss':
537
+ this.textValue = '--:--:--';
538
+ break;
539
+ case 'HHmm':
540
+ this.textValue = '--:--';
541
+ break;
542
+ case 'HH':
543
+ this.textValue = '--';
544
+ break;
545
+ case 'hhmmss':
546
+ this.textValue = '--:--:--';
547
+ break;
548
+ case 'hhmm':
549
+ this.textValue = '--:--';
550
+ break;
551
+ case 'hh':
552
+ this.textValue = '--';
553
+ break;
554
+ case 'hhmmssam':
555
+ this.textValue = this.valueSam;
556
+ break;
557
+ case 'hhmmam':
558
+ this.textValue = this.valueMam;
559
+ break;
560
+ case 'hham':
561
+ this.textValue = this.valueHam;
562
+ break;
563
+ }
564
+ }
565
+ }
566
+ handleKeyPress(event) {
567
+ const inputChar = String.fromCharCode(event.charCode);
568
+ const firstChar = this.textValue.charAt(0);
569
+ const secondChar = this.textValue.charAt(1);
570
+ setTimeout(() => {
571
+ if (this.input.nativeElement.selectionStart ||
572
+ this.input.nativeElement.selectionStart === 0) {
573
+ this.cursorPosition = this.input.nativeElement.selectionStart;
574
+ // this.cursorPosition += 1 ;
575
+ }
576
+ }, 0);
577
+ if (firstChar === '2') {
578
+ if (secondChar === '' ||
579
+ this.textValue.charAt(1) >= '4' ||
580
+ this.cursorPosition < 3) {
581
+ if (inputChar >= '4') {
582
+ event.preventDefault();
583
+ }
584
+ }
585
+ }
586
+ if (this.timeType.mask === this.hhmmss ||
587
+ this.timeType.mask === this.hhmm ||
588
+ this.timeType.mask === this.hh ||
589
+ this.timeType.mask === this.hhmmssam ||
590
+ this.timeType.mask === this.hhmmam ||
591
+ this.timeType.mask === this.hham) {
592
+ if (firstChar === '1') {
593
+ if (secondChar === '' ||
594
+ this.textValue.charAt(1) >= '3' ||
595
+ this.cursorPosition < 3) {
596
+ if (inputChar >= '3') {
597
+ event.preventDefault();
598
+ }
599
+ }
600
+ }
601
+ }
602
+ if (inputChar === '-') {
603
+ event.preventDefault();
604
+ }
605
+ }
606
+ handleKeyUp(event) {
607
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
608
+ this.input.nativeElement.style.caretColor = 'auto';
609
+ event.preventDefault();
610
+ event.stopPropagation();
611
+ }
612
+ // up & down button
613
+ if (event.key === 'ArrowUp') {
614
+ this.setCaret();
615
+ }
616
+ if (event.key === 'ArrowDown') {
617
+ this.setCaret();
618
+ }
619
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
620
+ event.preventDefault();
621
+ return false;
622
+ }
623
+ // left & right Button
624
+ if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
625
+ if (this.input.nativeElement.selectionStart ||
626
+ this.input.nativeElement.selectionStart === 0) {
627
+ this.cursorPosition = this.input.nativeElement.selectionStart;
628
+ }
629
+ }
630
+ // home button
631
+ if (event.key === 'Home') {
632
+ this.cursorPosition = 0;
633
+ }
634
+ // end button
635
+ if (event.key === 'End') {
636
+ if (this.timeType.mask === this.hhmmssam ||
637
+ this.timeType.mask === this.hhmmam ||
638
+ this.timeType.mask === this.hham) {
639
+ if (this.timeType.mask === this.hhmmssam) {
640
+ this.cursorPosition = 9;
641
+ setTimeout(() => {
642
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
643
+ this.input.nativeElement.style.caretColor = 'auto';
644
+ }, 0);
645
+ }
646
+ if (this.timeType.mask === this.hhmmam) {
647
+ this.cursorPosition = 6;
648
+ setTimeout(() => {
649
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
650
+ this.input.nativeElement.style.caretColor = 'auto';
651
+ }, 0);
652
+ }
653
+ if (this.timeType.mask === this.hham) {
654
+ this.cursorPosition = 3;
655
+ setTimeout(() => {
656
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
657
+ this.input.nativeElement.style.caretColor = 'auto';
658
+ }, 0);
659
+ }
660
+ }
661
+ else {
662
+ this.cursorPosition = this.textValue.length;
663
+ }
664
+ }
665
+ // backspace Control
666
+ if (event.key === 'Backspace') {
667
+ const ind1 = this.textValue.charAt(0);
668
+ const ind2 = this.textValue.charAt(1);
669
+ const ind3 = this.textValue.charAt(2);
670
+ const ind4 = this.textValue.charAt(3);
671
+ const ind5 = this.textValue.charAt(4);
672
+ const ind6 = this.textValue.charAt(5);
673
+ const ind7 = this.textValue.charAt(6);
674
+ const ind8 = this.textValue.charAt(7);
675
+ const ind9 = this.textValue.charAt(8);
676
+ const ind10 = this.textValue.charAt(9);
677
+ if (this.timeType.mask === this.hhmmssam) {
678
+ if (ind10 === '-') {
679
+ this.textValue =
680
+ ind1 +
681
+ ind2 +
682
+ ind3 +
683
+ ind4 +
684
+ ind5 +
685
+ ind6 +
686
+ ind7 +
687
+ ind8 +
688
+ ind9 +
689
+ AXTranslator.get('dateTime.dayTime.am');
690
+ setTimeout(() => {
691
+ this.setCaretPosition(this.input.nativeElement, 0);
692
+ this.cursorPosition = 0;
693
+ }, 0);
694
+ }
695
+ }
696
+ if (this.timeType.mask === this.hhmmam) {
697
+ if (ind7 === '-') {
698
+ this.textValue =
699
+ ind1 +
700
+ ind2 +
701
+ ind3 +
702
+ ind4 +
703
+ ind5 +
704
+ ind6 +
705
+ AXTranslator.get('dateTime.dayTime.am');
706
+ setTimeout(() => {
707
+ this.setCaretPosition(this.input.nativeElement, 0);
708
+ this.cursorPosition = 0;
709
+ }, 0);
710
+ }
711
+ }
712
+ if (this.timeType.mask === this.hham) {
713
+ if (ind4 === '-') {
714
+ this.textValue =
715
+ ind1 + ind2 + ind3 + AXTranslator.get('dateTime.dayTime.am');
716
+ setTimeout(() => {
717
+ this.setCaretPosition(this.input.nativeElement, 0);
718
+ this.cursorPosition = 0;
719
+ }, 0);
720
+ }
721
+ }
722
+ if (this.textValue.length <= 0) {
723
+ this.cursorPosition = 0;
724
+ }
725
+ else {
726
+ this.cursorPosition -= 1;
727
+ }
728
+ }
729
+ }
730
+ handleKeyDown(event) {
731
+ if (event.key === 'End') {
732
+ if (this.timeType.mask === this.hhmmssam ||
733
+ this.timeType.mask === this.hhmmam ||
734
+ this.timeType.mask === this.hham) {
735
+ this.input.nativeElement.style.caretColor = 'transparent';
736
+ }
737
+ else {
738
+ this.input.nativeElement.style.caretColor = 'auto';
739
+ }
740
+ }
741
+ let newValue = this.textValue;
742
+ const ind1 = newValue.charAt(0);
743
+ const ind2 = newValue.charAt(1);
744
+ const ind3 = this.textValue.charAt(2);
745
+ const ind4 = this.textValue.charAt(3);
746
+ const ind5 = this.textValue.charAt(4);
747
+ const ind6 = this.textValue.charAt(5);
748
+ const ind7 = this.textValue.charAt(6);
749
+ const ind8 = this.textValue.charAt(7);
750
+ const ind9 = this.textValue.charAt(8);
751
+ const ind10 = this.textValue.charAt(9);
752
+ const ind11 = this.textValue.charAt(10);
753
+ // up key
754
+ if (event.key === 'ArrowUp') {
755
+ // hour
756
+ if (this.cursorPosition <= 2) {
757
+ const hourind = ind1 + ind2;
758
+ const newHour = +hourind + 1;
759
+ newValue = newHour.toString();
760
+ if (this.timeType.mask === this.hhmmss ||
761
+ this.timeType.mask === this.hhmm ||
762
+ this.timeType.mask === this.hh ||
763
+ this.timeType.mask === this.hhmmssam ||
764
+ this.timeType.mask === this.hhmmam ||
765
+ this.timeType.mask === this.hham) {
766
+ if (hourind === '--') {
767
+ newValue = '0';
768
+ }
769
+ if (ind1 !== '-' && hourind === ind1 + '-') {
770
+ newValue = '0';
771
+ }
772
+ if (ind2 !== '-' && hourind === '-' + ind2) {
773
+ newValue = '0';
774
+ }
775
+ if (+newValue > 12) {
776
+ newValue = '01';
777
+ }
778
+ else if (+newValue < 10) {
779
+ newValue = '0' + newValue;
780
+ }
781
+ }
782
+ else {
783
+ if (hourind === '--') {
784
+ newValue = '0';
785
+ }
786
+ if (ind1 !== '-' && hourind === ind1 + '-') {
787
+ newValue = '0';
788
+ }
789
+ if (ind2 !== '-' && hourind === '-' + ind2) {
790
+ newValue = '0';
791
+ }
792
+ if (+newValue > 23) {
793
+ newValue = '00';
794
+ }
795
+ else if (+newValue < 10) {
796
+ newValue = '0' + newValue;
797
+ }
798
+ }
799
+ const afterHourind = ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
800
+ const hour = newValue.toString() + afterHourind;
801
+ this.textValue = hour;
802
+ }
803
+ // minute
804
+ if (this.cursorPosition >= 3 && this.cursorPosition <= 5) {
805
+ const hourind = ind4 + ind5;
806
+ const newHour = +hourind + 1;
807
+ newValue = newHour.toString();
808
+ if (hourind === '--') {
809
+ newValue = '0';
810
+ }
811
+ if (ind4 !== '-' && hourind === ind4 + '-') {
812
+ newValue = '0';
813
+ }
814
+ if (ind5 !== '-' && hourind === '-' + ind5) {
815
+ newValue = '0';
816
+ }
817
+ if (+newValue > 59) {
818
+ newValue = '00';
819
+ }
820
+ else if (+newValue < 10) {
821
+ newValue = '0' + newValue;
822
+ }
823
+ const beforeHourind = ind1 + ind2 + ind3;
824
+ const afterHourind = ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
825
+ const minute = beforeHourind + newValue.toString() + afterHourind;
826
+ this.textValue = minute;
827
+ }
828
+ // second
829
+ if (this.cursorPosition >= 6 && this.cursorPosition <= 8) {
830
+ const secondind = ind7 + ind8;
831
+ const newSecond = +secondind + 1;
832
+ newValue = newSecond.toString();
833
+ if (secondind === '--') {
834
+ newValue = '0';
835
+ }
836
+ if (ind7 !== '-' && secondind === ind7 + '-') {
837
+ newValue = '0';
838
+ }
839
+ if (ind8 !== '-' && secondind === '-' + ind8) {
840
+ newValue = '0';
841
+ }
842
+ if (+newValue > 59) {
843
+ newValue = '00';
844
+ }
845
+ else if (+newValue < 10) {
846
+ newValue = '0' + newValue;
847
+ }
848
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
849
+ const afterHourind = ind9 + ind10 + ind11;
850
+ const second = beforeHourind + newValue.toString() + afterHourind;
851
+ this.textValue = second;
852
+ }
853
+ // type am/PM
854
+ if (this.timeType.mask === this.hhmmssam) {
855
+ if (this.cursorPosition > 8) {
856
+ let typeind = ind10.toString();
857
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9;
858
+ const afterHourind = ind11;
859
+ if (ind10 === AXTranslator.get('dateTime.dayTime.p')) {
860
+ typeind = AXTranslator.get('dateTime.dayTime.a');
861
+ }
862
+ else if (ind10 === AXTranslator.get('dateTime.dayTime.a')) {
863
+ typeind = AXTranslator.get('dateTime.dayTime.p');
864
+ }
865
+ this.textValue = beforeHourind + typeind + afterHourind;
866
+ }
867
+ }
868
+ if (this.timeType.mask === this.hhmmam) {
869
+ if (this.cursorPosition >= 6) {
870
+ let typeind = ind7.toString();
871
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
872
+ const afterHourind = ind8;
873
+ if (ind7 === AXTranslator.get('dateTime.dayTime.p')) {
874
+ typeind = AXTranslator.get('dateTime.dayTime.a');
875
+ }
876
+ else if (ind7 === AXTranslator.get('dateTime.dayTime.a')) {
877
+ typeind = AXTranslator.get('dateTime.dayTime.p');
878
+ }
879
+ this.textValue = beforeHourind + typeind + afterHourind;
880
+ }
881
+ }
882
+ if (this.timeType.mask === this.hham) {
883
+ if (this.cursorPosition >= 3) {
884
+ let typeind2 = ind4.toString();
885
+ const beforeHourind = ind1 + ind2 + ind3;
886
+ const afterHourind = ind5;
887
+ if (ind4 === AXTranslator.get('dateTime.dayTime.p')) {
888
+ typeind2 = AXTranslator.get('dateTime.dayTime.a');
889
+ }
890
+ else if (ind4 === AXTranslator.get('dateTime.dayTime.a')) {
891
+ typeind2 = AXTranslator.get('dateTime.dayTime.p');
892
+ }
893
+ this.textValue = beforeHourind + typeind2 + afterHourind;
894
+ }
895
+ }
896
+ }
897
+ // key down
898
+ if (event.key === 'ArrowDown') {
899
+ // hour
900
+ if (this.cursorPosition <= 2) {
901
+ const hourind = ind1 + ind2;
902
+ const newHour = +hourind - 1;
903
+ newValue = newHour.toString();
904
+ if (this.timeType.mask === this.hhmmss ||
905
+ this.timeType.mask === this.hhmm ||
906
+ this.timeType.mask === this.hh ||
907
+ this.timeType.mask === this.hhmmssam ||
908
+ this.timeType.mask === this.hhmmam ||
909
+ this.timeType.mask === this.hham) {
910
+ if (hourind === '--') {
911
+ newValue = '0';
912
+ }
913
+ if (ind1 !== '-' && hourind === ind1 + '-') {
914
+ newValue = '0';
915
+ }
916
+ if (ind2 !== '-' && hourind === '-' + ind2) {
917
+ newValue = '0';
918
+ }
919
+ if (+newValue < 1) {
920
+ newValue = '12';
921
+ }
922
+ else if (+newValue < 10) {
923
+ newValue = '0' + newValue;
924
+ }
925
+ }
926
+ else {
927
+ if (hourind === '--') {
928
+ newValue = '0';
929
+ }
930
+ if (ind1 !== '-' && hourind === ind1 + '-') {
931
+ newValue = '0';
932
+ }
933
+ if (ind2 !== '-' && hourind === '-' + ind2) {
934
+ newValue = '0';
935
+ }
936
+ if (+newValue < 0) {
937
+ newValue = '23';
938
+ }
939
+ else if (+newValue < 10) {
940
+ newValue = '0' + newValue;
941
+ }
942
+ }
943
+ const afterHourIndex = ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
944
+ const hour = newValue.toString() + afterHourIndex;
945
+ this.textValue = hour;
946
+ }
947
+ // minute
948
+ if (this.cursorPosition >= 3 && this.cursorPosition <= 5) {
949
+ const minuteind = ind4 + ind5;
950
+ const newMinute = +minuteind - 1;
951
+ newValue = newMinute.toString();
952
+ if (minuteind === '--') {
953
+ newValue = '0';
954
+ }
955
+ if (ind4 !== '-' && minuteind === ind4 + '-') {
956
+ newValue = '0';
957
+ }
958
+ if (ind5 !== '-' && minuteind === '-' + ind5) {
959
+ newValue = '0';
960
+ }
961
+ if (minuteind === '--') {
962
+ newValue = '0';
963
+ }
964
+ if (+newValue < 0) {
965
+ newValue = '59';
966
+ }
967
+ else if (+newValue < 10) {
968
+ newValue = '0' + newValue;
969
+ }
970
+ const beforeMinuteIndex = ind1 + ind2 + ind3;
971
+ const afterMinuteIndex = ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
972
+ const minute = beforeMinuteIndex + newValue.toString() + afterMinuteIndex;
973
+ this.textValue = minute;
974
+ }
975
+ // second
976
+ if (this.cursorPosition >= 6 && this.cursorPosition <= 8) {
977
+ const secondIndex = ind7 + ind8;
978
+ const newSecond = +secondIndex - 1;
979
+ newValue = newSecond.toString();
980
+ if (secondIndex === '--') {
981
+ newValue = '0';
982
+ }
983
+ if (ind7 !== '-' && secondIndex === ind7 + '-') {
984
+ newValue = '0';
985
+ }
986
+ if (ind8 !== '-' && secondIndex === '-' + ind8) {
987
+ newValue = '0';
988
+ }
989
+ if (secondIndex === '--') {
990
+ newValue = '0';
991
+ }
992
+ if (+newValue < 0) {
993
+ newValue = '59';
994
+ }
995
+ else if (+newValue < 10) {
996
+ newValue = '0' + newValue;
997
+ }
998
+ const beforesecondIndex = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
999
+ const aftersecondIndex = ind9 + ind10 + ind11;
1000
+ const second = beforesecondIndex + newValue.toString() + aftersecondIndex;
1001
+ this.textValue = second;
1002
+ }
1003
+ // type
1004
+ if (this.timeType.mask === this.hhmmssam) {
1005
+ if (this.cursorPosition > 8) {
1006
+ let typeind = ind10.toString();
1007
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9;
1008
+ const afterHourind = ind11;
1009
+ if (ind10 === AXTranslator.get('dateTime.dayTime.p')) {
1010
+ typeind = AXTranslator.get('dateTime.dayTime.a');
1011
+ }
1012
+ else if (ind10 === AXTranslator.get('dateTime.dayTime.a')) {
1013
+ typeind = AXTranslator.get('dateTime.dayTime.p');
1014
+ }
1015
+ this.textValue = beforeHourind + typeind + afterHourind;
1016
+ }
1017
+ }
1018
+ if (this.timeType.mask === this.hhmmam) {
1019
+ if (this.cursorPosition >= 6) {
1020
+ let typeind = ind7.toString();
1021
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
1022
+ const afterHourind = ind8;
1023
+ if (ind7 === AXTranslator.get('dateTime.dayTime.p')) {
1024
+ typeind = AXTranslator.get('dateTime.dayTime.a');
1025
+ }
1026
+ else if (ind7 === AXTranslator.get('dateTime.dayTime.a')) {
1027
+ typeind = AXTranslator.get('dateTime.dayTime.p');
1028
+ }
1029
+ this.textValue = beforeHourind + typeind + afterHourind;
1030
+ }
1031
+ }
1032
+ if (this.timeType.mask === this.hham) {
1033
+ if (this.cursorPosition >= 3) {
1034
+ let typeind2 = ind4.toString();
1035
+ const beforeHourind = ind1 + ind2 + ind3;
1036
+ const afterHourind = ind5;
1037
+ //TO DO this is wrong check index
1038
+ if (ind4 === AXTranslator.get('dateTime.dayTime.p')) {
1039
+ typeind2 = AXTranslator.get('dateTime.dayTime.a');
1040
+ }
1041
+ else if (ind4 === AXTranslator.get('dateTime.dayTime.a')) {
1042
+ typeind2 = AXTranslator.get('dateTime.dayTime.p');
1043
+ }
1044
+ this.textValue = beforeHourind + typeind2 + afterHourind;
1045
+ }
1046
+ }
1047
+ }
1048
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
1049
+ this.input.nativeElement.style.caretColor = 'transparent';
1050
+ event.preventDefault();
1051
+ event.stopPropagation();
1052
+ return false;
1053
+ }
1054
+ if (event.key === 'Delete') {
1055
+ event.preventDefault();
1056
+ }
1057
+ }
1058
+ handleClick(event) {
1059
+ if (this.input.nativeElement.selectionStart ||
1060
+ this.input.nativeElement.selectionStart === 0) {
1061
+ this.cursorPosition = this.input.nativeElement.selectionStart;
1062
+ }
1063
+ }
1064
+ doGetCaretPosition(ctrl) {
1065
+ let CaretPos = 0;
1066
+ if (ctrl.selectionStart || ctrl.selectionStart === 0) {
1067
+ CaretPos = ctrl.selectionStart;
1068
+ return CaretPos;
1069
+ }
1070
+ }
1071
+ setCaretPosition(ctrl, pos) {
1072
+ if (ctrl.setSelectionRange) {
1073
+ ctrl.focus();
1074
+ ctrl.setSelectionRange(pos, pos);
1075
+ }
1076
+ else if (ctrl.createTextRange) {
1077
+ const range = ctrl.createTextRange();
1078
+ range.collapse(true);
1079
+ range.moveEnd('character', pos);
1080
+ range.moveStart('character', pos);
1081
+ range.select();
1082
+ }
1083
+ }
1084
+ setCaret() {
1085
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
1086
+ }
1087
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: AXTimePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1088
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: AXTimePickerComponent, selector: "ax-time-picker", inputs: { timeType: "timeType", showCurentTime: "showCurentTime" }, outputs: { onValueChanged: "onValueChanged" }, host: { styleAttribute: "width: 100%" }, providers: [
1089
+ { provide: AXValidatableComponent, useExisting: AXTimePickerComponent },
1090
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"ax form-item\" [class.disabled]=\"disabled\" [attr.id]=\"uid\" #fc>\r\n <div class=\"ax items-wrapper\">\r\n <ng-content select=\"[start]\"> </ng-content>\r\n <i class=\"form-item-icon {{ icon }}\" *ngIf=\"icon\"></i>\r\n </div>\r\n <div class=\"content\" #content>\r\n <div class=\"ax form-control input {{ size }}\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\"\r\n [class.icon]=\"icon\">\r\n <input #input type=\"text\" class=\"ax {{ size }}\" [mask]=\"timeType\" [(ngModel)]=\"textValue\"\r\n placeholder=\"{{ placeholder }}\" [readonly]=\"readonly\" [disabled]=\"disabled\" [ngClass]=\"setTextAlign()\"\r\n [class.clear]=\"value && allowClear\" (focus)=\"handleInputFocus()\" (blur)=\"handleInputBlur($event)\"\r\n (keypress)=\"handleKeyPress($event)\" (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\"\r\n (click)=\"handleClick($event)\" />\r\n </div>\r\n </div>\r\n <div class=\"ax items-wrapper\">\r\n <ax-button *ngIf=\"value && allowClear\" icon=\"far fa-times\" type=\"danger blank\" (click)=\"clear()\"\r\n [disabled]=\"disabled\" [tabIndex]=\"-1\"></ax-button>\r\n <ng-content select=\"[end]\"> </ng-content>\r\n </div>\r\n</div>\r\n<!-- [textMask]=\"{mask: mask , showMask:showMask , guid: maskGuid , keepCharPositions: maskKeepCharPositions}\" -->\r\n<!-- <input #input id=\"timePickerValue\" [textMask]=\"timeType\" type=\"text\" [(ngModel)]=\"value\" (keypress)='handleKeyPress($event)'\r\n (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\"> -->", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["type", "icon", "submitBehavior", "cancelBehavior", "block", "loading", "selected"] }, { kind: "directive", type: i4.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1091
+ }
1092
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: AXTimePickerComponent, decorators: [{
1093
+ type: Component,
1094
+ args: [{ selector: 'ax-time-picker', changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [
1095
+ { provide: AXValidatableComponent, useExisting: AXTimePickerComponent },
1096
+ ], template: "<div class=\"ax form-item\" [class.disabled]=\"disabled\" [attr.id]=\"uid\" #fc>\r\n <div class=\"ax items-wrapper\">\r\n <ng-content select=\"[start]\"> </ng-content>\r\n <i class=\"form-item-icon {{ icon }}\" *ngIf=\"icon\"></i>\r\n </div>\r\n <div class=\"content\" #content>\r\n <div class=\"ax form-control input {{ size }}\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\"\r\n [class.icon]=\"icon\">\r\n <input #input type=\"text\" class=\"ax {{ size }}\" [mask]=\"timeType\" [(ngModel)]=\"textValue\"\r\n placeholder=\"{{ placeholder }}\" [readonly]=\"readonly\" [disabled]=\"disabled\" [ngClass]=\"setTextAlign()\"\r\n [class.clear]=\"value && allowClear\" (focus)=\"handleInputFocus()\" (blur)=\"handleInputBlur($event)\"\r\n (keypress)=\"handleKeyPress($event)\" (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\"\r\n (click)=\"handleClick($event)\" />\r\n </div>\r\n </div>\r\n <div class=\"ax items-wrapper\">\r\n <ax-button *ngIf=\"value && allowClear\" icon=\"far fa-times\" type=\"danger blank\" (click)=\"clear()\"\r\n [disabled]=\"disabled\" [tabIndex]=\"-1\"></ax-button>\r\n <ng-content select=\"[end]\"> </ng-content>\r\n </div>\r\n</div>\r\n<!-- [textMask]=\"{mask: mask , showMask:showMask , guid: maskGuid , keepCharPositions: maskKeepCharPositions}\" -->\r\n<!-- <input #input id=\"timePickerValue\" [textMask]=\"timeType\" type=\"text\" [(ngModel)]=\"value\" (keypress)='handleKeyPress($event)'\r\n (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\"> -->" }]
1097
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { onValueChanged: [{
1098
+ type: Output
1099
+ }], timeType: [{
1100
+ type: Input
1101
+ }], showCurentTime: [{
1102
+ type: Input
1103
+ }] } });
1104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLEtBQUssRUFFTCx1QkFBdUIsRUFDdkIsWUFBWSxFQUNaLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHNCQUFzQixHQUN2QixNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7QUFFNUMsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxNQUFNLENBQVU7SUFDaEIsTUFBTSxDQUFVO0lBQ2hCLElBQUksQ0FBVTtJQUNkLElBQUksQ0FBUztDQUNkO0FBQ0QsTUFBTSxPQUFPLHdCQUF5QixTQUFRLFlBQTBDO0NBQUk7QUFXNUYsTUFBTSxPQUFPLHFCQUNYLFNBQVEsbUJBQW1CO0lBK1pMO0lBNVp0QixjQUFjLEdBQ1osSUFBSSxZQUFZLEVBQTRCLENBQUM7SUFFL0Msd0NBQXdDO0lBQ3hDLDJDQUEyQztJQUMzQyx1Q0FBdUM7SUFNdkMsUUFBUSxDQUFNO0lBRWQsSUFBSSxHQUFXLE1BQU0sQ0FBQztJQUV0QixjQUFjLEdBQVksS0FBSyxDQUFDO0lBRWhDLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFDOUIsTUFBTSxHQUFRO1FBQ1osT0FBTztRQUNQLE9BQU87UUFDUCxHQUFH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Q0FBQztJQUN2RSxDQUFDO3VHQXZwQ1UscUJBQXFCOzJGQUFyQixxQkFBcUIscU1BSnJCO1lBQ1QsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFO1NBQ3hFLGlEQ25DSCw2bERBdUJzRzs7MkZEY3pGLHFCQUFxQjtrQkFUakMsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBRVQsdUJBQXVCLENBQUMsTUFBTSxRQUN6QyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsYUFDbkI7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyx1QkFBdUIsRUFBRTtxQkFDeEU7aUlBTUQsY0FBYztzQkFEYixNQUFNO2dCQVlQLFFBQVE7c0JBRFAsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dCxcclxuICBDb250ZW50Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQVhCYXNlVGV4dENvbXBvbmVudCxcclxuICBBWFZhbGlkYXRhYmxlQ29tcG9uZW50LFxyXG59IGZyb20gJy4uL2Jhc2UvZWxlbWVudC5jbGFzcyc7XHJcbmltcG9ydCB7IF8gfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IEFYVmFsdWVFdmVudCB9IGZyb20gJy4uL2Jhc2UvZXZlbnRzLmNsYXNzJztcclxuaW1wb3J0IHsgQVhUcmFuc2xhdG9yIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBWFRpbWVQaWNrZXJJdGVtQ2hhbmdlZEV2ZW50IHtcclxuICBtaW51dGU/OiBudW1iZXI7XHJcbiAgc2Vjb25kPzogbnVtYmVyO1xyXG4gIGhvdXI/OiBudW1iZXI7XHJcbiAgdGltZTogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBBWFRpbWVQaWNrZXJDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBBWFZhbHVlRXZlbnQ8QVhUaW1lUGlja2VySXRlbUNoYW5nZWRFdmVudD4geyB9XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F4LXRpbWUtcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGhvc3Q6IHsgc3R5bGU6ICd3aWR0aDogMTAwJScgfSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHsgcHJvdmlkZTogQVhWYWxpZGF0YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYVGltZVBpY2tlckNvbXBvbmVudCB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBWFRpbWVQaWNrZXJDb21wb25lbnRcclxuICBleHRlbmRzIEFYQmFzZVRleHRDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25WYWx1ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWFRpbWVQaWNrZXJDaGFuZ2VkRXZlbnQ+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhUaW1lUGlja2VyQ2hhbmdlZEV2ZW50PigpO1xyXG5cclxuICAvLyBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgLy8gQENvbnRlbnRDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIC8vIGlucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG5cclxuXHJcblxyXG5cclxuICBASW5wdXQoKVxyXG4gIHRpbWVUeXBlOiBhbnk7XHJcblxyXG4gIHR5cGU6IHN0cmluZyA9ICdISG1tJztcclxuICBASW5wdXQoKVxyXG4gIHNob3dDdXJlbnRUaW1lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNsZWFyRGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEhIbW1zczogYW55ID0gW1xyXG4gICAgL1swLTJdLyxcclxuICAgIC9bMC05XS8sXHJcbiAgICAnOicsXHJcbiAgICAvWzAtNV0vLFxyXG4gICAgL1swLTldLyxcclxuICAgICc6JyxcclxuICAgIC9bMC01XS8sXHJcbiAgICAvWzAtOV0vLFxyXG4gIF07XHJcbiAgSEhtbTogYW55ID0gWy9bMC0yXS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldL107XHJcbiAgSEg6IGFueSA9IFsvWzAtMl0vLCAvWzAtOV0vXTtcclxuICBoaG1tc3M6IGFueSA9IFtcclxuICAgIC9bMC0xXS8sXHJcbiAgICAvWzAtOV0vLFxyXG4gICAgJzonLFxyXG4gICAgL1swLTVdLyxcclxuICAgIC9bMC05XS8sXHJcbiAgICAnOicsXHJcbiAgICAvWzAtNV0vLFxyXG4gICAgL1swLTldLyxcclxuICBdO1xyXG4gIGhobW06IGFueSA9IFsvWzAtMV0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xyXG4gIGhoOiBhbnkgPSBbL1swLTFdLywgL1swLTldL107XHJcbiAgLy8gVE9ETzogYXBwbHkgYW0gcG0gZnJvbSBsb2NhbGVcclxuICBoaG1tc3NhbTogYW55ID0gW1xyXG4gICAgL1swLTFdLyxcclxuICAgIC9bMC05XS8sXHJcbiAgICAnOicsXHJcbiAgICAvWzAtNV0vLFxyXG4gICAgL1swLTldLyxcclxuICAgICc6JyxcclxuICAgIC9bMC01XS8sXHJcbiAgICAvWzAtOV0vLFxyXG4gICAgJyAnLFxyXG4gICAgL1thfHB82YJ82KhdLyxcclxuICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpLFxyXG4gIF07XHJcbiAgaGhtbWFtOiBhbnkgPSBbXHJcbiAgICAvWzAtMV0vLFxyXG4gICAgL1swLTldLyxcclxuICAgICc6JyxcclxuICAgIC9bMC01XS8sXHJcbiAgICAvWzAtOV0vLFxyXG4gICAgJyAnLFxyXG4gICAgL1thfHB82YJ82KhdLyxcclxuICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpLFxyXG4gIF07XHJcbiAgaGhhbTogYW55ID0gW1xyXG4gICAgL1swLTFdLyxcclxuICAgIC9bMC05XS8sXHJcbiAgICAnICcsXHJcbiAgICAvW2F8cHzZgnzYqF0vLFxyXG4gICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyksXHJcbiAgXTtcclxuICB0ZXh0VmFsdWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICB2YWx1ZUhhbTogc3RyaW5nID0gJy0tICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XHJcbiAgdmFsdWVNYW06IHN0cmluZyA9ICctLTotLSAnICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xyXG4gIHZhbHVlU2FtOiBzdHJpbmcgPSAnLS06LS06LS0gJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcclxuXHJcbiAgcHJpdmF0ZSBfdmFsdWVzOiBzdHJpbmc7XHJcbiAgcHVibGljIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcclxuICB9XHJcbiAgcHVibGljIHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcclxuICAgIGlmIChcclxuICAgICAgdiA9PT0gJycgfHxcclxuICAgICAgdiA9PSBudWxsIHx8XHJcbiAgICAgIHYgPT09ICctLTotLTotLScgfHxcclxuICAgICAgdiA9PT0gJy0tOi0tJyB8fFxyXG4gICAgICB2ID09PSAnLS0nIHx8XHJcbiAgICAgIHYgPT09IHRoaXMudmFsdWVTYW0gfHxcclxuICAgICAgdiA9PT0gdGhpcy52YWx1ZU1hbSB8fFxyXG4gICAgICB2ID09PSB0aGlzLnZhbHVlSGFtXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jbGVhckRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICBjb25zdCBvbGQgPSB0aGlzLl92YWx1ZXM7XHJcbiAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnSEhtbXNzJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tOi0tJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ0hIbW0nOlxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnLS06LS0nO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnSEgnOlxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnLS0nO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnaGhtbXNzJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tOi0tJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2hobW0nOlxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnLS06LS0nO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnaGgnOlxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnLS0nO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnaGhtbXNzYW0nOlxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlU2FtO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnaGhtbWFtJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZU1hbTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2hoYW0nOlxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlSGFtO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX3ZhbHVlcyA9IG51bGw7XHJcbiAgICAgIGlmICh2ICE9PSBvbGQpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobnVsbCk7XHJcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICAgIHZhbHVlOiB7IGhvdXI6IG51bGwsIG1pbnV0ZTogbnVsbCwgc2Vjb25kOiBudWxsLCB0aW1lOiBudWxsIH0sXHJcbiAgICAgICAgICBvbGRWYWx1ZTogeyB0aW1lOiBvbGQgfSxcclxuICAgICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsZWFyRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5fdmFsdWVzICYmIHYpIHtcclxuICAgICAgICBjb25zdCBvbGQgPSB0aGlzLl92YWx1ZXM7XHJcbiAgICAgICAgY29uc3QgaW5kMSA9IHYuY2hhckF0KDApO1xyXG4gICAgICAgIGNvbnN0IGluZDIgPSB2LmNoYXJBdCgxKTtcclxuICAgICAgICBjb25zdCBpbmQzID0gdi5jaGFyQXQoMik7XHJcbiAgICAgICAgY29uc3QgaW5kNCA9IHYuY2hhckF0KDMpO1xyXG4gICAgICAgIGNvbnN0IGluZDUgPSB2LmNoYXJBdCg0KTtcclxuICAgICAgICBjb25zdCBpbmQ2ID0gdi5jaGFyQXQoNSk7XHJcbiAgICAgICAgY29uc3QgaW5kNyA9IHYuY2hhckF0KDYpO1xyXG4gICAgICAgIGNvbnN0IGluZDggPSB2LmNoYXJBdCg3KTtcclxuICAgICAgICBjb25zdCBpbmQ5ID0gdi5jaGFyQXQoOCk7XHJcbiAgICAgICAgY29uc3QgaW5kMTAgPSB2LmNoYXJBdCg5KTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5kT2xkNCA9IG9sZC5jaGFyQXQoOSk7XHJcbiAgICAgICAgY29uc3QgaW5kT2xkNyA9IG9sZC5jaGFyQXQoOSk7XHJcbiAgICAgICAgY29uc3QgaW5kT2xkMTAgPSBvbGQuY2hhckF0KDkpO1xyXG5cclxuICAgICAgICAvLyBoYW5kbGUgaGhtbXNzQW1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBpbmQxID09PSAnLScgJiZcclxuICAgICAgICAgIGluZDIgIT09ICctJyAmJlxyXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XHJcbiAgICAgICAgICAgICcwJyArXHJcbiAgICAgICAgICAgIGluZDIgK1xyXG4gICAgICAgICAgICBpbmQzICtcclxuICAgICAgICAgICAgaW5kNCArXHJcbiAgICAgICAgICAgIGluZDUgK1xyXG4gICAgICAgICAgICBpbmQ2ICtcclxuICAgICAgICAgICAgaW5kNyArXHJcbiAgICAgICAgICAgIGluZDggK1xyXG4gICAgICAgICAgICBpbmQ5ICtcclxuICAgICAgICAgICAgaW5kMTAgK1xyXG4gICAgICAgICAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLm0nKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAyKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaW5kNCA9PT0gJy0nICYmXHJcbiAgICAgICAgICBpbmQ1ICE9PSAnLScgJiZcclxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxyXG4gICAgICAgICAgICBpbmQxICtcclxuICAgICAgICAgICAgaW5kMiArXHJcbiAgICAgICAgICAgIGluZDMgK1xyXG4gICAgICAgICAgICAnMCcgK1xyXG4gICAgICAgICAgICBpbmQ1ICtcclxuICAgICAgICAgICAgaW5kNiArXHJcbiAgICAgICAgICAgIGluZDcgK1xyXG4gICAgICAgICAgICBpbmQ4ICtcclxuICAgICAgICAgICAgaW5kOSArXHJcbiAgICAgICAgICAgIGluZDEwICtcclxuICAgICAgICAgICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgNSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA1O1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGluZDcgPT09ICctJyAmJlxyXG4gICAgICAgICAgaW5kOCAhPT0gJy0nICYmXHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW1cclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cclxuICAgICAgICAgICAgaW5kMSArXHJcbiAgICAgICAgICAgIGluZDIgK1xyXG4gICAgICAgICAgICBpbmQzICtcclxuICAgICAgICAgICAgaW5kNCArXHJcbiAgICAgICAgICAgIGluZDUgK1xyXG4gICAgICAgICAgICBpbmQ2ICtcclxuICAgICAgICAgICAgJzAnICtcclxuICAgICAgICAgICAgaW5kOCArXHJcbiAgICAgICAgICAgIGluZDkgK1xyXG4gICAgICAgICAgICBpbmQxMCArXHJcbiAgICAgICAgICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gODtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kT2xkMTAgPT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0pIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cclxuICAgICAgICAgICAgaW5kMSArXHJcbiAgICAgICAgICAgIGluZDIgK1xyXG4gICAgICAgICAgICBpbmQzICtcclxuICAgICAgICAgICAgaW5kNCArXHJcbiAgICAgICAgICAgIGluZDUgK1xyXG4gICAgICAgICAgICBpbmQ2ICtcclxuICAgICAgICAgICAgaW5kNyArXHJcbiAgICAgICAgICAgIGluZDggK1xyXG4gICAgICAgICAgICBpbmQ5ICtcclxuICAgICAgICAgICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBpbmQxID09PSAnLScgJiZcclxuICAgICAgICAgIGluZDIgIT09ICctJyAmJlxyXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxyXG4gICAgICAgICAgICAnMCcgK1xyXG4gICAgICAgICAgICBpbmQyICtcclxuICAgICAgICAgICAgaW5kMyArXHJcbiAgICAgICAgICAgIGluZDQgK1xyXG4gICAgICAgICAgICBpbmQ1ICtcclxuICAgICAgICAgICAgaW5kNiArXHJcbiAgICAgICAgICAgIGluZDcgK1xyXG4gICAgICAgICAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLm0nKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAyKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaW5kNCA9PT0gJy0nICYmXHJcbiAgICAgICAgICBpbmQ1ICE9PSAnLScgJiZcclxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW1cclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cclxuICAgICAgICAgICAgaW5kMSArXHJcbiAgICAgICAgICAgIGluZDIgK1xyXG4gICAgICAgICAgICBpbmQzICtcclxuICAgICAgICAgICAgJzAnICtcclxuICAgICAgICAgICAgaW5kNSArXHJcbiAgICAgICAgICAgIGluZDYgK1xyXG4gICAgICAgICAgICBpbmQ3ICtcclxuICAgICAgICAgICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgNSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA1O1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmRPbGQ3ID09PSAnLScgJiYgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxyXG4gICAgICAgICAgICBpbmQxICtcclxuICAgICAgICAgICAgaW5kMiArXHJcbiAgICAgICAgICAgIGluZDMgK1xyXG4gICAgICAgICAgICBpbmQ0ICtcclxuICAgICAgICAgICAgaW5kNSArXHJcbiAgICAgICAgICAgIGluZDYgK1xyXG4gICAgICAgICAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1xyXG4gICAgICAgIGlmIChpbmQxID09PSAnLScgJiYgaW5kMiAhPT0gJy0nICYmIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XHJcbiAgICAgICAgICAgICcwJyArIGluZDIgKyBpbmQzICsgaW5kNCArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDIpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMjtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kT2xkNCA9PT0gJy0nICYmIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIGluZDEgKyBpbmQyICsgaW5kMyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaW5kMSA9PT0gJy0nICYmXHJcbiAgICAgICAgICBpbmQyICE9PSAnLScgJiZcclxuICAgICAgICAgICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8XHJcbiAgICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5ISG1tc3MpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcwJyArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgaW5kNyArIGluZDg7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgMik7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAyO1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGluZDQgPT09ICctJyAmJlxyXG4gICAgICAgICAgaW5kNSAhPT0gJy0nICYmXHJcbiAgICAgICAgICAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zcyB8fFxyXG4gICAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEhtbXNzKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBpbmQxICsgaW5kMiArIGluZDMgKyAnMCcgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4O1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDYpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gNjtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBpbmQ3ID09PSAnLScgJiZcclxuICAgICAgICAgIGluZDggIT09ICctJyAmJlxyXG4gICAgICAgICAgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3MgfHxcclxuICAgICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLkhIbW1zcylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgJzAnICsgaW5kODtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCA5KTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDk7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaW5kMSA9PT0gJy0nICYmXHJcbiAgICAgICAgICBpbmQyICE9PSAnLScgJiZcclxuICAgICAgICAgICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fCB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEhtbSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJzAnICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAyKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaW5kNCA9PT0gJy0nICYmXHJcbiAgICAgICAgICBpbmQ1ICE9PSAnLScgJiZcclxuICAgICAgICAgICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fCB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEhtbSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgJzAnICsgaW5kNTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCA1KTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDU7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaW5kMSA9PT0gJy0nICYmXHJcbiAgICAgICAgICBpbmQyICE9PSAnLScgJiZcclxuICAgICAgICAgICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGggfHwgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLkhIKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnMCcgKyBpbmQyO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDIpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMjtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodiAhPT0gdGhpcy5fdmFsdWVzKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkID0gdGhpcy5fdmFsdWVzO1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdjtcclxuICAgICAgICB0aGlzLl92YWx1ZXMgPSB2ICYmIHYuaW5kZXhPZignLScpID09PSAtMSA/IHYgOiBudWxsO1xyXG4gICAgICAgIGlmICh2LmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2KTtcclxuICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgICAgICB0aW1lOiB2LFxyXG4gICAgICAgICAgICAgIGhvdXI6IE51bWJlcih2WzBdICsgdlsxXSksXHJcbiAgICAgICAgICAgICAgbWludXRlOlxyXG4gICAgICAgICAgICAgICAgdlszXSAmJlxyXG4gICAgICAgICAgICAgICAgICB2WzNdICE9PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSAmJlxyXG4gICAgICAgICAgICAgICAgICB2WzNdICE9PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKVxyXG4gICAgICAgICAgICAgICAgICA/IE51bWJlcih2WzNdICsgdls0XSlcclxuICAgICAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgICAgICAgIHNlY29uZDpcclxuICAgICAgICAgICAgICAgIHZbNl0gJiZcclxuICAgICAgICAgICAgICAgICAgdls2XSAhPT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJykgJiZcclxuICAgICAgICAgICAgICAgICAgdls2XSAhPT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJylcclxuICAgICAgICAgICAgICAgICAgPyBOdW1iZXIodls2XSArIHZbN10pXHJcbiAgICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb2xkVmFsdWU6IHsgdGltZTogb2xkIH0sXHJcbiAgICAgICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjdXJzb3JQb3NpdGlvbjogbnVtYmVyID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHJlZjogRWxlbWVudFJlZikge1xyXG4gICAgc3VwZXIoY2RyLCByZWYpO1xyXG5cclxuICAgIHRoaXMudGltZVR5cGUgPSAnSEhtbSc7XHJcbiAgfVxyXG4gIGNsZWFyVmFsdWUoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICB0aGlzLmhhbmRsZUlucHV0Rm9jdXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3dpdGNoICh0aGlzLnRpbWVUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ0hIbW1zcyc6XHJcbiAgICAgICAgdGhpcy50eXBlID0gJ0hIbW1zcyc7XHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IFwiMDA6MDA6MDBcIlxyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiAnLS06LS06LS0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdISG1tJzpcclxuICAgICAgICB0aGlzLnR5cGUgPSAnSEhtbSc7XHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IFwiMDA6MDBcIlxyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiAnLS06LS0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdISCc6XHJcbiAgICAgICAgdGhpcy50eXBlID0gJ0hIJztcclxuICAgICAgICB0aGlzLnRpbWVUeXBlID0gXCIwMFwiXHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2hobW1zcyc6XHJcbiAgICAgICAgdGhpcy50eXBlID0gJ2hobW1zcyc7XHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IFwiMDA6MDA6MDBcIlxyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiAnLS06LS06LS0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdoaG1tJzpcclxuICAgICAgICB0aGlzLnR5cGUgPSAnaGhtbSc7XHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IFwiMDA6MDBcIlxyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiAnLS06LS0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdoaCc6XHJcbiAgICAgICAgdGhpcy50eXBlID0gJ2hoJztcclxuICAgICAgICB0aGlzLnRpbWVUeXBlID0gXCIwMFwiXHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2hobW1zc2FtJzpcclxuICAgICAgICB0aGlzLnR5cGUgPSAnaGhtbXNzYW0nO1xyXG4gICAgICAgIHRoaXMudGltZVR5cGUgPSBcIjAwOjAwOjAwYWFcIlxyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiB0aGlzLnZhbHVlU2FtO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdoaG1tYW0nOlxyXG4gICAgICAgIHRoaXMudHlwZSA9ICdoaG1tYW0nO1xyXG4gICAgICAgIHRoaXMudGltZVR5cGUgPSBcIjAwOjAwYWFcIlxyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiB0aGlzLnZhbHVlTWFtO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaGhhbSc6XHJcbiAgICAgICAgdGhpcy50eXBlID0gJ2hoYW0nO1xyXG4gICAgICAgIHRoaXMudGltZVR5cGUgPSBcIjloYWFcIlxyXG5cclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogdGhpcy52YWx1ZUhhbTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnR5cGUgPSAnSEhtbSc7XHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IFwiMDA6MDBcIlxyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiAnLS06LS0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2hvd0N1cmVudFRpbWUgPT09IHRydWUpIHtcclxuICAgICAgY29uc3QgaG91cjogYW55ID1cclxuICAgICAgICBuZXcgRGF0ZSgpLmdldEhvdXJzKCkgPiAxMFxyXG4gICAgICAgICAgPyBuZXcgRGF0ZSgpLmdldEhvdXJzKClcclxuICAgICAgICAgIDogJzAnICsgbmV3IERhdGUoKS5nZXRIb3VycygpO1xyXG4gICAgICBsZXQgYW1Ib3VyOiBhbnk7XHJcblxyXG4gICAgICBpZiAobmV3IERhdGUoKS5nZXRIb3VycygpID4gMTApIHtcclxuICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRIb3VycygpID4gMTIpIHtcclxuICAgICAgICAgIGlmIChuZXcgRGF0ZSgpLmdldEhvdXJzKCkgLSAxMiA8IDEwKSB7XHJcbiAgICAgICAgICAgIGFtSG91ciA9ICcwJyArIChuZXcgRGF0ZSgpLmdldEhvdXJzKCkgLSAxMik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbUhvdXIgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGFtSG91ciA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYW1Ib3VyID0gJzAnICsgbmV3IERhdGUoKS5nZXRIb3VycygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtaW4gPVxyXG4gICAgICAgIG5ldyBEYXRlKCkuZ2V0TWludXRlcygpID4gOVxyXG4gICAgICAgICAgPyBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKVxyXG4gICAgICAgICAgOiAnMCcgKyBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKTtcclxuICAgICAgY29uc3Qgc2VjID1cclxuICAgICAgICBuZXcgRGF0ZSgpLmdldFNlY29uZHMoKSA+IDlcclxuICAgICAgICAgID8gbmV3IERhdGUoKS5nZXRTZWNvbmRzKClcclxuICAgICAgICAgIDogJzAnICsgbmV3IERhdGUoKS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnR5cGUgPT09ICdoaCcgfHxcclxuICAgICAgICB0aGlzLnR5cGUgPT09ICdoaG1tJyB8fFxyXG4gICAgICAgIHRoaXMudHlwZSA9PT0gJ2hobW1zcycgfHxcclxuICAgICAgICB0aGlzLnR5cGUgPT09ICdoaG1tc3NhbSdcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPVxyXG4gICAgICAgICAgICBhbUhvdXIgK1xyXG4gICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICBtaW4gK1xyXG4gICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICBzZWMgK1xyXG4gICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnBtJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPVxyXG4gICAgICAgICAgICBhbUhvdXIgK1xyXG4gICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICBtaW4gK1xyXG4gICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICBzZWMgK1xyXG4gICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2hoYW0nKSB7XHJcbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPSBhbUhvdXIgKyAnICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnBtJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPSBhbUhvdXIgKyAnICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2hobW1hbScpIHtcclxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZSA9XHJcbiAgICAgICAgICAgIGFtSG91ciArICc6JyArIG1pbiArICcgJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucG0nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZSA9XHJcbiAgICAgICAgICAgIGFtSG91ciArICc6JyArIG1pbiArICcgJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IGhvdXIgKyAnOicgKyBtaW4gKyAnOicgKyBzZWM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3RhcnRmb2N1cygpIHtcclxuICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5jYXJldENvbG9yID0gJ3RyYW5zcGFyZW50JztcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcclxuICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDA7XHJcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5jYXJldENvbG9yID0gJ2F1dG8nO1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVJbnB1dEZvY3VzKCkge1xyXG4gICAgdGhpcy5vblN0YXJ0Zm9jdXMoKTtcclxuICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuICBoYW5kbGVJbnB1dEJsdXIoZSkge1xyXG4gICAgaWYgKHRoaXMudGV4dFZhbHVlLmluZGV4T2YoJy0nKSAhPT0gLTEpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdISG1tc3MnOlxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnLS06LS06LS0nO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnSEhtbSc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdISCc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdoaG1tc3MnOlxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnLS06LS06LS0nO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnaGhtbSc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdoaCc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdoaG1tc3NhbSc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWVTYW07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdoaG1tYW0nOlxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlTWFtO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnaGhhbSc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWVIYW07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5UHJlc3MoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaW5wdXRDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSk7XHJcbiAgICBjb25zdCBmaXJzdENoYXIgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMCk7XHJcbiAgICBjb25zdCBzZWNvbmRDaGFyID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDEpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0IHx8XHJcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgLy8gdGhpcy5jdXJzb3JQb3NpdGlvbiArPSAxIDtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcblxyXG4gICAgaWYgKGZpcnN0Q2hhciA9PT0gJzInKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBzZWNvbmRDaGFyID09PSAnJyB8fFxyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlLmNoYXJBdCgxKSA+PSAnNCcgfHxcclxuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uIDwgM1xyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoaW5wdXRDaGFyID49ICc0Jykge1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zcyB8fFxyXG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fFxyXG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGggfHxcclxuICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8XHJcbiAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcclxuICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW1cclxuICAgICkge1xyXG4gICAgICBpZiAoZmlyc3RDaGFyID09PSAnMScpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBzZWNvbmRDaGFyID09PSAnJyB8fFxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUuY2hhckF0KDEpID49ICczJyB8fFxyXG4gICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA8IDNcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChpbnB1dENoYXIgPj0gJzMnKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRDaGFyID09PSAnLScpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgICAvLyB1cCAmIGRvd24gYnV0dG9uXHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuICAgICAgdGhpcy5zZXRDYXJldCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgdGhpcy5zZXRDYXJldCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGxlZnQgJiByaWdodCBCdXR0b25cclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgfHxcclxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGhvbWUgYnV0dG9uXHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnSG9tZScpIHtcclxuICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZW5kIGJ1dHRvblxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VuZCcpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSB8fFxyXG4gICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcclxuICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbVxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gOTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAnYXV0byc7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0pIHtcclxuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA2O1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvblxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcclxuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAzO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvblxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gdGhpcy50ZXh0VmFsdWUubGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYmFja3NwYWNlIENvbnRyb2xcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XHJcbiAgICAgIGNvbnN0IGluZDEgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMCk7XHJcbiAgICAgIGNvbnN0IGluZDIgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMSk7XHJcbiAgICAgIGNvbnN0IGluZDMgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMik7XHJcbiAgICAgIGNvbnN0IGluZDQgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMyk7XHJcbiAgICAgIGNvbnN0IGluZDUgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNCk7XHJcbiAgICAgIGNvbnN0IGluZDYgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNSk7XHJcbiAgICAgIGNvbnN0IGluZDcgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNik7XHJcbiAgICAgIGNvbnN0IGluZDggPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNyk7XHJcbiAgICAgIGNvbnN0IGluZDkgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoOCk7XHJcbiAgICAgIGNvbnN0IGluZDEwID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDkpO1xyXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XHJcbiAgICAgICAgaWYgKGluZDEwID09PSAnLScpIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cclxuICAgICAgICAgICAgaW5kMSArXHJcbiAgICAgICAgICAgIGluZDIgK1xyXG4gICAgICAgICAgICBpbmQzICtcclxuICAgICAgICAgICAgaW5kNCArXHJcbiAgICAgICAgICAgIGluZDUgK1xyXG4gICAgICAgICAgICBpbmQ2ICtcclxuICAgICAgICAgICAgaW5kNyArXHJcbiAgICAgICAgICAgIGluZDggK1xyXG4gICAgICAgICAgICBpbmQ5ICtcclxuICAgICAgICAgICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xyXG4gICAgICAgIGlmIChpbmQ3ID09PSAnLScpIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cclxuICAgICAgICAgICAgaW5kMSArXHJcbiAgICAgICAgICAgIGluZDIgK1xyXG4gICAgICAgICAgICBpbmQzICtcclxuICAgICAgICAgICAgaW5kNCArXHJcbiAgICAgICAgICAgIGluZDUgK1xyXG4gICAgICAgICAgICBpbmQ2ICtcclxuICAgICAgICAgICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcclxuICAgICAgICBpZiAoaW5kNCA9PT0gJy0nKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIGluZDEgKyBpbmQyICsgaW5kMyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnRleHRWYWx1ZS5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gLT0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VuZCcpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSB8fFxyXG4gICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcclxuICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICd0cmFuc3BhcmVudCc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAnYXV0byc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgbmV3VmFsdWUgPSB0aGlzLnRleHRWYWx1ZTtcclxuXHJcbiAgICBjb25zdCBpbmQxID0gbmV3VmFsdWUuY2hhckF0KDApO1xyXG4gICAgY29uc3QgaW5kMiA9IG5ld1ZhbHVlLmNoYXJBdCgxKTtcclxuICAgIGNvbnN0IGluZDMgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMik7XHJcbiAgICBjb25zdCBpbmQ0ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDMpO1xyXG4gICAgY29uc3QgaW5kNSA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg0KTtcclxuICAgIGNvbnN0IGluZDYgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNSk7XHJcbiAgICBjb25zdCBpbmQ3ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDYpO1xyXG4gICAgY29uc3QgaW5kOCA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg3KTtcclxuICAgIGNvbnN0IGluZDkgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoOCk7XHJcbiAgICBjb25zdCBpbmQxMCA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg5KTtcclxuICAgIGNvbnN0IGluZDExID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDEwKTtcclxuXHJcbiAgICAvLyB1cCBrZXlcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xyXG4gICAgICAvLyBob3VyXHJcbiAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDIpIHtcclxuICAgICAgICBjb25zdCBob3VyaW5kID0gaW5kMSArIGluZDI7XHJcbiAgICAgICAgY29uc3QgbmV3SG91ciA9ICtob3VyaW5kICsgMTtcclxuICAgICAgICBuZXdWYWx1ZSA9IG5ld0hvdXIudG9TdHJpbmcoKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8XHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fFxyXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoIHx8XHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0gfHxcclxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcclxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAoaG91cmluZCA9PT0gJy0tJykge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpbmQxICE9PSAnLScgJiYgaG91cmluZCA9PT0gaW5kMSArICctJykge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpbmQyICE9PSAnLScgJiYgaG91cmluZCA9PT0gJy0nICsgaW5kMikge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICgrbmV3VmFsdWUgPiAxMikge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwMSc7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChob3VyaW5kID09PSAnLS0nKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGluZDEgIT09ICctJyAmJiBob3VyaW5kID09PSBpbmQxICsgJy0nKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGluZDIgIT09ICctJyAmJiBob3VyaW5kID09PSAnLScgKyBpbmQyKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCtuZXdWYWx1ZSA+IDIzKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAwJztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoK25ld1ZhbHVlIDwgMTApIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWZ0ZXJIb3VyaW5kID1cclxuICAgICAgICAgIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIGluZDExO1xyXG4gICAgICAgIGNvbnN0IGhvdXIgPSBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJIb3VyaW5kO1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gaG91cjtcclxuICAgICAgfVxyXG4gICAgICAvLyBtaW51dGVcclxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gMyAmJiB0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDUpIHtcclxuICAgICAgICBjb25zdCBob3VyaW5kID0gaW5kNCArIGluZDU7XHJcbiAgICAgICAgY29uc3QgbmV3SG91ciA9ICtob3VyaW5kICsgMTtcclxuXHJcbiAgICAgICAgbmV3VmFsdWUgPSBuZXdIb3VyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKGhvdXJpbmQgPT09ICctLScpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kNCAhPT0gJy0nICYmIGhvdXJpbmQgPT09IGluZDQgKyAnLScpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kNSAhPT0gJy0nICYmIGhvdXJpbmQgPT09ICctJyArIGluZDUpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoK25ld1ZhbHVlID4gNTkpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAwJztcclxuICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzO1xyXG4gICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIGluZDExO1xyXG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IGJlZm9yZUhvdXJpbmQgKyBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJIb3VyaW5kO1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gbWludXRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzZWNvbmRcclxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gNiAmJiB0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDgpIHtcclxuICAgICAgICBjb25zdCBzZWNvbmRpbmQgPSBpbmQ3ICsgaW5kODtcclxuICAgICAgICBjb25zdCBuZXdTZWNvbmQgPSArc2Vjb25kaW5kICsgMTtcclxuXHJcbiAgICAgICAgbmV3VmFsdWUgPSBuZXdTZWNvbmQudG9TdHJpbmcoKTtcclxuICAgICAgICBpZiAoc2Vjb25kaW5kID09PSAnLS0nKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGluZDcgIT09ICctJyAmJiBzZWNvbmRpbmQgPT09IGluZDcgKyAnLScpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kOCAhPT0gJy0nICYmIHNlY29uZGluZCA9PT0gJy0nICsgaW5kOCkge1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgrbmV3VmFsdWUgPiA1OSkge1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSAnMDAnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoK25ld1ZhbHVlIDwgMTApIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJlZm9yZUhvdXJpbmQgPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDY7XHJcbiAgICAgICAgY29uc3QgYWZ0ZXJIb3VyaW5kID0gaW5kOSArIGluZDEwICsgaW5kMTE7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gYmVmb3JlSG91cmluZCArIG5ld1ZhbHVlLnRvU3RyaW5nKCkgKyBhZnRlckhvdXJpbmQ7XHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBzZWNvbmQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHR5cGUgYW0vUE1cclxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uID4gOCkge1xyXG4gICAgICAgICAgbGV0IHR5cGVpbmQgPSBpbmQxMC50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGJlZm9yZUhvdXJpbmQgPVxyXG4gICAgICAgICAgICBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDk7XHJcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQxMTtcclxuXHJcbiAgICAgICAgICBpZiAoaW5kMTAgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpKSB7XHJcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaW5kMTAgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpKSB7XHJcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gYmVmb3JlSG91cmluZCArIHR5cGVpbmQgKyBhZnRlckhvdXJpbmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gNikge1xyXG4gICAgICAgICAgbGV0IHR5cGVpbmQgPSBpbmQ3LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNjtcclxuICAgICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDg7XHJcblxyXG4gICAgICAgICAgaWYgKGluZDcgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpKSB7XHJcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaW5kNyA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJykpIHtcclxuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBiZWZvcmVIb3VyaW5kICsgdHlwZWluZCArIGFmdGVySG91cmluZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gMykge1xyXG4gICAgICAgICAgbGV0IHR5cGVpbmQyID0gaW5kNC50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGJlZm9yZUhvdXJpbmQgPSBpbmQxICsgaW5kMiArIGluZDM7XHJcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQ1O1xyXG5cclxuICAgICAgICAgIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKSkge1xyXG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xyXG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBiZWZvcmVIb3VyaW5kICsgdHlwZWluZDIgKyBhZnRlckhvdXJpbmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8ga2V5IGRvd25cclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XHJcbiAgICAgIC8vIGhvdXJcclxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPD0gMikge1xyXG4gICAgICAgIGNvbnN0IGhvdXJpbmQgPSBpbmQxICsgaW5kMjtcclxuICAgICAgICBjb25zdCBuZXdIb3VyID0gK2hvdXJpbmQgLSAxO1xyXG5cclxuICAgICAgICBuZXdWYWx1ZSA9IG5ld0hvdXIudG9TdHJpbmcoKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8XHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fFxyXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoIHx8XHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0gfHxcclxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcclxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAoaG91cmluZCA9PT0gJy0tJykge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpbmQxICE9PSAnLScgJiYgaG91cmluZCA9PT0gaW5kMSArICctJykge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpbmQyICE9PSAnLScgJiYgaG91cmluZCA9PT0gJy0nICsgaW5kMikge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICgrbmV3VmFsdWUgPCAxKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzEyJztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoK25ld1ZhbHVlIDwgMTApIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGhvdXJpbmQgPT09ICctLScpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaW5kMSAhPT0gJy0nICYmIGhvdXJpbmQgPT09IGluZDEgKyAnLScpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaW5kMiAhPT0gJy0nICYmIGhvdXJpbmQgPT09ICctJyArIGluZDIpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoK25ld1ZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcyMyc7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFmdGVySG91ckluZGV4ID1cclxuICAgICAgICAgIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIGluZDExO1xyXG4gICAgICAgIGNvbnN0IGhvdXIgPSBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJIb3VySW5kZXg7XHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBob3VyO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIG1pbnV0ZVxyXG4gICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSAzICYmIHRoaXMuY3Vyc29yUG9zaXRpb24gPD0gNSkge1xyXG4gICAgICAgIGNvbnN0IG1pbnV0ZWluZCA9IGluZDQgKyBpbmQ1O1xyXG4gICAgICAgIGNvbnN0IG5ld01pbnV0ZSA9ICttaW51dGVpbmQgLSAxO1xyXG5cclxuICAgICAgICBuZXdWYWx1ZSA9IG5ld01pbnV0ZS50b1N0cmluZygpO1xyXG4gICAgICAgIGlmIChtaW51dGVpbmQgPT09ICctLScpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kNCAhPT0gJy0nICYmIG1pbnV0ZWluZCA9PT0gaW5kNCArICctJykge1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmQ1ICE9PSAnLScgJiYgbWludXRlaW5kID09PSAnLScgKyBpbmQ1KSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbnV0ZWluZCA9PT0gJy0tJykge1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgrbmV3VmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICc1OSc7XHJcbiAgICAgICAgfSBlbHNlIGlmICgrbmV3VmFsdWUgPCAxMCkge1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmVmb3JlTWludXRlSW5kZXggPSBpbmQxICsgaW5kMiArIGluZDM7XHJcbiAgICAgICAgY29uc3QgYWZ0ZXJNaW51dGVJbmRleCA9IGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIGluZDExO1xyXG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9XHJcbiAgICAgICAgICBiZWZvcmVNaW51dGVJbmRleCArIG5ld1ZhbHVlLnRvU3RyaW5nKCkgKyBhZnRlck1pbnV0ZUluZGV4O1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gbWludXRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzZWNvbmRcclxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gNiAmJiB0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDgpIHtcclxuICAgICAgICBjb25zdCBzZWNvbmRJbmRleCA9IGluZDcgKyBpbmQ4O1xyXG4gICAgICAgIGNvbnN0IG5ld1NlY29uZCA9ICtzZWNvbmRJbmRleCAtIDE7XHJcblxyXG4gICAgICAgIG5ld1ZhbHVlID0gbmV3U2Vjb25kLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKHNlY29uZEluZGV4ID09PSAnLS0nKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGluZDcgIT09ICctJyAmJiBzZWNvbmRJbmRleCA9PT0gaW5kNyArICctJykge1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmQ4ICE9PSAnLScgJiYgc2Vjb25kSW5kZXggPT09ICctJyArIGluZDgpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Vjb25kSW5kZXggPT09ICctLScpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoK25ld1ZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSAnNTknO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoK25ld1ZhbHVlIDwgMTApIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJlZm9yZXNlY29uZEluZGV4ID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2O1xyXG4gICAgICAgIGNvbnN0IGFmdGVyc2Vjb25kSW5kZXggPSBpbmQ5ICsgaW5kMTAgKyBpbmQxMTtcclxuICAgICAgICBjb25zdCBzZWNvbmQgPVxyXG4gICAgICAgICAgYmVmb3Jlc2Vjb25kSW5kZXggKyBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJzZWNvbmRJbmRleDtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHNlY29uZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gdHlwZVxyXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPiA4KSB7XHJcbiAgICAgICAgICBsZXQgdHlwZWluZCA9IGluZDEwLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9XHJcbiAgICAgICAgICAgIGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOTtcclxuICAgICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDExO1xyXG5cclxuICAgICAgICAgIGlmIChpbmQxMCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcclxuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpbmQxMCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJykpIHtcclxuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBiZWZvcmVIb3VyaW5kICsgdHlwZWluZCArIGFmdGVySG91cmluZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0pIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSA2KSB7XHJcbiAgICAgICAgICBsZXQgdHlwZWluZCA9IGluZDcudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2O1xyXG4gICAgICAgICAgY29uc3QgYWZ0ZXJIb3VyaW5kID0gaW5kODtcclxuXHJcbiAgICAgICAgICBpZiAoaW5kNyA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcclxuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpbmQ3ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xyXG4gICAgICAgICAgICB0eXBlaW5kID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kICsgYWZ0ZXJIb3VyaW5kO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSAzKSB7XHJcbiAgICAgICAgICBsZXQgdHlwZWluZDIgPSBpbmQ0LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMztcclxuICAgICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDU7XHJcbiAgICAgICAgICAvL1RPIERPIHRoaXMgaXMgd3JvbmcgY2hlY2sgaW5kZXhcclxuICAgICAgICAgIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKSkge1xyXG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xyXG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBiZWZvcmVIb3VyaW5kICsgdHlwZWluZDIgKyBhZnRlckhvdXJpbmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCB8fFxyXG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDBcclxuICAgICkge1xyXG4gICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG9HZXRDYXJldFBvc2l0aW9uKGN0cmwpIHtcclxuICAgIGxldCBDYXJldFBvcyA9IDA7XHJcbiAgICBpZiAoY3RybC5zZWxlY3Rpb25TdGFydCB8fCBjdHJsLnNlbGVjdGlvblN0YXJ0ID09PSAwKSB7XHJcbiAgICAgIENhcmV0UG9zID0gY3RybC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgcmV0dXJuIENhcmV0UG9zO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Q2FyZXRQb3NpdGlvbihjdHJsLCBwb3MpIHtcclxuICAgIGlmIChjdHJsLnNldFNlbGVjdGlvblJhbmdlKSB7XHJcbiAgICAgIGN0cmwuZm9jdXMoKTtcclxuICAgICAgY3RybC5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIHBvcyk7XHJcbiAgICB9IGVsc2UgaWYgKGN0cmwuY3JlYXRlVGV4dFJhbmdlKSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gY3RybC5jcmVhdGVUZXh0UmFuZ2UoKTtcclxuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIHBvcyk7XHJcbiAgICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgcG9zKTtcclxuICAgICAgcmFuZ2Uuc2VsZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRDYXJldCgpIHtcclxuICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuY3Vyc29yUG9zaXRpb24pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiYXggZm9ybS1pdGVtXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCIgW2F0dHIuaWRdPVwidWlkXCIgI2ZjPlxyXG4gIDxkaXYgY2xhc3M9XCJheCBpdGVtcy13cmFwcGVyXCI+XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3RhcnRdXCI+IDwvbmctY29udGVudD5cclxuICAgIDxpIGNsYXNzPVwiZm9ybS1pdGVtLWljb24ge3sgaWNvbiB9fVwiICpuZ0lmPVwiaWNvblwiPjwvaT5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiICNjb250ZW50PlxyXG4gICAgPGRpdiBjbGFzcz1cImF4IGZvcm0tY29udHJvbCBpbnB1dCB7eyBzaXplIH19XCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCIgW2NsYXNzLnJlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgW2NsYXNzLmljb25dPVwiaWNvblwiPlxyXG4gICAgICA8aW5wdXQgI2lucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJheCB7eyBzaXplIH19XCIgW21hc2tdPVwidGltZVR5cGVcIiBbKG5nTW9kZWwpXT1cInRleHRWYWx1ZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciB9fVwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtuZ0NsYXNzXT1cInNldFRleHRBbGlnbigpXCJcclxuICAgICAgICBbY2xhc3MuY2xlYXJdPVwidmFsdWUgJiYgYWxsb3dDbGVhclwiIChmb2N1cyk9XCJoYW5kbGVJbnB1dEZvY3VzKClcIiAoYmx1cik9XCJoYW5kbGVJbnB1dEJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKGtleXByZXNzKT1cImhhbmRsZUtleVByZXNzKCRldmVudClcIiAoa2V5dXApPVwiaGFuZGxlS2V5VXAoJGV2ZW50KVwiIChrZXlkb3duKT1cImhhbmRsZUtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudClcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImF4IGl0ZW1zLXdyYXBwZXJcIj5cclxuICAgIDxheC1idXR0b24gKm5nSWY9XCJ2YWx1ZSAmJiBhbGxvd0NsZWFyXCIgaWNvbj1cImZhciBmYS10aW1lc1wiIHR5cGU9XCJkYW5nZXIgYmxhbmtcIiAoY2xpY2spPVwiY2xlYXIoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFt0YWJJbmRleF09XCItMVwiPjwvYXgtYnV0dG9uPlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2VuZF1cIj4gPC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPCEtLSBbdGV4dE1hc2tdPVwie21hc2s6IG1hc2sgLCBzaG93TWFzazpzaG93TWFzayAsIGd1aWQ6IG1hc2tHdWlkICwga2VlcENoYXJQb3NpdGlvbnM6IG1hc2tLZWVwQ2hhclBvc2l0aW9uc31cIiAtLT5cclxuPCEtLSA8aW5wdXQgI2lucHV0IGlkPVwidGltZVBpY2tlclZhbHVlXCIgW3RleHRNYXNrXT1cInRpbWVUeXBlXCIgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKGtleXByZXNzKT0naGFuZGxlS2V5UHJlc3MoJGV2ZW50KSdcclxuICAgIChrZXl1cCk9XCJoYW5kbGVLZXlVcCgkZXZlbnQpXCIgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudClcIj4gLS0+Il19