@coreui/angular-pro 4.7.2 → 5.0.0-alpha.1

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 (308) hide show
  1. package/esm2022/lib/accordion/accordion/accordion.component.mjs +3 -3
  2. package/esm2022/lib/accordion/accordion-button/accordion-button.directive.mjs +3 -3
  3. package/esm2022/lib/accordion/accordion-item/accordion-item.component.mjs +3 -3
  4. package/esm2022/lib/accordion/accordion.module.mjs +4 -4
  5. package/esm2022/lib/accordion/accordion.service.mjs +3 -3
  6. package/esm2022/lib/alert/alert-heading.directive.mjs +3 -3
  7. package/esm2022/lib/alert/alert-link.directive.mjs +3 -3
  8. package/esm2022/lib/alert/alert.component.mjs +3 -3
  9. package/esm2022/lib/alert/alert.module.mjs +4 -4
  10. package/esm2022/lib/avatar/avatar.component.mjs +10 -7
  11. package/esm2022/lib/avatar/avatar.module.mjs +4 -4
  12. package/esm2022/lib/backdrop/backdrop.service.mjs +55 -31
  13. package/esm2022/lib/backdrop/index.mjs +2 -0
  14. package/esm2022/lib/backdrop/public_api.mjs +2 -0
  15. package/esm2022/lib/badge/badge.component.mjs +10 -6
  16. package/esm2022/lib/badge/badge.module.mjs +4 -4
  17. package/esm2022/lib/breadcrumb/breadcrumb/breadcrumb.component.mjs +3 -3
  18. package/esm2022/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +3 -3
  19. package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +3 -3
  20. package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +9 -9
  21. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +4 -4
  22. package/esm2022/lib/button/button-close.directive.mjs +11 -5
  23. package/esm2022/lib/button/button.directive.mjs +3 -3
  24. package/esm2022/lib/button/button.module.mjs +4 -4
  25. package/esm2022/lib/button-group/button-group/button-group.component.mjs +3 -3
  26. package/esm2022/lib/button-group/button-group.module.mjs +4 -4
  27. package/esm2022/lib/button-group/button-toolbar/button-toolbar.component.mjs +3 -3
  28. package/esm2022/lib/calendar/calendar/calendar-class-view.pipe.mjs +3 -3
  29. package/esm2022/lib/calendar/calendar/calendar.component.mjs +150 -71
  30. package/esm2022/lib/calendar/calendar-month/calendar-class-day.pipe.mjs +5 -4
  31. package/esm2022/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +5 -5
  32. package/esm2022/lib/calendar/calendar-month/calendar-class-row.pipe.mjs +26 -0
  33. package/esm2022/lib/calendar/calendar-month/calendar-class-year.pipe.mjs +3 -3
  34. package/esm2022/lib/calendar/calendar-month/calendar-day-title.pipe.mjs +3 -3
  35. package/esm2022/lib/calendar/calendar-month/calendar-day.directive.mjs +102 -59
  36. package/esm2022/lib/calendar/calendar-month/calendar-day.pipe.mjs +3 -3
  37. package/esm2022/lib/calendar/calendar-month/calendar-month.component.mjs +255 -92
  38. package/esm2022/lib/calendar/calendar-month/calendar-row.directive.mjs +117 -0
  39. package/esm2022/lib/calendar/calendar-month/calendar-weekday.pipe.mjs +3 -3
  40. package/esm2022/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +28 -24
  41. package/esm2022/lib/calendar/calendar.module.mjs +10 -7
  42. package/esm2022/lib/calendar/calendar.service.mjs +8 -5
  43. package/esm2022/lib/calendar/calendar.utils.mjs +100 -17
  44. package/esm2022/lib/callout/callout.component.mjs +3 -3
  45. package/esm2022/lib/callout/callout.module.mjs +4 -4
  46. package/esm2022/lib/card/card-body.component.mjs +3 -3
  47. package/esm2022/lib/card/card-footer.component.mjs +3 -3
  48. package/esm2022/lib/card/card-group.component.mjs +3 -3
  49. package/esm2022/lib/card/card-header-actions.component.mjs +3 -3
  50. package/esm2022/lib/card/card-header.component.mjs +3 -3
  51. package/esm2022/lib/card/card-img-overlay/card-img-overlay.component.mjs +3 -3
  52. package/esm2022/lib/card/card-img.directive.mjs +3 -3
  53. package/esm2022/lib/card/card-link.directive.mjs +3 -3
  54. package/esm2022/lib/card/card-subtitle.directive.mjs +3 -3
  55. package/esm2022/lib/card/card-text.directive.mjs +3 -3
  56. package/esm2022/lib/card/card-title.directive.mjs +3 -3
  57. package/esm2022/lib/card/card.component.mjs +12 -8
  58. package/esm2022/lib/card/card.module.mjs +4 -4
  59. package/esm2022/lib/carousel/carousel/carousel.component.mjs +37 -36
  60. package/esm2022/lib/carousel/carousel-caption/carousel-caption.component.mjs +3 -3
  61. package/esm2022/lib/carousel/carousel-control/carousel-control.component.mjs +3 -3
  62. package/esm2022/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +3 -3
  63. package/esm2022/lib/carousel/carousel-inner/carousel-inner.component.mjs +3 -3
  64. package/esm2022/lib/carousel/carousel-item/carousel-item.component.mjs +3 -3
  65. package/esm2022/lib/carousel/carousel-state.mjs +3 -3
  66. package/esm2022/lib/carousel/carousel.config.mjs +3 -3
  67. package/esm2022/lib/carousel/carousel.module.mjs +4 -4
  68. package/esm2022/lib/carousel/carousel.service.mjs +3 -3
  69. package/esm2022/lib/collapse/collapse.directive.mjs +3 -3
  70. package/esm2022/lib/collapse/collapse.module.mjs +4 -4
  71. package/esm2022/lib/coreui.types.mjs +1 -1
  72. package/esm2022/lib/date-picker/date-picker.component.mjs +8 -12
  73. package/esm2022/lib/date-picker/date-picker.module.mjs +4 -4
  74. package/esm2022/lib/date-range-picker/date-range-picker/custom-range-key.pipe.mjs +3 -3
  75. package/esm2022/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +168 -163
  76. package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +4 -4
  77. package/esm2022/lib/dropdown/dropdown/dropdown.component.mjs +10 -23
  78. package/esm2022/lib/dropdown/dropdown-close/dropdown-close.directive.mjs +3 -3
  79. package/esm2022/lib/dropdown/dropdown-divider/dropdown-divider.directive.mjs +3 -3
  80. package/esm2022/lib/dropdown/dropdown-header/dropdown-header.directive.mjs +3 -3
  81. package/esm2022/lib/dropdown/dropdown-item/dropdown-item-plain.directive.mjs +3 -3
  82. package/esm2022/lib/dropdown/dropdown-item/dropdown-item.directive.mjs +13 -5
  83. package/esm2022/lib/dropdown/dropdown-menu/dropdown-menu.directive.mjs +77 -41
  84. package/esm2022/lib/dropdown/dropdown.module.mjs +4 -4
  85. package/esm2022/lib/dropdown/dropdown.service.mjs +5 -5
  86. package/esm2022/lib/element-cover/element-cover.component.mjs +3 -3
  87. package/esm2022/lib/element-cover/element-cover.module.mjs +4 -4
  88. package/esm2022/lib/footer/footer.component.mjs +3 -3
  89. package/esm2022/lib/footer/footer.module.mjs +4 -4
  90. package/esm2022/lib/form/form/form.directive.mjs +3 -3
  91. package/esm2022/lib/form/form-check/form-check-input.directive.mjs +3 -3
  92. package/esm2022/lib/form/form-check/form-check-label.directive.mjs +3 -3
  93. package/esm2022/lib/form/form-check/form-check.component.mjs +3 -3
  94. package/esm2022/lib/form/form-control/form-control.directive.mjs +3 -3
  95. package/esm2022/lib/form/form-feedback/form-feedback.component.mjs +3 -3
  96. package/esm2022/lib/form/form-floating/form-floating.directive.mjs +3 -3
  97. package/esm2022/lib/form/form-label/form-label.directive.mjs +3 -3
  98. package/esm2022/lib/form/form-select/form-select.directive.mjs +3 -3
  99. package/esm2022/lib/form/form-text/form-text.directive.mjs +3 -3
  100. package/esm2022/lib/form/form.module.mjs +4 -4
  101. package/esm2022/lib/form/input-group/input-group.component.mjs +3 -3
  102. package/esm2022/lib/form/input-group-text/input-group-text.directive.mjs +3 -3
  103. package/esm2022/lib/grid/col.component.mjs +3 -3
  104. package/esm2022/lib/grid/col.directive.mjs +3 -3
  105. package/esm2022/lib/grid/container.component.mjs +3 -3
  106. package/esm2022/lib/grid/grid.module.mjs +4 -4
  107. package/esm2022/lib/grid/gutter.directive.mjs +3 -3
  108. package/esm2022/lib/grid/row.component.mjs +3 -3
  109. package/esm2022/lib/grid/row.directive.mjs +3 -3
  110. package/esm2022/lib/header/header/header.component.mjs +3 -3
  111. package/esm2022/lib/header/header-brand/header-brand.component.mjs +3 -3
  112. package/esm2022/lib/header/header-divider/header-divider.component.mjs +3 -3
  113. package/esm2022/lib/header/header-nav/header-nav.component.mjs +3 -3
  114. package/esm2022/lib/header/header-text/header-text.component.mjs +3 -3
  115. package/esm2022/lib/header/header-toggler/header-toggler.directive.mjs +3 -3
  116. package/esm2022/lib/header/header.module.mjs +4 -4
  117. package/esm2022/lib/image/img.directive.mjs +3 -3
  118. package/esm2022/lib/image/img.module.mjs +4 -4
  119. package/esm2022/lib/list-group/list-group-item.directive.mjs +3 -3
  120. package/esm2022/lib/list-group/list-group.directive.mjs +3 -3
  121. package/esm2022/lib/list-group/list-group.module.mjs +4 -4
  122. package/esm2022/lib/loading-button/loading-button.component.mjs +3 -3
  123. package/esm2022/lib/loading-button/loading-button.module.mjs +4 -4
  124. package/esm2022/lib/modal/modal/modal.component.mjs +88 -59
  125. package/esm2022/lib/modal/modal-body/modal-body.component.mjs +3 -3
  126. package/esm2022/lib/modal/modal-content/modal-content.component.mjs +3 -3
  127. package/esm2022/lib/modal/modal-dialog/modal-dialog.component.mjs +3 -3
  128. package/esm2022/lib/modal/modal-dismiss/modal-toggle.directive.mjs +3 -3
  129. package/esm2022/lib/modal/modal-footer/modal-footer.component.mjs +3 -3
  130. package/esm2022/lib/modal/modal-header/modal-header.component.mjs +3 -3
  131. package/esm2022/lib/modal/modal-title/modal-title.directive.mjs +3 -3
  132. package/esm2022/lib/modal/modal.module.mjs +4 -4
  133. package/esm2022/lib/modal/modal.service.mjs +3 -3
  134. package/esm2022/lib/multi-select/multi-select/multi-select-search.directive.mjs +3 -3
  135. package/esm2022/lib/multi-select/multi-select/multi-select.component.mjs +16 -13
  136. package/esm2022/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +3 -3
  137. package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.mjs +3 -3
  138. package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +3 -3
  139. package/esm2022/lib/multi-select/multi-select-option/multi-select-option.component.mjs +37 -36
  140. package/esm2022/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +5 -5
  141. package/esm2022/lib/multi-select/multi-select.module.mjs +4 -4
  142. package/esm2022/lib/multi-select/multi-select.service.mjs +3 -3
  143. package/esm2022/lib/nav/nav-item.component.mjs +3 -3
  144. package/esm2022/lib/nav/nav-link.directive.mjs +3 -3
  145. package/esm2022/lib/nav/nav.component.mjs +5 -5
  146. package/esm2022/lib/nav/nav.module.mjs +4 -4
  147. package/esm2022/lib/navbar/navbar-brand/navbar-brand.directive.mjs +3 -3
  148. package/esm2022/lib/navbar/navbar-nav/navbar-nav.component.mjs +3 -3
  149. package/esm2022/lib/navbar/navbar-text/navbar-text.component.mjs +3 -3
  150. package/esm2022/lib/navbar/navbar-toggler/navbar-toggler.directive.mjs +3 -3
  151. package/esm2022/lib/navbar/navbar.component.mjs +9 -13
  152. package/esm2022/lib/navbar/navbar.module.mjs +4 -4
  153. package/esm2022/lib/offcanvas/offcanvas/offcanvas.component.mjs +56 -61
  154. package/esm2022/lib/offcanvas/offcanvas-body/offcanvas-body.component.mjs +3 -3
  155. package/esm2022/lib/offcanvas/offcanvas-header/offcanvas-header.component.mjs +3 -3
  156. package/esm2022/lib/offcanvas/offcanvas-title/offcanvas-title.directive.mjs +3 -3
  157. package/esm2022/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.mjs +3 -3
  158. package/esm2022/lib/offcanvas/offcanvas.module.mjs +4 -4
  159. package/esm2022/lib/offcanvas/offcanvas.service.mjs +3 -3
  160. package/esm2022/lib/pagination/page-item/page-item.component.mjs +3 -3
  161. package/esm2022/lib/pagination/page-item/page-item.directive.mjs +3 -3
  162. package/esm2022/lib/pagination/page-link/page-link.directive.mjs +3 -3
  163. package/esm2022/lib/pagination/pagination/pagination.component.mjs +3 -3
  164. package/esm2022/lib/pagination/pagination.module.mjs +4 -4
  165. package/esm2022/lib/placeholder/placeholder-animation.directive.mjs +3 -3
  166. package/esm2022/lib/placeholder/placeholder.directive.mjs +3 -3
  167. package/esm2022/lib/placeholder/placeholder.module.mjs +4 -4
  168. package/esm2022/lib/popover/popover/popover.component.mjs +3 -3
  169. package/esm2022/lib/popover/popover.directive.mjs +5 -5
  170. package/esm2022/lib/popover/popover.module.mjs +4 -4
  171. package/esm2022/lib/progress/progress-bar.component.mjs +3 -3
  172. package/esm2022/lib/progress/progress.component.mjs +3 -3
  173. package/esm2022/lib/progress/progress.module.mjs +4 -4
  174. package/esm2022/lib/services/class-toggle.service.mjs +3 -3
  175. package/esm2022/lib/services/intersection.service.mjs +3 -3
  176. package/esm2022/lib/services/listeners.service.mjs +3 -3
  177. package/esm2022/lib/shared/html-attr.directive.mjs +3 -3
  178. package/esm2022/lib/shared/public_api.mjs +2 -1
  179. package/esm2022/lib/shared/shared.module.mjs +8 -15
  180. package/esm2022/lib/shared/template-id.directive.mjs +3 -3
  181. package/esm2022/lib/shared/theme.directive.mjs +44 -0
  182. package/esm2022/lib/sidebar/sidebar/sidebar.component.mjs +6 -5
  183. package/esm2022/lib/sidebar/sidebar-backdrop/sidebar-backdrop.service.mjs +3 -3
  184. package/esm2022/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +3 -3
  185. package/esm2022/lib/sidebar/sidebar-footer/sidebar-footer.component.mjs +3 -3
  186. package/esm2022/lib/sidebar/sidebar-header/sidebar-header.component.mjs +3 -3
  187. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-badge.pipe.mjs +3 -3
  188. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.mjs +3 -3
  189. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-group.service.mjs +3 -3
  190. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-icon.pipe.mjs +3 -3
  191. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-item-class.pipe.mjs +3 -3
  192. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +3 -3
  193. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +8 -8
  194. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.pipe.mjs +3 -3
  195. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-title.component.mjs +3 -3
  196. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +23 -19
  197. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.service.mjs +6 -6
  198. package/esm2022/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.mjs +3 -3
  199. package/esm2022/lib/sidebar/sidebar-toggler/sidebar-toggler.component.mjs +13 -4
  200. package/esm2022/lib/sidebar/sidebar.module.mjs +4 -4
  201. package/esm2022/lib/sidebar/sidebar.service.mjs +3 -3
  202. package/esm2022/lib/smart-pagination/smart-pagination.component.mjs +3 -3
  203. package/esm2022/lib/smart-pagination/smart-pagination.module.mjs +4 -4
  204. package/esm2022/lib/smart-table/smart-table/smart-table.component.mjs +90 -125
  205. package/esm2022/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.mjs +3 -3
  206. package/esm2022/lib/smart-table/smart-table-filter/filter-input.directive.mjs +3 -3
  207. package/esm2022/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +3 -3
  208. package/esm2022/lib/smart-table/smart-table-head/smart-table-column-label.pipe.mjs +6 -14
  209. package/esm2022/lib/smart-table/smart-table-head/smart-table-head.component.mjs +48 -37
  210. package/esm2022/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +3 -3
  211. package/esm2022/lib/smart-table/smart-table.module.mjs +4 -4
  212. package/esm2022/lib/smart-table/smart-table.type.mjs +1 -1
  213. package/esm2022/lib/smart-table/smart-table.utils.mjs +181 -0
  214. package/esm2022/lib/spinner/spinner.component.mjs +3 -3
  215. package/esm2022/lib/spinner/spinner.module.mjs +4 -4
  216. package/esm2022/lib/table/table-active.directive.mjs +3 -3
  217. package/esm2022/lib/table/table-color.directive.mjs +3 -3
  218. package/esm2022/lib/table/table.directive.mjs +3 -3
  219. package/esm2022/lib/table/table.module.mjs +4 -4
  220. package/esm2022/lib/table/table.type.mjs +1 -1
  221. package/esm2022/lib/tabs/tab-content/tab-content.component.mjs +3 -3
  222. package/esm2022/lib/tabs/tab-content-ref.directive.mjs +3 -3
  223. package/esm2022/lib/tabs/tab-pane/tab-pane.component.mjs +5 -7
  224. package/esm2022/lib/tabs/tab.service.mjs +3 -3
  225. package/esm2022/lib/tabs/tabs.module.mjs +4 -4
  226. package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +16 -10
  227. package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +22 -15
  228. package/esm2022/lib/time-picker/time-picker.component.mjs +89 -115
  229. package/esm2022/lib/time-picker/time-picker.module.mjs +4 -4
  230. package/esm2022/lib/toast/toast/toast.component.mjs +3 -3
  231. package/esm2022/lib/toast/toast-body/toast-body.component.mjs +3 -3
  232. package/esm2022/lib/toast/toast-close.directive.mjs +3 -3
  233. package/esm2022/lib/toast/toast-header/toast-header.component.mjs +3 -3
  234. package/esm2022/lib/toast/toast.module.mjs +4 -4
  235. package/esm2022/lib/toast/toaster/toaster-host.directive.mjs +3 -3
  236. package/esm2022/lib/toast/toaster/toaster.component.mjs +3 -3
  237. package/esm2022/lib/toast/toaster/toaster.service.mjs +3 -3
  238. package/esm2022/lib/tooltip/tooltip/tooltip.component.mjs +3 -3
  239. package/esm2022/lib/tooltip/tooltip.directive.mjs +5 -5
  240. package/esm2022/lib/tooltip/tooltip.module.mjs +4 -4
  241. package/esm2022/lib/utilities/align.directive.mjs +3 -3
  242. package/esm2022/lib/utilities/bg-color.directive.mjs +3 -3
  243. package/esm2022/lib/utilities/border.directive.mjs +3 -3
  244. package/esm2022/lib/utilities/rounded.directive.mjs +3 -3
  245. package/esm2022/lib/utilities/text-color.directive.mjs +3 -3
  246. package/esm2022/lib/utilities/utilities.module.mjs +4 -4
  247. package/esm2022/lib/widget/widget-stat-a/widget-stat-a.component.mjs +5 -5
  248. package/esm2022/lib/widget/widget-stat-b/widget-stat-b.component.mjs +6 -6
  249. package/esm2022/lib/widget/widget-stat-c/widget-stat-c.component.mjs +17 -19
  250. package/esm2022/lib/widget/widget-stat-d/widget-stat-d.component.mjs +5 -5
  251. package/esm2022/lib/widget/widget-stat-e/widget-stat-e.component.mjs +5 -5
  252. package/esm2022/lib/widget/widget-stat-f/widget-stat-f.component.mjs +5 -5
  253. package/esm2022/lib/widget/widget.module.mjs +4 -4
  254. package/esm2022/public-api.mjs +2 -1
  255. package/fesm2022/coreui-angular-pro.mjs +12446 -11687
  256. package/fesm2022/coreui-angular-pro.mjs.map +1 -1
  257. package/lib/avatar/avatar.component.d.ts +4 -3
  258. package/lib/backdrop/backdrop.service.d.ts +7 -10
  259. package/lib/backdrop/index.d.ts +1 -0
  260. package/lib/backdrop/public_api.d.ts +1 -0
  261. package/lib/badge/badge.component.d.ts +5 -3
  262. package/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.d.ts +1 -1
  263. package/lib/button/button-close.directive.d.ts +3 -1
  264. package/lib/calendar/calendar/calendar.component.d.ts +46 -19
  265. package/lib/calendar/calendar-month/calendar-class-row.pipe.d.ts +23 -0
  266. package/lib/calendar/calendar-month/calendar-day.directive.d.ts +16 -26
  267. package/lib/calendar/calendar-month/calendar-month.component.d.ts +45 -27
  268. package/lib/calendar/calendar-month/calendar-row.directive.d.ts +44 -0
  269. package/lib/calendar/calendar-navigation/calendar-navigation.component.d.ts +7 -6
  270. package/lib/calendar/calendar.module.d.ts +2 -1
  271. package/lib/calendar/calendar.service.d.ts +5 -1
  272. package/lib/calendar/calendar.utils.d.ts +25 -6
  273. package/lib/card/card.component.d.ts +3 -1
  274. package/lib/carousel/carousel/carousel.component.d.ts +10 -14
  275. package/lib/coreui.types.d.ts +4 -1
  276. package/lib/date-picker/date-picker.component.d.ts +2 -2
  277. package/lib/date-range-picker/date-range-picker/date-range-picker.component.d.ts +75 -41
  278. package/lib/dropdown/dropdown/dropdown.component.d.ts +2 -9
  279. package/lib/dropdown/dropdown-item/dropdown-item.directive.d.ts +5 -1
  280. package/lib/dropdown/dropdown-menu/dropdown-menu.directive.d.ts +13 -16
  281. package/lib/dropdown/dropdown.service.d.ts +0 -1
  282. package/lib/modal/modal/modal.component.d.ts +13 -13
  283. package/lib/multi-select/multi-select/multi-select.component.d.ts +1 -2
  284. package/lib/multi-select/multi-select-option/multi-select-option.component.d.ts +8 -10
  285. package/lib/nav/nav.component.d.ts +2 -2
  286. package/lib/navbar/navbar.component.d.ts +2 -5
  287. package/lib/offcanvas/offcanvas/offcanvas.component.d.ts +14 -11
  288. package/lib/shared/public_api.d.ts +1 -0
  289. package/lib/shared/shared.module.d.ts +2 -1
  290. package/lib/shared/theme.directive.d.ts +19 -0
  291. package/lib/sidebar/sidebar-nav/sidebar-nav.component.d.ts +5 -2
  292. package/lib/sidebar/sidebar-toggler/sidebar-toggler.component.d.ts +1 -0
  293. package/lib/smart-table/smart-table/smart-table.component.d.ts +36 -51
  294. package/lib/smart-table/smart-table-head/smart-table-column-label.pipe.d.ts +0 -1
  295. package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +21 -11
  296. package/lib/smart-table/smart-table.type.d.ts +49 -34
  297. package/lib/smart-table/smart-table.utils.d.ts +29 -0
  298. package/lib/table/table.type.d.ts +5 -6
  299. package/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.d.ts +2 -1
  300. package/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.d.ts +3 -2
  301. package/lib/time-picker/time-picker.component.d.ts +17 -28
  302. package/lib/widget/widget-stat-a/widget-stat-a.component.d.ts +1 -1
  303. package/lib/widget/widget-stat-b/widget-stat-b.component.d.ts +3 -3
  304. package/lib/widget/widget-stat-c/widget-stat-c.component.d.ts +15 -13
  305. package/lib/widget/widget-stat-e/widget-stat-e.component.d.ts +1 -1
  306. package/lib/widget/widget-stat-f/widget-stat-f.component.d.ts +1 -1
  307. package/package.json +3 -2
  308. package/public-api.d.ts +1 -0
@@ -1,7 +1,6 @@
1
- import { Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, forwardRef, HostListener, inject, Input, Output, ViewChild } from '@angular/core';
1
+ import { booleanAttribute, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, forwardRef, HostListener, inject, Input, Output, ViewChild } from '@angular/core';
2
2
  import { FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';
3
3
  import { NgClass, NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';
4
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
5
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
5
  import { filter, tap } from 'rxjs/operators';
7
6
  import { convert12hTo24h, convert24hTo12h, convertTimeToDate, getAmPm, getDayPeriods, getListOfHours, getListOfMinutes, getListOfSeconds, isHour12, isValidTime } from './time.utils';
@@ -12,11 +11,17 @@ import { TimePickerRollColComponent } from './time-picker-roll-col/time-picker-r
12
11
  import { TimePickerRollAmPmComponent } from './time-picker-roll-col/time-picker-roll-am-pm.component';
13
12
  import * as i0 from "@angular/core";
14
13
  import * as i1 from "@angular/forms";
14
+ // todo: Focus management
15
15
  export class TimePickerComponent {
16
16
  #destroyRef;
17
17
  constructor() {
18
18
  this.#destroyRef = inject(DestroyRef);
19
- this._cleaner = true;
19
+ /**
20
+ * Toggle visibility or set the content of the cleaner button.
21
+ * @type boolean
22
+ * @default true
23
+ */
24
+ this.cleaner = true;
20
25
  /**
21
26
  * Sets DateTime format options including timeZone
22
27
  * @type DateTimeFormatOptions
@@ -24,9 +29,24 @@ export class TimePickerComponent {
24
29
  * @note The date object doesn't store timeZone, it keeps the local timezone of the browser, regardless if you parsed UTC dates.
25
30
  */
26
31
  this.dateTimeFormatOptions = {};
27
- this._disabled = false;
28
- this._indicator = true;
29
- this._inputReadOnly = false;
32
+ /**
33
+ * Toggle the disabled state for the component.
34
+ * @type boolean
35
+ * @default false
36
+ */
37
+ this.disabled = false;
38
+ /**
39
+ * Toggle visibility or set the content of the input indicator.
40
+ * @type boolean
41
+ * @default true
42
+ */
43
+ this.indicator = true;
44
+ /**
45
+ * Toggle the readonly state for the component.
46
+ * @type boolean
47
+ * @default false
48
+ */
49
+ this.inputReadOnly = false;
30
50
  /**
31
51
  * Sets the default locale for components. If not set, it is inherited from the browser.
32
52
  * @type string
@@ -39,14 +59,24 @@ export class TimePickerComponent {
39
59
  * @default 'Select time'
40
60
  */
41
61
  this.placeholder = 'Select time';
42
- this._seconds = false;
62
+ /**
63
+ * Toggle seconds visibility.
64
+ * @type boolean
65
+ * @default false
66
+ */
67
+ this.seconds = false;
43
68
  /**
44
69
  * Set the time picker variant to a roll or select.
45
70
  * @type 'roll' | 'select'
46
71
  * @default 'roll'
47
72
  */
48
73
  this.variant = 'roll';
49
- this._visible = false;
74
+ /**
75
+ * Toggle the visibility of dropdown timepicker menu component.
76
+ * @type boolean
77
+ * @default false
78
+ */
79
+ this.visible = false;
50
80
  this.timeChange = new EventEmitter(false);
51
81
  this.templates = {};
52
82
  this.hour12 = isHour12(this.locale);
@@ -73,61 +103,6 @@ export class TimePickerComponent {
73
103
  this.onChange = (value) => { };
74
104
  this.onTouched = () => { };
75
105
  }
76
- /**
77
- * Toggle visibility or set the content of the cleaner button.
78
- * @type boolean
79
- * @default true
80
- */
81
- set cleaner(value) {
82
- this._cleaner = coerceBooleanProperty(value);
83
- }
84
- get cleaner() {
85
- return this._cleaner;
86
- }
87
- /**
88
- * Toggle the disabled state for the component.
89
- * @type boolean
90
- * @default false
91
- */
92
- set disabled(value) {
93
- this._disabled = coerceBooleanProperty(value);
94
- }
95
- get disabled() {
96
- return this._disabled;
97
- }
98
- /**
99
- * Toggle visibility or set the content of the input indicator.
100
- * @type boolean
101
- * @default true
102
- */
103
- set indicator(value) {
104
- this._indicator = coerceBooleanProperty(value);
105
- }
106
- get indicator() {
107
- return this._indicator;
108
- }
109
- /**
110
- * Toggle the readonly state for the component.
111
- * @type boolean
112
- * @default false
113
- */
114
- set inputReadOnly(value) {
115
- this._inputReadOnly = coerceBooleanProperty(value);
116
- }
117
- get inputReadOnly() {
118
- return this._inputReadOnly;
119
- }
120
- /**
121
- * Toggle seconds visibility.
122
- * @type boolean
123
- * @default false
124
- */
125
- set seconds(value) {
126
- this._seconds = coerceBooleanProperty(value);
127
- }
128
- get seconds() {
129
- return this._seconds;
130
- }
131
106
  /**
132
107
  * Initial selected time.
133
108
  * @type Date | string | null | number
@@ -152,20 +127,18 @@ export class TimePickerComponent {
152
127
  get time() {
153
128
  return this._time;
154
129
  }
155
- /**
156
- * Toggle the visibility of dropdown timepicker menu component.
157
- * @type boolean
158
- * @default false
159
- */
160
- set visible(value) {
161
- this._visible = coerceBooleanProperty(value);
162
- }
163
- get visible() {
164
- return this._visible;
165
- }
166
130
  onBlur() {
167
131
  this.onTouched();
168
132
  }
133
+ getListOfHours12() {
134
+ const listOfHours12 = this.hour12 ?
135
+ this.listOfHours?.filter((item) => (item.dayPeriod && item.dayPeriod === this.dayPeriod) || !item.dayPeriod)
136
+ : this.listOfHours;
137
+ if (this.hour12) {
138
+ listOfHours12.push(listOfHours12.shift());
139
+ }
140
+ return listOfHours12;
141
+ }
169
142
  set timeInputValue(value) {
170
143
  this.timeInput.setValue(value);
171
144
  this._timeInputValue = value;
@@ -175,9 +148,12 @@ export class TimePickerComponent {
175
148
  }
176
149
  get timePickerClasses() {
177
150
  return {
151
+ 'time-picker': true,
152
+ [`time-picker-${this.size}`]: !!this.size,
178
153
  'form-control': this.variant === 'select' && this.valid !== undefined,
179
154
  'is-valid': this.valid === true,
180
- 'is-invalid': this.valid === false
155
+ 'is-invalid': this.valid === false,
156
+ disabled: this.disabled
181
157
  };
182
158
  }
183
159
  set hour(value) {
@@ -217,11 +193,19 @@ export class TimePickerComponent {
217
193
  return this._second;
218
194
  }
219
195
  set dayPeriod(value) {
220
- this._dayPeriod = value;
221
- this.listOfHours12 = this.hour12
222
- ? this.listOfHours?.filter((item) => (item.dayPeriod && item.dayPeriod === value) || !item.dayPeriod)
223
- : this.listOfHours;
224
- this.patchSelectTimeValues();
196
+ if (this._dayPeriod !== value) {
197
+ this._dayPeriod = value;
198
+ if (this.listOfHours) {
199
+ this.listOfHours12 = this.getListOfHours12();
200
+ }
201
+ this.patchSelectTimeValues();
202
+ }
203
+ // this.listOfHours12 = this.hour12
204
+ // ? this.listOfHours?.filter(
205
+ // (item) => (item.dayPeriod && item.dayPeriod === value) || !item.dayPeriod
206
+ // )
207
+ // : this.listOfHours;
208
+ // this.patchSelectTimeValues();
225
209
  }
226
210
  get dayPeriod() {
227
211
  return this._dayPeriod;
@@ -293,9 +277,7 @@ export class TimePickerComponent {
293
277
  this.listOfMinutes.unshift({ ...undefSegment });
294
278
  this.listOfSeconds.unshift({ ...undefSegment });
295
279
  }
296
- this.listOfHours12 = this.hour12
297
- ? this.listOfHours.filter((item) => (item.dayPeriod && item.dayPeriod === this.dayPeriod) || !item.dayPeriod)
298
- : this.listOfHours;
280
+ this.listOfHours12 = this.getListOfHours12();
299
281
  }
300
282
  updateSelectTime(time = this.time) {
301
283
  if (!!time && isValidTime(time)) {
@@ -341,23 +323,9 @@ export class TimePickerComponent {
341
323
  this.updateSelectTime();
342
324
  }
343
325
  }
344
- handleSelectHoursChange(hour) {
345
- this.hour = hour;
346
- if (hour >= 0) {
347
- this.setTime();
348
- }
349
- this.updateSelectTime();
350
- }
351
- handleSelectMinutesChange(minute) {
352
- this.minute = minute;
353
- if (minute >= 0) {
354
- this.setTime();
355
- }
356
- this.updateSelectTime();
357
- }
358
- handleSelectSecondsChange(second) {
359
- this.second = second;
360
- if (second >= 0) {
326
+ handleSelectTimeChange(value, segment) {
327
+ this[segment] = value;
328
+ if (value >= 0) {
361
329
  this.setTime();
362
330
  }
363
331
  this.updateSelectTime();
@@ -442,17 +410,17 @@ export class TimePickerComponent {
442
410
  }
443
411
  this.selectTime.get('selectHours')?.valueChanges
444
412
  .pipe(tap(value => {
445
- this.handleSelectHoursChange(value);
413
+ this.handleSelectTimeChange(value, 'hour');
446
414
  }), takeUntilDestroyed(this.#destroyRef))
447
415
  .subscribe();
448
416
  this.selectTime.get('selectMinutes')?.valueChanges
449
417
  .pipe(tap(value => {
450
- this.handleSelectMinutesChange(value);
418
+ this.handleSelectTimeChange(value, 'minute');
451
419
  }), takeUntilDestroyed(this.#destroyRef))
452
420
  .subscribe();
453
421
  this.selectTime.get('selectSeconds')?.valueChanges
454
422
  .pipe(filter(() => this.seconds), tap(value => {
455
- this.handleSelectSecondsChange(value);
423
+ this.handleSelectTimeChange(value, 'second');
456
424
  }), takeUntilDestroyed(this.#destroyRef))
457
425
  .subscribe();
458
426
  this.selectTime.get('selectDayPeriod')?.valueChanges
@@ -461,16 +429,16 @@ export class TimePickerComponent {
461
429
  }), takeUntilDestroyed(this.#destroyRef))
462
430
  .subscribe();
463
431
  }
464
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: TimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
465
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.5", type: TimePickerComponent, isStandalone: true, selector: "c-time-picker", inputs: { cleaner: "cleaner", dateTimeFormatOptions: "dateTimeFormatOptions", disabled: "disabled", filterHours: "filterHours", filterMinutes: "filterMinutes", filterSeconds: "filterSeconds", indicator: "indicator", inputReadOnly: "inputReadOnly", locale: "locale", placeholder: "placeholder", seconds: "seconds", size: "size", time: "time", variant: "variant", valid: "valid", visible: "visible" }, outputs: { timeChange: "timeChange" }, host: { listeners: { "blur": "onBlur()" } }, providers: [
432
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
433
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.6", type: TimePickerComponent, isStandalone: true, selector: "c-time-picker", inputs: { cleaner: ["cleaner", "cleaner", booleanAttribute], dateTimeFormatOptions: "dateTimeFormatOptions", disabled: ["disabled", "disabled", booleanAttribute], filterHours: "filterHours", filterMinutes: "filterMinutes", filterSeconds: "filterSeconds", indicator: ["indicator", "indicator", booleanAttribute], inputReadOnly: ["inputReadOnly", "inputReadOnly", booleanAttribute], locale: "locale", placeholder: "placeholder", seconds: ["seconds", "seconds", booleanAttribute], size: "size", time: "time", variant: "variant", valid: "valid", visible: ["visible", "visible", booleanAttribute] }, outputs: { timeChange: "timeChange" }, host: { listeners: { "blur": "onBlur()" } }, providers: [
466
434
  {
467
435
  provide: NG_VALUE_ACCESSOR,
468
436
  useExisting: forwardRef(() => TimePickerComponent),
469
437
  multi: true
470
438
  }
471
- ], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "dropdownRef", first: true, predicate: DropdownComponent, descendants: true, read: ElementRef }], exportAs: ["cTimePicker"], usesOnChanges: true, ngImport: i0, template: "<div class=\"date-picker-timepickers\" *ngIf=\"variant==='select'\">\n <div class=\"picker time-picker\">\n <div [formGroup]=\"selectTime\" class=\"time-picker-body\" [ngClass]=\"timePickerClasses\">\n <span class=\"time-picker-inline-icon\"></span>\n <select [attr.disabled]=\"disabled || null\" cSelect class=\"ms-0\" formControlName=\"selectHours\" (blur)=\"onBlur()\" [sizing]=\"size ?? ''\">\n <option *ngFor=\"let hour of listOfHours12; index as i; trackBy: trackByHour\" [ngValue]=\"hour.value\" [attr.disabled]=\"hour.disabled || null\">{{hour.label}}</option>\n </select>\n {{' :'}}<select [attr.disabled]=\"disabled || null\" cSelect class=\"ms-0\" formControlName=\"selectMinutes\" (blur)=\"onBlur()\" [sizing]=\"size ?? ''\">\n <option *ngFor=\"let minute of listOfMinutes\" [ngValue]=\"minute.value\" [attr.disabled]=\"minute.disabled || null\">{{minute.label}}</option>\n </select>\n <ng-template [ngIf]=\"seconds\">\n {{' :'}}<select [attr.disabled]=\"disabled || null\" cSelect class=\"ms-0\" formControlName=\"selectSeconds\" (blur)=\"onBlur()\" [sizing]=\"size ?? ''\">\n <option *ngFor=\"let second of listOfSeconds\" [ngValue]=\"second.value\" [attr.disabled]=\"second.disabled || null\">{{second.label}}</option>\n </select>\n </ng-template>\n <ng-template [ngIf]=\"hour12\">\n <select [attr.disabled]=\"disabled || null\" cSelect class=\"ms-0\" formControlName=\"selectDayPeriod\" (blur)=\"onBlur()\" [sizing]=\"size ?? ''\">\n <option *ngFor=\"let dayPeriod of dayPeriods\" [ngValue]=\"dayPeriod.value\" class=\"time-picker-roll-cell\">{{dayPeriod.label}}</option>\n </select>\n </ng-template>\n </div>\n </div>\n</div>\n\n<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"time-picker picker\" [ngClass]=\"timePickerClasses\" *ngIf=\"variant==='roll'\" [visible]=\"visible\">\n <c-input-group [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n [sizing]=\"size ?? ''\"\n cDropdownToggle\n class=\"picker-input-group\">\n <input (blur)=\"handleBlur($event);\"\n (change)=\"handleTimeInputChange($event)\"\n (focus)=\"handleFocus($event)\"\n [formControl]=\"timeInput\"\n [placeholder]=\"placeholder\"\n cFormControl\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.pattern]=\"hour12 ? '(((0[1-9])|(1[0-2])):([0-5])([0-9])\\\\s(A|P)M)' : '([01]?[0-9]|2[0-3]):[0-5][0-9]'\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid\"\n >\n <span *ngIf=\"indicator || cleaner\" cInputGroupText>\n <span *ngIf=\"indicator\" class=\"picker-input-group-indicator\">\n <span class=\"picker-input-group-icon time-picker-input-icon\"></span>\n </span>\n <span (click)=\"!disabled && handleClear($event)\" *ngIf=\"cleaner && time && !disabled\" class=\"picker-input-group-cleaner\" role=\"button\">\n <span class=\"picker-input-group-icon time-picker-cleaner-icon\"></span>\n </span>\n </span>\n\n </c-input-group>\n <div cDropdownMenu #dropdownMenu=\"cDropdownMenu\">\n <div class=\"time-picker-body time-picker-roll\" style=\"position: relative;\">\n <c-time-picker-roll-col\n [elements]=\"listOfHours12\"\n [selected]=\"hour\"\n (selectedChange)=\"handleSelectHoursChange($event)\"\n [disabled]=\"disabled\"\n [refresh]=\"dropdownMenu.visible\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-col\n [elements]=\"listOfMinutes\"\n [selected]=\"minute\"\n (selectedChange)=\"handleSelectMinutesChange($event)\"\n [disabled]=\"disabled\"\n [refresh]=\"dropdownMenu.visible\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-col\n *ngIf=\"seconds\"\n [elements]=\"listOfSeconds\"\n [selected]=\"second\"\n (selectedChange)=\"handleSelectSecondsChange($event)\"\n [disabled]=\"disabled\"\n [refresh]=\"dropdownMenu.visible\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-am-pm\n *ngIf=\"hour12\" [elements]=\"dayPeriods\"\n [selected]=\"dayPeriod\"\n (selectedChange)=\"handleSelectDayPeriodChange($event)\"\n [disabled]=\"disabled\"\n [refresh]=\"dropdownMenu.visible\"\n role=\"listbox\"\n >\n </c-time-picker-roll-am-pm>\n </div>\n <div *ngIf=\"templates?.timePickerFooter\" class=\"picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.timePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n</c-dropdown>\n", styles: [".disabled{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.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: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "dark", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible", "dark"], exportAs: ["cDropdownMenu"] }, { kind: "directive", type: FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "directive", type: FormSelectDirective, selector: "select[cSelect]", inputs: ["sizing", "valid"] }, { kind: "component", type: InputGroupComponent, selector: "c-input-group", inputs: ["sizing"] }, { kind: "directive", type: InputGroupTextDirective, selector: "[cInputGroupText]" }, { kind: "component", type: TimePickerRollColComponent, selector: "c-time-picker-roll-col", inputs: ["disabled", "elements", "onClick", "selected", "refresh"], outputs: ["selectedChange"], exportAs: ["cTimePickerRollCol"] }, { kind: "component", type: TimePickerRollAmPmComponent, selector: "c-time-picker-roll-am-pm", inputs: ["disabled", "elements", "onClick", "selected", "refresh"], outputs: ["selectedChange"] }] }); }
439
+ ], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "dropdownRef", first: true, predicate: DropdownComponent, descendants: true, read: ElementRef }], exportAs: ["cTimePicker"], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"variant==='select'\" class=\"date-picker-timepickers\">\n <div class=\"picker time-picker\">\n <div [formGroup]=\"selectTime\" [ngClass]=\"timePickerClasses\" class=\"time-picker-body\">\n <span class=\"time-picker-inline-icon\"></span>\n <select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectHours\">\n <option *ngFor=\"let hour of listOfHours12; index as i; trackBy: trackByHour\" [attr.disabled]=\"hour.disabled || null\"\n [ngValue]=\"hour.value\">{{hour.label}}</option>\n </select>\n {{' :'}}<select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectMinutes\">\n <option *ngFor=\"let minute of listOfMinutes ; trackBy: trackByHour\" [attr.disabled]=\"minute.disabled || null\"\n [ngValue]=\"minute.value\">{{minute.label}}</option>\n </select>\n <ng-template [ngIf]=\"seconds\">\n {{' :'}}<select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectSeconds\">\n <option *ngFor=\"let second of listOfSeconds; trackBy: trackByHour\" [attr.disabled]=\"second.disabled || null\"\n [ngValue]=\"second.value\">{{second.label}}</option>\n </select>\n </ng-template>\n <ng-template [ngIf]=\"hour12\">\n <select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectDayPeriod\">\n <option *ngFor=\"let dayPeriod of dayPeriods\" [ngValue]=\"dayPeriod.value\"\n class=\"time-picker-roll-cell\">{{dayPeriod.label}}</option>\n </select>\n </ng-template>\n </div>\n </div>\n</div>\n\n<c-dropdown #dropdown=\"cDropdown\" *ngIf=\"variant==='roll'\" [autoClose]=\"'outside'\" [ngClass]=\"timePickerClasses\"\n [visible]=\"visible\">\n <div [caret]=\"false\" cDropdownToggle class=\"time-picker-input-group\">\n <input (blur)=\"handleBlur($event);\"\n (change)=\"handleTimeInputChange($event)\"\n (focus)=\"handleFocus($event)\"\n [attr.disabled]=\"disabled ?? dropdown.visible ? '' : null\"\n [attr.pattern]=\"hour12 ? '(((0[1-9])|(1[0-2])):([0-5])([0-9])\\\\s(A|P)M)' : '([01]?[0-9]|2[0-3]):[0-5][0-9]'\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"timeInput\"\n [placeholder]=\"placeholder\"\n [readonly]=\"inputReadOnly ?? null\"\n class=\"time-picker-input\"\n >\n <div *ngIf=\"indicator\" class=\"time-picker-indicator\"></div>\n <div (click)=\"!disabled && handleClear($event)\" *ngIf=\"cleaner && time && !disabled\" class=\"time-picker-cleaner\"\n role=\"button\"></div>\n\n </div>\n <div #dropdownMenu=\"cDropdownMenu\" cDropdownMenu class=\"time-picker-dropdown py-0\">\n <div class=\"time-picker-body time-picker-roll\" style=\"position: relative;\">\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'hour')\"\n [disabled]=\"disabled\"\n [elements]=\"listOfHours12\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"hour\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'minute')\"\n [disabled]=\"disabled\"\n [elements]=\"listOfMinutes\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"minute\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'second')\"\n *ngIf=\"seconds\"\n [disabled]=\"disabled\"\n [elements]=\"listOfSeconds\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"second\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-am-pm\n (selectedChange)=\"handleSelectDayPeriodChange($event)\" *ngIf=\"hour12\"\n [disabled]=\"disabled\"\n [elements]=\"dayPeriods\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"dayPeriod\"\n role=\"listbox\"\n >\n </c-time-picker-roll-am-pm>\n </div>\n <div *ngIf=\"templates?.timePickerFooter\" class=\"time-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.timePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n</c-dropdown>\n", styles: [".disabled{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.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: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible"], exportAs: ["cDropdownMenu"] }, { kind: "directive", type: FormSelectDirective, selector: "select[cSelect]", inputs: ["sizing", "valid"] }, { kind: "component", type: TimePickerRollColComponent, selector: "c-time-picker-roll-col", inputs: ["disabled", "elements", "onClick", "selected", "refresh"], outputs: ["selectedChange"], exportAs: ["cTimePickerRollCol"] }, { kind: "component", type: TimePickerRollAmPmComponent, selector: "c-time-picker-roll-am-pm", inputs: ["disabled", "elements", "onClick", "selected", "refresh"], outputs: ["selectedChange"] }] }); }
472
440
  }
473
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: TimePickerComponent, decorators: [{
441
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TimePickerComponent, decorators: [{
474
442
  type: Component,
475
443
  args: [{ selector: 'c-time-picker', exportAs: 'cTimePicker', standalone: true, imports: [
476
444
  NgClass,
@@ -493,13 +461,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
493
461
  useExisting: forwardRef(() => TimePickerComponent),
494
462
  multi: true
495
463
  }
496
- ], template: "<div class=\"date-picker-timepickers\" *ngIf=\"variant==='select'\">\n <div class=\"picker time-picker\">\n <div [formGroup]=\"selectTime\" class=\"time-picker-body\" [ngClass]=\"timePickerClasses\">\n <span class=\"time-picker-inline-icon\"></span>\n <select [attr.disabled]=\"disabled || null\" cSelect class=\"ms-0\" formControlName=\"selectHours\" (blur)=\"onBlur()\" [sizing]=\"size ?? ''\">\n <option *ngFor=\"let hour of listOfHours12; index as i; trackBy: trackByHour\" [ngValue]=\"hour.value\" [attr.disabled]=\"hour.disabled || null\">{{hour.label}}</option>\n </select>\n {{' :'}}<select [attr.disabled]=\"disabled || null\" cSelect class=\"ms-0\" formControlName=\"selectMinutes\" (blur)=\"onBlur()\" [sizing]=\"size ?? ''\">\n <option *ngFor=\"let minute of listOfMinutes\" [ngValue]=\"minute.value\" [attr.disabled]=\"minute.disabled || null\">{{minute.label}}</option>\n </select>\n <ng-template [ngIf]=\"seconds\">\n {{' :'}}<select [attr.disabled]=\"disabled || null\" cSelect class=\"ms-0\" formControlName=\"selectSeconds\" (blur)=\"onBlur()\" [sizing]=\"size ?? ''\">\n <option *ngFor=\"let second of listOfSeconds\" [ngValue]=\"second.value\" [attr.disabled]=\"second.disabled || null\">{{second.label}}</option>\n </select>\n </ng-template>\n <ng-template [ngIf]=\"hour12\">\n <select [attr.disabled]=\"disabled || null\" cSelect class=\"ms-0\" formControlName=\"selectDayPeriod\" (blur)=\"onBlur()\" [sizing]=\"size ?? ''\">\n <option *ngFor=\"let dayPeriod of dayPeriods\" [ngValue]=\"dayPeriod.value\" class=\"time-picker-roll-cell\">{{dayPeriod.label}}</option>\n </select>\n </ng-template>\n </div>\n </div>\n</div>\n\n<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"time-picker picker\" [ngClass]=\"timePickerClasses\" *ngIf=\"variant==='roll'\" [visible]=\"visible\">\n <c-input-group [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n [sizing]=\"size ?? ''\"\n cDropdownToggle\n class=\"picker-input-group\">\n <input (blur)=\"handleBlur($event);\"\n (change)=\"handleTimeInputChange($event)\"\n (focus)=\"handleFocus($event)\"\n [formControl]=\"timeInput\"\n [placeholder]=\"placeholder\"\n cFormControl\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.pattern]=\"hour12 ? '(((0[1-9])|(1[0-2])):([0-5])([0-9])\\\\s(A|P)M)' : '([01]?[0-9]|2[0-3]):[0-5][0-9]'\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid\"\n >\n <span *ngIf=\"indicator || cleaner\" cInputGroupText>\n <span *ngIf=\"indicator\" class=\"picker-input-group-indicator\">\n <span class=\"picker-input-group-icon time-picker-input-icon\"></span>\n </span>\n <span (click)=\"!disabled && handleClear($event)\" *ngIf=\"cleaner && time && !disabled\" class=\"picker-input-group-cleaner\" role=\"button\">\n <span class=\"picker-input-group-icon time-picker-cleaner-icon\"></span>\n </span>\n </span>\n\n </c-input-group>\n <div cDropdownMenu #dropdownMenu=\"cDropdownMenu\">\n <div class=\"time-picker-body time-picker-roll\" style=\"position: relative;\">\n <c-time-picker-roll-col\n [elements]=\"listOfHours12\"\n [selected]=\"hour\"\n (selectedChange)=\"handleSelectHoursChange($event)\"\n [disabled]=\"disabled\"\n [refresh]=\"dropdownMenu.visible\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-col\n [elements]=\"listOfMinutes\"\n [selected]=\"minute\"\n (selectedChange)=\"handleSelectMinutesChange($event)\"\n [disabled]=\"disabled\"\n [refresh]=\"dropdownMenu.visible\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-col\n *ngIf=\"seconds\"\n [elements]=\"listOfSeconds\"\n [selected]=\"second\"\n (selectedChange)=\"handleSelectSecondsChange($event)\"\n [disabled]=\"disabled\"\n [refresh]=\"dropdownMenu.visible\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-am-pm\n *ngIf=\"hour12\" [elements]=\"dayPeriods\"\n [selected]=\"dayPeriod\"\n (selectedChange)=\"handleSelectDayPeriodChange($event)\"\n [disabled]=\"disabled\"\n [refresh]=\"dropdownMenu.visible\"\n role=\"listbox\"\n >\n </c-time-picker-roll-am-pm>\n </div>\n <div *ngIf=\"templates?.timePickerFooter\" class=\"picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.timePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n</c-dropdown>\n", styles: [".disabled{pointer-events:none}\n"] }]
464
+ ], template: "<div *ngIf=\"variant==='select'\" class=\"date-picker-timepickers\">\n <div class=\"picker time-picker\">\n <div [formGroup]=\"selectTime\" [ngClass]=\"timePickerClasses\" class=\"time-picker-body\">\n <span class=\"time-picker-inline-icon\"></span>\n <select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectHours\">\n <option *ngFor=\"let hour of listOfHours12; index as i; trackBy: trackByHour\" [attr.disabled]=\"hour.disabled || null\"\n [ngValue]=\"hour.value\">{{hour.label}}</option>\n </select>\n {{' :'}}<select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectMinutes\">\n <option *ngFor=\"let minute of listOfMinutes ; trackBy: trackByHour\" [attr.disabled]=\"minute.disabled || null\"\n [ngValue]=\"minute.value\">{{minute.label}}</option>\n </select>\n <ng-template [ngIf]=\"seconds\">\n {{' :'}}<select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectSeconds\">\n <option *ngFor=\"let second of listOfSeconds; trackBy: trackByHour\" [attr.disabled]=\"second.disabled || null\"\n [ngValue]=\"second.value\">{{second.label}}</option>\n </select>\n </ng-template>\n <ng-template [ngIf]=\"hour12\">\n <select (blur)=\"onBlur()\" [attr.disabled]=\"disabled || null\" [sizing]=\"size ?? ''\"\n cSelect class=\"time-picker-inline-select ms-0\" formControlName=\"selectDayPeriod\">\n <option *ngFor=\"let dayPeriod of dayPeriods\" [ngValue]=\"dayPeriod.value\"\n class=\"time-picker-roll-cell\">{{dayPeriod.label}}</option>\n </select>\n </ng-template>\n </div>\n </div>\n</div>\n\n<c-dropdown #dropdown=\"cDropdown\" *ngIf=\"variant==='roll'\" [autoClose]=\"'outside'\" [ngClass]=\"timePickerClasses\"\n [visible]=\"visible\">\n <div [caret]=\"false\" cDropdownToggle class=\"time-picker-input-group\">\n <input (blur)=\"handleBlur($event);\"\n (change)=\"handleTimeInputChange($event)\"\n (focus)=\"handleFocus($event)\"\n [attr.disabled]=\"disabled ?? dropdown.visible ? '' : null\"\n [attr.pattern]=\"hour12 ? '(((0[1-9])|(1[0-2])):([0-5])([0-9])\\\\s(A|P)M)' : '([01]?[0-9]|2[0-3]):[0-5][0-9]'\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"timeInput\"\n [placeholder]=\"placeholder\"\n [readonly]=\"inputReadOnly ?? null\"\n class=\"time-picker-input\"\n >\n <div *ngIf=\"indicator\" class=\"time-picker-indicator\"></div>\n <div (click)=\"!disabled && handleClear($event)\" *ngIf=\"cleaner && time && !disabled\" class=\"time-picker-cleaner\"\n role=\"button\"></div>\n\n </div>\n <div #dropdownMenu=\"cDropdownMenu\" cDropdownMenu class=\"time-picker-dropdown py-0\">\n <div class=\"time-picker-body time-picker-roll\" style=\"position: relative;\">\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'hour')\"\n [disabled]=\"disabled\"\n [elements]=\"listOfHours12\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"hour\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'minute')\"\n [disabled]=\"disabled\"\n [elements]=\"listOfMinutes\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"minute\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-col\n (selectedChange)=\"handleSelectTimeChange($event, 'second')\"\n *ngIf=\"seconds\"\n [disabled]=\"disabled\"\n [elements]=\"listOfSeconds\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"second\"\n role=\"listbox\"\n >\n </c-time-picker-roll-col>\n <c-time-picker-roll-am-pm\n (selectedChange)=\"handleSelectDayPeriodChange($event)\" *ngIf=\"hour12\"\n [disabled]=\"disabled\"\n [elements]=\"dayPeriods\"\n [refresh]=\"dropdownMenu.visible\"\n [selected]=\"dayPeriod\"\n role=\"listbox\"\n >\n </c-time-picker-roll-am-pm>\n </div>\n <div *ngIf=\"templates?.timePickerFooter\" class=\"time-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.timePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n</c-dropdown>\n", styles: [".disabled{pointer-events:none}\n"] }]
497
465
  }], ctorParameters: () => [], propDecorators: { cleaner: [{
498
- type: Input
466
+ type: Input,
467
+ args: [{ transform: booleanAttribute }]
499
468
  }], dateTimeFormatOptions: [{
500
469
  type: Input
501
470
  }], disabled: [{
502
- type: Input
471
+ type: Input,
472
+ args: [{ transform: booleanAttribute }]
503
473
  }], filterHours: [{
504
474
  type: Input
505
475
  }], filterMinutes: [{
@@ -507,15 +477,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
507
477
  }], filterSeconds: [{
508
478
  type: Input
509
479
  }], indicator: [{
510
- type: Input
480
+ type: Input,
481
+ args: [{ transform: booleanAttribute }]
511
482
  }], inputReadOnly: [{
512
- type: Input
483
+ type: Input,
484
+ args: [{ transform: booleanAttribute }]
513
485
  }], locale: [{
514
486
  type: Input
515
487
  }], placeholder: [{
516
488
  type: Input
517
489
  }], seconds: [{
518
- type: Input
490
+ type: Input,
491
+ args: [{ transform: booleanAttribute }]
519
492
  }], size: [{
520
493
  type: Input
521
494
  }], time: [{
@@ -525,7 +498,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
525
498
  }], valid: [{
526
499
  type: Input
527
500
  }], visible: [{
528
- type: Input
501
+ type: Input,
502
+ args: [{ transform: booleanAttribute }]
529
503
  }], timeChange: [{
530
504
  type: Output
531
505
  }], onBlur: [{
@@ -538,4 +512,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
538
512
  type: ContentChildren,
539
513
  args: [TemplateIdDirective, { descendants: true }]
540
514
  }] } });
541
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0UsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUNMLGVBQWUsRUFDZixlQUFlLEVBQ2YsaUJBQWlCLEVBR2pCLE9BQU8sRUFDUCxhQUFhLEVBQ2IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLFdBQVcsRUFFWixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUs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Y2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nRm9yT2YsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIGNvbnZlcnQxMmhUbzI0aCxcbiAgY29udmVydDI0aFRvMTJoLFxuICBjb252ZXJ0VGltZVRvRGF0ZSxcbiAgRGF0ZVRpbWVGb3JtYXRPcHRpb25zLFxuICBEYXlQZXJpb2QsXG4gIGdldEFtUG0sXG4gIGdldERheVBlcmlvZHMsXG4gIGdldExpc3RPZkhvdXJzLFxuICBnZXRMaXN0T2ZNaW51dGVzLFxuICBnZXRMaXN0T2ZTZWNvbmRzLFxuICBpc0hvdXIxMixcbiAgaXNWYWxpZFRpbWUsXG4gIElUaW1lVmFsdWVcbn0gZnJvbSAnLi90aW1lLnV0aWxzJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50LCBEcm9wZG93bk1lbnVEaXJlY3RpdmUsIERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJvcGRvd24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xEaXJlY3RpdmUsIEZvcm1TZWxlY3REaXJlY3RpdmUsIElucHV0R3JvdXBDb21wb25lbnQsIElucHV0R3JvdXBUZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZm9ybSc7XG5pbXBvcnQgeyBUZW1wbGF0ZUlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vc2hhcmVkJztcbmltcG9ydCB7IFRpbWVQaWNrZXJSb2xsQ29sQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lLXBpY2tlci1yb2xsLWNvbC90aW1lLXBpY2tlci1yb2xsLWNvbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGltZVBpY2tlclJvbGxBbVBtQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lLXBpY2tlci1yb2xsLWNvbC90aW1lLXBpY2tlci1yb2xsLWFtLXBtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2MtdGltZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90aW1lLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NUaW1lUGlja2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgTmdJZixcbiAgICBOZ0Zvck9mLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBEcm9wZG93bkNvbXBvbmVudCxcbiAgICBEcm9wZG93blRvZ2dsZURpcmVjdGl2ZSxcbiAgICBEcm9wZG93bk1lbnVEaXJlY3RpdmUsXG4gICAgRm9ybUNvbnRyb2xEaXJlY3RpdmUsXG4gICAgRm9ybVNlbGVjdERpcmVjdGl2ZSxcbiAgICBJbnB1dEdyb3VwQ29tcG9uZW50LFxuICAgIElucHV0R3JvdXBUZXh0RGlyZWN0aXZlLFxuICAgIFRpbWVQaWNrZXJSb2xsQ29sQ29tcG9uZW50LFxuICAgIFRpbWVQaWNrZXJSb2xsQW1QbUNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVGltZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcmVhZG9ubHkgI2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jbGVhbmVyOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaW5kaWNhdG9yOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9pbnB1dFJlYWRPbmx5OiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zZWNvbmRzOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV92aXNpYmxlOiBCb29sZWFuSW5wdXQ7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9yIHNldCB0aGUgY29udGVudCBvZiB0aGUgY2xlYW5lciBidXR0b24uXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGNsZWFuZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGVhbmVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBjbGVhbmVyKCkge1xuICAgIHJldHVybiB0aGlzLl9jbGVhbmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW5lcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNldHMgRGF0ZVRpbWUgZm9ybWF0IG9wdGlvbnMgaW5jbHVkaW5nIHRpbWVab25lXG4gICAqIEB0eXBlIERhdGVUaW1lRm9ybWF0T3B0aW9uc1xuICAgKiBAZGVmYXVsdCB7fVxuICAgKiBAbm90ZSBUaGUgZGF0ZSBvYmplY3QgZG9lc24ndCBzdG9yZSB0aW1lWm9uZSwgaXQga2VlcHMgdGhlIGxvY2FsIHRpbWV6b25lIG9mIHRoZSBicm93c2VyLCByZWdhcmRsZXNzIGlmIHlvdSBwYXJzZWQgVVRDIGRhdGVzLlxuICAgKi9cbiAgQElucHV0KCkgZGF0ZVRpbWVGb3JtYXRPcHRpb25zOiBEYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7fTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBkaXNhYmxlZCBzdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBhdmFpbGFibGUgaG91cnMgdG8gcGljay5cbiAgICogQHR5cGUgKHZhbHVlOiBudW1iZXIpID0+IGJvb2xlYW47XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgZmlsdGVySG91cnM/OiAodmFsdWU6IG51bWJlcikgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogRmlsdGVyIGF2YWlsYWJsZSBtaW51dGVzIHRvIHBpY2suXG4gICAqIEB0eXBlICh2YWx1ZTogbnVtYmVyKSA9PiBib29sZWFuO1xuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIGZpbHRlck1pbnV0ZXM/OiAodmFsdWU6IG51bWJlcikgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogRmlsdGVyIGF2YWlsYWJsZSBzZWNvbmRzIHRvIHBpY2suXG4gICAqIEB0eXBlICh2YWx1ZTogbnVtYmVyKSA9PiBib29sZWFuO1xuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIGZpbHRlclNlY29uZHM/OiAodmFsdWU6IG51bWJlcikgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVG9nZ2xlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSBjb250ZW50IG9mIHRoZSBpbnB1dCBpbmRpY2F0b3IuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGluZGljYXRvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2luZGljYXRvciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaW5kaWNhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9pbmRpY2F0b3I7XG4gIH1cblxuICBwcml2YXRlIF9pbmRpY2F0b3I6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIHJlYWRvbmx5IHN0YXRlIGZvciB0aGUgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgaW5wdXRSZWFkT25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lucHV0UmVhZE9ubHkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGlucHV0UmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0UmVhZE9ubHk7XG4gIH1cblxuICBwcml2YXRlIF9pbnB1dFJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGRlZmF1bHQgbG9jYWxlIGZvciBjb21wb25lbnRzLiBJZiBub3Qgc2V0LCBpdCBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgYnJvd3Nlci5cbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0IGRlZmF1bHRcbiAgICovXG4gIEBJbnB1dCgpIGxvY2FsZTogc3RyaW5nID0gJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgc2hvcnQgaGludCB2aXNpYmxlIGluIHRpbWUgaW5wdXQuXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnU2VsZWN0IHRpbWUnXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCB0aW1lJztcblxuICAvKipcbiAgICogVG9nZ2xlIHNlY29uZHMgdmlzaWJpbGl0eS5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHNlY29uZHModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zZWNvbmRzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzZWNvbmRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWNvbmRzO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2Vjb25kczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTaXplIHRoZSBjb21wb25lbnQgc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgdW5kZWZpbmVkXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgc2l6ZT86ICdzbScgfCAnbGcnO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHNlbGVjdGVkIHRpbWUuXG4gICAqIEB0eXBlIERhdGUgfCBzdHJpbmcgfCBudWxsIHwgbnVtYmVyXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHRpbWUodmFsdWU6IERhdGUgfCBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgJiYgaXNWYWxpZFRpbWUodmFsdWUpKSB7XG4gICAgICBjb25zdCB0aW1lID0gY29udmVydFRpbWVUb0RhdGUodmFsdWUpO1xuICAgICAgaWYgKCF0aW1lKSB7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF5UGVyaW9kID0gZ2V0QW1QbSh0aW1lLCB0aGlzLmxvY2FsZSk7XG4gICAgICBpZiAodGhpcy5fdGltZT8uZ2V0VGltZSgpICE9PSB0aW1lLmdldFRpbWUoKSkge1xuICAgICAgICB0aGlzLl90aW1lID0gbmV3IERhdGUodGltZS5nZXRUaW1lKCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyVGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0aW1lKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90aW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGltZT86IERhdGU7XG4gIHByaXZhdGUgX3RpbWVJbnRlcm5hbD86IERhdGU7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdGltZSBwaWNrZXIgdmFyaWFudCB0byBhIHJvbGwgb3Igc2VsZWN0LlxuICAgKiBAdHlwZSAncm9sbCcgfCAnc2VsZWN0J1xuICAgKiBAZGVmYXVsdCAncm9sbCdcbiAgICovXG4gIEBJbnB1dCgpIHZhcmlhbnQ6ICdyb2xsJyB8ICdzZWxlY3QnID0gJ3JvbGwnO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzdWFsIHZhbGlkYXRpb24gZmVlZGJhY2suXG4gICAqIEB0eXBlIGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSB2YWxpZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBkcm9wZG93biB0aW1lcGlja2VyIG1lbnUgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Zpc2libGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gIH1cblxuICBwcml2YXRlIF92aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHRpbWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlIHwgdW5kZWZpbmVkPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKSBvbkJsdXIoKSB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoRHJvcGRvd25Db21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkcm9wZG93blJlZiE6IEVsZW1lbnRSZWY7XG5cbiAgdGVtcGxhdGVzOiBhbnkgPSB7fTtcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIGNvbnRlbnRUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVJZERpcmVjdGl2ZT47XG5cbiAgbGlzdE9mSG91cnMhOiBJVGltZVZhbHVlW107XG4gIGxpc3RPZkhvdXJzMTIhOiBJVGltZVZhbHVlW107XG4gIGxpc3RPZk1pbnV0ZXMhOiBJVGltZVZhbHVlW107XG4gIGxpc3RPZlNlY29uZHMhOiBJVGltZVZhbHVlW107XG4gIGhvdXIxMjogYm9vbGVhbiA9IGlzSG91cjEyKHRoaXMubG9jYWxlKTtcbiAgZGF5UGVyaW9kcyA9IFtcbiAgICB7IHZhbHVlOiAnYW0nLCBsYWJlbDogJ2FtJyB9LFxuICAgIHsgdmFsdWU6ICdwbScsIGxhYmVsOiAncG0nIH1cbiAgXTtcblxuICBzZXQgdGltZUlucHV0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudGltZUlucHV0LnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLl90aW1lSW5wdXRWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHRpbWVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVJbnB1dFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGltZUlucHV0VmFsdWU6IHN0cmluZyA9XG4gICAgdGhpcy50aW1lPy50b0xvY2FsZVRpbWVTdHJpbmcodGhpcy5sb2NhbGUsIHsgdGltZVN0eWxlOiB0aGlzLnNlY29uZHMgPyAnbWVkaXVtJyA6ICdzaG9ydCcgfSkgPz9cbiAgICAnJztcblxuICBnZXQgdGltZVBpY2tlckNsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdmb3JtLWNvbnRyb2wnOiB0aGlzLnZhcmlhbnQgPT09ICdzZWxlY3QnICYmIHRoaXMudmFsaWQgIT09IHVuZGVmaW5lZCxcbiAgICAgICdpcy12YWxpZCc6IHRoaXMudmFsaWQgPT09IHRydWUsXG4gICAgICAnaXMtaW52YWxpZCc6IHRoaXMudmFsaWQgPT09IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIHNlbGVjdFRpbWUgPSBuZXcgRm9ybUdyb3VwPHtcbiAgICBzZWxlY3RIb3VyczogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XG4gICAgc2VsZWN0TWludXRlczogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XG4gICAgc2VsZWN0U2Vjb25kcz86IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+O1xuICAgIHNlbGVjdERheVBlcmlvZD86IEZvcm1Db250cm9sPCdhbScgfCAncG0nIHwgbnVsbD47XG4gIH0+KFxuICAgIHtcbiAgICAgIHNlbGVjdEhvdXJzOiBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgIHsgdmFsdWU6IHRoaXMuaG91ciwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSxcbiAgICAgICAgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5taW4oMCksIFZhbGlkYXRvcnMubWF4KHRoaXMuaG91cjEyID8gMTEgOiAyMyldIH1cbiAgICAgICksXG4gICAgICBzZWxlY3RNaW51dGVzOiBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgIHsgdmFsdWU6IHRoaXMubWludXRlLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCB9LFxuICAgICAgICB7IHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1pbigwKSwgVmFsaWRhdG9ycy5tYXgoNTkpXSB9XG4gICAgICApLFxuICAgICAgc2VsZWN0U2Vjb25kczogbmV3IEZvcm1Db250cm9sKFxuICAgICAgICB7IHZhbHVlOiB0aGlzLnNlY29uZCwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSxcbiAgICAgICAgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5taW4oMCksIFZhbGlkYXRvcnMubWF4KDU5KV0gfVxuICAgICAgKSxcbiAgICAgIHNlbGVjdERheVBlcmlvZDogbmV3IEZvcm1Db250cm9sKFxuICAgICAgICB7IHZhbHVlOiB0aGlzLmRheVBlcmlvZCwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgKVxuICAgIH0sXG4gICAgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gfVxuICApO1xuXG4gIHRpbWVJbnB1dCA9IG5ldyBGb3JtQ29udHJvbChcbiAgICB7XG4gICAgICB2YWx1ZTogdGhpcy50aW1lSW5wdXRWYWx1ZSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgfSxcbiAgICB7IHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSB9XG4gICk7XG5cbiAgc2V0IGhvdXIodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl9ob3VyICE9PSB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICB0aGlzLmNsZWFyVGltZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9ob3VyID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhvdXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faG91cjtcbiAgfVxuXG4gIHByaXZhdGUgX2hvdXIgPSAtMTtcblxuICBzZXQgbWludXRlKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fbWludXRlICE9PSB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICB0aGlzLmNsZWFyVGltZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9taW51dGUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgbWludXRlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21pbnV0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX21pbnV0ZSA9IC0xO1xuXG4gIHNldCBzZWNvbmQodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl9zZWNvbmQgIT09IHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NlY29uZCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzZWNvbmQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vjb25kO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2Vjb25kID0gLTE7XG5cbiAgc2V0IGRheVBlcmlvZCh2YWx1ZSkge1xuICAgIHRoaXMuX2RheVBlcmlvZCA9IHZhbHVlO1xuICAgIHRoaXMubGlzdE9mSG91cnMxMiA9IHRoaXMuaG91cjEyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmxpc3RPZkhvdXJzPy5maWx0ZXIoXG4gICAgICAgIChpdGVtKSA9PiAoaXRlbS5kYXlQZXJpb2QgJiYgaXRlbS5kYXlQZXJpb2QgPT09IHZhbHVlKSB8fCAhaXRlbS5kYXlQZXJpb2RcbiAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMubGlzdE9mSG91cnM7XG4gICAgdGhpcy5wYXRjaFNlbGVjdFRpbWVWYWx1ZXMoKTtcbiAgfVxuXG4gIGdldCBkYXlQZXJpb2QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RheVBlcmlvZDtcbiAgfVxuXG4gIHByaXZhdGUgX2RheVBlcmlvZDogRGF5UGVyaW9kID0gJ2FtJztcblxuICBzZXRUaW1lKCkge1xuICAgIHRoaXMuX2hvdXIgPSB0aGlzLl9ob3VyIDwgMCA/IDAgOiB0aGlzLl9ob3VyO1xuICAgIHRoaXMuX21pbnV0ZSA9IHRoaXMuX21pbnV0ZSA8IDAgPyAwIDogdGhpcy5fbWludXRlO1xuICAgIHRoaXMuX3NlY29uZCA9IHRoaXMuX3NlY29uZCA8IDAgPyAwIDogdGhpcy5fc2Vjb25kO1xuXG4gICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKHRoaXMuX3RpbWU/LmdldFRpbWUoKSB8fCBuZXcgRGF0ZSgpKTtcbiAgICB0aW1lLnNldEhvdXJzKHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kLCAwKTtcbiAgICB0aGlzLnRpbWUgPSB0aW1lO1xuICAgIHRoaXMuZW1pdFRpbWUodGltZSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJUaW1lKCkge1xuICAgIGlmICh0aGlzLnRpbWUpIHtcbiAgICAgIHRoaXMuX3RpbWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmVtaXRUaW1lKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHRoaXMuX2hvdXIgPSAtMTtcbiAgICB0aGlzLl9taW51dGUgPSAtMTtcbiAgICB0aGlzLl9zZWNvbmQgPSAtMTtcbiAgICB0aGlzLmRheVBlcmlvZCA9ICdhbSc7XG4gICAgdGhpcy5wYXRjaFNlbGVjdFRpbWVWYWx1ZXMoKTtcbiAgICB0aGlzLnRpbWVJbnB1dFZhbHVlID0gJyc7XG4gIH1cblxuICBlbWl0VGltZSh0aW1lOiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdGltZVZhbHVlID0gISF0aW1lICYmIGlzVmFsaWRUaW1lKHRpbWUpID8gbmV3IERhdGUodGltZS5nZXRUaW1lKCkpIDogdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLl90aW1lSW50ZXJuYWw/LmdldFRpbWUoKSAhPT0gdGltZVZhbHVlPy5nZXRUaW1lKCkpIHtcbiAgICAgIHRoaXMudGltZUNoYW5nZS5lbWl0KHRpbWVWYWx1ZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRpbWVWYWx1ZSk7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy5fdGltZUludGVybmFsID0gdGltZVZhbHVlO1xuICAgIH1cbiAgICB0aGlzLnRpbWVJbnB1dFZhbHVlID1cbiAgICAgIHRoaXMudGltZT8udG9Mb2NhbGVUaW1lU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHRpbWVTdHlsZTogdGhpcy5zZWNvbmRzID8gJ21lZGl1bScgOiAnc2hvcnQnXG4gICAgICB9KSA/PyAnJztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VGltZUxpc3RzKCk7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RUaW1lKCk7XG4gICAgdGhpcy5zZXRDaGFuZ2VIYW5kbGVycygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd0aW1lJ10pIHtcbiAgICAgIGlmICghY2hhbmdlc1sndGltZSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGlmICh0aGlzLl90aW1lSW50ZXJuYWw/LmdldFRpbWUoKSAhPT0gY2hhbmdlc1sndGltZSddLmN1cnJlbnRWYWx1ZT8uZ2V0VGltZSgpKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RUaW1lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZXMuZm9yRWFjaCgoY2hpbGQ6IFRlbXBsYXRlSWREaXJlY3RpdmUpID0+IHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFRpbWVMaXN0cygpIHtcbiAgICB0aGlzLmRheVBlcmlvZHMgPSBnZXREYXlQZXJpb2RzKHRoaXMubG9jYWxlLCB0aGlzLmRhdGVUaW1lRm9ybWF0T3B0aW9ucyk7XG4gICAgdGhpcy5ob3VyMTIgPSBpc0hvdXIxMih0aGlzLmxvY2FsZSk7XG4gICAgdGhpcy5saXN0T2ZIb3VycyA9IHRoaXMubGlzdE9mVGltZVNlZ21lbnRzKGdldExpc3RPZkhvdXJzLCB0aGlzLmZpbHRlckhvdXJzKTtcbiAgICB0aGlzLmxpc3RPZk1pbnV0ZXMgPSB0aGlzLmxpc3RPZlRpbWVTZWdtZW50cyhnZXRMaXN0T2ZNaW51dGVzLCB0aGlzLmZpbHRlck1pbnV0ZXMpO1xuICAgIHRoaXMubGlzdE9mU2Vjb25kcyA9IHRoaXMubGlzdE9mVGltZVNlZ21lbnRzKGdldExpc3RPZlNlY29uZHMsIHRoaXMuZmlsdGVyU2Vjb25kcyk7XG4gICAgaWYgKHRoaXMudmFyaWFudCA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIGNvbnN0IHVuZGVmU2VnbWVudCA9IHsgdmFsdWU6IC0xLCBsYWJlbDogJyAtLScsIGRpc2FibGVkOiB0cnVlIH07XG4gICAgICB0aGlzLmxpc3RPZkhvdXJzLnVuc2hpZnQoeyAuLi51bmRlZlNlZ21lbnQgfSk7XG4gICAgICB0aGlzLmxpc3RPZk1pbnV0ZXMudW5zaGlmdCh7IC4uLnVuZGVmU2VnbWVudCB9KTtcbiAgICAgIHRoaXMubGlzdE9mU2Vjb25kcy51bnNoaWZ0KHsgLi4udW5kZWZTZWdtZW50IH0pO1xuICAgIH1cbiAgICB0aGlzLmxpc3RPZkhvdXJzMTIgPSB0aGlzLmhvdXIxMlxuICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5saXN0T2ZIb3Vycy5maWx0ZXIoXG4gICAgICAgIChpdGVtKSA9PiAoaXRlbS5kYXlQZXJpb2QgJiYgaXRlbS5kYXlQZXJpb2QgPT09IHRoaXMuZGF5UGVyaW9kKSB8fCAhaXRlbS5kYXlQZXJpb2RcbiAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMubGlzdE9mSG91cnM7XG4gIH1cblxuICB1cGRhdGVTZWxlY3RUaW1lKHRpbWUgPSB0aGlzLnRpbWUpIHtcbiAgICBpZiAoISF0aW1lICYmIGlzVmFsaWRUaW1lKHRpbWUpKSB7XG4gICAgICBjb25zdCBob3VyID0gdGltZS5nZXRIb3VycygpID8/IDA7XG4gICAgICBjb25zdCBtaW51dGUgPSB0aW1lLmdldE1pbnV0ZXMoKSA/PyAwO1xuICAgICAgY29uc3Qgc2Vjb25kID0gdGhpcy5zZWNvbmRzID8gdGltZS5nZXRTZWNvbmRzKCkgPz8gMCA6IDA7XG5cbiAgICAgIGNvbnN0IGNsb3Nlc3RTZWNvbmQgPSB0aGlzLmNsb3Nlc3RUaW1lKHRoaXMubGlzdE9mU2Vjb25kcywgc2Vjb25kKTtcbiAgICAgIGNvbnN0IGNsb3Nlc3RNaW51dGUgPSB0aGlzLmNsb3Nlc3RUaW1lKHRoaXMubGlzdE9mTWludXRlcywgbWludXRlKTtcbiAgICAgIGNvbnN0IGNsb3Nlc3RIb3VyID0gdGhpcy5jbG9zZXN0VGltZSh0aGlzLmxpc3RPZkhvdXJzLCBob3VyKTtcblxuICAgICAgdGhpcy5zZWNvbmQgPSB0aGlzLnNlY29uZHMgPyBjbG9zZXN0U2Vjb25kLnZhbHVlIDogMDtcbiAgICAgIHRoaXMubWludXRlID0gY2xvc2VzdE1pbnV0ZS52YWx1ZTtcbiAgICAgIHRoaXMuaG91ciA9IGNsb3Nlc3RIb3VyLnZhbHVlO1xuICAgICAgdGhpcy5zZXRUaW1lKCk7XG4gICAgICB0aGlzLnBhdGNoU2VsZWN0VGltZVZhbHVlcygpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3Nlc3RUaW1lKHRpbWVBcnJheTogSVRpbWVWYWx1ZVtdLCB0aW1lU2VnbWVudDogbnVtYmVyKSB7XG4gICAgbGV0IGFycmF5ID0gdGltZUFycmF5ID8/IFt7IHZhbHVlOiAwLCBsYWJlbDogJzAwJyB9XTtcbiAgICBpZiAodGhpcy50aW1lKSB7XG4gICAgICBhcnJheSA9IHRpbWVBcnJheS5maWx0ZXIoKGVsKSA9PiBlbC52YWx1ZSA+PSAwKTtcbiAgICAgIGFycmF5ID0gYXJyYXkubGVuZ3RoID8gYXJyYXkgOiB0aW1lQXJyYXk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheS5yZWR1Y2UoKGE6IElUaW1lVmFsdWUsIGI6IElUaW1lVmFsdWUpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLmFicyhiLnZhbHVlIC0gdGltZVNlZ21lbnQpIDwgTWF0aC5hYnMoYS52YWx1ZSAtIHRpbWVTZWdtZW50KSA/IGIgOiBhO1xuICAgIH0pO1xuICB9XG5cbiAgbGlzdE9mVGltZVNlZ21lbnRzKFxuICAgIGdldExpc3RPZlRpbWVTZWdtZW50czogKFxuICAgICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgICBkYXRlVGltZUZvcm1hdE9wdGlvbnM6IERhdGVUaW1lRm9ybWF0T3B0aW9uc1xuICAgICkgPT4gSVRpbWVWYWx1ZVtdLFxuICAgIGZpbHRlclRpbWVTZWdtZW50czogKCh0aW1lU2VnbWVudFZhbHVlOiBudW1iZXIpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGNvbnN0IGxpc3QgPSBnZXRMaXN0T2ZUaW1lU2VnbWVudHModGhpcy5sb2NhbGUsIHRoaXMuZGF0ZVRpbWVGb3JtYXRPcHRpb25zKS5maWx0ZXIoXG4gICAgICAoc2VnbWVudDogSVRpbWVWYWx1ZSkgPT4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGZpbHRlclRpbWVTZWdtZW50cyA9PT0gJ2Z1bmN0aW9uJyA/IGZpbHRlclRpbWVTZWdtZW50cyhzZWdtZW50LnZhbHVlKSA6IHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gbGlzdC5sZW5ndGhcbiAgICAgICAgICAgPyBsaXN0XG4gICAgICAgICAgIDogZ2V0TGlzdE9mVGltZVNlZ21lbnRzKHRoaXMubG9jYWxlLCB0aGlzLmRhdGVUaW1lRm9ybWF0T3B0aW9ucykuc2xpY2UoMCwgMSk7XG4gIH1cblxuICBoYW5kbGVTZWxlY3REYXlQZXJpb2RDaGFuZ2UoZGF5UGVyaW9kOiBEYXlQZXJpb2QpIHtcbiAgICBpZiAoZGF5UGVyaW9kICE9PSB0aGlzLmRheVBlcmlvZCkge1xuICAgICAgY29uc3QgaHJzID0gdGhpcy50aW1lPy5nZXRIb3VycygpID8/ICh0aGlzLmhvdXIgPCAwID8gMCA6IHRoaXMuaG91cik7XG4gICAgICBjb25zdCBob3VyID0gaHJzID4gMTIgPyBjb252ZXJ0MjRoVG8xMmgoaHJzKSA6IGNvbnZlcnQxMmhUbzI0aChkYXlQZXJpb2QsIGhycyk7XG4gICAgICB0aGlzLmhvdXIgPSB0aGlzLmNsb3Nlc3RUaW1lKHRoaXMubGlzdE9mSG91cnMsIGhvdXIpLnZhbHVlO1xuICAgICAgaWYgKGhvdXIgPj0gMCkge1xuICAgICAgICB0aGlzLnNldFRpbWUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0VGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNlbGVjdEhvdXJzQ2hhbmdlKGhvdXI6IG51bWJlcikge1xuICAgIHRoaXMuaG91ciA9IGhvdXI7XG4gICAgaWYgKGhvdXIgPj0gMCkge1xuICAgICAgdGhpcy5zZXRUaW1lKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU2VsZWN0VGltZSgpO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0TWludXRlc0NoYW5nZShtaW51dGU6IG51bWJlcikge1xuICAgIHRoaXMubWludXRlID0gbWludXRlO1xuICAgIGlmIChtaW51dGUgPj0gMCkge1xuICAgICAgdGhpcy5zZXRUaW1lKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU2VsZWN0VGltZSgpO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0U2Vjb25kc0NoYW5nZShzZWNvbmQ6IG51bWJlcikge1xuICAgIHRoaXMuc2Vjb25kID0gc2Vjb25kO1xuICAgIGlmIChzZWNvbmQgPj0gMCkge1xuICAgICAgdGhpcy5zZXRUaW1lKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU2VsZWN0VGltZSgpO1xuICB9XG5cbiAgcGF0Y2hTZWxlY3RUaW1lVmFsdWVzKCkge1xuICAgIGNvbnN0IGRheVBlcmlvZCA9IHRoaXMuc2VsZWN0VGltZS5nZXQoJ3NlbGVjdERheVBlcmlvZCcpPy52YWx1ZTtcbiAgICBpZiAodGhpcy5kYXlQZXJpb2QgIT09IGRheVBlcmlvZCkge1xuICAgICAgdGhpcy5zZWxlY3RUaW1lLnBhdGNoVmFsdWUoe1xuICAgICAgICBzZWxlY3REYXlQZXJpb2Q6IHRoaXMuZGF5UGVyaW9kID8/ICdhbSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBob3VycyA9IHRoaXMuc2VsZWN0VGltZS5nZXQoJ3NlbGVjdEhvdXJzJyk/LnZhbHVlO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSB0aGlzLnNlbGVjdFRpbWUuZ2V0KCdzZWxlY3RNaW51dGVzJyk/LnZhbHVlO1xuICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLnNlbGVjdFRpbWUuZ2V0KCdzZWxlY3RTZWNvbmRzJyk/LnZhbHVlO1xuICAgIGNvbnN0IGdvVXBkYXRlID1cbiAgICAgICh0aGlzLnNlY29uZCA8IDAgJiYgdGhpcy5taW51dGUgPCAwKSB8fFxuICAgICAgKHRoaXMuaG91ciA+PSAwICYmIHRoaXMubWludXRlID49IDAgJiYgdGhpcy5zZWNvbmQgPj0gMCk7XG4gICAgY29uc3QgdGltZUNoYW5nZWQgPSB0aGlzLmhvdXIgIT09IGhvdXJzIHx8IHRoaXMubWludXRlICE9PSBtaW51dGVzIHx8IHRoaXMuc2Vjb25kICE9PSBzZWNvbmRzO1xuICAgIGlmIChnb1VwZGF0ZSAmJiB0aW1lQ2hhbmdlZCkge1xuICAgICAgaWYgKHRoaXMuaG91ciAhPT0gaG91cnMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RUaW1lLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIHNlbGVjdEhvdXJzOiB0aGlzLmhvdXIgPz8gMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1pbnV0ZSAhPT0gbWludXRlcykge1xuICAgICAgICB0aGlzLnNlbGVjdFRpbWUucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgc2VsZWN0TWludXRlczogdGhpcy5taW51dGUgPz8gMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlY29uZCAhPT0gc2Vjb25kcykge1xuICAgICAgICB0aGlzLnNlbGVjdFRpbWUucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgc2VsZWN0U2Vjb25kczogdGhpcy5zZWNvbmQgPz8gMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0cmFja0J5SG91cihpbmRleDogbnVtYmVyLCBob3VyOiBJVGltZVZhbHVlKSB7XG4gICAgcmV0dXJuIGhvdXI7XG4gIH1cblxuICBvbkNoYW5nZSA9ICh2YWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge307XG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudGltZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0VGltZSgpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIGhhbmRsZVRpbWVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gJGV2ZW50LnRhcmdldD8udmFsdWU7XG4gICAgaWYgKCF2YWx1ZSB8fCAhaXNWYWxpZFRpbWUodmFsdWUpKSB7XG4gICAgICB0aGlzLmNsZWFyVGltZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0aW1lID0gY29udmVydFRpbWVUb0RhdGUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0VGltZSh0aW1lID8/IG5ldyBEYXRlKERhdGUubm93KCkpKTtcbiAgfVxuXG4gIGhhbmRsZUNsZWFyKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY2xlYXJUaW1lKCk7XG4gIH1cblxuICBoYW5kbGVCbHVyKCRldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZHJvcGRvd25SZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGhhbmRsZUZvY3VzKCRldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZHJvcGRvd25SZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTtcbiAgfVxuXG4gIHNldENoYW5nZUhhbmRsZXJzKCkge1xuXG4gICAgaWYgKHRoaXMudmFyaWFudCAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdFRpbWUuZ2V0KCdzZWxlY3RIb3VycycpPy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0SG91cnNDaGFuZ2UoPG51bWJlcj52YWx1ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuc2VsZWN0VGltZS5nZXQoJ3NlbGVjdE1pbnV0ZXMnKT8udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHZhbHVlID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVNlbGVjdE1pbnV0ZXNDaGFuZ2UoPG51bWJlcj52YWx1ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuc2VsZWN0VGltZS5nZXQoJ3NlbGVjdFNlY29uZHMnKT8udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuc2Vjb25kcyksXG4gICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RTZWNvbmRzQ2hhbmdlKDxudW1iZXI+dmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnNlbGVjdFRpbWUuZ2V0KCdzZWxlY3REYXlQZXJpb2QnKT8udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaG91cjEyKSxcbiAgICAgICAgdGFwKHZhbHVlID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVNlbGVjdERheVBlcmlvZENoYW5nZSg8RGF5UGVyaW9kPnZhbHVlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItdGltZXBpY2tlcnNcIiAqbmdJZj1cInZhcmlhbnQ9PT0nc2VsZWN0J1wiPlxuICA8ZGl2IGNsYXNzPVwicGlja2VyIHRpbWUtcGlja2VyXCI+XG4gICAgPGRpdiBbZm9ybUdyb3VwXT1cInNlbGVjdFRpbWVcIiBjbGFzcz1cInRpbWUtcGlja2VyLWJvZHlcIiBbbmdDbGFzc109XCJ0aW1lUGlja2VyQ2xhc3Nlc1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLXBpY2tlci1pbmxpbmUtaWNvblwiPjwvc3Bhbj5cbiAgICAgIDxzZWxlY3QgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiIGNTZWxlY3QgY2xhc3M9XCJtcy0wXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0SG91cnNcIiAoYmx1cik9XCJvbkJsdXIoKVwiIFtzaXppbmddPVwic2l6ZSA/PyAnJ1wiPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBob3VyIG9mIGxpc3RPZkhvdXJzMTI7IGluZGV4IGFzIGk7IHRyYWNrQnk6IHRyYWNrQnlIb3VyXCIgW25nVmFsdWVdPVwiaG91ci52YWx1ZVwiIFthdHRyLmRpc2FibGVkXT1cImhvdXIuZGlzYWJsZWQgfHwgbnVsbFwiPnt7aG91ci5sYWJlbH19PC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICAgIHt7JyA6J319PHNlbGVjdCBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBudWxsXCIgY1NlbGVjdCBjbGFzcz1cIm1zLTBcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RNaW51dGVzXCIgKGJsdXIpPVwib25CbHVyKClcIiBbc2l6aW5nXT1cInNpemUgPz8gJydcIj5cbiAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBsaXN0T2ZNaW51dGVzXCIgW25nVmFsdWVdPVwibWludXRlLnZhbHVlXCIgW2F0dHIuZGlzYWJsZWRdPVwibWludXRlLmRpc2FibGVkIHx8IG51bGxcIj57e21pbnV0ZS5sYWJlbH19PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2Vjb25kc1wiPlxuICAgICAgICB7eycgOid9fTxzZWxlY3QgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiIGNTZWxlY3QgY2xhc3M9XCJtcy0wXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0U2Vjb25kc1wiIChibHVyKT1cIm9uQmx1cigpXCIgW3NpemluZ109XCJzaXplID8/ICcnXCI+XG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNlY29uZCBvZiBsaXN0T2ZTZWNvbmRzXCIgW25nVmFsdWVdPVwic2Vjb25kLnZhbHVlXCIgW2F0dHIuZGlzYWJsZWRdPVwic2Vjb25kLmRpc2FibGVkIHx8IG51bGxcIj57e3NlY29uZC5sYWJlbH19PC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaG91cjEyXCI+XG4gICAgICAgIDxzZWxlY3QgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiIGNTZWxlY3QgY2xhc3M9XCJtcy0wXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0RGF5UGVyaW9kXCIgKGJsdXIpPVwib25CbHVyKClcIiBbc2l6aW5nXT1cInNpemUgPz8gJydcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkYXlQZXJpb2Qgb2YgZGF5UGVyaW9kc1wiIFtuZ1ZhbHVlXT1cImRheVBlcmlvZC52YWx1ZVwiIGNsYXNzPVwidGltZS1waWNrZXItcm9sbC1jZWxsXCI+e3tkYXlQZXJpb2QubGFiZWx9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxjLWRyb3Bkb3duICNkcm9wZG93bj1cImNEcm9wZG93blwiIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCIgY2xhc3M9XCJ0aW1lLXBpY2tlciBwaWNrZXJcIiBbbmdDbGFzc109XCJ0aW1lUGlja2VyQ2xhc3Nlc1wiICpuZ0lmPVwidmFyaWFudD09PSdyb2xsJ1wiIFt2aXNpYmxlXT1cInZpc2libGVcIj5cbiAgPGMtaW5wdXQtZ3JvdXAgW2NhcmV0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkID8/IGRyb3Bkb3duLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICBbc2l6aW5nXT1cInNpemUgPz8gJydcIlxuICAgICAgICAgICAgICAgICBjRHJvcGRvd25Ub2dnbGVcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJwaWNrZXItaW5wdXQtZ3JvdXBcIj5cbiAgICA8aW5wdXQgKGJsdXIpPVwiaGFuZGxlQmx1cigkZXZlbnQpO1wiXG4gICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlVGltZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAoZm9jdXMpPVwiaGFuZGxlRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0aW1lSW5wdXRcIlxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICBjRm9ybUNvbnRyb2xcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLnBhdHRlcm5dPVwiaG91cjEyID8gJygoKDBbMS05XSl8KDFbMC0yXSkpOihbMC01XSkoWzAtOV0pXFxcXHMoQXxQKU0pJyA6ICcoWzAxXT9bMC05XXwyWzAtM10pOlswLTVdWzAtOV0nXCJcbiAgICAgICAgICAgW3JlYWRvbmx5XT1cImlucHV0UmVhZE9ubHkgPz8gbnVsbFwiXG4gICAgICAgICAgIFt2YWxpZF09XCJ2YWxpZFwiXG4gICAgPlxuICAgIDxzcGFuICpuZ0lmPVwiaW5kaWNhdG9yIHx8IGNsZWFuZXJcIiBjSW5wdXRHcm91cFRleHQ+XG4gICAgICA8c3BhbiAqbmdJZj1cImluZGljYXRvclwiIGNsYXNzPVwicGlja2VyLWlucHV0LWdyb3VwLWluZGljYXRvclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tlci1pbnB1dC1ncm91cC1pY29uIHRpbWUtcGlja2VyLWlucHV0LWljb25cIj48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAoY2xpY2spPVwiIWRpc2FibGVkICYmIGhhbmRsZUNsZWFyKCRldmVudClcIiAqbmdJZj1cImNsZWFuZXIgJiYgdGltZSAmJiAhZGlzYWJsZWRcIiBjbGFzcz1cInBpY2tlci1pbnB1dC1ncm91cC1jbGVhbmVyXCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tlci1pbnB1dC1ncm91cC1pY29uIHRpbWUtcGlja2VyLWNsZWFuZXItaWNvblwiPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L3NwYW4+XG5cbiAgPC9jLWlucHV0LWdyb3VwPlxuICA8ZGl2IGNEcm9wZG93bk1lbnUgI2Ryb3Bkb3duTWVudT1cImNEcm9wZG93bk1lbnVcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItYm9keSB0aW1lLXBpY2tlci1yb2xsXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XG4gICAgICA8Yy10aW1lLXBpY2tlci1yb2xsLWNvbFxuICAgICAgICBbZWxlbWVudHNdPVwibGlzdE9mSG91cnMxMlwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJob3VyXCJcbiAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cImhhbmRsZVNlbGVjdEhvdXJzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcmVmcmVzaF09XCJkcm9wZG93bk1lbnUudmlzaWJsZVwiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgID5cbiAgICAgIDwvYy10aW1lLXBpY2tlci1yb2xsLWNvbD5cbiAgICAgIDxjLXRpbWUtcGlja2VyLXJvbGwtY29sXG4gICAgICAgIFtlbGVtZW50c109XCJsaXN0T2ZNaW51dGVzXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cIm1pbnV0ZVwiXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJoYW5kbGVTZWxlY3RNaW51dGVzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcmVmcmVzaF09XCJkcm9wZG93bk1lbnUudmlzaWJsZVwiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgID5cbiAgICAgIDwvYy10aW1lLXBpY2tlci1yb2xsLWNvbD5cbiAgICAgIDxjLXRpbWUtcGlja2VyLXJvbGwtY29sXG4gICAgICAgICpuZ0lmPVwic2Vjb25kc1wiXG4gICAgICAgIFtlbGVtZW50c109XCJsaXN0T2ZTZWNvbmRzXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cInNlY29uZFwiXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJoYW5kbGVTZWxlY3RTZWNvbmRzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcmVmcmVzaF09XCJkcm9wZG93bk1lbnUudmlzaWJsZVwiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgID5cbiAgICAgIDwvYy10aW1lLXBpY2tlci1yb2xsLWNvbD5cbiAgICAgIDxjLXRpbWUtcGlja2VyLXJvbGwtYW0tcG1cbiAgICAgICAgKm5nSWY9XCJob3VyMTJcIiBbZWxlbWVudHNdPVwiZGF5UGVyaW9kc1wiXG4gICAgICAgIFtzZWxlY3RlZF09XCJkYXlQZXJpb2RcIlxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0RGF5UGVyaW9kQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcmVmcmVzaF09XCJkcm9wZG93bk1lbnUudmlzaWJsZVwiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgID5cbiAgICAgIDwvYy10aW1lLXBpY2tlci1yb2xsLWFtLXBtPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJ0ZW1wbGF0ZXM/LnRpbWVQaWNrZXJGb290ZXJcIiBjbGFzcz1cInBpY2tlci1mb290ZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXM/LnRpbWVQaWNrZXJGb290ZXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGRyb3Bkb3dufVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvYy1kcm9wZG93bj5cbiJdfQ==
515
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUNMLGVBQWUsRUFDZixlQUFlLEVBQ2YsaUJBQWlCLEVBR2pCLE9BQU8sRUFDUCxhQUFhLEVBQ2IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLFdBQVcsRUFFWixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQzs7O0FBRXRHLHlCQUF5QjtBQWdDekIsTUFBTSxPQUFPLG1CQUFtQjtJQUVyQixXQUFXLENBQXNCO0lBRTFDO1FBRlMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFJMUM7Ozs7V0FJRztRQUNxQyxZQUFPLEdBQVksSUFBSSxDQUFDO1FBRWhFOzs7OztXQUtHO1FBQ00sMEJBQXFCLEdBQTBCLEVBQUUsQ0FBQztRQUUzRDs7OztXQUlHO1FBQ3FDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUF1QmxFOzs7O1dBSUc7UUFDcUMsY0FBUyxHQUFZLElBQUksQ0FBQztRQUVsRTs7OztXQUlHO1FBQ3FDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBRXZFOzs7O1dBSUc7UUFDTSxXQUFNLEdBQVcsU0FBUyxDQUFDO1FBRXBDOzs7O1dBSUc7UUFDTSxnQkFBVyxHQUFXLGFBQWEsQ0FBQztRQUU3Qzs7OztXQUlHO1FBQ3FDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFzQ2pFOzs7O1dBSUc7UUFDTSxZQUFPLEdBQXNCLE1BQU0sQ0FBQztRQVM3Qzs7OztXQUlHO1FBQ3FDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFdkQsZUFBVSxHQUFtQyxJQUFJLFlBQVksQ0FBbUIsS0FBSyxDQUFDLENBQUM7UUFRakcsY0FBUyxHQUFRLEVBQUUsQ0FBQztRQVFwQixXQUFNLEdBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxlQUFVLEdBQUc7WUFDWCxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUM1QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtTQUM3QixDQUFDO1FBcUJNLG9CQUFlLEdBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVGLEVBQUUsQ0FBQztRQWFMLGVBQVUsR0FBRyxJQUFJLFNBQVMsQ0FNeEI7WUFDRSxXQUFXLEVBQUUsSUFBSSxXQUFXLENBQzFCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDN0MsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQzNFO1lBQ0QsYUFBYSxFQUFFLElBQUksV0FBVyxDQUM1QixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQy9DLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FDeEQ7WUFDRCxhQUFhLEVBQUUsSUFBSSxXQUFXLENBQzVCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDL0MsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUN4RDtZQUNELGVBQWUsRUFBRSxJQUFJLFdBQVcsQ0FDOUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNsRCxVQUFVLENBQUMsUUFBUSxDQUNwQjtTQUNGLEVBQ0QsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDdEMsQ0FBQztRQUVGLGNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FDekI7WUFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDMUIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLEVBQ0QsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDdEMsQ0FBQztRQWdCTSxVQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFnQlgsWUFBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBZ0JiLFlBQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztRQXNCYixlQUFVLEdBQWMsSUFBSSxDQUFDO1FBc0xyQyxhQUFRLEdBQUcsQ0FBQyxLQUF1QixFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDM0MsY0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQS9kTixDQUFDO0lBdUZoQjs7OztPQUlHO0lBQ0gsSUFDSSxJQUFJLENBQUMsS0FBZ0M7UUFDdkMsSUFBSSxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQy9CLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDdkM7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBNEJxQixNQUFNO1FBQzFCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBa0JELGdCQUFnQjtRQUNkLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2hHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLGFBQWEsQ0FBQyxJQUFJLENBQWEsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDdkQ7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBTUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTztZQUNMLGFBQWEsRUFBRSxJQUFJO1lBQ25CLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUk7WUFDekMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUztZQUNyRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJO1lBQy9CLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUs7WUFDbEMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBcUNELElBQUksSUFBSSxDQUFDLEtBQWE7UUFDcEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtZQUN4QixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUlELElBQUksTUFBTSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRTtZQUMxQixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUlELElBQUksTUFBTSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRTtZQUMxQixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUlELElBQUksU0FBUyxDQUFDLEtBQUs7UUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDOUM7WUFDRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUM5QjtRQUNELG1DQUFtQztRQUNuQyxtREFBbUQ7UUFDbkQsZ0ZBQWdGO1FBQ2hGLE1BQU07UUFDTiwyQ0FBMkM7UUFDM0MsZ0NBQWdDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUlELE9BQU87UUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUVuRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFzQjtRQUM3QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNyRixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLGNBQWM7WUFDakIsSUFBSSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN6QyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPO2FBQzdDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDYixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRTtvQkFDN0UsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQ3pCO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUEwQixFQUFFLEVBQUU7Z0JBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25GLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDN0IsTUFBTSxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDakQ7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUk7UUFDL0IsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNuRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTdELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLFNBQXVCLEVBQUUsV0FBbUI7UUFDdEQsSUFBSSxLQUFLLEdBQUcsU0FBUyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2hELEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUMxQztRQUNELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQWEsRUFBRSxDQUFhLEVBQUUsRUFBRTtZQUNuRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25GLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUNoQixxQkFHaUIsRUFDakIsa0JBQXVFO1FBRXZFLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsTUFBTSxDQUNoRixDQUFDLE9BQW1CLEVBQUUsRUFBRTtZQUN0QixPQUFPLE9BQU8sa0JBQWtCLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM3RixDQUFDLENBQ0YsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU07WUFDWCxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELDJCQUEyQixDQUFDLFNBQW9CO1FBQzlDLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRSxNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzNELElBQUksSUFBSSxJQUFJLENBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDaEI7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsT0FBcUM7UUFDekUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ2hFLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7Z0JBQ3pCLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUk7YUFDeEMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDeEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FDWixDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQztRQUM5RixJQUFJLFFBQVEsSUFBSSxXQUFXLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7b0JBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7aUJBQzVCLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7b0JBQ3pCLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUM7aUJBQ2hDLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7b0JBQ3pCLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUM7aUJBQ2hDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWEsRUFBRSxJQUFnQjtRQUN6QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFLRCxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQVc7UUFDL0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsT0FBTztTQUNSO1FBQ0QsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxXQUFXLENBQUMsTUFBa0I7UUFDNUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBa0I7UUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWtCO1FBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxpQkFBaUI7UUFFZixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQzdCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFlBQVk7YUFDN0MsSUFBSSxDQUNILEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxzQkFBc0IsQ0FBUyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQzthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsWUFBWTthQUMvQyxJQUFJLENBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLHNCQUFzQixDQUFTLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsRUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFZixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxZQUFZO2FBQy9DLElBQUksQ0FDSCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsc0JBQXNCLENBQVMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsWUFBWTthQUNqRCxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDekIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLDJCQUEyQixDQUFZLEtBQUssQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDOzhHQWhrQlUsbUJBQW1CO2tHQUFuQixtQkFBbUIsMkZBV1YsZ0JBQWdCLHNGQWVoQixnQkFBZ0IscUlBNEJoQixnQkFBZ0IscURBT2hCLGdCQUFnQixpRkFxQmhCLGdCQUFnQixtR0F5RGhCLGdCQUFnQixvR0FuSnpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDJEQXdKZ0IsbUJBQW1CLDZGQUh6QixpQkFBaUIsMkJBQVUsVUFBVSw2RUN2T2xELGd0SkFnR0EsMEZEbkNJLE9BQU8sb0ZBQ1AsSUFBSSw2RkFDSixPQUFPLG1IQUNQLGdCQUFnQixtSkFDaEIsbUJBQW1CLGs3Q0FDbkIsaUJBQWlCLDJOQUNqQix1QkFBdUIsMEpBQ3ZCLHFCQUFxQiwySEFFckIsbUJBQW1CLHlGQUduQiwwQkFBMEIsc01BQzFCLDJCQUEyQjs7MkZBVWxCLG1CQUFtQjtrQkE5Qi9CLFNBQVM7K0JBQ0UsZUFBZSxZQUdmLGFBQWEsY0FDWCxJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxJQUFJO3dCQUNKLE9BQU87d0JBQ1AsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2QixxQkFBcUI7d0JBQ3JCLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQixtQkFBbUI7d0JBQ25CLHVCQUF1Qjt3QkFDdkIsMEJBQTBCO3dCQUMxQiwyQkFBMkI7cUJBQzVCLGFBQ1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3dEQWF1QyxPQUFPO3NCQUE5QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVE3QixxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBT2tDLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBTzdCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBT0csYUFBYTtzQkFBckIsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQU9rQyxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU9FLGFBQWE7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBTzdCLE1BQU07c0JBQWQsS0FBSztnQkFPRyxXQUFXO3NCQUFuQixLQUFLO2dCQU9rQyxPQUFPO3NCQUE5QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU83QixJQUFJO3NCQUFaLEtBQUs7Z0JBUUYsSUFBSTtzQkFEUCxLQUFLO2dCQTZCRyxPQUFPO3NCQUFmLEtBQUs7Z0JBT0csS0FBSztzQkFBYixLQUFLO2dCQU9rQyxPQUFPO3NCQUE5QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUU1QixVQUFVO3NCQUFuQixNQUFNO2dCQUVlLE1BQU07c0JBQTNCLFlBQVk7dUJBQUMsTUFBTTtnQkFJZ0MsV0FBVztzQkFBOUQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSWxELGdCQUFnQjtzQkFEZixlQUFlO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEZXN0cm95UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgY29udmVydDEyaFRvMjRoLFxuICBjb252ZXJ0MjRoVG8xMmgsXG4gIGNvbnZlcnRUaW1lVG9EYXRlLFxuICBEYXRlVGltZUZvcm1hdE9wdGlvbnMsXG4gIERheVBlcmlvZCxcbiAgZ2V0QW1QbSxcbiAgZ2V0RGF5UGVyaW9kcyxcbiAgZ2V0TGlzdE9mSG91cnMsXG4gIGdldExpc3RPZk1pbnV0ZXMsXG4gIGdldExpc3RPZlNlY29uZHMsXG4gIGlzSG91cjEyLFxuICBpc1ZhbGlkVGltZSxcbiAgSVRpbWVWYWx1ZVxufSBmcm9tICcuL3RpbWUudXRpbHMnO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQsIERyb3Bkb3duTWVudURpcmVjdGl2ZSwgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kcm9wZG93bic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbERpcmVjdGl2ZSwgRm9ybVNlbGVjdERpcmVjdGl2ZSwgSW5wdXRHcm91cENvbXBvbmVudCwgSW5wdXRHcm91cFRleHREaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtJztcbmltcG9ydCB7IFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0IHsgVGltZVBpY2tlclJvbGxDb2xDb21wb25lbnQgfSBmcm9tICcuL3RpbWUtcGlja2VyLXJvbGwtY29sL3RpbWUtcGlja2VyLXJvbGwtY29sLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaW1lUGlja2VyUm9sbEFtUG1Db21wb25lbnQgfSBmcm9tICcuL3RpbWUtcGlja2VyLXJvbGwtY29sL3RpbWUtcGlja2VyLXJvbGwtYW0tcG0uY29tcG9uZW50JztcblxuLy8gdG9kbzogRm9jdXMgbWFuYWdlbWVudFxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLXRpbWUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdjVGltZVBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nSWYsXG4gICAgTmdGb3JPZixcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRHJvcGRvd25Db21wb25lbnQsXG4gICAgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUsXG4gICAgRHJvcGRvd25NZW51RGlyZWN0aXZlLFxuICAgIEZvcm1Db250cm9sRGlyZWN0aXZlLFxuICAgIEZvcm1TZWxlY3REaXJlY3RpdmUsXG4gICAgSW5wdXRHcm91cENvbXBvbmVudCxcbiAgICBJbnB1dEdyb3VwVGV4dERpcmVjdGl2ZSxcbiAgICBUaW1lUGlja2VyUm9sbENvbENvbXBvbmVudCxcbiAgICBUaW1lUGlja2VyUm9sbEFtUG1Db21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaW1lUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQge1xuXG4gIHJlYWRvbmx5ICNkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogVG9nZ2xlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSBjb250ZW50IG9mIHRoZSBjbGVhbmVyIGJ1dHRvbi5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2xlYW5lcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNldHMgRGF0ZVRpbWUgZm9ybWF0IG9wdGlvbnMgaW5jbHVkaW5nIHRpbWVab25lXG4gICAqIEB0eXBlIERhdGVUaW1lRm9ybWF0T3B0aW9uc1xuICAgKiBAZGVmYXVsdCB7fVxuICAgKiBAbm90ZSBUaGUgZGF0ZSBvYmplY3QgZG9lc24ndCBzdG9yZSB0aW1lWm9uZSwgaXQga2VlcHMgdGhlIGxvY2FsIHRpbWV6b25lIG9mIHRoZSBicm93c2VyLCByZWdhcmRsZXNzIGlmIHlvdSBwYXJzZWQgVVRDIGRhdGVzLlxuICAgKi9cbiAgQElucHV0KCkgZGF0ZVRpbWVGb3JtYXRPcHRpb25zOiBEYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7fTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBkaXNhYmxlZCBzdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBhdmFpbGFibGUgaG91cnMgdG8gcGljay5cbiAgICogQHR5cGUgKHZhbHVlOiBudW1iZXIpID0+IGJvb2xlYW47XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgZmlsdGVySG91cnM/OiAodmFsdWU6IG51bWJlcikgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogRmlsdGVyIGF2YWlsYWJsZSBtaW51dGVzIHRvIHBpY2suXG4gICAqIEB0eXBlICh2YWx1ZTogbnVtYmVyKSA9PiBib29sZWFuO1xuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIGZpbHRlck1pbnV0ZXM/OiAodmFsdWU6IG51bWJlcikgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogRmlsdGVyIGF2YWlsYWJsZSBzZWNvbmRzIHRvIHBpY2suXG4gICAqIEB0eXBlICh2YWx1ZTogbnVtYmVyKSA9PiBib29sZWFuO1xuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIGZpbHRlclNlY29uZHM/OiAodmFsdWU6IG51bWJlcikgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVG9nZ2xlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSBjb250ZW50IG9mIHRoZSBpbnB1dCBpbmRpY2F0b3IuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGluZGljYXRvcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgcmVhZG9ubHkgc3RhdGUgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpbnB1dFJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGRlZmF1bHQgbG9jYWxlIGZvciBjb21wb25lbnRzLiBJZiBub3Qgc2V0LCBpdCBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgYnJvd3Nlci5cbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0IGRlZmF1bHRcbiAgICovXG4gIEBJbnB1dCgpIGxvY2FsZTogc3RyaW5nID0gJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgc2hvcnQgaGludCB2aXNpYmxlIGluIHRpbWUgaW5wdXQuXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnU2VsZWN0IHRpbWUnXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCB0aW1lJztcblxuICAvKipcbiAgICogVG9nZ2xlIHNlY29uZHMgdmlzaWJpbGl0eS5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNlY29uZHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2l6ZSB0aGUgY29tcG9uZW50IHNtYWxsIG9yIGxhcmdlLlxuICAgKiBAdHlwZSAnc20nIHwgJ2xnJyB8IHVuZGVmaW5lZFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIHNpemU/OiAnc20nIHwgJ2xnJztcblxuICAvKipcbiAgICogSW5pdGlhbCBzZWxlY3RlZCB0aW1lLlxuICAgKiBAdHlwZSBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IG51bWJlclxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCB0aW1lKHZhbHVlOiBEYXRlIHwgc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlICYmIGlzVmFsaWRUaW1lKHZhbHVlKSkge1xuICAgICAgY29uc3QgdGltZSA9IGNvbnZlcnRUaW1lVG9EYXRlKHZhbHVlKTtcbiAgICAgIGlmICghdGltZSkge1xuICAgICAgICB0aGlzLmNsZWFyVGltZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmRheVBlcmlvZCA9IGdldEFtUG0odGltZSwgdGhpcy5sb2NhbGUpO1xuICAgICAgaWYgKHRoaXMuX3RpbWU/LmdldFRpbWUoKSAhPT0gdGltZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgdGhpcy5fdGltZSA9IG5ldyBEYXRlKHRpbWUuZ2V0VGltZSgpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhclRpbWUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGltZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZTtcbiAgfVxuXG4gIHByaXZhdGUgX3RpbWU/OiBEYXRlO1xuICBwcml2YXRlIF90aW1lSW50ZXJuYWw/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRpbWUgcGlja2VyIHZhcmlhbnQgdG8gYSByb2xsIG9yIHNlbGVjdC5cbiAgICogQHR5cGUgJ3JvbGwnIHwgJ3NlbGVjdCdcbiAgICogQGRlZmF1bHQgJ3JvbGwnXG4gICAqL1xuICBASW5wdXQoKSB2YXJpYW50OiAncm9sbCcgfCAnc2VsZWN0JyA9ICdyb2xsJztcblxuICAvKipcbiAgICogVG9nZ2xlIHZpc3VhbCB2YWxpZGF0aW9uIGZlZWRiYWNrLlxuICAgKiBAdHlwZSBib29sZWFuIHwgdW5kZWZpbmVkXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgdmFsaWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZHJvcGRvd24gdGltZXBpY2tlciBtZW51IGNvbXBvbmVudC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgdGltZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGUgfCB1bmRlZmluZWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgdW5kZWZpbmVkPihmYWxzZSk7XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpIG9uQmx1cigpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgQFZpZXdDaGlsZChEcm9wZG93bkNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRyb3Bkb3duUmVmITogRWxlbWVudFJlZjtcblxuICB0ZW1wbGF0ZXM6IGFueSA9IHt9O1xuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlSWREaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgY29udGVudFRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUZW1wbGF0ZUlkRGlyZWN0aXZlPjtcblxuICBsaXN0T2ZIb3VycyE6IElUaW1lVmFsdWVbXTtcbiAgbGlzdE9mSG91cnMxMiE6IElUaW1lVmFsdWVbXTtcbiAgbGlzdE9mTWludXRlcyE6IElUaW1lVmFsdWVbXTtcbiAgbGlzdE9mU2Vjb25kcyE6IElUaW1lVmFsdWVbXTtcbiAgaG91cjEyOiBib29sZWFuID0gaXNIb3VyMTIodGhpcy5sb2NhbGUpO1xuICBkYXlQZXJpb2RzID0gW1xuICAgIHsgdmFsdWU6ICdhbScsIGxhYmVsOiAnYW0nIH0sXG4gICAgeyB2YWx1ZTogJ3BtJywgbGFiZWw6ICdwbScgfVxuICBdO1xuXG4gIGdldExpc3RPZkhvdXJzMTIoKTogSVRpbWVWYWx1ZVtdIHtcbiAgICBjb25zdCBsaXN0T2ZIb3VyczEyID0gdGhpcy5ob3VyMTIgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RPZkhvdXJzPy5maWx0ZXIoKGl0ZW0pID0+IChpdGVtLmRheVBlcmlvZCAmJiBpdGVtLmRheVBlcmlvZCA9PT0gdGhpcy5kYXlQZXJpb2QpIHx8ICFpdGVtLmRheVBlcmlvZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmxpc3RPZkhvdXJzO1xuICAgIGlmICh0aGlzLmhvdXIxMikge1xuICAgICAgbGlzdE9mSG91cnMxMi5wdXNoKDxJVGltZVZhbHVlPmxpc3RPZkhvdXJzMTIuc2hpZnQoKSk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0T2ZIb3VyczEyO1xuICB9XG5cbiAgc2V0IHRpbWVJbnB1dFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRpbWVJbnB1dC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5fdGltZUlucHV0VmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCB0aW1lSW5wdXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90aW1lSW5wdXRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3RpbWVJbnB1dFZhbHVlOiBzdHJpbmcgPVxuICAgIHRoaXMudGltZT8udG9Mb2NhbGVUaW1lU3RyaW5nKHRoaXMubG9jYWxlLCB7IHRpbWVTdHlsZTogdGhpcy5zZWNvbmRzID8gJ21lZGl1bScgOiAnc2hvcnQnIH0pID8/XG4gICAgJyc7XG5cbiAgZ2V0IHRpbWVQaWNrZXJDbGFzc2VzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAndGltZS1waWNrZXInOiB0cnVlLFxuICAgICAgW2B0aW1lLXBpY2tlci0ke3RoaXMuc2l6ZX1gXTogISF0aGlzLnNpemUsXG4gICAgICAnZm9ybS1jb250cm9sJzogdGhpcy52YXJpYW50ID09PSAnc2VsZWN0JyAmJiB0aGlzLnZhbGlkICE9PSB1bmRlZmluZWQsXG4gICAgICAnaXMtdmFsaWQnOiB0aGlzLnZhbGlkID09PSB0cnVlLFxuICAgICAgJ2lzLWludmFsaWQnOiB0aGlzLnZhbGlkID09PSBmYWxzZSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgfTtcbiAgfVxuXG4gIHNlbGVjdFRpbWUgPSBuZXcgRm9ybUdyb3VwPHtcbiAgICBzZWxlY3RIb3VyczogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XG4gICAgc2VsZWN0TWludXRlczogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XG4gICAgc2VsZWN0U2Vjb25kcz86IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+O1xuICAgIHNlbGVjdERheVBlcmlvZD86IEZvcm1Db250cm9sPCdhbScgfCAncG0nIHwgbnVsbD47XG4gIH0+KFxuICAgIHtcbiAgICAgIHNlbGVjdEhvdXJzOiBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgIHsgdmFsdWU6IHRoaXMuaG91ciwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSxcbiAgICAgICAgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5taW4oMCksIFZhbGlkYXRvcnMubWF4KHRoaXMuaG91cjEyID8gMTEgOiAyMyldIH1cbiAgICAgICksXG4gICAgICBzZWxlY3RNaW51dGVzOiBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgIHsgdmFsdWU6IHRoaXMubWludXRlLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCB9LFxuICAgICAgICB7IHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1pbigwKSwgVmFsaWRhdG9ycy5tYXgoNTkpXSB9XG4gICAgICApLFxuICAgICAgc2VsZWN0U2Vjb25kczogbmV3IEZvcm1Db250cm9sKFxuICAgICAgICB7IHZhbHVlOiB0aGlzLnNlY29uZCwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSxcbiAgICAgICAgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5taW4oMCksIFZhbGlkYXRvcnMubWF4KDU5KV0gfVxuICAgICAgKSxcbiAgICAgIHNlbGVjdERheVBlcmlvZDogbmV3IEZvcm1Db250cm9sKFxuICAgICAgICB7IHZhbHVlOiB0aGlzLmRheVBlcmlvZCwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgKVxuICAgIH0sXG4gICAgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gfVxuICApO1xuXG4gIHRpbWVJbnB1dCA9IG5ldyBGb3JtQ29udHJvbChcbiAgICB7XG4gICAgICB2YWx1ZTogdGhpcy50aW1lSW5wdXRWYWx1ZSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgfSxcbiAgICB7IHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSB9XG4gICk7XG5cbiAgc2V0IGhvdXIodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl9ob3VyICE9PSB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICB0aGlzLmNsZWFyVGltZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9ob3VyID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhvdXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faG91cjtcbiAgfVxuXG4gIHByaXZhdGUgX2hvdXIgPSAtMTtcblxuICBzZXQgbWludXRlKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fbWludXRlICE9PSB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICB0aGlzLmNsZWFyVGltZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9taW51dGUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgbWludXRlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21pbnV0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX21pbnV0ZSA9IC0xO1xuXG4gIHNldCBzZWNvbmQodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl9zZWNvbmQgIT09IHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NlY29uZCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzZWNvbmQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vjb25kO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2Vjb25kID0gLTE7XG5cbiAgc2V0IGRheVBlcmlvZCh2YWx1ZSkge1xuICAgIGlmICh0aGlzLl9kYXlQZXJpb2QgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9kYXlQZXJpb2QgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLmxpc3RPZkhvdXJzKSB7XG4gICAgICAgIHRoaXMubGlzdE9mSG91cnMxMiA9IHRoaXMuZ2V0TGlzdE9mSG91cnMxMigpO1xuICAgICAgfVxuICAgICAgdGhpcy5wYXRjaFNlbGVjdFRpbWVWYWx1ZXMoKTtcbiAgICB9XG4gICAgLy8gdGhpcy5saXN0T2ZIb3VyczEyID0gdGhpcy5ob3VyMTJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMubGlzdE9mSG91cnM/LmZpbHRlcihcbiAgICAvLyAgICAgKGl0ZW0pID0+IChpdGVtLmRheVBlcmlvZCAmJiBpdGVtLmRheVBlcmlvZCA9PT0gdmFsdWUpIHx8ICFpdGVtLmRheVBlcmlvZFxuICAgIC8vICAgKVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5saXN0T2ZIb3VycztcbiAgICAvLyB0aGlzLnBhdGNoU2VsZWN0VGltZVZhbHVlcygpO1xuICB9XG5cbiAgZ2V0IGRheVBlcmlvZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF5UGVyaW9kO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGF5UGVyaW9kOiBEYXlQZXJpb2QgPSAnYW0nO1xuXG4gIHNldFRpbWUoKSB7XG4gICAgdGhpcy5faG91ciA9IHRoaXMuX2hvdXIgPCAwID8gMCA6IHRoaXMuX2hvdXI7XG4gICAgdGhpcy5fbWludXRlID0gdGhpcy5fbWludXRlIDwgMCA/IDAgOiB0aGlzLl9taW51dGU7XG4gICAgdGhpcy5fc2Vjb25kID0gdGhpcy5fc2Vjb25kIDwgMCA/IDAgOiB0aGlzLl9zZWNvbmQ7XG5cbiAgICBjb25zdCB0aW1lID0gbmV3IERhdGUodGhpcy5fdGltZT8uZ2V0VGltZSgpIHx8IG5ldyBEYXRlKCkpO1xuICAgIHRpbWUuc2V0SG91cnModGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIDApO1xuICAgIHRoaXMudGltZSA9IHRpbWU7XG4gICAgdGhpcy5lbWl0VGltZSh0aW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclRpbWUoKSB7XG4gICAgaWYgKHRoaXMudGltZSkge1xuICAgICAgdGhpcy5fdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZW1pdFRpbWUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy5faG91ciA9IC0xO1xuICAgIHRoaXMuX21pbnV0ZSA9IC0xO1xuICAgIHRoaXMuX3NlY29uZCA9IC0xO1xuICAgIHRoaXMuZGF5UGVyaW9kID0gJ2FtJztcbiAgICB0aGlzLnBhdGNoU2VsZWN0VGltZVZhbHVlcygpO1xuICAgIHRoaXMudGltZUlucHV0VmFsdWUgPSAnJztcbiAgfVxuXG4gIGVtaXRUaW1lKHRpbWU6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCB0aW1lVmFsdWUgPSAhIXRpbWUgJiYgaXNWYWxpZFRpbWUodGltZSkgPyBuZXcgRGF0ZSh0aW1lLmdldFRpbWUoKSkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuX3RpbWVJbnRlcm5hbD8uZ2V0VGltZSgpICE9PSB0aW1lVmFsdWU/LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy50aW1lQ2hhbmdlLmVtaXQodGltZVZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGltZVZhbHVlKTtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB0aGlzLl90aW1lSW50ZXJuYWwgPSB0aW1lVmFsdWU7XG4gICAgfVxuICAgIHRoaXMudGltZUlucHV0VmFsdWUgPVxuICAgICAgdGhpcy50aW1lPy50b0xvY2FsZVRpbWVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgdGltZVN0eWxlOiB0aGlzLnNlY29uZHMgPyAnbWVkaXVtJyA6ICdzaG9ydCdcbiAgICAgIH0pID8/ICcnO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRUaW1lTGlzdHMoKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdFRpbWUoKTtcbiAgICB0aGlzLnNldENoYW5nZUhhbmRsZXJzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3RpbWUnXSkge1xuICAgICAgaWYgKCFjaGFuZ2VzWyd0aW1lJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVJbnRlcm5hbD8uZ2V0VGltZSgpICE9PSBjaGFuZ2VzWyd0aW1lJ10uY3VycmVudFZhbHVlPy5nZXRUaW1lKCkpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdFRpbWUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29udGVudFRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgICB0aGlzLnRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0VGltZUxpc3RzKCkge1xuICAgIHRoaXMuZGF5UGVyaW9kcyA9IGdldERheVBlcmlvZHModGhpcy5sb2NhbGUsIHRoaXMuZGF0ZVRpbWVGb3JtYXRPcHRpb25zKTtcbiAgICB0aGlzLmhvdXIxMiA9IGlzSG91cjEyKHRoaXMubG9jYWxlKTtcbiAgICB0aGlzLmxpc3RPZkhvdXJzID0gdGhpcy5saXN0T2ZUaW1lU2VnbWVudHMoZ2V0TGlzdE9mSG91cnMsIHRoaXMuZmlsdGVySG91cnMpO1xuICAgIHRoaXMubGlzdE9mTWludXRlcyA9IHRoaXMubGlzdE9mVGltZVNlZ21lbnRzKGdldExpc3RPZk1pbnV0ZXMsIHRoaXMuZmlsdGVyTWludXRlcyk7XG4gICAgdGhpcy5saXN0T2ZTZWNvbmRzID0gdGhpcy5saXN0T2ZUaW1lU2VnbWVudHMoZ2V0TGlzdE9mU2Vjb25kcywgdGhpcy5maWx0ZXJTZWNvbmRzKTtcbiAgICBpZiAodGhpcy52YXJpYW50ID09PSAnc2VsZWN0Jykge1xuICAgICAgY29uc3QgdW5kZWZTZWdtZW50ID0geyB2YWx1ZTogLTEsIGxhYmVsOiAnIC0tJywgZGlzYWJsZWQ6IHRydWUgfTtcbiAgICAgIHRoaXMubGlzdE9mSG91cnMudW5zaGlmdCh7IC4uLnVuZGVmU2VnbWVudCB9KTtcbiAgICAgIHRoaXMubGlzdE9mTWludXRlcy51bnNoaWZ0KHsgLi4udW5kZWZTZWdtZW50IH0pO1xuICAgICAgdGhpcy5saXN0T2ZTZWNvbmRzLnVuc2hpZnQoeyAuLi51bmRlZlNlZ21lbnQgfSk7XG4gICAgfVxuICAgIHRoaXMubGlzdE9mSG91cnMxMiA9IHRoaXMuZ2V0TGlzdE9mSG91cnMxMigpO1xuICB9XG5cbiAgdXBkYXRlU2VsZWN0VGltZSh0aW1lID0gdGhpcy50aW1lKSB7XG4gICAgaWYgKCEhdGltZSAmJiBpc1ZhbGlkVGltZSh0aW1lKSkge1xuICAgICAgY29uc3QgaG91ciA9IHRpbWUuZ2V0SG91cnMoKSA/PyAwO1xuICAgICAgY29uc3QgbWludXRlID0gdGltZS5nZXRNaW51dGVzKCkgPz8gMDtcbiAgICAgIGNvbnN0IHNlY29uZCA9IHRoaXMuc2Vjb25kcyA/IHRpbWUuZ2V0U2Vjb25kcygpID8/IDAgOiAwO1xuXG4gICAgICBjb25zdCBjbG9zZXN0U2Vjb25kID0gdGhpcy5jbG9zZXN0VGltZSh0aGlzLmxpc3RPZlNlY29uZHMsIHNlY29uZCk7XG4gICAgICBjb25zdCBjbG9zZXN0TWludXRlID0gdGhpcy5jbG9zZXN0VGltZSh0aGlzLmxpc3RPZk1pbnV0ZXMsIG1pbnV0ZSk7XG4gICAgICBjb25zdCBjbG9zZXN0SG91ciA9IHRoaXMuY2xvc2VzdFRpbWUodGhpcy5saXN0T2ZIb3VycywgaG91cik7XG5cbiAgICAgIHRoaXMuc2Vjb25kID0gdGhpcy5zZWNvbmRzID8gY2xvc2VzdFNlY29uZC52YWx1ZSA6IDA7XG4gICAgICB0aGlzLm1pbnV0ZSA9IGNsb3Nlc3RNaW51dGUudmFsdWU7XG4gICAgICB0aGlzLmhvdXIgPSBjbG9zZXN0SG91ci52YWx1ZTtcbiAgICAgIHRoaXMuc2V0VGltZSgpO1xuICAgICAgdGhpcy5wYXRjaFNlbGVjdFRpbWVWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZXN0VGltZSh0aW1lQXJyYXk6IElUaW1lVmFsdWVbXSwgdGltZVNlZ21lbnQ6IG51bWJlcikge1xuICAgIGxldCBhcnJheSA9IHRpbWVBcnJheSA/PyBbeyB2YWx1ZTogMCwgbGFiZWw6ICcwMCcgfV07XG4gICAgaWYgKHRoaXMudGltZSkge1xuICAgICAgYXJyYXkgPSB0aW1lQXJyYXkuZmlsdGVyKChlbCkgPT4gZWwudmFsdWUgPj0gMCk7XG4gICAgICBhcnJheSA9IGFycmF5Lmxlbmd0aCA/IGFycmF5IDogdGltZUFycmF5O1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXkucmVkdWNlKChhOiBJVGltZVZhbHVlLCBiOiBJVGltZVZhbHVlKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5hYnMoYi52YWx1ZSAtIHRpbWVTZWdtZW50KSA8IE1hdGguYWJzKGEudmFsdWUgLSB0aW1lU2VnbWVudCkgPyBiIDogYTtcbiAgICB9KTtcbiAgfVxuXG4gIGxpc3RPZlRpbWVTZWdtZW50cyhcbiAgICBnZXRMaXN0T2ZUaW1lU2VnbWVudHM6IChcbiAgICAgIGxvY2FsZTogc3RyaW5nLFxuICAgICAgZGF0ZVRpbWVGb3JtYXRPcHRpb25zOiBEYXRlVGltZUZvcm1hdE9wdGlvbnNcbiAgICApID0+IElUaW1lVmFsdWVbXSxcbiAgICBmaWx0ZXJUaW1lU2VnbWVudHM6ICgodGltZVNlZ21lbnRWYWx1ZTogbnVtYmVyKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBjb25zdCBsaXN0ID0gZ2V0TGlzdE9mVGltZVNlZ21lbnRzKHRoaXMubG9jYWxlLCB0aGlzLmRhdGVUaW1lRm9ybWF0T3B0aW9ucykuZmlsdGVyKFxuICAgICAgKHNlZ21lbnQ6IElUaW1lVmFsdWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBmaWx0ZXJUaW1lU2VnbWVudHMgPT09ICdmdW5jdGlvbicgPyBmaWx0ZXJUaW1lU2VnbWVudHMoc2VnbWVudC52YWx1ZSkgOiB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIGxpc3QubGVuZ3RoXG4gICAgICAgICAgID8gbGlzdFxuICAgICAgICAgICA6IGdldExpc3RPZlRpbWVTZWdtZW50cyh0aGlzLmxvY2FsZSwgdGhpcy5kYXRlVGltZUZvcm1hdE9wdGlvbnMpLnNsaWNlKDAsIDEpO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0RGF5UGVyaW9kQ2hhbmdlKGRheVBlcmlvZDogRGF5UGVyaW9kKSB7XG4gICAgaWYgKGRheVBlcmlvZCAhPT0gdGhpcy5kYXlQZXJpb2QpIHtcbiAgICAgIGNvbnN0IGhycyA9IHRoaXMudGltZT8uZ2V0SG91cnMoKSA/PyAodGhpcy5ob3VyIDwgMCA/IDAgOiB0aGlzLmhvdXIpO1xuICAgICAgY29uc3QgaG91ciA9IGhycyA+IDEyID8gY29udmVydDI0aFRvMTJoKGhycykgOiBjb252ZXJ0MTJoVG8yNGgoZGF5UGVyaW9kLCBocnMpO1xuICAgICAgdGhpcy5ob3VyID0gdGhpcy5jbG9zZXN0VGltZSh0aGlzLmxpc3RPZkhvdXJzLCBob3VyKS52YWx1ZTtcbiAgICAgIGlmIChob3VyID49IDApIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdFRpbWUoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTZWxlY3RUaW1lQ2hhbmdlKHZhbHVlOiBudW1iZXIsIHNlZ21lbnQ6ICdob3VyJyB8ICdtaW51dGUnIHwgJ3NlY29uZCcpIHtcbiAgICB0aGlzW3NlZ21lbnRdID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlID49IDApIHtcbiAgICAgIHRoaXMuc2V0VGltZSgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdFRpbWUoKTtcbiAgfVxuXG4gIHBhdGNoU2VsZWN0VGltZVZhbHVlcygpIHtcbiAgICBjb25zdCBkYXlQZXJpb2QgPSB0aGlzLnNlbGVjdFRpbWUuZ2V0KCdzZWxlY3REYXlQZXJpb2QnKT8udmFsdWU7XG4gICAgaWYgKHRoaXMuZGF5UGVyaW9kICE9PSBkYXlQZXJpb2QpIHtcbiAgICAgIHRoaXMuc2VsZWN0VGltZS5wYXRjaFZhbHVlKHtcbiAgICAgICAgc2VsZWN0RGF5UGVyaW9kOiB0aGlzLmRheVBlcmlvZCA/PyAnYW0nXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaG91cnMgPSB0aGlzLnNlbGVjdFRpbWUuZ2V0KCdzZWxlY3RIb3VycycpPy52YWx1ZTtcbiAgICBjb25zdCBtaW51dGVzID0gdGhpcy5zZWxlY3RUaW1lLmdldCgnc2VsZWN0TWludXRlcycpPy52YWx1ZTtcbiAgICBjb25zdCBzZWNvbmRzID0gdGhpcy5zZWxlY3RUaW1lLmdldCgnc2VsZWN0U2Vjb25kcycpPy52YWx1ZTtcbiAgICBjb25zdCBnb1VwZGF0ZSA9XG4gICAgICAodGhpcy5zZWNvbmQgPCAwICYmIHRoaXMubWludXRlIDwgMCkgfHxcbiAgICAgICh0aGlzLmhvdXIgPj0gMCAmJiB0aGlzLm1pbnV0ZSA+PSAwICYmIHRoaXMuc2Vjb25kID49IDApO1xuICAgIGNvbnN0IHRpbWVDaGFuZ2VkID0gdGhpcy5ob3VyICE9PSBob3VycyB8fCB0aGlzLm1pbnV0ZSAhPT0gbWludXRlcyB8fCB0aGlzLnNlY29uZCAhPT0gc2Vjb25kcztcbiAgICBpZiAoZ29VcGRhdGUgJiYgdGltZUNoYW5nZWQpIHtcbiAgICAgIGlmICh0aGlzLmhvdXIgIT09IGhvdXJzKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0VGltZS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICBzZWxlY3RIb3VyczogdGhpcy5ob3VyID8/IDBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5taW51dGUgIT09IG1pbnV0ZXMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RUaW1lLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIHNlbGVjdE1pbnV0ZXM6IHRoaXMubWludXRlID8/IDBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWNvbmQgIT09IHNlY29uZHMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RUaW1lLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIHNlbGVjdFNlY29uZHM6IHRoaXMuc2Vjb25kID8/IDBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhY2tCeUhvdXIoaW5kZXg6IG51bWJlciwgaG91cjogSVRpbWVWYWx1ZSkge1xuICAgIHJldHVybiBob3VyO1xuICB9XG5cbiAgb25DaGFuZ2UgPSAodmFsdWU6IERhdGUgfCB1bmRlZmluZWQpID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWUgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdFRpbWUoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBoYW5kbGVUaW1lSW5wdXRDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICRldmVudC50YXJnZXQ/LnZhbHVlO1xuICAgIGlmICghdmFsdWUgfHwgIWlzVmFsaWRUaW1lKHZhbHVlKSkge1xuICAgICAgdGhpcy5jbGVhclRpbWUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGltZSA9IGNvbnZlcnRUaW1lVG9EYXRlKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdFRpbWUodGltZSA/PyBuZXcgRGF0ZShEYXRlLm5vdygpKSk7XG4gIH1cblxuICBoYW5kbGVDbGVhcigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmNsZWFyVGltZSgpO1xuICB9XG5cbiAgaGFuZGxlQmx1cigkZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRyb3Bkb3duUmVmPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBoYW5kbGVGb2N1cygkZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRyb3Bkb3duUmVmPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gIH1cblxuICBzZXRDaGFuZ2VIYW5kbGVycygpIHtcblxuICAgIGlmICh0aGlzLnZhcmlhbnQgIT09ICdzZWxlY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RUaW1lLmdldCgnc2VsZWN0SG91cnMnKT8udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHZhbHVlID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVNlbGVjdFRpbWVDaGFuZ2UoPG51bWJlcj52YWx1ZSwgJ2hvdXInKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZWxlY3RUaW1lLmdldCgnc2VsZWN0TWludXRlcycpPy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0VGltZUNoYW5nZSg8bnVtYmVyPnZhbHVlLCAnbWludXRlJyk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuc2VsZWN0VGltZS5nZXQoJ3NlbGVjdFNlY29uZHMnKT8udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuc2Vjb25kcyksXG4gICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RUaW1lQ2hhbmdlKDxudW1iZXI+dmFsdWUsICdzZWNvbmQnKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZWxlY3RUaW1lLmdldCgnc2VsZWN0RGF5UGVyaW9kJyk/LnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmhvdXIxMiksXG4gICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3REYXlQZXJpb2RDaGFuZ2UoPERheVBlcmlvZD52YWx1ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cInZhcmlhbnQ9PT0nc2VsZWN0J1wiIGNsYXNzPVwiZGF0ZS1waWNrZXItdGltZXBpY2tlcnNcIj5cbiAgPGRpdiBjbGFzcz1cInBpY2tlciB0aW1lLXBpY2tlclwiPlxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJzZWxlY3RUaW1lXCIgW25nQ2xhc3NdPVwidGltZVBpY2tlckNsYXNzZXNcIiBjbGFzcz1cInRpbWUtcGlja2VyLWJvZHlcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGltZS1waWNrZXItaW5saW5lLWljb25cIj48L3NwYW4+XG4gICAgICA8c2VsZWN0IChibHVyKT1cIm9uQmx1cigpXCIgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiIFtzaXppbmddPVwic2l6ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgIGNTZWxlY3QgY2xhc3M9XCJ0aW1lLXBpY2tlci1pbmxpbmUtc2VsZWN0IG1zLTBcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RIb3Vyc1wiPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBob3VyIG9mIGxpc3RPZkhvdXJzMTI7IGluZGV4IGFzIGk7IHRyYWNrQnk6IHRyYWNrQnlIb3VyXCIgW2F0dHIuZGlzYWJsZWRdPVwiaG91ci5kaXNhYmxlZCB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJob3VyLnZhbHVlXCI+e3tob3VyLmxhYmVsfX08L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgICAge3snIDonfX08c2VsZWN0IChibHVyKT1cIm9uQmx1cigpXCIgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiIFtzaXppbmddPVwic2l6ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY1NlbGVjdCBjbGFzcz1cInRpbWUtcGlja2VyLWlubGluZS1zZWxlY3QgbXMtMFwiIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdE1pbnV0ZXNcIj5cbiAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBsaXN0T2ZNaW51dGVzIDsgdHJhY2tCeTogdHJhY2tCeUhvdXJcIiBbYXR0ci5kaXNhYmxlZF09XCJtaW51dGUuZGlzYWJsZWQgfHwgbnVsbFwiXG4gICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cIm1pbnV0ZS52YWx1ZVwiPnt7bWludXRlLmxhYmVsfX08L29wdGlvbj5cbiAgICA8L3NlbGVjdD5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzZWNvbmRzXCI+XG4gICAgICAgIHt7JyA6J319PHNlbGVjdCAoYmx1cik9XCJvbkJsdXIoKVwiIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkIHx8IG51bGxcIiBbc2l6aW5nXT1cInNpemUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY1NlbGVjdCBjbGFzcz1cInRpbWUtcGlja2VyLWlubGluZS1zZWxlY3QgbXMtMFwiIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdFNlY29uZHNcIj5cbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2Vjb25kIG9mIGxpc3RPZlNlY29uZHM7IHRyYWNrQnk6IHRyYWNrQnlIb3VyXCIgW2F0dHIuZGlzYWJsZWRdPVwic2Vjb25kLmRpc2FibGVkIHx8IG51bGxcIlxuICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInNlY29uZC52YWx1ZVwiPnt7c2Vjb25kLmxhYmVsfX08L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJob3VyMTJcIj5cbiAgICAgICAgPHNlbGVjdCAoYmx1cik9XCJvbkJsdXIoKVwiIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkIHx8IG51bGxcIiBbc2l6aW5nXT1cInNpemUgPz8gJydcIlxuICAgICAgICAgICAgICAgIGNTZWxlY3QgY2xhc3M9XCJ0aW1lLXBpY2tlci1pbmxpbmUtc2VsZWN0IG1zLTBcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3REYXlQZXJpb2RcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkYXlQZXJpb2Qgb2YgZGF5UGVyaW9kc1wiIFtuZ1ZhbHVlXT1cImRheVBlcmlvZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRpbWUtcGlja2VyLXJvbGwtY2VsbFwiPnt7ZGF5UGVyaW9kLmxhYmVsfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48Yy1kcm9wZG93biAjZHJvcGRvd249XCJjRHJvcGRvd25cIiAqbmdJZj1cInZhcmlhbnQ9PT0ncm9sbCdcIiBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiIFtuZ0NsYXNzXT1cInRpbWVQaWNrZXJDbGFzc2VzXCJcbiAgICAgICAgICAgIFt2aXNpYmxlXT1cInZpc2libGVcIj5cbiAgPGRpdiBbY2FyZXRdPVwiZmFsc2VcIiBjRHJvcGRvd25Ub2dnbGUgY2xhc3M9XCJ0aW1lLXBpY2tlci1pbnB1dC1ncm91cFwiPlxuICAgIDxpbnB1dCAoYmx1cik9XCJoYW5kbGVCbHVyKCRldmVudCk7XCJcbiAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVUaW1lSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIChmb2N1cyk9XCJoYW5kbGVGb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPz8gZHJvcGRvd24udmlzaWJsZSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLnBhdHRlcm5dPVwiaG91cjEyID8gJygoKDBbMS05XSl8KDFbMC0yXSkpOihbMC01XSkoWzAtOV0pXFxcXHMoQXxQKU0pJyA6ICcoWzAxXT9bMC05XXwyWzAtM10pOlswLTVdWzAtOV0nXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGltZUlucHV0XCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgW3JlYWRvbmx5XT1cImlucHV0UmVhZE9ubHkgPz8gbnVsbFwiXG4gICAgICAgICAgIGNsYXNzPVwidGltZS1waWNrZXItaW5wdXRcIlxuICAgID5cbiAgICA8ZGl2ICpuZ0lmPVwiaW5kaWNhdG9yXCIgY2xhc3M9XCJ0aW1lLXBpY2tlci1pbmRpY2F0b3JcIj48L2Rpdj5cbiAgICA8ZGl2IChjbGljayk9XCIhZGlzYWJsZWQgJiYgaGFuZGxlQ2xlYXIoJGV2ZW50KVwiICpuZ0lmPVwiY2xlYW5lciAmJiB0aW1lICYmICFkaXNhYmxlZFwiIGNsYXNzPVwidGltZS1waWNrZXItY2xlYW5lclwiXG4gICAgICAgICByb2xlPVwiYnV0dG9uXCI+PC9kaXY+XG5cbiAgPC9kaXY+XG4gIDxkaXYgI2Ryb3Bkb3duTWVudT1cImNEcm9wZG93bk1lbnVcIiBjRHJvcGRvd25NZW51IGNsYXNzPVwidGltZS1waWNrZXItZHJvcGRvd24gcHktMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlci1ib2R5IHRpbWUtcGlja2VyLXJvbGxcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cbiAgICAgIDxjLXRpbWUtcGlja2VyLXJvbGwtY29sXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJoYW5kbGVTZWxlY3RUaW1lQ2hhbmdlKCRldmVudCwgJ2hvdXInKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtlbGVtZW50c109XCJsaXN0T2ZIb3VyczEyXCJcbiAgICAgICAgW3JlZnJlc2hdPVwiZHJvcGRvd25NZW51LnZpc2libGVcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwiaG91clwiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgID5cbiAgICAgIDwvYy10aW1lLXBpY2tlci1yb2xsLWNvbD5cbiAgICAgIDxjLXRpbWUtcGlja2VyLXJvbGwtY29sXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJoYW5kbGVTZWxlY3RUaW1lQ2hhbmdlKCRldmVudCwgJ21pbnV0ZScpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2VsZW1lbnRzXT1cImxpc3RPZk1pbnV0ZXNcIlxuICAgICAgICBbcmVmcmVzaF09XCJkcm9wZG93bk1lbnUudmlzaWJsZVwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJtaW51dGVcIlxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICA+XG4gICAgICA8L2MtdGltZS1waWNrZXItcm9sbC1jb2w+XG4gICAgICA8Yy10aW1lLXBpY2tlci1yb2xsLWNvbFxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0VGltZUNoYW5nZSgkZXZlbnQsICdzZWNvbmQnKVwiXG4gICAgICAgICpuZ0lmPVwic2Vjb25kc1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtlbGVtZW50c109XCJsaXN0T2ZTZWNvbmRzXCJcbiAgICAgICAgW3JlZnJlc2hdPVwiZHJvcGRvd25NZW51LnZpc2libGVcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwic2Vjb25kXCJcbiAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgPlxuICAgICAgPC9jLXRpbWUtcGlja2VyLXJvbGwtY29sPlxuICAgICAgPGMtdGltZS1waWNrZXItcm9sbC1hbS1wbVxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0RGF5UGVyaW9kQ2hhbmdlKCRldmVudClcIiAqbmdJZj1cImhvdXIxMlwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtlbGVtZW50c109XCJkYXlQZXJpb2RzXCJcbiAgICAgICAgW3JlZnJlc2hdPVwiZHJvcGRvd25NZW51LnZpc2libGVcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwiZGF5UGVyaW9kXCJcbiAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgPlxuICAgICAgPC9jLXRpbWUtcGlja2VyLXJvbGwtYW0tcG0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInRlbXBsYXRlcz8udGltZVBpY2tlckZvb3RlclwiIGNsYXNzPVwidGltZS1waWNrZXItZm9vdGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzPy50aW1lUGlja2VyRm9vdGVyOyBjb250ZXh0OiB7JGltcGxpY2l0OiBkcm9wZG93bn1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2MtZHJvcGRvd24+XG4iXX0=