@mintplayer/ng-bootstrap 16.5.0 → 16.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/datatable/src/datatable/datatable.component.d.ts +1 -1
  2. package/datatable/src/datatable-column/datatable-column.directive.d.ts +3 -3
  3. package/datatable/src/index.d.ts +1 -1
  4. package/esm2022/accordion/src/accordion/accordion.component.mjs +5 -6
  5. package/esm2022/accordion/src/accordion-tab/accordion-tab.component.mjs +5 -6
  6. package/esm2022/accordion/src/accordion-tab-header/accordion-tab-header.component.mjs +5 -6
  7. package/esm2022/accordion/src/accordion.module.mjs +6 -7
  8. package/esm2022/alert/src/alert/alert.component.mjs +5 -6
  9. package/esm2022/alert/src/alert-close/alert-close.component.mjs +5 -6
  10. package/esm2022/alert/src/alert.module.mjs +6 -7
  11. package/esm2022/async-host-binding/src/async-host-binding.module.mjs +6 -7
  12. package/esm2022/badge/src/badge.component.mjs +5 -6
  13. package/esm2022/badge/src/badge.module.mjs +6 -7
  14. package/esm2022/breadcrumb/src/breadcrumb/breadcrumb.component.mjs +5 -6
  15. package/esm2022/breadcrumb/src/breadcrumb-item/breadcrumb-item.component.mjs +5 -6
  16. package/esm2022/breadcrumb/src/breadcrumb.module.mjs +6 -7
  17. package/esm2022/button-group/src/button-group/button-group.component.mjs +5 -6
  18. package/esm2022/button-group/src/button-group.module.mjs +6 -7
  19. package/esm2022/button-type/src/button-type/button-type.directive.mjs +5 -6
  20. package/esm2022/button-type/src/button-type/button-type.module.mjs +6 -7
  21. package/esm2022/calendar/src/calendar.component.mjs +5 -6
  22. package/esm2022/calendar/src/calendar.module.mjs +6 -7
  23. package/esm2022/calendar-month/src/pipes/month-name/month-name.module.mjs +6 -7
  24. package/esm2022/calendar-month/src/pipes/month-name/month-name.pipe.mjs +5 -6
  25. package/esm2022/calendar-month/src/pipes/weekday-name/weekday-name.module.mjs +6 -7
  26. package/esm2022/calendar-month/src/pipes/weekday-name/weekday-name.pipe.mjs +5 -6
  27. package/esm2022/calendar-month/src/service/calendar-month.service.mjs +5 -6
  28. package/esm2022/card/src/card/card.component.mjs +5 -6
  29. package/esm2022/card/src/card-header/card-header.component.mjs +5 -6
  30. package/esm2022/card/src/card.module.mjs +6 -7
  31. package/esm2022/carousel/src/carousel/carousel.component.mjs +5 -6
  32. package/esm2022/carousel/src/carousel-image/carousel-image.directive.mjs +5 -6
  33. package/esm2022/carousel/src/carousel.module.mjs +6 -7
  34. package/esm2022/close/src/close.component.mjs +5 -6
  35. package/esm2022/close/src/close.module.mjs +6 -7
  36. package/esm2022/code-snippet/src/code-snippet.component.mjs +5 -6
  37. package/esm2022/code-snippet/src/code-snippet.module.mjs +6 -7
  38. package/esm2022/context-menu/src/context-menu.directive.mjs +5 -6
  39. package/esm2022/context-menu/src/context-menu.module.mjs +6 -7
  40. package/esm2022/copy/src/copy.directive.mjs +5 -6
  41. package/esm2022/copy/src/copy.module.mjs +6 -7
  42. package/esm2022/datatable/src/datatable/datatable.component.mjs +10 -11
  43. package/esm2022/datatable/src/datatable-column/datatable-column.directive.mjs +13 -9
  44. package/esm2022/datatable/src/datatable.module.mjs +7 -8
  45. package/esm2022/datatable/src/index.mjs +2 -2
  46. package/esm2022/datatable/src/row-template/row-template.directive.mjs +5 -6
  47. package/esm2022/datepicker/src/datepicker.component.mjs +5 -6
  48. package/esm2022/datepicker/src/datepicker.module.mjs +6 -7
  49. package/esm2022/dock/src/dock/dock.component.mjs +5 -6
  50. package/esm2022/dock/src/dock-pane-renderer/dock-pane-renderer.component.mjs +5 -6
  51. package/esm2022/dock/src/dock-panel/dock-panel.component.mjs +5 -6
  52. package/esm2022/dock/src/dock-panel-header/dock-panel-header.component.mjs +5 -6
  53. package/esm2022/dock/src/dock.module.mjs +6 -7
  54. package/esm2022/dock/src/services/dock/dock.service.mjs +5 -6
  55. package/esm2022/dropdown/src/dropdown/dropdown.directive.mjs +5 -6
  56. package/esm2022/dropdown/src/dropdown-menu/dropdown-menu.directive.mjs +5 -6
  57. package/esm2022/dropdown/src/dropdown-toggle/dropdown-toggle.directive.mjs +5 -6
  58. package/esm2022/dropdown/src/dropdown.module.mjs +6 -7
  59. package/esm2022/dropdown-divider/src/dropdown-divider.directive.mjs +5 -6
  60. package/esm2022/dropdown-divider/src/dropdown-divider.module.mjs +6 -7
  61. package/esm2022/dropdown-menu/src/dropdown-item/dropdown-item.component.mjs +5 -6
  62. package/esm2022/dropdown-menu/src/dropdown-menu/dropdown-menu.component.mjs +5 -6
  63. package/esm2022/dropdown-menu/src/dropdown-menu.module.mjs +6 -7
  64. package/esm2022/enhanced-paste/src/directive/enhanced-paste.directive.mjs +5 -6
  65. package/esm2022/enhanced-paste/src/enhanced-paste.module.mjs +6 -7
  66. package/esm2022/enum/src/service/enum.service.mjs +5 -6
  67. package/esm2022/file-upload/src/component/file-upload.component.mjs +5 -6
  68. package/esm2022/file-upload/src/directive/file-upload-template.directive.mjs +5 -6
  69. package/esm2022/file-upload/src/file-upload.module.mjs +6 -7
  70. package/esm2022/file-upload/src/pipes/format-bytes/format-bytes.pipe.mjs +5 -6
  71. package/esm2022/floating-labels/src/floating-labels/floating-label/floating-label.component.mjs +5 -6
  72. package/esm2022/floating-labels/src/floating-labels/floating-labels.module.mjs +6 -7
  73. package/esm2022/for/src/for.directive.mjs +5 -6
  74. package/esm2022/for/src/for.module.mjs +6 -7
  75. package/esm2022/form/src/form/form.component.mjs +5 -6
  76. package/esm2022/form/src/form-control/form-control.directive.mjs +5 -6
  77. package/esm2022/form/src/form-group/form-group.directive.mjs +5 -6
  78. package/esm2022/form/src/form.module.mjs +6 -7
  79. package/esm2022/grid/src/component/grid.component.mjs +5 -6
  80. package/esm2022/grid/src/directives/col-form-label/col-form-label.directive.mjs +5 -6
  81. package/esm2022/grid/src/directives/column/column.directive.mjs +5 -6
  82. package/esm2022/grid/src/directives/row/row.directive.mjs +5 -6
  83. package/esm2022/grid/src/grid.module.mjs +6 -7
  84. package/esm2022/has-overlay/src/has-overlay/has-overlay.component.mjs +5 -6
  85. package/esm2022/has-overlay/src/has-overlay/has-overlay.module.mjs +6 -7
  86. package/esm2022/icon/src/icon.component.mjs +5 -6
  87. package/esm2022/icon/src/icon.module.mjs +6 -7
  88. package/esm2022/input-group/src/input-group/input-group.component.mjs +5 -6
  89. package/esm2022/input-group/src/input-group.module.mjs +6 -7
  90. package/esm2022/instance-of/src/directives/instanceof-case.directive.mjs +5 -6
  91. package/esm2022/instance-of/src/directives/instanceof-default.directive.mjs +5 -6
  92. package/esm2022/instance-of/src/directives/instanceof.directive.mjs +5 -6
  93. package/esm2022/instance-of/src/instance-of.module.mjs +6 -7
  94. package/esm2022/instance-of/src/pipes/instance-of.pipe.mjs +5 -6
  95. package/esm2022/lazy-loading/src/lazy-load/lazy-load.directive.mjs +5 -6
  96. package/esm2022/lazy-loading/src/lazy-loading.module.mjs +6 -7
  97. package/esm2022/let/directive/let.directive.mjs +5 -6
  98. package/esm2022/let/let.module.mjs +6 -7
  99. package/esm2022/lib/pipes/font-color/font-color.module.mjs +6 -7
  100. package/esm2022/lib/pipes/font-color/font-color.pipe.mjs +5 -6
  101. package/esm2022/lib/pipes/in-list/in-list.module.mjs +6 -7
  102. package/esm2022/lib/pipes/in-list/in-list.pipe.mjs +5 -6
  103. package/esm2022/lib/pipes/uc-first/uc-first.module.mjs +6 -7
  104. package/esm2022/lib/pipes/uc-first/uc-first.pipe.mjs +5 -6
  105. package/esm2022/list-group/src/list-group/list-group.component.mjs +5 -6
  106. package/esm2022/list-group/src/list-group-item/list-group-item.component.mjs +5 -6
  107. package/esm2022/list-group/src/list-group.module.mjs +6 -7
  108. package/esm2022/markdown/src/bold/bold.pipe.mjs +5 -6
  109. package/esm2022/markdown/src/italic/italic.pipe.mjs +5 -6
  110. package/esm2022/markdown/src/markdown.module.mjs +6 -7
  111. package/esm2022/markdown/src/strikethrough/strikethrough.pipe.mjs +5 -6
  112. package/esm2022/markdown/src/underline/underline.pipe.mjs +5 -6
  113. package/esm2022/modal/src/components/modal/modal.component.mjs +5 -6
  114. package/esm2022/modal/src/components/modal-host/modal-host.component.mjs +5 -6
  115. package/esm2022/modal/src/directives/modal/modal.directive.mjs +5 -6
  116. package/esm2022/modal/src/directives/modal-body/modal-body.directive.mjs +5 -6
  117. package/esm2022/modal/src/directives/modal-close/modal-close.directive.mjs +5 -6
  118. package/esm2022/modal/src/directives/modal-footer/modal-footer.directive.mjs +5 -6
  119. package/esm2022/modal/src/directives/modal-header/modal-header.directive.mjs +5 -6
  120. package/esm2022/modal/src/modal.module.mjs +6 -7
  121. package/esm2022/multiselect/src/component/multiselect.component.mjs +5 -6
  122. package/esm2022/multiselect/src/directives/button-template/button-template.directive.mjs +5 -6
  123. package/esm2022/multiselect/src/directives/footer-template/footer-template.directive.mjs +5 -6
  124. package/esm2022/multiselect/src/directives/header-template/header-template.directive.mjs +5 -6
  125. package/esm2022/multiselect/src/multiselect.module.mjs +6 -7
  126. package/esm2022/navbar/src/dropdown-toggle/dropdown-toggle.directive.mjs +5 -6
  127. package/esm2022/navbar/src/expand-button/expand-button.directive.mjs +5 -6
  128. package/esm2022/navbar/src/nav-link/nav-link.directive.mjs +5 -6
  129. package/esm2022/navbar/src/navbar/navbar.component.mjs +5 -6
  130. package/esm2022/navbar/src/navbar-brand/navbar-brand.component.mjs +5 -6
  131. package/esm2022/navbar/src/navbar-content/navbar-content.directive.mjs +5 -6
  132. package/esm2022/navbar/src/navbar-dropdown/navbar-dropdown.component.mjs +5 -6
  133. package/esm2022/navbar/src/navbar-item/navbar-item.component.mjs +5 -6
  134. package/esm2022/navbar/src/navbar-nav/navbar-nav.component.mjs +5 -6
  135. package/esm2022/navbar/src/navbar-toggler/navbar-toggler.component.mjs +5 -6
  136. package/esm2022/navbar/src/navbar.module.mjs +6 -7
  137. package/esm2022/navigation-lock/src/directive/navigation-lock.directive.mjs +5 -6
  138. package/esm2022/navigation-lock/src/guard/navigation-lock.guard.mjs +5 -6
  139. package/esm2022/navigation-lock/src/navigation-lock.module.mjs +6 -7
  140. package/esm2022/no-noscript/src/no-noscript/no-noscript.directive.mjs +5 -6
  141. package/esm2022/no-noscript/src/no-noscript.module.mjs +6 -7
  142. package/esm2022/offcanvas/src/components/offcanvas/offcanvas.component.mjs +5 -6
  143. package/esm2022/offcanvas/src/components/offcanvas-body/offcanvas-body.component.mjs +5 -6
  144. package/esm2022/offcanvas/src/components/offcanvas-header/offcanvas-header.component.mjs +5 -6
  145. package/esm2022/offcanvas/src/components/offcanvas-host/offcanvas-host.component.mjs +5 -6
  146. package/esm2022/offcanvas/src/directives/offcanvas-close/offcanvas-close.directive.mjs +5 -6
  147. package/esm2022/offcanvas/src/directives/offcanvas-content/offcanvas-content.directive.mjs +5 -6
  148. package/esm2022/offcanvas/src/directives/offcanvas-push/offcanvas-push.directive.mjs +5 -6
  149. package/esm2022/offcanvas/src/offcanvas.module.mjs +6 -7
  150. package/esm2022/ordinal-number/src/ordinal-number/ordinal-number.pipe.mjs +5 -6
  151. package/esm2022/ordinal-number/src/ordinal-number.module.mjs +6 -7
  152. package/esm2022/pagination/src/component/pagination/pagination.component.mjs +5 -6
  153. package/esm2022/pagination/src/pagination.module.mjs +6 -7
  154. package/esm2022/placeholder/src/placeholder/placeholder.component.mjs +5 -6
  155. package/esm2022/placeholder/src/placeholder-field/placeholder-field.directive.mjs +5 -6
  156. package/esm2022/placeholder/src/placeholder.module.mjs +6 -7
  157. package/esm2022/popover/src/component/popover.component.mjs +5 -6
  158. package/esm2022/popover/src/directives/popover/popover.directive.mjs +5 -6
  159. package/esm2022/popover/src/directives/popover-body/popover-body.directive.mjs +5 -6
  160. package/esm2022/popover/src/directives/popover-header/popover-header.directive.mjs +5 -6
  161. package/esm2022/popover/src/popover.module.mjs +6 -7
  162. package/esm2022/progress-bar/src/progress/progress.component.mjs +5 -6
  163. package/esm2022/progress-bar/src/progress-bar/progress-bar.component.mjs +5 -6
  164. package/esm2022/progress-bar/src/progress-bar.module.mjs +6 -7
  165. package/esm2022/range/src/component/range.component.mjs +5 -6
  166. package/esm2022/range/src/range.module.mjs +6 -7
  167. package/esm2022/range/src/value-accessor/range-value-accessor.mjs +5 -6
  168. package/esm2022/rating/src/component/rating.component.mjs +5 -6
  169. package/esm2022/rating/src/rating.module.mjs +6 -7
  170. package/esm2022/resizable/src/resizable/resizable.component.mjs +5 -6
  171. package/esm2022/resizable/src/resizable.module.mjs +6 -7
  172. package/esm2022/resizable/src/resize-glyph/resize-glyph.directive.mjs +5 -6
  173. package/esm2022/scheduler/src/components/resource-group-presenter/resource-group-presenter.component.mjs +5 -6
  174. package/esm2022/scheduler/src/components/scheduler/scheduler.component.mjs +5 -6
  175. package/esm2022/scheduler/src/pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe.mjs +5 -6
  176. package/esm2022/scheduler/src/pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe.mjs +5 -6
  177. package/esm2022/scheduler/src/pipes/date-offset/date-offset.pipe.mjs +5 -6
  178. package/esm2022/scheduler/src/pipes/day-of-week/day-of-week.pipe.mjs +5 -6
  179. package/esm2022/scheduler/src/scheduler.module.mjs +6 -7
  180. package/esm2022/scheduler/src/services/timeline/timeline.service.mjs +5 -6
  181. package/esm2022/scrollspy/src/component/scrollspy.component.mjs +5 -6
  182. package/esm2022/scrollspy/src/directives/scrollspy.directive.mjs +5 -6
  183. package/esm2022/scrollspy/src/scrollspy.module.mjs +6 -7
  184. package/esm2022/scrollspy/src/services/scroll-offset/scroll-offset.service.mjs +5 -6
  185. package/esm2022/select/src/component/select.component.mjs +5 -6
  186. package/esm2022/select/src/select.module.mjs +6 -7
  187. package/esm2022/select/src/value-accessors/select-value-accessor.mjs +9 -11
  188. package/esm2022/select2/src/component/select2.component.mjs +6 -7
  189. package/esm2022/select2/src/directive/index.mjs +3 -0
  190. package/esm2022/select2/src/directive/item-template/item-template.directive.mjs +28 -0
  191. package/esm2022/select2/src/directive/suggestion-template/suggestion-template.directive.mjs +28 -0
  192. package/esm2022/select2/src/index.mjs +3 -2
  193. package/esm2022/select2/src/interfaces/has-id.mjs +2 -0
  194. package/esm2022/select2/src/interfaces/index.mjs +2 -0
  195. package/esm2022/select2/src/select2.module.mjs +19 -15
  196. package/esm2022/signature-pad/src/component/signature-pad.component.mjs +5 -6
  197. package/esm2022/signature-pad/src/signature-pad.module.mjs +6 -7
  198. package/esm2022/spinner/src/spinner.component.mjs +5 -6
  199. package/esm2022/spinner/src/spinner.module.mjs +6 -7
  200. package/esm2022/splitter/src/element-at/element-at.pipe.mjs +5 -6
  201. package/esm2022/splitter/src/split-panel/split-panel.component.mjs +5 -6
  202. package/esm2022/splitter/src/splitter/splitter.component.mjs +5 -6
  203. package/esm2022/splitter/src/splitter.module.mjs +6 -7
  204. package/esm2022/tab-control/src/tab-control/tab-control.component.mjs +5 -6
  205. package/esm2022/tab-control/src/tab-control.module.mjs +6 -7
  206. package/esm2022/tab-control/src/tab-page/tab-page.component.mjs +5 -6
  207. package/esm2022/tab-control/src/tab-page-header/tab-page-header.directive.mjs +5 -6
  208. package/esm2022/table/src/component/table.component.mjs +5 -6
  209. package/esm2022/table/src/table.module.mjs +6 -7
  210. package/esm2022/timepicker/src/timepicker.component.mjs +5 -6
  211. package/esm2022/timepicker/src/timepicker.module.mjs +6 -7
  212. package/esm2022/toast/src/components/toast/toast.component.mjs +5 -6
  213. package/esm2022/toast/src/components/toast-body/toast-body.component.mjs +5 -6
  214. package/esm2022/toast/src/components/toast-container/toast-container.component.mjs +5 -6
  215. package/esm2022/toast/src/components/toast-header/toast-header.component.mjs +5 -6
  216. package/esm2022/toast/src/directives/toast-close/toast-close.directive.mjs +5 -6
  217. package/esm2022/toast/src/pipes/add-properties.pipe.mjs +5 -6
  218. package/esm2022/toast/src/services/toast/toast.service.mjs +5 -6
  219. package/esm2022/toast/src/toast.module.mjs +6 -7
  220. package/esm2022/toggle-button/src/component/toggle-button.component.mjs +5 -6
  221. package/esm2022/toggle-button/src/directives/toggle-button-group/toggle-button-group.directive.mjs +5 -6
  222. package/esm2022/toggle-button/src/toggle-button.module.mjs +6 -7
  223. package/esm2022/toggle-button/src/value-accessor/toggle-button-value-accessor.mjs +5 -6
  224. package/esm2022/tooltip/src/component/tooltip.component.mjs +5 -6
  225. package/esm2022/tooltip/src/directive/tooltip.directive.mjs +5 -6
  226. package/esm2022/tooltip/src/tooltip.module.mjs +6 -7
  227. package/esm2022/treeview/src/treeview/treeview.component.mjs +5 -6
  228. package/esm2022/treeview/src/treeview-item/treeview-item.component.mjs +5 -6
  229. package/esm2022/treeview/src/treeview.module.mjs +6 -7
  230. package/esm2022/typeahead/src/typeahead.component.mjs +5 -6
  231. package/esm2022/typeahead/src/typeahead.module.mjs +6 -7
  232. package/esm2022/user-agent/src/directive/user-agent.directive.mjs +5 -6
  233. package/esm2022/user-agent/src/user-agent.module.mjs +6 -7
  234. package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs +13 -13
  235. package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs.map +1 -1
  236. package/fesm2022/mintplayer-ng-bootstrap-alert.mjs +10 -10
  237. package/fesm2022/mintplayer-ng-bootstrap-alert.mjs.map +1 -1
  238. package/fesm2022/mintplayer-ng-bootstrap-async-host-binding.mjs +4 -4
  239. package/fesm2022/mintplayer-ng-bootstrap-async-host-binding.mjs.map +1 -1
  240. package/fesm2022/mintplayer-ng-bootstrap-badge.mjs +7 -7
  241. package/fesm2022/mintplayer-ng-bootstrap-badge.mjs.map +1 -1
  242. package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs +10 -10
  243. package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs.map +1 -1
  244. package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs +7 -7
  245. package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs.map +1 -1
  246. package/fesm2022/mintplayer-ng-bootstrap-button-type.mjs +7 -7
  247. package/fesm2022/mintplayer-ng-bootstrap-button-type.mjs.map +1 -1
  248. package/fesm2022/mintplayer-ng-bootstrap-calendar-month.mjs +17 -17
  249. package/fesm2022/mintplayer-ng-bootstrap-calendar-month.mjs.map +1 -1
  250. package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs +7 -7
  251. package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs.map +1 -1
  252. package/fesm2022/mintplayer-ng-bootstrap-card.mjs +10 -10
  253. package/fesm2022/mintplayer-ng-bootstrap-card.mjs.map +1 -1
  254. package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs +10 -10
  255. package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs.map +1 -1
  256. package/fesm2022/mintplayer-ng-bootstrap-close.mjs +7 -7
  257. package/fesm2022/mintplayer-ng-bootstrap-close.mjs.map +1 -1
  258. package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs +7 -7
  259. package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs.map +1 -1
  260. package/fesm2022/mintplayer-ng-bootstrap-context-menu.mjs +7 -7
  261. package/fesm2022/mintplayer-ng-bootstrap-context-menu.mjs.map +1 -1
  262. package/fesm2022/mintplayer-ng-bootstrap-copy.mjs +7 -7
  263. package/fesm2022/mintplayer-ng-bootstrap-copy.mjs.map +1 -1
  264. package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs +25 -20
  265. package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs.map +1 -1
  266. package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs +7 -7
  267. package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs.map +1 -1
  268. package/fesm2022/mintplayer-ng-bootstrap-dock.mjs +19 -19
  269. package/fesm2022/mintplayer-ng-bootstrap-dock.mjs.map +1 -1
  270. package/fesm2022/mintplayer-ng-bootstrap-dropdown-divider.mjs +7 -7
  271. package/fesm2022/mintplayer-ng-bootstrap-dropdown-divider.mjs.map +1 -1
  272. package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs +10 -10
  273. package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs.map +1 -1
  274. package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs +13 -13
  275. package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs.map +1 -1
  276. package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs +7 -7
  277. package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs.map +1 -1
  278. package/fesm2022/mintplayer-ng-bootstrap-enum.mjs +3 -3
  279. package/fesm2022/mintplayer-ng-bootstrap-enum.mjs.map +1 -1
  280. package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs +13 -13
  281. package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs.map +1 -1
  282. package/fesm2022/mintplayer-ng-bootstrap-floating-labels.mjs +7 -7
  283. package/fesm2022/mintplayer-ng-bootstrap-floating-labels.mjs.map +1 -1
  284. package/fesm2022/mintplayer-ng-bootstrap-for.mjs +7 -7
  285. package/fesm2022/mintplayer-ng-bootstrap-for.mjs.map +1 -1
  286. package/fesm2022/mintplayer-ng-bootstrap-form.mjs +13 -13
  287. package/fesm2022/mintplayer-ng-bootstrap-form.mjs.map +1 -1
  288. package/fesm2022/mintplayer-ng-bootstrap-grid.mjs +16 -16
  289. package/fesm2022/mintplayer-ng-bootstrap-grid.mjs.map +1 -1
  290. package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs +7 -7
  291. package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs.map +1 -1
  292. package/fesm2022/mintplayer-ng-bootstrap-icon.mjs +7 -7
  293. package/fesm2022/mintplayer-ng-bootstrap-icon.mjs.map +1 -1
  294. package/fesm2022/mintplayer-ng-bootstrap-input-group.mjs +7 -7
  295. package/fesm2022/mintplayer-ng-bootstrap-input-group.mjs.map +1 -1
  296. package/fesm2022/mintplayer-ng-bootstrap-instance-of.mjs +16 -16
  297. package/fesm2022/mintplayer-ng-bootstrap-instance-of.mjs.map +1 -1
  298. package/fesm2022/mintplayer-ng-bootstrap-lazy-loading.mjs +7 -7
  299. package/fesm2022/mintplayer-ng-bootstrap-lazy-loading.mjs.map +1 -1
  300. package/fesm2022/mintplayer-ng-bootstrap-let.mjs +7 -7
  301. package/fesm2022/mintplayer-ng-bootstrap-let.mjs.map +1 -1
  302. package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs +10 -10
  303. package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs.map +1 -1
  304. package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs +16 -16
  305. package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs.map +1 -1
  306. package/fesm2022/mintplayer-ng-bootstrap-modal.mjs +25 -25
  307. package/fesm2022/mintplayer-ng-bootstrap-modal.mjs.map +1 -1
  308. package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs +16 -16
  309. package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs.map +1 -1
  310. package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +34 -34
  311. package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
  312. package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs +10 -10
  313. package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs.map +1 -1
  314. package/fesm2022/mintplayer-ng-bootstrap-no-noscript.mjs +7 -7
  315. package/fesm2022/mintplayer-ng-bootstrap-no-noscript.mjs.map +1 -1
  316. package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs +25 -25
  317. package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs.map +1 -1
  318. package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs +7 -7
  319. package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs.map +1 -1
  320. package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs +7 -7
  321. package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs.map +1 -1
  322. package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs +10 -10
  323. package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs.map +1 -1
  324. package/fesm2022/mintplayer-ng-bootstrap-popover.mjs +16 -16
  325. package/fesm2022/mintplayer-ng-bootstrap-popover.mjs.map +1 -1
  326. package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs +10 -10
  327. package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs.map +1 -1
  328. package/fesm2022/mintplayer-ng-bootstrap-range.mjs +10 -10
  329. package/fesm2022/mintplayer-ng-bootstrap-range.mjs.map +1 -1
  330. package/fesm2022/mintplayer-ng-bootstrap-rating.mjs +7 -7
  331. package/fesm2022/mintplayer-ng-bootstrap-rating.mjs.map +1 -1
  332. package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs +10 -10
  333. package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs.map +1 -1
  334. package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs +25 -25
  335. package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs.map +1 -1
  336. package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs +13 -13
  337. package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs.map +1 -1
  338. package/fesm2022/mintplayer-ng-bootstrap-select.mjs +13 -13
  339. package/fesm2022/mintplayer-ng-bootstrap-select.mjs.map +1 -1
  340. package/fesm2022/mintplayer-ng-bootstrap-select2.mjs +55 -18
  341. package/fesm2022/mintplayer-ng-bootstrap-select2.mjs.map +1 -1
  342. package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs +7 -7
  343. package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs.map +1 -1
  344. package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs +7 -7
  345. package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs.map +1 -1
  346. package/fesm2022/mintplayer-ng-bootstrap-splitter.mjs +13 -13
  347. package/fesm2022/mintplayer-ng-bootstrap-splitter.mjs.map +1 -1
  348. package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs +13 -13
  349. package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs.map +1 -1
  350. package/fesm2022/mintplayer-ng-bootstrap-table.mjs +7 -7
  351. package/fesm2022/mintplayer-ng-bootstrap-table.mjs.map +1 -1
  352. package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs +7 -7
  353. package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs.map +1 -1
  354. package/fesm2022/mintplayer-ng-bootstrap-toast.mjs +25 -25
  355. package/fesm2022/mintplayer-ng-bootstrap-toast.mjs.map +1 -1
  356. package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs +13 -13
  357. package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs.map +1 -1
  358. package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs +10 -10
  359. package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs.map +1 -1
  360. package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs +10 -10
  361. package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs.map +1 -1
  362. package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs +7 -7
  363. package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs.map +1 -1
  364. package/fesm2022/mintplayer-ng-bootstrap-user-agent.mjs +7 -7
  365. package/fesm2022/mintplayer-ng-bootstrap-user-agent.mjs.map +1 -1
  366. package/fesm2022/mintplayer-ng-bootstrap.mjs +21 -21
  367. package/fesm2022/mintplayer-ng-bootstrap.mjs.map +1 -1
  368. package/package.json +1 -1
  369. package/select2/src/component/select2.component.d.ts +9 -7
  370. package/select2/src/directive/index.d.ts +2 -0
  371. package/select2/src/directive/item-template/item-template.directive.d.ts +15 -0
  372. package/select2/src/directive/suggestion-template/suggestion-template.directive.d.ts +15 -0
  373. package/select2/src/index.d.ts +2 -1
  374. package/select2/src/interfaces/has-id.d.ts +3 -0
  375. package/select2/src/interfaces/index.d.ts +1 -0
  376. package/select2/src/select2.module.d.ts +9 -8
  377. package/datatable/src/datatable-column/datatable-column-metadata.d.ts +0 -4
  378. package/datatable/src/datatable-column/index.d.ts +0 -2
  379. package/esm2022/datatable/src/datatable-column/datatable-column-metadata.mjs +0 -2
  380. package/esm2022/datatable/src/datatable-column/index.mjs +0 -3
  381. package/esm2022/select2/src/directive/item-template.directive.mjs +0 -20
  382. package/select2/src/directive/item-template.directive.d.ts +0 -9
@@ -3,7 +3,7 @@ import { BehaviorSubject, filter, map } from 'rxjs';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
5
5
  import * as i2 from "@mintplayer/ng-bootstrap/icon";
6
- class ResourceGroupPresenterComponent {
6
+ export class ResourceGroupPresenterComponent {
7
7
  constructor() {
8
8
  this.level = 0;
9
9
  this.resourceOrGroup$ = new BehaviorSubject(null);
@@ -61,11 +61,10 @@ class ResourceGroupPresenterComponent {
61
61
  toggleExpanded() {
62
62
  this.isExpanded$.next(!this.isExpanded$.value);
63
63
  }
64
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ResourceGroupPresenterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: ResourceGroupPresenterComponent, selector: "bs-resource-group-presenter", inputs: { level: "level", resourceGroup: "resourceGroup", timeSlots: "timeSlots", isExpanded: "isExpanded" }, ngImport: i0, template: "<ng-container *ngIf=\"(data$ | async) as data\">\n\n <!-- Data is a resource group -->\n <ng-container *ngIf=\"data.resourceGroup\">\n <!-- Header -->\n <tr class=\"p-0 cursor-pointer\" *ngIf=\"(timeSlots$ | async) as timeSlots\" [title]=\"data.resourceGroup.description\">\n <ng-container *ngIf=\"(colSpan$ | async) as colspan\">\n <td class=\"p-2 cursor-pointer\" [colSpan]=\"colspan + 1\" (click)=\"toggleExpanded()\">\n <span class=\"p-2 align-middle position-sticky\">\n <bs-icon [icon]=\"'chevron-down'\" [style.padding-left.px]=\"level * 20\" *ngIf=\"isExpanded$ | async\"></bs-icon>\n <bs-icon [icon]=\"'chevron-right'\" [style.padding-left.px]=\"level * 20\" *ngIf=\"(isExpanded$ | async) === false\"></bs-icon>\n {{ data.resourceGroup.description }}\n </span>\n </td>\n </ng-container>\n </tr>\n\n <!-- Subgroups or resources -->\n <ng-container *ngIf=\"isExpanded$ | async\">\n <ng-container *ngIf=\"(timeSlots$ | async) as timeSlots\">\n <ng-container *ngFor=\"let child of data.resourceGroup.children\">\n <bs-resource-group-presenter [resourceGroup]=\"child\" [timeSlots]=\"timeSlots\" [level]=\"level + 1\"></bs-resource-group-presenter>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Data is a resource -->\n <tr *ngIf=\"data.resource\" class=\"p-0 bordered\" [title]=\"data.resource.description\">\n <td class=\"p-0 bg-white\">\n <div class=\"p-2\">{{ data.resource.description }}</div>\n </td>\n <ng-container *ngFor=\"let slots of (timeSlots$ | async)\">\n <td class=\"bg-white border-1\" *ngFor=\"let slot of slots.slots\">\n <!-- {{ slot.start | date: 'dd/MM/yyyy HH:mm:ss' }} -->\n </td>\n </ng-container>\n </tr>\n</ng-container>", styles: [":host{display:contents}tr{border-bottom-width:1px}tr:not(.bordered) td span.position-sticky{left:0;right:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.BsIconComponent, selector: "bs-icon", inputs: ["icon"] }, { kind: "component", type: ResourceGroupPresenterComponent, selector: "bs-resource-group-presenter", inputs: ["level", "resourceGroup", "timeSlots", "isExpanded"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
64
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ResourceGroupPresenterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: ResourceGroupPresenterComponent, selector: "bs-resource-group-presenter", inputs: { level: "level", resourceGroup: "resourceGroup", timeSlots: "timeSlots", isExpanded: "isExpanded" }, ngImport: i0, template: "<ng-container *ngIf=\"(data$ | async) as data\">\n\n <!-- Data is a resource group -->\n <ng-container *ngIf=\"data.resourceGroup\">\n <!-- Header -->\n <tr class=\"p-0 cursor-pointer\" *ngIf=\"(timeSlots$ | async) as timeSlots\" [title]=\"data.resourceGroup.description\">\n <ng-container *ngIf=\"(colSpan$ | async) as colspan\">\n <td class=\"p-2 cursor-pointer\" [colSpan]=\"colspan + 1\" (click)=\"toggleExpanded()\">\n <span class=\"p-2 align-middle position-sticky\">\n <bs-icon [icon]=\"'chevron-down'\" [style.padding-left.px]=\"level * 20\" *ngIf=\"isExpanded$ | async\"></bs-icon>\n <bs-icon [icon]=\"'chevron-right'\" [style.padding-left.px]=\"level * 20\" *ngIf=\"(isExpanded$ | async) === false\"></bs-icon>\n {{ data.resourceGroup.description }}\n </span>\n </td>\n </ng-container>\n </tr>\n\n <!-- Subgroups or resources -->\n <ng-container *ngIf=\"isExpanded$ | async\">\n <ng-container *ngIf=\"(timeSlots$ | async) as timeSlots\">\n <ng-container *ngFor=\"let child of data.resourceGroup.children\">\n <bs-resource-group-presenter [resourceGroup]=\"child\" [timeSlots]=\"timeSlots\" [level]=\"level + 1\"></bs-resource-group-presenter>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Data is a resource -->\n <tr *ngIf=\"data.resource\" class=\"p-0 bordered\" [title]=\"data.resource.description\">\n <td class=\"p-0 bg-white\">\n <div class=\"p-2\">{{ data.resource.description }}</div>\n </td>\n <ng-container *ngFor=\"let slots of (timeSlots$ | async)\">\n <td class=\"bg-white border-1\" *ngFor=\"let slot of slots.slots\">\n <!-- {{ slot.start | date: 'dd/MM/yyyy HH:mm:ss' }} -->\n </td>\n </ng-container>\n </tr>\n</ng-container>", styles: [":host{display:contents}tr{border-bottom-width:1px}tr:not(.bordered) td span.position-sticky{left:0;right:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.BsIconComponent, selector: "bs-icon", inputs: ["icon"] }, { kind: "component", type: ResourceGroupPresenterComponent, selector: "bs-resource-group-presenter", inputs: ["level", "resourceGroup", "timeSlots", "isExpanded"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
66
66
  }
67
- export { ResourceGroupPresenterComponent };
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ResourceGroupPresenterComponent, decorators: [{
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ResourceGroupPresenterComponent, decorators: [{
69
68
  type: Component,
70
69
  args: [{ selector: 'bs-resource-group-presenter', template: "<ng-container *ngIf=\"(data$ | async) as data\">\n\n <!-- Data is a resource group -->\n <ng-container *ngIf=\"data.resourceGroup\">\n <!-- Header -->\n <tr class=\"p-0 cursor-pointer\" *ngIf=\"(timeSlots$ | async) as timeSlots\" [title]=\"data.resourceGroup.description\">\n <ng-container *ngIf=\"(colSpan$ | async) as colspan\">\n <td class=\"p-2 cursor-pointer\" [colSpan]=\"colspan + 1\" (click)=\"toggleExpanded()\">\n <span class=\"p-2 align-middle position-sticky\">\n <bs-icon [icon]=\"'chevron-down'\" [style.padding-left.px]=\"level * 20\" *ngIf=\"isExpanded$ | async\"></bs-icon>\n <bs-icon [icon]=\"'chevron-right'\" [style.padding-left.px]=\"level * 20\" *ngIf=\"(isExpanded$ | async) === false\"></bs-icon>\n {{ data.resourceGroup.description }}\n </span>\n </td>\n </ng-container>\n </tr>\n\n <!-- Subgroups or resources -->\n <ng-container *ngIf=\"isExpanded$ | async\">\n <ng-container *ngIf=\"(timeSlots$ | async) as timeSlots\">\n <ng-container *ngFor=\"let child of data.resourceGroup.children\">\n <bs-resource-group-presenter [resourceGroup]=\"child\" [timeSlots]=\"timeSlots\" [level]=\"level + 1\"></bs-resource-group-presenter>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Data is a resource -->\n <tr *ngIf=\"data.resource\" class=\"p-0 bordered\" [title]=\"data.resource.description\">\n <td class=\"p-0 bg-white\">\n <div class=\"p-2\">{{ data.resource.description }}</div>\n </td>\n <ng-container *ngFor=\"let slots of (timeSlots$ | async)\">\n <td class=\"bg-white border-1\" *ngFor=\"let slot of slots.slots\">\n <!-- {{ slot.start | date: 'dd/MM/yyyy HH:mm:ss' }} -->\n </td>\n </ng-container>\n </tr>\n</ng-container>", styles: [":host{display:contents}tr{border-bottom-width:1px}tr:not(.bordered) td span.position-sticky{left:0;right:0}\n"] }]
71
70
  }], ctorParameters: function () { return []; }, propDecorators: { level: [{
@@ -77,4 +76,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImpor
77
76
  }], isExpanded: [{
78
77
  type: Input
79
78
  }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9jb21wb25lbnRzL3Jlc291cmNlLWdyb3VwLXByZXNlbnRlci9yZXNvdXJjZS1ncm91cC1wcmVzZW50ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zY2hlZHVsZXIvc3JjL2NvbXBvbmVudHMvcmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyL3Jlc291cmNlLWdyb3VwLXByZXNlbnRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7QUFLaEUsTUFNYSwrQkFBK0I7SUFFMUM7UUEyQlMsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUNuQixxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBa0MsSUFBSSxDQUFDLENBQUM7UUFDOUUsZUFBVSxHQUFHLElBQUksZUFBZSxDQUE0QixFQUFFLENBQUMsQ0FBQztRQUNoRSxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBN0JoRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0I7YUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU0sSUFBSSxVQUFVLElBQUksZUFBZSxFQUFFO2dCQUN4QyxPQUF3QjtvQkFDdEIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsYUFBYSxFQUFFLGVBQWU7aUJBQy9CLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxPQUF3QjtvQkFDdEIsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLGFBQWEsRUFBRSxJQUFJO2lCQUNwQixDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQzthQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBa0IsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUVwRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVO2FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTO2FBQzdCLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2FBQ3RDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQzVDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFTRCx5QkFBeUI7SUFDekIsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBQ0QsSUFBb0IsYUFBYSxDQUFDLEtBQXNDO1FBQ3RFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELFlBQVk7SUFFWixtQkFBbUI7SUFDbkIsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQW9CLFNBQVMsQ0FBQyxLQUFnQztRQUM1RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsWUFBWTtJQUVaLG9CQUFvQjtJQUNwQixJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBb0IsVUFBVSxDQUFDLEtBQWM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELFlBQVk7SUFFWixjQUFjO1FBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7OEdBakVVLCtCQUErQjtrR0FBL0IsK0JBQStCLGlMQ1o1QyxzZ0VBc0NlLGdlRDFCRiwrQkFBK0I7O1NBQS9CLCtCQUErQjsyRkFBL0IsK0JBQStCO2tCQU4zQyxTQUFTOytCQUNFLDZCQUE2QjswRUFrQzlCLEtBQUs7c0JBQWIsS0FBSztnQkFXYyxhQUFhO3NCQUFoQyxLQUFLO2dCQVNjLFNBQVM7c0JBQTVCLEtBQUs7Z0JBU2MsVUFBVTtzQkFBN0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlc291cmNlLCBSZXNvdXJjZUdyb3VwIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZXNvdXJjZU9yR3JvdXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Jlc291cmNlLW9yLWdyb3VwJztcbmltcG9ydCB7IFNjaGVkdWxlclN0YW1wV2l0aFNsb3RzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItc3RhbXAtd2l0aC1zbG90cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JzLXJlc291cmNlLWdyb3VwLXByZXNlbnRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZS1ncm91cC1wcmVzZW50ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZS1ncm91cC1wcmVzZW50ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgXG59KVxuZXhwb3J0IGNsYXNzIFJlc291cmNlR3JvdXBQcmVzZW50ZXJDb21wb25lbnQge1xuICBcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kYXRhJCA9IHRoaXMucmVzb3VyY2VPckdyb3VwJFxuICAgICAgLnBpcGUobWFwKChyZXNvdXJjZU9yR3JvdXApID0+IHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZU9yR3JvdXApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICgnY2hpbGRyZW4nIGluIHJlc291cmNlT3JHcm91cCkge1xuICAgICAgICAgIHJldHVybiA8UmVzb3VyY2VPckdyb3VwPntcbiAgICAgICAgICAgIHJlc291cmNlOiBudWxsLFxuICAgICAgICAgICAgcmVzb3VyY2VHcm91cDogcmVzb3VyY2VPckdyb3VwXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gPFJlc291cmNlT3JHcm91cD57XG4gICAgICAgICAgICByZXNvdXJjZTogcmVzb3VyY2VPckdyb3VwLFxuICAgICAgICAgICAgcmVzb3VyY2VHcm91cDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pKVxuICAgICAgLnBpcGUoZmlsdGVyKChyZXNvdXJjZU9yR3JvdXApID0+ICEhcmVzb3VyY2VPckdyb3VwKSlcbiAgICAgIC5waXBlKG1hcCgocmVzb3VyY2VPckdyb3VwKSA9PiA8UmVzb3VyY2VPckdyb3VwPnJlc291cmNlT3JHcm91cCkpO1xuXG4gICAgdGhpcy5jb2xTcGFuJCA9IHRoaXMudGltZVNsb3RzJFxuICAgICAgLnBpcGUobWFwKHRpbWVTbG90cyA9PiB0aW1lU2xvdHNcbiAgICAgICAgLm1hcCh0aW1lc2xvdCA9PiB0aW1lc2xvdC5zbG90cy5sZW5ndGgpXG4gICAgICAgIC5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudCwgMClcbiAgICAgICkpO1xuICB9XG5cbiAgQElucHV0KCkgbGV2ZWwgPSAwO1xuICByZXNvdXJjZU9yR3JvdXAkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXNvdXJjZSB8IFJlc291cmNlR3JvdXAgfCBudWxsPihudWxsKTtcbiAgdGltZVNsb3RzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2NoZWR1bGVyU3RhbXBXaXRoU2xvdHNbXT4oW10pO1xuICBpc0V4cGFuZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBkYXRhJDogT2JzZXJ2YWJsZTxSZXNvdXJjZU9yR3JvdXA+O1xuICBjb2xTcGFuJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIC8vI3JlZ2lvbiByZXNvdXJjZU9yR3JvdXBcbiAgcHVibGljIGdldCByZXNvdXJjZU9yR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VPckdyb3VwJC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHJlc291cmNlR3JvdXAodmFsdWU6IFJlc291cmNlIHwgUmVzb3VyY2VHcm91cCB8IG51bGwpIHtcbiAgICB0aGlzLnJlc291cmNlT3JHcm91cCQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIHRpbWVTbG90c1xuICBwdWJsaWMgZ2V0IHRpbWVTbG90cygpIHtcbiAgICByZXR1cm4gdGhpcy50aW1lU2xvdHMkLnZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgdGltZVNsb3RzKHZhbHVlOiBTY2hlZHVsZXJTdGFtcFdpdGhTbG90c1tdKSB7XG4gICAgdGhpcy50aW1lU2xvdHMkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBpc0V4cGFuZGVkXG4gIHB1YmxpYyBnZXQgaXNFeHBhbmRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkJC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGlzRXhwYW5kZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHRvZ2dsZUV4cGFuZGVkKCkge1xuICAgIHRoaXMuaXNFeHBhbmRlZCQubmV4dCghdGhpcy5pc0V4cGFuZGVkJC52YWx1ZSk7XG4gIH1cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIihkYXRhJCB8IGFzeW5jKSBhcyBkYXRhXCI+XG5cbiAgICA8IS0tIERhdGEgaXMgYSByZXNvdXJjZSBncm91cCAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5yZXNvdXJjZUdyb3VwXCI+XG4gICAgICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgICAgICA8dHIgY2xhc3M9XCJwLTAgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cIih0aW1lU2xvdHMkIHwgYXN5bmMpIGFzIHRpbWVTbG90c1wiIFt0aXRsZV09XCJkYXRhLnJlc291cmNlR3JvdXAuZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoY29sU3BhbiQgfCBhc3luYykgYXMgY29sc3BhblwiPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInAtMiBjdXJzb3ItcG9pbnRlclwiIFtjb2xTcGFuXT1cImNvbHNwYW4gKyAxXCIgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZGVkKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLTIgYWxpZ24tbWlkZGxlIHBvc2l0aW9uLXN0aWNreVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJzLWljb24gW2ljb25dPVwiJ2NoZXZyb24tZG93bidcIiBbc3R5bGUucGFkZGluZy1sZWZ0LnB4XT1cImxldmVsICogMjBcIiAqbmdJZj1cImlzRXhwYW5kZWQkIHwgYXN5bmNcIj48L2JzLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnMtaWNvbiBbaWNvbl09XCInY2hldnJvbi1yaWdodCdcIiBbc3R5bGUucGFkZGluZy1sZWZ0LnB4XT1cImxldmVsICogMjBcIiAqbmdJZj1cIihpc0V4cGFuZGVkJCB8IGFzeW5jKSA9PT0gZmFsc2VcIj48L2JzLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhLnJlc291cmNlR3JvdXAuZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90cj5cblxuICAgICAgICA8IS0tIFN1Ymdyb3VwcyBvciByZXNvdXJjZXMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0V4cGFuZGVkJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHRpbWVTbG90cyQgfCBhc3luYykgYXMgdGltZVNsb3RzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgZGF0YS5yZXNvdXJjZUdyb3VwLmNoaWxkcmVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxicy1yZXNvdXJjZS1ncm91cC1wcmVzZW50ZXIgW3Jlc291cmNlR3JvdXBdPVwiY2hpbGRcIiBbdGltZVNsb3RzXT1cInRpbWVTbG90c1wiIFtsZXZlbF09XCJsZXZlbCArIDFcIj48L2JzLXJlc291cmNlLWdyb3VwLXByZXNlbnRlcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRGF0YSBpcyBhIHJlc291cmNlIC0tPlxuICAgIDx0ciAqbmdJZj1cImRhdGEucmVzb3VyY2VcIiBjbGFzcz1cInAtMCBib3JkZXJlZFwiIFt0aXRsZV09XCJkYXRhLnJlc291cmNlLmRlc2NyaXB0aW9uXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cInAtMCBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMlwiPnt7IGRhdGEucmVzb3VyY2UuZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2xvdHMgb2YgKHRpbWVTbG90cyQgfCBhc3luYylcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJnLXdoaXRlIGJvcmRlci0xXCIgKm5nRm9yPVwibGV0IHNsb3Qgb2Ygc2xvdHMuc2xvdHNcIj5cbiAgICAgICAgICAgICAgICA8IS0tIHt7IHNsb3Quc3RhcnQgfCBkYXRlOiAnZGQvTU0veXl5eSBISDptbTpzcycgfX0gLS0+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3RyPlxuPC9uZy1jb250YWluZXI+Il19
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9jb21wb25lbnRzL3Jlc291cmNlLWdyb3VwLXByZXNlbnRlci9yZXNvdXJjZS1ncm91cC1wcmVzZW50ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zY2hlZHVsZXIvc3JjL2NvbXBvbmVudHMvcmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyL3Jlc291cmNlLWdyb3VwLXByZXNlbnRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7QUFXaEUsTUFBTSxPQUFPLCtCQUErQjtJQUUxQztRQTJCUyxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFrQyxJQUFJLENBQUMsQ0FBQztRQUM5RSxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQTRCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUE3QmhELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjthQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDcEIsT0FBTyxJQUFJLENBQUM7YUFDYjtpQkFBTSxJQUFJLFVBQVUsSUFBSSxlQUFlLEVBQUU7Z0JBQ3hDLE9BQXdCO29CQUN0QixRQUFRLEVBQUUsSUFBSTtvQkFDZCxhQUFhLEVBQUUsZUFBZTtpQkFDL0IsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLE9BQXdCO29CQUN0QixRQUFRLEVBQUUsZUFBZTtvQkFDekIsYUFBYSxFQUFFLElBQUk7aUJBQ3BCLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFrQixlQUFlLENBQUMsQ0FBQyxDQUFDO1FBRXBFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVU7YUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVM7YUFDN0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7YUFDdEMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDNUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQVNELHlCQUF5QjtJQUN6QixJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxJQUFvQixhQUFhLENBQUMsS0FBc0M7UUFDdEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsWUFBWTtJQUVaLG1CQUFtQjtJQUNuQixJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBb0IsU0FBUyxDQUFDLEtBQWdDO1FBQzVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxZQUFZO0lBRVosb0JBQW9CO0lBQ3BCLElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFvQixVQUFVLENBQUMsS0FBYztRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsWUFBWTtJQUVaLGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQzs4R0FqRVUsK0JBQStCO2tHQUEvQiwrQkFBK0IsaUxDWjVDLHNnRUFzQ2UsZ2VEMUJGLCtCQUErQjs7MkZBQS9CLCtCQUErQjtrQkFOM0MsU0FBUzsrQkFDRSw2QkFBNkI7MEVBa0M5QixLQUFLO3NCQUFiLEtBQUs7Z0JBV2MsYUFBYTtzQkFBaEMsS0FBSztnQkFTYyxTQUFTO3NCQUE1QixLQUFLO2dCQVNjLFVBQVU7c0JBQTdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXNvdXJjZSwgUmVzb3VyY2VHcm91cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmVzb3VyY2VPckdyb3VwIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXNvdXJjZS1vci1ncm91cCc7XG5pbXBvcnQgeyBTY2hlZHVsZXJTdGFtcFdpdGhTbG90cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLXN0YW1wLXdpdGgtc2xvdHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicy1yZXNvdXJjZS1ncm91cC1wcmVzZW50ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIFxufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUdyb3VwUHJlc2VudGVyQ29tcG9uZW50IHtcbiAgXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGF0YSQgPSB0aGlzLnJlc291cmNlT3JHcm91cCRcbiAgICAgIC5waXBlKG1hcCgocmVzb3VyY2VPckdyb3VwKSA9PiB7XG4gICAgICAgIGlmICghcmVzb3VyY2VPckdyb3VwKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoJ2NoaWxkcmVuJyBpbiByZXNvdXJjZU9yR3JvdXApIHtcbiAgICAgICAgICByZXR1cm4gPFJlc291cmNlT3JHcm91cD57XG4gICAgICAgICAgICByZXNvdXJjZTogbnVsbCxcbiAgICAgICAgICAgIHJlc291cmNlR3JvdXA6IHJlc291cmNlT3JHcm91cFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDxSZXNvdXJjZU9yR3JvdXA+e1xuICAgICAgICAgICAgcmVzb3VyY2U6IHJlc291cmNlT3JHcm91cCxcbiAgICAgICAgICAgIHJlc291cmNlR3JvdXA6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KSlcbiAgICAgIC5waXBlKGZpbHRlcigocmVzb3VyY2VPckdyb3VwKSA9PiAhIXJlc291cmNlT3JHcm91cCkpXG4gICAgICAucGlwZShtYXAoKHJlc291cmNlT3JHcm91cCkgPT4gPFJlc291cmNlT3JHcm91cD5yZXNvdXJjZU9yR3JvdXApKTtcblxuICAgIHRoaXMuY29sU3BhbiQgPSB0aGlzLnRpbWVTbG90cyRcbiAgICAgIC5waXBlKG1hcCh0aW1lU2xvdHMgPT4gdGltZVNsb3RzXG4gICAgICAgIC5tYXAodGltZXNsb3QgPT4gdGltZXNsb3Quc2xvdHMubGVuZ3RoKVxuICAgICAgICAucmVkdWNlKChzdW0sIGN1cnJlbnQpID0+IHN1bSArIGN1cnJlbnQsIDApXG4gICAgICApKTtcbiAgfVxuXG4gIEBJbnB1dCgpIGxldmVsID0gMDtcbiAgcmVzb3VyY2VPckdyb3VwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVzb3VyY2UgfCBSZXNvdXJjZUdyb3VwIHwgbnVsbD4obnVsbCk7XG4gIHRpbWVTbG90cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjaGVkdWxlclN0YW1wV2l0aFNsb3RzW10+KFtdKTtcbiAgaXNFeHBhbmRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgZGF0YSQ6IE9ic2VydmFibGU8UmVzb3VyY2VPckdyb3VwPjtcbiAgY29sU3BhbiQ6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICAvLyNyZWdpb24gcmVzb3VyY2VPckdyb3VwXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VPckdyb3VwKCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlT3JHcm91cCQudmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCByZXNvdXJjZUdyb3VwKHZhbHVlOiBSZXNvdXJjZSB8IFJlc291cmNlR3JvdXAgfCBudWxsKSB7XG4gICAgdGhpcy5yZXNvdXJjZU9yR3JvdXAkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiB0aW1lU2xvdHNcbiAgcHVibGljIGdldCB0aW1lU2xvdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGltZVNsb3RzJC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRpbWVTbG90cyh2YWx1ZTogU2NoZWR1bGVyU3RhbXBXaXRoU2xvdHNbXSkge1xuICAgIHRoaXMudGltZVNsb3RzJC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gaXNFeHBhbmRlZFxuICBwdWJsaWMgZ2V0IGlzRXhwYW5kZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNFeHBhbmRlZCQudmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCBpc0V4cGFuZGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0V4cGFuZGVkJC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICB0b2dnbGVFeHBhbmRlZCgpIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQkLm5leHQoIXRoaXMuaXNFeHBhbmRlZCQudmFsdWUpO1xuICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIoZGF0YSQgfCBhc3luYykgYXMgZGF0YVwiPlxuXG4gICAgPCEtLSBEYXRhIGlzIGEgcmVzb3VyY2UgZ3JvdXAgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEucmVzb3VyY2VHcm91cFwiPlxuICAgICAgICA8IS0tIEhlYWRlciAtLT5cbiAgICAgICAgPHRyIGNsYXNzPVwicC0wIGN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCIodGltZVNsb3RzJCB8IGFzeW5jKSBhcyB0aW1lU2xvdHNcIiBbdGl0bGVdPVwiZGF0YS5yZXNvdXJjZUdyb3VwLmRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGNvbFNwYW4kIHwgYXN5bmMpIGFzIGNvbHNwYW5cIj5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwLTIgY3Vyc29yLXBvaW50ZXJcIiBbY29sU3Bhbl09XCJjb2xzcGFuICsgMVwiIChjbGljayk9XCJ0b2dnbGVFeHBhbmRlZCgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC0yIGFsaWduLW1pZGRsZSBwb3NpdGlvbi1zdGlja3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicy1pY29uIFtpY29uXT1cIidjaGV2cm9uLWRvd24nXCIgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCJsZXZlbCAqIDIwXCIgKm5nSWY9XCJpc0V4cGFuZGVkJCB8IGFzeW5jXCI+PC9icy1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJzLWljb24gW2ljb25dPVwiJ2NoZXZyb24tcmlnaHQnXCIgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCJsZXZlbCAqIDIwXCIgKm5nSWY9XCIoaXNFeHBhbmRlZCQgfCBhc3luYykgPT09IGZhbHNlXCI+PC9icy1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YS5yZXNvdXJjZUdyb3VwLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdHI+XG5cbiAgICAgICAgPCEtLSBTdWJncm91cHMgb3IgcmVzb3VyY2VzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFeHBhbmRlZCQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih0aW1lU2xvdHMkIHwgYXN5bmMpIGFzIHRpbWVTbG90c1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGRhdGEucmVzb3VyY2VHcm91cC5jaGlsZHJlblwiPlxuICAgICAgICAgICAgICAgICAgICA8YnMtcmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyIFtyZXNvdXJjZUdyb3VwXT1cImNoaWxkXCIgW3RpbWVTbG90c109XCJ0aW1lU2xvdHNcIiBbbGV2ZWxdPVwibGV2ZWwgKyAxXCI+PC9icy1yZXNvdXJjZS1ncm91cC1wcmVzZW50ZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERhdGEgaXMgYSByZXNvdXJjZSAtLT5cbiAgICA8dHIgKm5nSWY9XCJkYXRhLnJlc291cmNlXCIgY2xhc3M9XCJwLTAgYm9yZGVyZWRcIiBbdGl0bGVdPVwiZGF0YS5yZXNvdXJjZS5kZXNjcmlwdGlvblwiPlxuICAgICAgICA8dGQgY2xhc3M9XCJwLTAgYmctd2hpdGVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIj57eyBkYXRhLnJlc291cmNlLmRlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNsb3RzIG9mICh0aW1lU2xvdHMkIHwgYXN5bmMpXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJiZy13aGl0ZSBib3JkZXItMVwiICpuZ0Zvcj1cImxldCBzbG90IG9mIHNsb3RzLnNsb3RzXCI+XG4gICAgICAgICAgICAgICAgPCEtLSB7eyBzbG90LnN0YXJ0IHwgZGF0ZTogJ2RkL01NL3l5eXkgSEg6bW06c3MnIH19IC0tPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90cj5cbjwvbmctY29udGFpbmVyPiJdfQ==
@@ -14,7 +14,7 @@ import * as i5 from "../resource-group-presenter/resource-group-presenter.compon
14
14
  import * as i6 from "../../pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe";
15
15
  import * as i7 from "../../pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe";
16
16
  import * as i8 from "../../pipes/day-of-week/day-of-week.pipe";
17
- class BsSchedulerComponent {
17
+ export class BsSchedulerComponent {
18
18
  constructor(calendarMonthService, timelineService) {
19
19
  this.calendarMonthService = calendarMonthService;
20
20
  this.timelineService = timelineService;
@@ -495,11 +495,10 @@ class BsSchedulerComponent {
495
495
  }
496
496
  }
497
497
  }
498
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: BsSchedulerComponent, deps: [{ token: i1.BsCalendarMonthService }, { token: i2.BsTimelineService }], target: i0.ɵɵFactoryTarget.Component }); }
499
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: BsSchedulerComponent, selector: "bs-scheduler", inputs: { mode: "mode", weekOptions: "weekOptions", timelineOptions: "timelineOptions", maxInnerHeight: "maxInnerHeight", resources: "resources" }, outputs: { modeChange: "modeChange", weekOptionsChange: "weekOptionsChange", timelineOptionsChange: "timelineOptionsChange" }, host: { listeners: { "document:mousemove": "onMousemove($event)", "document:mouseup": "onMouseUp($event)" } }, viewQueries: [{ propertyName: "timeSlotElements", predicate: ["slot"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex flex-column w-100 overflow-y-auto mb-0 week-schedule\" [style.max-height.px]=\"null\"\n *ngIf=\"(mode$ | async) === modes.week\">\n <div class=\"calendar-head\">\n <div class=\"w-100 d-flex flex-row\">\n <div class=\"d-flex calendar-left justify-content-between\">\n <button class=\"btn btn-default flex-start\" (click)=\"onPreviousWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-left'\" class=\"px-0\"></bs-icon>\n </button>\n <button class=\"btn btn-default flex-end\" (click)=\"onNextWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-right'\" class=\"px-0\"></bs-icon>\n </button>\n </div>\n <div class=\"flex-grow-1 calendar-head-cell\" *ngFor=\"let day of (shownDays$ | async)\">\n <span class=\"d-block col-form-label text-center text-nowrap\">\n <span>{{ day | date: 'dd-MM' }}</span><span class=\"d-none d-lg-inline-block\">-{{ day | date: 'yyyy' }}</span>\n </span>\n </div>\n </div>\n </div>\n <div class=\"calendar-body\" [style.height.px]=\"maxInnerHeight\">\n <div class=\"position-relative\" *ngIf=\"(timeSlots$ | async) as row\">\n <ng-container *ngIf=\"(weekOptions$ | async) as weekOptions\">\n <!-- Timeslots -->\n <div *ngFor=\"let timeslots of row; let i = index\" class=\"d-flex flex-row p-0 timeslot\" [style.height.px]=\"weekOptions.unitHeight\">\n <div class=\"calendar-cell calendar-left align-top px-2 py-0\">{{ timeslots.slots[0].start | date: 'HH:mm:ss' }}</div>\n <div class=\"calendar-cell flex-grow-1\" *ngFor=\"let slot of timeslots.slots; let j = index\" #slot (mousedown)=\"onCreateEvent($event, slot)\" [attr.data-row]=\"i\" [attr.data-column]=\"j\"></div>\n </div>\n\n <!-- Events -->\n <ng-container *ngIf=\"(timeSlotDuration$ | async) as timeSlotDuration\">\n <ng-container *ngIf=\"(timelinedEventPartsForThisWeek$ | async) as partData\">\n <div *ngFor=\"let eventPart of partData.parts\" class=\"event p-0\"\n [style.top.px]=\"(eventPart.part | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart.part | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner\" [class.hover]=\"(hoveredEvent$ | async) === eventPart.part.event\"\n [style.width]=\"'calc(100% / ' + partData.total + ')'\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.margin-left]=\"'calc(100% / ' + partData.total + ' * ' + eventPart.index + ')'\">\n\n <div class=\"event-resize top\"\n *ngIf=\"eventPart.part.start === eventPart.part.event?.start\"\n (mousedown)=\"onStartResizeEvent(eventPart.part.event, 'top')\"></div>\n <div class=\"event-border\"></div>\n <div class=\"event-wrapper\" *ngIf=\"eventPart.part.event\"\n (mousedown)=\"onStartDragEvent(eventPart.part, $event)\"\n (mouseenter)=\"onHoverEvent(eventPart.part.event)\"\n (mouseleave)=\"onLeaveEvent(eventPart.part.event)\">\n <div class=\"event-bg\" [style.background-color]=\"eventPart.part.event.color\"></div>\n <div class=\"event-label\">{{ eventPart.part.event.description }}</div>\n </div>\n <div class=\"event-resize bottom\"\n *ngIf=\"eventPart.part.end === eventPart.part.event?.end\"\n (mousedown)=\"onStartResizeEvent(eventPart.part.event, 'bottom')\"></div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(previewEventPartsForThisWeek$ | async) as previewPartData\">\n <div *ngFor=\"let eventPart of previewPartData\" class=\"event preview p-0\"\n [style.top.px]=\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner w-100\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\">\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n<div class=\"d-flex flex-column-100 overflow-y-auto mb-0 bg-white timeline\" *ngIf=\"(mode$ | async) === modes.timeline\">\n <div class=\"calendar-head d-flex\">\n <button class=\"btn flex-start\" (click)=\"onPreviousWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-left'\" class=\"px-0\"></bs-icon>\n </button>\n <div class=\"flex-grow-1 h3 py-2 mb-0 text-center\">{{ currentWeekOrMonth$ | async | date: 'MMMM yyyy' }}</div>\n <button class=\"btn flex-start\" (click)=\"onNextWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-right'\" class=\"px-0\"></bs-icon>\n </button>\n </div>\n \n <div class=\"calendar-body table-responsive overflow-x-auto\">\n <table class=\"table mb-0\">\n <ng-container *ngIf=\"(timeSlots$ | async) as timeSlots\">\n <tr>\n <td></td>\n <td *ngFor=\"let day of timeSlots\" [attr.colspan]=\"day.slots.length\" class=\"text-center px-2\">\n <span class=\"position-sticky day-label\">{{ day.stamp | date: 'd EE' }}</span>\n </td>\n </tr>\n <tr>\n <td></td>\n <ng-container *ngIf=\"(timelineOptions$ | async) as timelineOptions\">\n <ng-container *ngFor=\"let day of timeSlots\">\n <td *ngFor=\"let slot of day.slots\">\n <span class=\"d-block p-0 text-center\" [style.width.px]=\"timelineOptions.unitWidth\">\n {{ slot.start | date: 'HH:mm' }}\n </span>\n </td>\n </ng-container>\n </ng-container>\n </tr>\n <bs-resource-group-presenter *ngFor=\"let group of (resources$ | async)\" [resourceGroup]=\"group\" [timeSlots]=\"timeSlots\"></bs-resource-group-presenter>\n </ng-container>\n </table>\n </div>\n</div>", styles: [":host{display:block;border:1px solid #333;border-top-right-radius:10px;border-top-left-radius:10px;overflow:hidden}.calendar-head{background:#F7F7F7;color:#007aff}.tabel .calendar-head{flex:0 0 auto}.tabel .calendar-body{display:block;flex:1 1 auto}.week-schedule .calendar-head>div{padding-right:18px}.week-schedule .calendar-body{overflow-y:scroll;overflow-x:hidden}.week-schedule .calendar-body .calendar-cell{border-right:1px solid #DEE2E6;border-bottom:1px solid #DEE2E6;cursor:default}.week-schedule .calendar-body .calendar-cell.hover{border-top-width:3px}.week-schedule .calendar-left{width:90px}.week-schedule .event{z-index:5;width:calc((100% - 90px) / 7);height:100px;overflow:hidden;position:absolute;-webkit-user-select:none;user-select:none;pointer-events:none}.week-schedule .event.preview{background:#666;opacity:.6}.week-schedule .event .event-border{background:black;top:0;left:0;bottom:3px;width:3px;position:absolute;z-index:10;opacity:.3}.week-schedule .event .event-inner{position:relative;inset:0 5px 5px 0;cursor:move;pointer-events:all;overflow:hidden}.week-schedule .event .event-inner .event-wrapper{width:calc(100% - 2px);margin:1px auto 1px 0;height:calc(100% - 3px)}.week-schedule .event .event-inner .event-wrapper .event-bg{opacity:.5;height:100%;transition:opacity .15s ease-in-out}.week-schedule .event .event-inner .event-wrapper .event-label{position:absolute;top:0;font-size:12px;font-weight:600;padding:4px}.week-schedule .event .event-inner .event-resize{position:absolute;cursor:ns-resize;height:4px;left:0;right:0;z-index:400}.week-schedule .event .event-inner .event-resize.top{top:0}.week-schedule .event .event-inner .event-resize.bottom{bottom:0}.week-schedule .event .event-inner .event-resize:hover{background:#DDD}.week-schedule .event .event-inner.hover .event-bg{opacity:.7!important}@media (max-width: 767px){.week-schedule.tabel .calendar-head .calendar-head-cell{text-orientation:sideways;writing-mode:vertical-rl}}.timeline.tabel{flex-flow:column}.timeline .calendar-body .tabel{background-color:#f7f7f7}.timeline .calendar-body .tabel tr:first-child td{background-color:#fff;border:1px solid #000}.timeline .calendar-body .tabel tr:first-child td:first-child{min-width:10rem}.timeline .calendar-body .tabel tr:first-child span.day-label{left:0;right:0}.timeline .calendar-body .tabel tr:nth-child(2) td{border-width:1px;border-color:inherit}.timeline .calendar-body .tabel>:not(:first-child){border-top:none!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.BsIconComponent, selector: "bs-icon", inputs: ["icon"] }, { kind: "component", type: i5.ResourceGroupPresenterComponent, selector: "bs-resource-group-presenter", inputs: ["level", "resourceGroup", "timeSlots", "isExpanded"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i6.BsSecondsTimespanPipe, name: "bsSecondsTimespan" }, { kind: "pipe", type: i7.BsSecondsTodayOffsetPipe, name: "bsSecondsTodayOffset" }, { kind: "pipe", type: i8.DayOfWeekPipe, name: "dayOfWeek" }] }); }
498
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsSchedulerComponent, deps: [{ token: i1.BsCalendarMonthService }, { token: i2.BsTimelineService }], target: i0.ɵɵFactoryTarget.Component }); }
499
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: BsSchedulerComponent, selector: "bs-scheduler", inputs: { mode: "mode", weekOptions: "weekOptions", timelineOptions: "timelineOptions", maxInnerHeight: "maxInnerHeight", resources: "resources" }, outputs: { modeChange: "modeChange", weekOptionsChange: "weekOptionsChange", timelineOptionsChange: "timelineOptionsChange" }, host: { listeners: { "document:mousemove": "onMousemove($event)", "document:mouseup": "onMouseUp($event)" } }, viewQueries: [{ propertyName: "timeSlotElements", predicate: ["slot"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex flex-column w-100 overflow-y-auto mb-0 week-schedule\" [style.max-height.px]=\"null\"\n *ngIf=\"(mode$ | async) === modes.week\">\n <div class=\"calendar-head\">\n <div class=\"w-100 d-flex flex-row\">\n <div class=\"d-flex calendar-left justify-content-between\">\n <button class=\"btn btn-default flex-start\" (click)=\"onPreviousWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-left'\" class=\"px-0\"></bs-icon>\n </button>\n <button class=\"btn btn-default flex-end\" (click)=\"onNextWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-right'\" class=\"px-0\"></bs-icon>\n </button>\n </div>\n <div class=\"flex-grow-1 calendar-head-cell\" *ngFor=\"let day of (shownDays$ | async)\">\n <span class=\"d-block col-form-label text-center text-nowrap\">\n <span>{{ day | date: 'dd-MM' }}</span><span class=\"d-none d-lg-inline-block\">-{{ day | date: 'yyyy' }}</span>\n </span>\n </div>\n </div>\n </div>\n <div class=\"calendar-body\" [style.height.px]=\"maxInnerHeight\">\n <div class=\"position-relative\" *ngIf=\"(timeSlots$ | async) as row\">\n <ng-container *ngIf=\"(weekOptions$ | async) as weekOptions\">\n <!-- Timeslots -->\n <div *ngFor=\"let timeslots of row; let i = index\" class=\"d-flex flex-row p-0 timeslot\" [style.height.px]=\"weekOptions.unitHeight\">\n <div class=\"calendar-cell calendar-left align-top px-2 py-0\">{{ timeslots.slots[0].start | date: 'HH:mm:ss' }}</div>\n <div class=\"calendar-cell flex-grow-1\" *ngFor=\"let slot of timeslots.slots; let j = index\" #slot (mousedown)=\"onCreateEvent($event, slot)\" [attr.data-row]=\"i\" [attr.data-column]=\"j\"></div>\n </div>\n\n <!-- Events -->\n <ng-container *ngIf=\"(timeSlotDuration$ | async) as timeSlotDuration\">\n <ng-container *ngIf=\"(timelinedEventPartsForThisWeek$ | async) as partData\">\n <div *ngFor=\"let eventPart of partData.parts\" class=\"event p-0\"\n [style.top.px]=\"(eventPart.part | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart.part | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner\" [class.hover]=\"(hoveredEvent$ | async) === eventPart.part.event\"\n [style.width]=\"'calc(100% / ' + partData.total + ')'\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.margin-left]=\"'calc(100% / ' + partData.total + ' * ' + eventPart.index + ')'\">\n\n <div class=\"event-resize top\"\n *ngIf=\"eventPart.part.start === eventPart.part.event?.start\"\n (mousedown)=\"onStartResizeEvent(eventPart.part.event, 'top')\"></div>\n <div class=\"event-border\"></div>\n <div class=\"event-wrapper\" *ngIf=\"eventPart.part.event\"\n (mousedown)=\"onStartDragEvent(eventPart.part, $event)\"\n (mouseenter)=\"onHoverEvent(eventPart.part.event)\"\n (mouseleave)=\"onLeaveEvent(eventPart.part.event)\">\n <div class=\"event-bg\" [style.background-color]=\"eventPart.part.event.color\"></div>\n <div class=\"event-label\">{{ eventPart.part.event.description }}</div>\n </div>\n <div class=\"event-resize bottom\"\n *ngIf=\"eventPart.part.end === eventPart.part.event?.end\"\n (mousedown)=\"onStartResizeEvent(eventPart.part.event, 'bottom')\"></div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(previewEventPartsForThisWeek$ | async) as previewPartData\">\n <div *ngFor=\"let eventPart of previewPartData\" class=\"event preview p-0\"\n [style.top.px]=\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner w-100\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\">\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n<div class=\"d-flex flex-column-100 overflow-y-auto mb-0 bg-white timeline\" *ngIf=\"(mode$ | async) === modes.timeline\">\n <div class=\"calendar-head d-flex\">\n <button class=\"btn flex-start\" (click)=\"onPreviousWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-left'\" class=\"px-0\"></bs-icon>\n </button>\n <div class=\"flex-grow-1 h3 py-2 mb-0 text-center\">{{ currentWeekOrMonth$ | async | date: 'MMMM yyyy' }}</div>\n <button class=\"btn flex-start\" (click)=\"onNextWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-right'\" class=\"px-0\"></bs-icon>\n </button>\n </div>\n \n <div class=\"calendar-body table-responsive overflow-x-auto\">\n <table class=\"table mb-0\">\n <ng-container *ngIf=\"(timeSlots$ | async) as timeSlots\">\n <tr>\n <td></td>\n <td *ngFor=\"let day of timeSlots\" [attr.colspan]=\"day.slots.length\" class=\"text-center px-2\">\n <span class=\"position-sticky day-label\">{{ day.stamp | date: 'd EE' }}</span>\n </td>\n </tr>\n <tr>\n <td></td>\n <ng-container *ngIf=\"(timelineOptions$ | async) as timelineOptions\">\n <ng-container *ngFor=\"let day of timeSlots\">\n <td *ngFor=\"let slot of day.slots\">\n <span class=\"d-block p-0 text-center\" [style.width.px]=\"timelineOptions.unitWidth\">\n {{ slot.start | date: 'HH:mm' }}\n </span>\n </td>\n </ng-container>\n </ng-container>\n </tr>\n <bs-resource-group-presenter *ngFor=\"let group of (resources$ | async)\" [resourceGroup]=\"group\" [timeSlots]=\"timeSlots\"></bs-resource-group-presenter>\n </ng-container>\n </table>\n </div>\n</div>", styles: [":host{display:block;border:1px solid #333;border-top-right-radius:10px;border-top-left-radius:10px;overflow:hidden}.calendar-head{background:#F7F7F7;color:#007aff}.tabel .calendar-head{flex:0 0 auto}.tabel .calendar-body{display:block;flex:1 1 auto}.week-schedule .calendar-head>div{padding-right:18px}.week-schedule .calendar-body{overflow-y:scroll;overflow-x:hidden}.week-schedule .calendar-body .calendar-cell{border-right:1px solid #DEE2E6;border-bottom:1px solid #DEE2E6;cursor:default}.week-schedule .calendar-body .calendar-cell.hover{border-top-width:3px}.week-schedule .calendar-left{width:90px}.week-schedule .event{z-index:5;width:calc((100% - 90px) / 7);height:100px;overflow:hidden;position:absolute;-webkit-user-select:none;user-select:none;pointer-events:none}.week-schedule .event.preview{background:#666;opacity:.6}.week-schedule .event .event-border{background:black;top:0;left:0;bottom:3px;width:3px;position:absolute;z-index:10;opacity:.3}.week-schedule .event .event-inner{position:relative;inset:0 5px 5px 0;cursor:move;pointer-events:all;overflow:hidden}.week-schedule .event .event-inner .event-wrapper{width:calc(100% - 2px);margin:1px auto 1px 0;height:calc(100% - 3px)}.week-schedule .event .event-inner .event-wrapper .event-bg{opacity:.5;height:100%;transition:opacity .15s ease-in-out}.week-schedule .event .event-inner .event-wrapper .event-label{position:absolute;top:0;font-size:12px;font-weight:600;padding:4px}.week-schedule .event .event-inner .event-resize{position:absolute;cursor:ns-resize;height:4px;left:0;right:0;z-index:400}.week-schedule .event .event-inner .event-resize.top{top:0}.week-schedule .event .event-inner .event-resize.bottom{bottom:0}.week-schedule .event .event-inner .event-resize:hover{background:#DDD}.week-schedule .event .event-inner.hover .event-bg{opacity:.7!important}@media (max-width: 767px){.week-schedule.tabel .calendar-head .calendar-head-cell{text-orientation:sideways;writing-mode:vertical-rl}}.timeline.tabel{flex-flow:column}.timeline .calendar-body .tabel{background-color:#f7f7f7}.timeline .calendar-body .tabel tr:first-child td{background-color:#fff;border:1px solid #000}.timeline .calendar-body .tabel tr:first-child td:first-child{min-width:10rem}.timeline .calendar-body .tabel tr:first-child span.day-label{left:0;right:0}.timeline .calendar-body .tabel tr:nth-child(2) td{border-width:1px;border-color:inherit}.timeline .calendar-body .tabel>:not(:first-child){border-top:none!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.BsIconComponent, selector: "bs-icon", inputs: ["icon"] }, { kind: "component", type: i5.ResourceGroupPresenterComponent, selector: "bs-resource-group-presenter", inputs: ["level", "resourceGroup", "timeSlots", "isExpanded"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i6.BsSecondsTimespanPipe, name: "bsSecondsTimespan" }, { kind: "pipe", type: i7.BsSecondsTodayOffsetPipe, name: "bsSecondsTodayOffset" }, { kind: "pipe", type: i8.DayOfWeekPipe, name: "dayOfWeek" }] }); }
500
500
  }
501
- export { BsSchedulerComponent };
502
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: BsSchedulerComponent, decorators: [{
501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsSchedulerComponent, decorators: [{
503
502
  type: Component,
504
503
  args: [{ selector: 'bs-scheduler', template: "<div class=\"d-flex flex-column w-100 overflow-y-auto mb-0 week-schedule\" [style.max-height.px]=\"null\"\n *ngIf=\"(mode$ | async) === modes.week\">\n <div class=\"calendar-head\">\n <div class=\"w-100 d-flex flex-row\">\n <div class=\"d-flex calendar-left justify-content-between\">\n <button class=\"btn btn-default flex-start\" (click)=\"onPreviousWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-left'\" class=\"px-0\"></bs-icon>\n </button>\n <button class=\"btn btn-default flex-end\" (click)=\"onNextWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-right'\" class=\"px-0\"></bs-icon>\n </button>\n </div>\n <div class=\"flex-grow-1 calendar-head-cell\" *ngFor=\"let day of (shownDays$ | async)\">\n <span class=\"d-block col-form-label text-center text-nowrap\">\n <span>{{ day | date: 'dd-MM' }}</span><span class=\"d-none d-lg-inline-block\">-{{ day | date: 'yyyy' }}</span>\n </span>\n </div>\n </div>\n </div>\n <div class=\"calendar-body\" [style.height.px]=\"maxInnerHeight\">\n <div class=\"position-relative\" *ngIf=\"(timeSlots$ | async) as row\">\n <ng-container *ngIf=\"(weekOptions$ | async) as weekOptions\">\n <!-- Timeslots -->\n <div *ngFor=\"let timeslots of row; let i = index\" class=\"d-flex flex-row p-0 timeslot\" [style.height.px]=\"weekOptions.unitHeight\">\n <div class=\"calendar-cell calendar-left align-top px-2 py-0\">{{ timeslots.slots[0].start | date: 'HH:mm:ss' }}</div>\n <div class=\"calendar-cell flex-grow-1\" *ngFor=\"let slot of timeslots.slots; let j = index\" #slot (mousedown)=\"onCreateEvent($event, slot)\" [attr.data-row]=\"i\" [attr.data-column]=\"j\"></div>\n </div>\n\n <!-- Events -->\n <ng-container *ngIf=\"(timeSlotDuration$ | async) as timeSlotDuration\">\n <ng-container *ngIf=\"(timelinedEventPartsForThisWeek$ | async) as partData\">\n <div *ngFor=\"let eventPart of partData.parts\" class=\"event p-0\"\n [style.top.px]=\"(eventPart.part | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart.part | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner\" [class.hover]=\"(hoveredEvent$ | async) === eventPart.part.event\"\n [style.width]=\"'calc(100% / ' + partData.total + ')'\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.margin-left]=\"'calc(100% / ' + partData.total + ' * ' + eventPart.index + ')'\">\n\n <div class=\"event-resize top\"\n *ngIf=\"eventPart.part.start === eventPart.part.event?.start\"\n (mousedown)=\"onStartResizeEvent(eventPart.part.event, 'top')\"></div>\n <div class=\"event-border\"></div>\n <div class=\"event-wrapper\" *ngIf=\"eventPart.part.event\"\n (mousedown)=\"onStartDragEvent(eventPart.part, $event)\"\n (mouseenter)=\"onHoverEvent(eventPart.part.event)\"\n (mouseleave)=\"onLeaveEvent(eventPart.part.event)\">\n <div class=\"event-bg\" [style.background-color]=\"eventPart.part.event.color\"></div>\n <div class=\"event-label\">{{ eventPart.part.event.description }}</div>\n </div>\n <div class=\"event-resize bottom\"\n *ngIf=\"eventPart.part.end === eventPart.part.event?.end\"\n (mousedown)=\"onStartResizeEvent(eventPart.part.event, 'bottom')\"></div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(previewEventPartsForThisWeek$ | async) as previewPartData\">\n <div *ngFor=\"let eventPart of previewPartData\" class=\"event preview p-0\"\n [style.top.px]=\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner w-100\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\">\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n<div class=\"d-flex flex-column-100 overflow-y-auto mb-0 bg-white timeline\" *ngIf=\"(mode$ | async) === modes.timeline\">\n <div class=\"calendar-head d-flex\">\n <button class=\"btn flex-start\" (click)=\"onPreviousWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-left'\" class=\"px-0\"></bs-icon>\n </button>\n <div class=\"flex-grow-1 h3 py-2 mb-0 text-center\">{{ currentWeekOrMonth$ | async | date: 'MMMM yyyy' }}</div>\n <button class=\"btn flex-start\" (click)=\"onNextWeekOrMonth()\">\n <bs-icon [icon]=\"'chevron-right'\" class=\"px-0\"></bs-icon>\n </button>\n </div>\n \n <div class=\"calendar-body table-responsive overflow-x-auto\">\n <table class=\"table mb-0\">\n <ng-container *ngIf=\"(timeSlots$ | async) as timeSlots\">\n <tr>\n <td></td>\n <td *ngFor=\"let day of timeSlots\" [attr.colspan]=\"day.slots.length\" class=\"text-center px-2\">\n <span class=\"position-sticky day-label\">{{ day.stamp | date: 'd EE' }}</span>\n </td>\n </tr>\n <tr>\n <td></td>\n <ng-container *ngIf=\"(timelineOptions$ | async) as timelineOptions\">\n <ng-container *ngFor=\"let day of timeSlots\">\n <td *ngFor=\"let slot of day.slots\">\n <span class=\"d-block p-0 text-center\" [style.width.px]=\"timelineOptions.unitWidth\">\n {{ slot.start | date: 'HH:mm' }}\n </span>\n </td>\n </ng-container>\n </ng-container>\n </tr>\n <bs-resource-group-presenter *ngFor=\"let group of (resources$ | async)\" [resourceGroup]=\"group\" [timeSlots]=\"timeSlots\"></bs-resource-group-presenter>\n </ng-container>\n </table>\n </div>\n</div>", styles: [":host{display:block;border:1px solid #333;border-top-right-radius:10px;border-top-left-radius:10px;overflow:hidden}.calendar-head{background:#F7F7F7;color:#007aff}.tabel .calendar-head{flex:0 0 auto}.tabel .calendar-body{display:block;flex:1 1 auto}.week-schedule .calendar-head>div{padding-right:18px}.week-schedule .calendar-body{overflow-y:scroll;overflow-x:hidden}.week-schedule .calendar-body .calendar-cell{border-right:1px solid #DEE2E6;border-bottom:1px solid #DEE2E6;cursor:default}.week-schedule .calendar-body .calendar-cell.hover{border-top-width:3px}.week-schedule .calendar-left{width:90px}.week-schedule .event{z-index:5;width:calc((100% - 90px) / 7);height:100px;overflow:hidden;position:absolute;-webkit-user-select:none;user-select:none;pointer-events:none}.week-schedule .event.preview{background:#666;opacity:.6}.week-schedule .event .event-border{background:black;top:0;left:0;bottom:3px;width:3px;position:absolute;z-index:10;opacity:.3}.week-schedule .event .event-inner{position:relative;inset:0 5px 5px 0;cursor:move;pointer-events:all;overflow:hidden}.week-schedule .event .event-inner .event-wrapper{width:calc(100% - 2px);margin:1px auto 1px 0;height:calc(100% - 3px)}.week-schedule .event .event-inner .event-wrapper .event-bg{opacity:.5;height:100%;transition:opacity .15s ease-in-out}.week-schedule .event .event-inner .event-wrapper .event-label{position:absolute;top:0;font-size:12px;font-weight:600;padding:4px}.week-schedule .event .event-inner .event-resize{position:absolute;cursor:ns-resize;height:4px;left:0;right:0;z-index:400}.week-schedule .event .event-inner .event-resize.top{top:0}.week-schedule .event .event-inner .event-resize.bottom{bottom:0}.week-schedule .event .event-inner .event-resize:hover{background:#DDD}.week-schedule .event .event-inner.hover .event-bg{opacity:.7!important}@media (max-width: 767px){.week-schedule.tabel .calendar-head .calendar-head-cell{text-orientation:sideways;writing-mode:vertical-rl}}.timeline.tabel{flex-flow:column}.timeline .calendar-body .tabel{background-color:#f7f7f7}.timeline .calendar-body .tabel tr:first-child td{background-color:#fff;border:1px solid #000}.timeline .calendar-body .tabel tr:first-child td:first-child{min-width:10rem}.timeline .calendar-body .tabel tr:first-child span.day-label{left:0;right:0}.timeline .calendar-body .tabel tr:nth-child(2) td{border-width:1px;border-color:inherit}.timeline .calendar-body .tabel>:not(:first-child){border-top:none!important}\n"] }]
505
504
  }], ctorParameters: function () { return [{ type: i1.BsCalendarMonthService }, { type: i2.BsTimelineService }]; }, propDecorators: { timeSlotElements: [{
@@ -528,4 +527,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImpor
528
527
  type: HostListener,
529
528
  args: ['document:mouseup', ['$event']]
530
529
  }] } });
531
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9jb21wb25lbnRzL3NjaGVkdWxlci9zY2hlZHVsZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zY2hlZHVsZXIvc3JjL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NjaGVkdWxlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFPNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7Ozs7QUFPN0UsTUFLYSxvQkFBb0I7SUFDL0IsWUFBb0Isb0JBQTRDLEVBQVUsZUFBa0M7UUFBeEYseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF3QjtRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQXVKNUcsZUFBVSxHQUFHLElBQUksZUFBZSxDQUErQixFQUFFLENBQUMsQ0FBQztRQUtuRSxpQkFB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SUFBSSxDQUFDO2dDQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dDQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs2QkFDL0I7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7cUJBQ047b0JBQUMsTUFBTTthQUNUO1NBQ0Y7SUFDSCxDQUFDOzhHQXZnQlUsb0JBQW9CO2tHQUFwQixvQkFBb0IsbWhCQ3hCakMsNjBPQTRHTTs7U0RwRk8sb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsY0FBYzs2SUFrTEYsZ0JBQWdCO3NCQUFyQyxZQUFZO3VCQUFDLE1BQU07Z0JBd0JILFVBQVU7c0JBQTFCLE1BQU07Z0JBSWEsSUFBSTtzQkFBdkIsS0FBSztnQkFlVyxpQkFBaUI7c0JBQWpDLE1BQU07Z0JBSWEsV0FBVztzQkFBOUIsS0FBSztnQkFLVyxxQkFBcUI7c0JBQXJDLE1BQU07Z0JBSWEsZUFBZTtzQkFBbEMsS0FBSztnQkFLVSxjQUFjO3NCQUE3QixLQUFLO2dCQU1jLFNBQVM7c0JBQTVCLEtBQUs7Z0JBZ0pOLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkEyRjlDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCc0NhbGVuZGFyTW9udGhTZXJ2aWNlIH0gZnJvbSAnQG1pbnRwbGF5ZXIvbmctYm9vdHN0cmFwL2NhbGVuZGFyLW1vbnRoJztcbmltcG9ydCB7IEVTY2hlZHVsZXJNb2RlIH0gZnJvbSAnLi4vLi4vZW51bXMvc2NoZWR1bGVyLW1vZGUnO1xuaW1wb3J0IHsgRURyYWdPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy9kcmFnLW9wZXJhdGlvbic7XG5pbXBvcnQgeyBEcmFnT3BlcmF0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kcmFnLW9wZXJhdGlvbic7XG5pbXBvcnQgeyBQcmV2aWV3RXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3ByZXZpZXctZXZlbnQnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1ldmVudCc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudFBhcnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1ldmVudC1wYXJ0JztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50V2l0aFBhcnRzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQtd2l0aC1wYXJ0cyc7XG5pbXBvcnQgeyBUaW1lU2xvdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdGltZS1zbG90JztcbmltcG9ydCB7IEJzVGltZWxpbmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGltZWxpbmUvdGltZWxpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBSZXNvdXJjZUdyb3VwIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXNvdXJjZS1ncm91cCc7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVzb3VyY2UnO1xuaW1wb3J0IHsgU2NoZWR1bGVyU3RhbXBXaXRoU2xvdHMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1zdGFtcC13aXRoLXNsb3RzJztcbmltcG9ydCB7IFdlZWtPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy93ZWVrLW9wdGlvbnMnO1xuaW1wb3J0IHsgVGltZWxpbmVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90aW1lbGluZS1vcHRpb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnMtc2NoZWR1bGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NjaGVkdWxlci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBCc1NjaGVkdWxlckNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FsZW5kYXJNb250aFNlcnZpY2U6IEJzQ2FsZW5kYXJNb250aFNlcnZpY2UsIHByaXZhdGUgdGltZWxpbmVTZXJ2aWNlOiBCc1RpbWVsaW5lU2VydmljZSkge1xuICAgIGNvbnN0IG1vbmRheSA9IHRoaXMuY2FsZW5kYXJNb250aFNlcnZpY2UuZ2V0TW9uZGF5QmVmb3JlKG5ldyBEYXRlKCkpO1xuICAgIHRoaXMuY3VycmVudFdlZWtPck1vbnRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZT4obW9uZGF5KTtcblxuICAgIHRoaXMuc2hvd25EYXlzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY3VycmVudFdlZWtPck1vbnRoJCwgdGhpcy5tb2RlJF0pXG4gICAgICAucGlwZShtYXAoKFtjdXJyZW50RGF5LCBtb2RlXSkgPT4ge1xuICAgICAgICBjdXJyZW50RGF5LnNldEhvdXJzKDApO1xuICAgICAgICBjdXJyZW50RGF5LnNldE1pbnV0ZXMoMCk7XG4gICAgICAgIGN1cnJlbnREYXkuc2V0U2Vjb25kcygwKTtcbiAgICAgICAgY3VycmVudERheS5zZXRNaWxsaXNlY29uZHMoMCk7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgIGNhc2UgRVNjaGVkdWxlck1vZGUud2Vlazoge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oQXJyYXkoNykua2V5cygpKS5tYXAoKHgpID0+IHRoaXMuYWRkRGF5cyhjdXJyZW50RGF5LCB4KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRVNjaGVkdWxlck1vZGUudGltZWxpbmU6IHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IERhdGUoY3VycmVudERheS5nZXRGdWxsWWVhcigpLCBjdXJyZW50RGF5LmdldE1vbnRoKCksIDEpO1xuICAgICAgICAgICAgY29uc3QgZGF5c09mTW9udGggPSBuZXcgRGF0ZShjdXJyZW50RGF5LmdldEZ1bGxZZWFyKCksIGN1cnJlbnREYXkuZ2V0TW9udGgoKSArIDEsIDApLmdldERhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKEFycmF5KGRheXNPZk1vbnRoKS5rZXlzKCkpLm1hcCgoeCkgPT4gdGhpcy5hZGREYXlzKGZpcnN0RGF5LCB4KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmRheXNPZldlZWtXaXRoVGltZXN0YW1wcyQgPSB0aGlzLnNob3duRGF5cyRcbiAgICAgIC5waXBlKG1hcCgoc2hvd25EYXlzKSA9PiAoeyBzdGFydDogc2hvd25EYXlzWzBdLmdldFRpbWUoKSwgZW5kOiBzaG93bkRheXNbc2hvd25EYXlzLmxlbmd0aCAtIDFdLmdldFRpbWUoKSArIDI0ICogNjAgKiA2MCAqIDEwMDAgfSkpKTtcbiAgICBcbiAgICB0aGlzLmV2ZW50cyQgPSB0aGlzLnJlc291cmNlcyRcbiAgICAgIC5waXBlKG1hcCgocmVzb3VyY2VzT3JHcm91cHMpID0+IHJlc291cmNlc09yR3JvdXBzLm1hcChyZXNPckdyb3VwID0+IHRoaXMuZ2V0UmVzb3VyY2VzRm9yR3JvdXAocmVzT3JHcm91cCkpKSlcbiAgICAgIC5waXBlKG1hcChqYWdnZWRSZXNvdXJjZXMgPT4gamFnZ2VkUmVzb3VyY2VzLnJlZHVjZSgoZmxhdCwgdG9GbGF0dGVuKSA9PiBmbGF0LmNvbmNhdCh0b0ZsYXR0ZW4pLCBbXSkpKVxuICAgICAgLnBpcGUobWFwKHJlc291cmNlcyA9PiByZXNvdXJjZXMubWFwKHJlcyA9PiByZXMuZXZlbnRzKSkpXG4gICAgICAucGlwZShtYXAoamFnZ2VkRXZlbnRzID0+IGphZ2dlZEV2ZW50cy5yZWR1Y2UoKGZsYXQsIHRvRmxhdHRlbikgPT4gZmxhdC5jb25jYXQodG9GbGF0dGVuKSwgW10pKSk7XG5cbiAgICAgIC8vIGdyb3Vwcy5yZWR1Y2UoKGZsYXQsIHRvRmxhdHRlbikgPT4gZmxhdC5jb25jYXQodG9GbGF0dGVuLmNoaWxkcmVuKSwgW10pXG4gICAgdGhpcy5ldmVudFBhcnRzJCA9IHRoaXMuZXZlbnRzJC5waXBlKFxuICAgICAgbWFwKChldmVudHMpID0+ICBldmVudHMubWFwKChldikgPT4gdGhpcy50aW1lbGluZVNlcnZpY2Uuc3BsaXRJblBhcnRzKGV2KSkpXG4gICAgKTtcblxuICAgIHRoaXMuZXZlbnRQYXJ0c0ZvclRoaXNXZWVrJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5kYXlzT2ZXZWVrV2l0aFRpbWVzdGFtcHMkLFxuICAgICAgdGhpcy5ldmVudFBhcnRzJFxuICAgICAgICAucGlwZShtYXAoZXZlbnRQYXJ0cyA9PiBldmVudFBhcnRzLm1hcChldnAgPT4gZXZwLnBhcnRzKSkpXG4gICAgICAgIC5waXBlKG1hcChqYWdnZWRQYXJ0cyA9PiAgamFnZ2VkUGFydHMucmVkdWNlKChmbGF0LCB0b0ZsYXR0ZW4pID0+IGZsYXQuY29uY2F0KHRvRmxhdHRlbiksIFtdKSkpXG4gICAgICBdKVxuICAgICAgLnBpcGUobWFwKChbc3RhcnRBbmRFbmQsIGV2ZW50UGFydHNdKSA9PiB7XG4gICAgICAgIHJldHVybiBldmVudFBhcnRzLmZpbHRlcihldmVudFBhcnQgPT4ge1xuICAgICAgICAgIHJldHVybiAhKChldmVudFBhcnQuZW5kLmdldFRpbWUoKSA8PSBzdGFydEFuZEVuZC5zdGFydCkgfHwgKGV2ZW50UGFydC5zdGFydC5nZXRUaW1lKCkgPj0gc3RhcnRBbmRFbmQuZW5kKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuXG4gICAgdGhpcy5wcmV2aWV3RXZlbnRQYXJ0cyQgPSB0aGlzLnByZXZpZXdFdmVudCQucGlwZShcbiAgICAgIG1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGltZWxpbmVTZXJ2aWNlLnNwbGl0SW5QYXJ0cyhldmVudClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMucHJldmlld0V2ZW50UGFydHNGb3JUaGlzV2VlayQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRheXNPZldlZWtXaXRoVGltZXN0YW1wcyQsIHRoaXMucHJldmlld0V2ZW50UGFydHMkXSlcbiAgICAgIC5waXBlKG1hcCgoW3N0YXJ0QW5kRW5kLCBwcmV2aWV3RXZlbnRQYXJ0c10pID0+IHtcbiAgICAgICAgaWYgKHByZXZpZXdFdmVudFBhcnRzKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZpZXdFdmVudFBhcnRzLnBhcnRzLmZpbHRlcihldmVudFBhcnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICEoKGV2ZW50UGFydC5lbmQuZ2V0VGltZSgpIDw9IHN0YXJ0QW5kRW5kLnN0YXJ0KSB8fCAoZXZlbnRQYXJ0LnN0YXJ0LmdldFRpbWUoKSA+PSBzdGFydEFuZEVuZC5lbmQpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0pKTtcblxuICAgIHRoaXMudGltZWxpbmVkRXZlbnRQYXJ0c0ZvclRoaXNXZWVrJCA9IHRoaXMuZXZlbnRQYXJ0c0ZvclRoaXNXZWVrJFxuICAgICAgLnBpcGUobWFwKGV2ZW50UGFydHMgPT4ge1xuICAgICAgICAvLyBXZSdsbCBvbmx5IHVzZSB0aGUgZXZlbnRzIGZvciB0aGlzIHdlZWtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gZXZlbnRQYXJ0cy5tYXAoZXAgPT4gZXAuZXZlbnQpXG4gICAgICAgICAgLmZpbHRlcigoZSwgaSwgbGlzdCkgPT4gbGlzdC5pbmRleE9mKGUpID09PSBpKVxuICAgICAgICAgIC5maWx0ZXIoKGUpID0+ICEhZSlcbiAgICAgICAgICAubWFwKChlKSA9PiA8U2NoZWR1bGVyRXZlbnQ+ZSk7XG4gICAgICAgIGNvbnN0IHRpbWVsaW5lID0gdGhpcy50aW1lbGluZVNlcnZpY2UuZ2V0VGltZWxpbmUoZXZlbnRzKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aW1lbGluZS5tYXAodHJhY2sgPT4gdHJhY2suZXZlbnRzLm1hcChldiA9PiAoeyBldmVudDogZXYsIGluZGV4OiB0cmFjay5pbmRleCB9KSkpXG4gICAgICAgICAgLnJlZHVjZSgoZmxhdCwgdG9GbGF0dGVuKSA9PiBmbGF0LmNvbmNhdCh0b0ZsYXR0ZW4pLCBbXSlcbiAgICAgICAgICAubWFwKChldmkpID0+IGV2ZW50UGFydHMuZmlsdGVyKHAgPT4gcC5ldmVudCA9PT0gZXZpLmV2ZW50KS5tYXAocCA9PiAoeyBwYXJ0OiBwLCBpbmRleDogZXZpLmluZGV4IH0pKSlcbiAgICAgICAgICAucmVkdWNlKChmbGF0LCB0b0ZsYXR0ZW4pID0+IGZsYXQuY29uY2F0KHRvRmxhdHRlbiksIFtdKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvdGFsOiB0aW1lbGluZS5sZW5ndGgsXG4gICAgICAgICAgcGFydHM6IHJlc3VsdFxuICAgICAgICB9O1xuICAgICAgfSkpO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5tb2RlJCwgdGhpcy5zaG93bkRheXMkLCB0aGlzLnRpbWVTbG90RHVyYXRpb24kXSlcbiAgICAgIC5waXBlKGZpbHRlcigoW21vZGUsIHNob3duRGF5cywgZHVyYXRpb25dKSA9PiBtb2RlICE9PSBudWxsKSlcbiAgICAgIC5waXBlKG1hcCgoW21vZGUsIHNob3duRGF5cywgZHVyYXRpb25dKSA9PiB7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgIGNhc2UgRVNjaGVkdWxlck1vZGUud2Vlazoge1xuICAgICAgICAgICAgY29uc3QgdGltZVNsb3RzUGVyRGF5ID0gTWF0aC5mbG9vcigoNjAgKiA2MCAqIDI0KSAvIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKEFycmF5KHRpbWVTbG90c1BlckRheSkua2V5cygpKS5tYXAoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVzbG90Rm9yTW9uZGF5ID0gdGhpcy5jcmVhdGVUaW1lc2xvdChzaG93bkRheXNbMF0sIGluZGV4LCBkdXJhdGlvbik7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIDxTY2hlZHVsZXJTdGFtcFdpdGhTbG90cz57XG4gICAgICAgICAgICAgICAgc2xvdHM6IHNob3duRGF5cy5tYXAoKGRheSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZShkYXkpO1xuICAgICAgICAgICAgICAgICAgc3RhcnQuc2V0SG91cnModGltZXNsb3RGb3JNb25kYXkuc3RhcnQuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICAgICAgICBzdGFydC5zZXRNaW51dGVzKHRpbWVzbG90Rm9yTW9uZGF5LnN0YXJ0LmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICAgICAgICBzdGFydC5zZXRTZWNvbmRzKHRpbWVzbG90Rm9yTW9uZGF5LnN0YXJ0LmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICAgICAgICBzdGFydC5zZXRNaWxsaXNlY29uZHModGltZXNsb3RGb3JNb25kYXkuc3RhcnQuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgXG4gICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZShkYXkpO1xuICAgICAgICAgICAgICAgICAgZW5kLnNldEhvdXJzKHRpbWVzbG90Rm9yTW9uZGF5LmVuZC5nZXRIb3VycygpKTtcbiAgICAgICAgICAgICAgICAgIGVuZC5zZXRNaW51dGVzKHRpbWVzbG90Rm9yTW9uZGF5LmVuZC5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgICAgICAgZW5kLnNldFNlY29uZHModGltZXNsb3RGb3JNb25kYXkuZW5kLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICAgICAgICBlbmQuc2V0TWlsbGlzZWNvbmRzKHRpbWVzbG90Rm9yTW9uZGF5LmVuZC5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgICAgICAgICAgICBlbmQuc2V0RGF0ZShlbmQuZ2V0RGF0ZSgpICsgdGltZXNsb3RGb3JNb25kYXkuZW5kLmdldERhdGUoKSAtIHRpbWVzbG90Rm9yTW9uZGF5LnN0YXJ0LmdldERhdGUoKSk7XG4gICAgICBcbiAgICAgICAgICAgICAgICAgIHJldHVybiA8VGltZVNsb3Q+eyBzdGFydCwgZW5kIH07XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3RhbXA6IHRpbWVzbG90Rm9yTW9uZGF5LnN0YXJ0XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBFU2NoZWR1bGVyTW9kZS50aW1lbGluZToge1xuICAgICAgICAgICAgY29uc3QgdG90YWxUaW1lc2xvdHMgPSAoMjQgKiA2MCAqIDYwKSAvIGR1cmF0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIHNob3duRGF5cy5tYXAoKGRheSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gPFNjaGVkdWxlclN0YW1wV2l0aFNsb3RzPntcbiAgICAgICAgICAgICAgICBzbG90czogQXJyYXkuZnJvbShBcnJheSh0b3RhbFRpbWVzbG90cykua2V5cygpKVxuICAgICAgICAgICAgICAgICAgLm1hcCgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGltZXNsb3QoZGF5LCBpbmRleCwgZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3RhbXA6IGRheVxuICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHRocm93ICdVbmtub3duIHZhbHVlIGZvciBNb2RlOiAnICsgbW9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pKVxuICAgICAgLnN1YnNjcmliZSgodGltZXNsb3RzKSA9PiB7XG4gICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB3ZSdyZSBub3QgdXNpbmcgYW4gb2JzZXJ2YWJsZSBoZXJlLCBidXQgcGVyc2lzdCB0aGUgdGltZXNsb3RzIGluIGEgQmVoYXZpb3JTdWJqZWN0LlxuICAgICAgICB0aGlzLnRpbWVTbG90cyQubmV4dCh0aW1lc2xvdHMpO1xuICAgICAgfSk7XG4gICAgXG4gICAgdGhpcy53ZWVrT3B0aW9ucyQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUod2Vla09wdGlvbnMgPT4gdGhpcy53ZWVrT3B0aW9uc0NoYW5nZS5lbWl0KHdlZWtPcHRpb25zKSk7XG4gICAgdGhpcy50aW1lbGluZU9wdGlvbnMkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKHRpbWVsaW5lT3B0aW9ucyA9PiB0aGlzLnRpbWVsaW5lT3B0aW9uc0NoYW5nZS5lbWl0KHRpbWVsaW5lT3B0aW9ucykpO1xuXG4gICAgLy8gY29tYmluZUxhdGVzdChbdGhpcy5tb2RlJCwgdGhpcy5zY2FsZSRdKVxuICAgIC8vICAgLnBpcGUoZmlsdGVyKChbbW9kZSwgc2NhbGVdKSA9PiBtb2RlID09PSBFU2NoZWR1bGVyTW9kZS50aW1lbGluZSkpXG5cbiAgfVxuXG4gIHJlc291cmNlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PChSZXNvdXJjZSB8IFJlc291cmNlR3JvdXApW10+KFtdKTtcbiAgZXZlbnRzJDogT2JzZXJ2YWJsZTxTY2hlZHVsZXJFdmVudFtdPjtcbiAgZXZlbnRQYXJ0cyQ6IE9ic2VydmFibGU8U2NoZWR1bGVyRXZlbnRXaXRoUGFydHNbXT47XG4gIGV2ZW50UGFydHNGb3JUaGlzV2VlayQ6IE9ic2VydmFibGU8U2NoZWR1bGVyRXZlbnRQYXJ0W10+O1xuICB0aW1lbGluZWRFdmVudFBhcnRzRm9yVGhpc1dlZWskOiBPYnNlcnZhYmxlPHsgdG90YWw6IG51bWJlciwgcGFydHM6IHsgcGFydDogU2NoZWR1bGVyRXZlbnRQYXJ0LCBpbmRleDogbnVtYmVyfVtdIH0+O1xuICB3ZWVrT3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFdlZWtPcHRpb25zPih7IHVuaXRIZWlnaHQ6IDMwIH0pO1xuICB0aW1lbGluZU9wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaW1lbGluZU9wdGlvbnM+KHsgdW5pdFdpZHRoOiA1MCB9KTtcbiAgXG4gIHByZXZpZXdFdmVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFByZXZpZXdFdmVudCB8IG51bGw+KG51bGwpO1xuICBwcmV2aWV3RXZlbnRQYXJ0cyQ6IE9ic2VydmFibGU8U2NoZWR1bGVyRXZlbnRXaXRoUGFydHMgfCBudWxsPjtcbiAgcHJldmlld0V2ZW50UGFydHNGb3JUaGlzV2VlayQ6IE9ic2VydmFibGU8U2NoZWR1bGVyRXZlbnRQYXJ0W10+O1xuICBcbiAgY3VycmVudFdlZWtPck1vbnRoJDogQmVoYXZpb3JTdWJqZWN0PERhdGU+O1xuICBzaG93bkRheXMkOiBPYnNlcnZhYmxlPERhdGVbXT47XG4gIGRheXNPZldlZWtXaXRoVGltZXN0YW1wcyQ6IE9ic2VydmFibGU8e3N0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyfT47XG4gIHRpbWVTbG90RHVyYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDE4MDApO1xuICB0aW1lU2xvdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY2hlZHVsZXJTdGFtcFdpdGhTbG90c1tdPihbXSk7XG4gIG1vdXNlU3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGhvdmVyZWRUaW1lU2xvdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRpbWVTbG90IHwgbnVsbD4obnVsbCk7XG4gIGhvdmVyZWRFdmVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjaGVkdWxlckV2ZW50IHwgbnVsbD4obnVsbCk7XG4gIHJlc291cmNlR3JvdXBQcmVzZW50ZXJDb3VudGVyID0gMTtcblxuICBAVmlld0NoaWxkcmVuKCdzbG90JykgdGltZVNsb3RFbGVtZW50cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj47XG5cbiAgY3JlYXRlVGltZXNsb3QoZGF0ZTogRGF0ZSwgaW5kZXg6IG51bWJlciwgZHVyYXRpb246IG51bWJlcikge1xuICAgIGNvbnN0IHRpbWVTbG90U3RhcnQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICB0aW1lU2xvdFN0YXJ0LnNldFRpbWUoK3RpbWVTbG90U3RhcnQuZ2V0VGltZSgpICsgaW5kZXggKiBkdXJhdGlvbiAqIDEwMDApO1xuICAgIGNvbnN0IHRpbWVTbG90RW5kID0gbmV3IERhdGUodGltZVNsb3RTdGFydCk7XG4gICAgdGltZVNsb3RFbmQuc2V0VGltZSgrdGltZVNsb3RFbmQuZ2V0VGltZSgpICsgZHVyYXRpb24gKiAxMDAwKTtcblxuICAgIHJldHVybiA8VGltZVNsb3Q+eyBzdGFydDogdGltZVNsb3RTdGFydCwgZW5kOiB0aW1lU2xvdEVuZCB9O1xuICB9XG5cbiAgZ2V0UmVzb3VyY2VzRm9yR3JvdXAocmVzb3VyY2VPckdyb3VwOiBSZXNvdXJjZSB8IFJlc291cmNlR3JvdXApIDogUmVzb3VyY2VbXSB7XG4gICAgaWYgKCdjaGlsZHJlbicgaW4gcmVzb3VyY2VPckdyb3VwKSB7XG4gICAgICByZXR1cm4gcmVzb3VyY2VPckdyb3VwLmNoaWxkcmVuXG4gICAgICAgIC5tYXAoKGNoaWxkKSA9PiB0aGlzLmdldFJlc291cmNlc0Zvckdyb3VwKGNoaWxkKSlcbiAgICAgICAgLnJlZHVjZSgoZmxhdCwgdG9GbGF0dGVuKSA9PiBmbGF0LmNvbmNhdCh0b0ZsYXR0ZW4pLCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbcmVzb3VyY2VPckdyb3VwXTtcbiAgICB9XG4gIH1cblxuICAvLyNyZWdpb24gTW9kZVxuICBtb2RlcyA9IEVTY2hlZHVsZXJNb2RlO1xuICBtb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RVNjaGVkdWxlck1vZGU+KEVTY2hlZHVsZXJNb2RlLndlZWspO1xuICBAT3V0cHV0KCkgcHVibGljIG1vZGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEVTY2hlZHVsZXJNb2RlPigpO1xuICBwdWJsaWMgZ2V0IG1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSQudmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCBtb2RlKHZhbHVlOiBFU2NoZWR1bGVyTW9kZSkge1xuICAgIHRoaXMubW9kZSQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG4gIC8vIC8vI3JlZ2lvbiBTY2FsZVxuICAvLyBzY2FsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjaGVkdWxlclNjYWxlPihhdmFpbGFibGVTY2FsZXNbNF0pO1xuICAvLyBAT3V0cHV0KCkgcHVibGljIHNjYWxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTY2hlZHVsZXJTY2FsZT4oKTtcbiAgLy8gcHVibGljIGdldCBzY2FsZSgpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5zY2FsZSQudmFsdWU7XG4gIC8vIH1cbiAgLy8gQElucHV0KCkgcHVibGljIHNldCBzY2FsZSh2YWx1ZTogU2NoZWR1bGVyU2NhbGUpIHtcbiAgLy8gICB0aGlzLnNjYWxlJC5uZXh0KHZhbHVlKTtcbiAgLy8gfVxuICAvLyAvLyNlbmRyZWdpb25cbiAgLy8jcmVnaW9uIFdlZWtPcHRpb25zXG4gIEBPdXRwdXQoKSBwdWJsaWMgd2Vla09wdGlvbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFdlZWtPcHRpb25zPigpO1xuICBwdWJsaWMgZ2V0IHdlZWtPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLndlZWtPcHRpb25zJC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHdlZWtPcHRpb25zKHZhbHVlOiBXZWVrT3B0aW9ucykge1xuICAgIHRoaXMud2Vla09wdGlvbnMkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuICAvLyNyZWdpb24gVGltZWxpbmVPcHRpb25zXG4gIEBPdXRwdXQoKSBwdWJsaWMgdGltZWxpbmVPcHRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUaW1lbGluZU9wdGlvbnM+KCk7XG4gIHB1YmxpYyBnZXQgdGltZWxpbmVPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRpbWVsaW5lT3B0aW9ucyQudmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCB0aW1lbGluZU9wdGlvbnModmFsdWU6IFRpbWVsaW5lT3B0aW9ucykge1xuICAgIHRoaXMudGltZWxpbmVPcHRpb25zJC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbiAgLy8jcmVnaW9uIG1heElubmVySGVpZ2h0XG4gIEBJbnB1dCgpIHB1YmxpYyBtYXhJbm5lckhlaWdodDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIC8vI2VuZHJlZ2lvblxuICAvLyNyZWdpb24gUmVzb3VyY2VzXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlcyQudmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCByZXNvdXJjZXModmFsdWU6IChSZXNvdXJjZSB8IFJlc291cmNlR3JvdXApW10pIHtcbiAgICB0aGlzLnJlc291cmNlcyQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgcHJpdmF0ZSBhZGREYXlzKGRhdGU6IERhdGUsIGRheXM6IG51bWJlcikge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIHJlc3VsdC5zZXREYXRlKHJlc3VsdC5nZXREYXRlKCkgKyBkYXlzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgb25QcmV2aW91c1dlZWtPck1vbnRoKCkge1xuICAgIHRoaXMub25DaGFuZ2VXZWVrT3JNb250aChmYWxzZSk7XG4gIH1cblxuICBvbk5leHRXZWVrT3JNb250aCgpIHtcbiAgICB0aGlzLm9uQ2hhbmdlV2Vla09yTW9udGgodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9uQ2hhbmdlV2Vla09yTW9udGgobmV4dDogYm9vbGVhbikge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY3VycmVudFdlZWtPck1vbnRoJCwgdGhpcy5tb2RlJF0pXG4gICAgICAucGlwZShtYXAoKFtjdXJyZW50V2Vla09yTW9udGgsIG1vZGVdKSA9PiB7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgIGNhc2UgRVNjaGVkdWxlck1vZGUud2Vlazoge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkRGF5cyhjdXJyZW50V2Vla09yTW9udGgsIChuZXh0ID8gNyA6IC03KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRVNjaGVkdWxlck1vZGUudGltZWxpbmU6IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShjdXJyZW50V2Vla09yTW9udGguZ2V0RnVsbFllYXIoKSwgY3VycmVudFdlZWtPck1vbnRoLmdldE1vbnRoKCkgKyAobmV4dCA/IDEgOiAtMSksIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksIHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCh3KSA9PiB0aGlzLmN1cnJlbnRXZWVrT3JNb250aCQubmV4dCh3KSk7XG4gIH1cblxuICBvbkhvdmVyRXZlbnQoZXY6IFNjaGVkdWxlckV2ZW50IHwgbnVsbCkge1xuICAgIHRoaXMuaG92ZXJlZEV2ZW50JC5uZXh0KGV2KTtcbiAgfVxuXG4gIG9uTGVhdmVFdmVudChldjogU2NoZWR1bGVyRXZlbnQgfCBudWxsKSB7XG4gICAgdGhpcy5ob3ZlcmVkRXZlbnQkLm5leHQobnVsbCk7XG4gIH1cblxuICBvcGVyYXRpb246IERyYWdPcGVyYXRpb24gfCBudWxsID0gbnVsbDtcbiAgZHJhZ1N0YXJ0VGltZXNsb3Q6IFRpbWVTbG90IHwgbnVsbCA9IG51bGw7XG4gIG9uQ3JlYXRlRXZlbnQoZXY6IE1vdXNlRXZlbnQsIHNsb3Q6IFRpbWVTbG90KSB7XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm1vdXNlU3RhdGUkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCA9IHNsb3Q7XG4gICAgdGhpcy5vcGVyYXRpb24gPSB7XG4gICAgICBvcGVyYXRpb246IEVEcmFnT3BlcmF0aW9uLmNyZWF0ZUV2ZW50LFxuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgc3RhcnQ6IHNsb3Quc3RhcnQsXG4gICAgICAgIGVuZDogc2xvdC5lbmQsXG4gICAgICAgIGNvbG9yOiAnI0YwMCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGVzdCBldmVudCcsXG4gICAgICB9LFxuICAgICAgbWV0YTogbnVsbCxcbiAgICB9O1xuICAgIHRoaXMucHJldmlld0V2ZW50JC5uZXh0KHsgc3RhcnQ6IHNsb3Quc3RhcnQsIGVuZDogc2xvdC5lbmQgfSk7XG4gIH1cblxuICByYW5kb21Db2xvcigpIHtcbiAgICBjb25zdCBicmlnaHRuZXNzID0gMTI4O1xuICAgIHJldHVybiAnIycgKyB0aGlzLnJhbmRvbUNoYW5uZWwoYnJpZ2h0bmVzcykgKyB0aGlzLnJhbmRvbUNoYW5uZWwoYnJpZ2h0bmVzcykgKyB0aGlzLnJhbmRvbUNoYW5uZWwoYnJpZ2h0bmVzcyk7XG4gIH1cbiAgcmFuZG9tQ2hhbm5lbChicmlnaHRuZXNzOiBudW1iZXIpe1xuICAgIGNvbnN0IHIgPSAyNTUtYnJpZ2h0bmVzcztcbiAgICBjb25zdCBuID0gMHwoKE1hdGgucmFuZG9tKCkgKiByKSArIGJyaWdodG5lc3MpO1xuICAgIGNvbnN0IHMgPSBuLnRvU3RyaW5nKDE2KTtcbiAgICByZXR1cm4gKHMubGVuZ3RoPT0xKSA/ICcwJytzIDogcztcbiAgfVxuXG4gIG9uU3RhcnREcmFnRXZlbnQoZXZlbnRQYXJ0OiBTY2hlZHVsZXJFdmVudFBhcnQsIGV2OiBNb3VzZUV2ZW50KSB7XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmhvdmVyZWRUaW1lU2xvdCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGhvdmVyZWRUaW1lU2xvdCkgPT4ge1xuICAgICAgaWYgKGV2ZW50UGFydC5ldmVudCkge1xuICAgICAgICB0aGlzLmRyYWdTdGFydFRpbWVzbG90ID0gaG92ZXJlZFRpbWVTbG90O1xuICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IHtcbiAgICAgICAgICBvcGVyYXRpb246IEVEcmFnT3BlcmF0aW9uLm1vdmVFdmVudCxcbiAgICAgICAgICBldmVudDogZXZlbnRQYXJ0LmV2ZW50LFxuICAgICAgICAgIG1ldGE6IG51bGwsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucHJldmlld0V2ZW50JC5uZXh0KHsgc3RhcnQ6IGV2ZW50UGFydC5ldmVudC5zdGFydCwgZW5kOiBldmVudFBhcnQuZXZlbnQuZW5kIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TdGFydFJlc2l6ZUV2ZW50KGV2ZW50OiBTY2hlZHVsZXJFdmVudCB8IG51bGwsIHBvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nKSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6IHtcbiAgICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRURyYWdPcGVyYXRpb24ucmVzaXplRXZlbnQsXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICBtZXRhOiB7IHBvc2l0aW9uIH0sXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucHJldmlld0V2ZW50JC5uZXh0KHsgc3RhcnQ6IGV2ZW50LnN0YXJ0LCBlbmQ6IGV2ZW50LmVuZCB9KTtcbiAgICAgICAgfSBicmVhaztcbiAgICAgICAgY2FzZSAnYm90dG9tJzoge1xuICAgICAgICAgIHRoaXMub3BlcmF0aW9uID0ge1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBFRHJhZ09wZXJhdGlvbi5yZXNpemVFdmVudCxcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIG1ldGE6IHsgcG9zaXRpb24gfSxcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wcmV2aWV3RXZlbnQkLm5leHQoeyBzdGFydDogZXZlbnQuc3RhcnQsIGVuZDogZXZlbnQuZW5kIH0pO1xuICAgICAgICB9IGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vI3JlZ2lvbiBob3ZlcmVkVGltZXNsb3QkXG4gIHByaXZhdGUgZ2V0SG92ZXJlZFRpbWVzbG90KGV2OiBNb3VzZUV2ZW50LCB0aW1lU2xvdHM6IFNjaGVkdWxlclN0YW1wV2l0aFNsb3RzW10pIHtcbiAgICBjb25zdCBob3ZlcmVkU2xvdHMgPSB0aGlzLnRpbWVTbG90RWxlbWVudHMuZmlsdGVyKChlbCkgPT4ge1xuICAgICAgY29uc3QgcmN0ID0gZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmIChyY3QubGVmdCA8PSBldi54ICYmIGV2LnggPD0gcmN0LnJpZ2h0ICYmIHJjdC50b3AgPD0gZXYueSAmJiBldi55IDw9IHJjdC5ib3R0b20pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWhvdmVyZWRTbG90cyB8fCBob3ZlcmVkU2xvdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzbG90RWxlbWVudCA9IGhvdmVyZWRTbG90c1swXS5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3Qgc3RyUm93ID0gc2xvdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpO1xuICAgIGlmICghc3RyUm93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgcm93ID0gcGFyc2VJbnQoc3RyUm93KTtcblxuICAgIGNvbnN0IHN0ckNvbHVtbiA9IHNsb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1jb2x1bW4nKTtcbiAgICBpZiAoIXN0ckNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbiA9IHBhcnNlSW50KHN0ckNvbHVtbik7XG5cbiAgICBjb25zdCBzbG90ID0gdGltZVNsb3RzW3Jvd10uc2xvdHNbY29sdW1uXTtcbiAgICByZXR1cm4gc2xvdDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlbW92ZScsIFsnJGV2ZW50J10pXG4gIG9uTW91c2Vtb3ZlKGV2OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy50aW1lU2xvdHMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCh0aW1lU2xvdHMpID0+IHtcbiAgICAgIGNvbnN0IGhvdmVyZWQgPSB0aGlzLmdldEhvdmVyZWRUaW1lc2xvdChldiwgdGltZVNsb3RzKTtcbiAgICAgIHRoaXMuaG92ZXJlZFRpbWVTbG90JC5uZXh0KGhvdmVyZWQpO1xuXG4gICAgICBpZiAodGhpcy5vcGVyYXRpb24pIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLm9wZXJhdGlvbi5vcGVyYXRpb24pIHtcbiAgICAgICAgICBjYXNlIEVEcmFnT3BlcmF0aW9uLmNyZWF0ZUV2ZW50OiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcGVyYXRpb24uZXZlbnQgJiYgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCAmJiBob3ZlcmVkICYmICh0aGlzLm9wZXJhdGlvbi5ldmVudC5lbmQuZ2V0VGltZSgpICE9IGhvdmVyZWQuZW5kLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3Quc3RhcnQuZ2V0VGltZSgpID09PSBob3ZlcmVkLnN0YXJ0LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIC8vIDEgc2xvdFxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3Quc3RhcnQuZ2V0VGltZSgpIDwgaG92ZXJlZC5zdGFydC5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBEcmFnIGRvd25cbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdFdmVudCRcbiAgICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoZXYpID0+ICEhZXYgJiYgISF0aGlzLmRyYWdTdGFydFRpbWVzbG90KSlcbiAgICAgICAgICAgICAgICAgIC5waXBlKG1hcCgoZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ICYmIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICBldi5zdGFydCA9IHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3Quc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgZXYuZW5kID0gaG92ZXJlZC5lbmQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2O1xuICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXYpID0+IHRoaXMucHJldmlld0V2ZW50JC5uZXh0KGV2KSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5zdGFydC5nZXRUaW1lKCkgPiBob3ZlcmVkLnN0YXJ0LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIC8vIERyYWcgdXBcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdFdmVudCRcbiAgICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoZXYpID0+ICEhZXYgJiYgISF0aGlzLmRyYWdTdGFydFRpbWVzbG90KSlcbiAgICAgICAgICAgICAgICAgIC5waXBlKG1hcCgoZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ICYmIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICBldi5zdGFydCA9IGhvdmVyZWQuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgZXYuZW5kID0gdGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5lbmQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2O1xuICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXYpID0+IHRoaXMucHJldmlld0V2ZW50JC5uZXh0KGV2KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGJyZWFrO1xuICAgICAgICAgIGNhc2UgRURyYWdPcGVyYXRpb24ubW92ZUV2ZW50OiB7XG4gICAgICAgICAgICBpZiAoaG92ZXJlZCAmJiB0aGlzLmRyYWdTdGFydFRpbWVzbG90KSB7XG4gICAgICAgICAgICAgIHRoaXMucHJldmlld0V2ZW50JFxuICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoZXYpID0+ICEhZXYgJiYgISF0aGlzLmRyYWdTdGFydFRpbWVzbG90KSlcbiAgICAgICAgICAgICAgICAucGlwZShtYXAoKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZXYgJiYgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSAgPFByZXZpZXdFdmVudD57XG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5ldyBEYXRlKGV2LnN0YXJ0LmdldFRpbWUoKSArIGhvdmVyZWQuc3RhcnQuZ2V0VGltZSgpIC0gdGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5zdGFydC5nZXRUaW1lKCkpLFxuICAgICAgICAgICAgICAgICAgICAgIGVuZDogbmV3IERhdGUoZXYuZW5kLmdldFRpbWUoKSArIGhvdmVyZWQuc3RhcnQuZ2V0VGltZSgpIC0gdGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5zdGFydC5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdTdGFydFRpbWVzbG90ID0gaG92ZXJlZDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShldiA9PiB0aGlzLnByZXZpZXdFdmVudCQubmV4dChldikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gYnJlYWs7XG4gICAgICAgICAgY2FzZSBFRHJhZ09wZXJhdGlvbi5yZXNpemVFdmVudDoge1xuICAgICAgICAgICAgaWYgKGhvdmVyZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3RXZlbnQkXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChldikgPT4gISFldikpXG4gICAgICAgICAgICAgICAgLnBpcGUobWFwKChldikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGV2ICYmIHRoaXMub3BlcmF0aW9uICYmIHRoaXMub3BlcmF0aW9uLmV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbi5tZXRhLnBvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgICAgICAgICAgICAgICAgIGV2LnN0YXJ0ID0gaG92ZXJlZC5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICBldi5lbmQgPSB0aGlzLm9wZXJhdGlvbi5ldmVudC5lbmQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcGVyYXRpb24ubWV0YS5wb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgICAgICAgICAgICBldi5zdGFydCA9IHRoaXMub3BlcmF0aW9uLmV2ZW50LnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgIGV2LmVuZCA9IGhvdmVyZWQuZW5kO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZXY7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldikgPT4gdGhpcy5wcmV2aWV3RXZlbnQkLm5leHQoZXYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZXVwJywgWyckZXZlbnQnXSlcbiAgb25Nb3VzZVVwKGV2OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMub3BlcmF0aW9uKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMub3BlcmF0aW9uLm9wZXJhdGlvbikge1xuICAgICAgICBjYXNlIEVEcmFnT3BlcmF0aW9uLmNyZWF0ZUV2ZW50OiB7XG4gICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5wcmV2aWV3RXZlbnQkXSlcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbcHJldmlld0V2ZW50XSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocHJldmlld0V2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VzJC5uZXh0KFtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucmVzb3VyY2VzJC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIDxSZXNvdXJjZT57XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTmV3IHJlc291cmNlIGdyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiBbe1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBwcmV2aWV3RXZlbnQuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgZW5kOiBwcmV2aWV3RXZlbnQuZW5kLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLnJhbmRvbUNvbG9yKCksXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdOZXcgZXZlbnQnXG4gICAgICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3RXZlbnQkLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGJyZWFrO1xuICAgICAgICBjYXNlIEVEcmFnT3BlcmF0aW9uLm1vdmVFdmVudDpcbiAgICAgICAgY2FzZSBFRHJhZ09wZXJhdGlvbi5yZXNpemVFdmVudDoge1xuICAgICAgICAgIHRoaXMucHJldmlld0V2ZW50JFxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChldikgPT4gISFldikpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocHJldmlld0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbiAmJiB0aGlzLm9wZXJhdGlvbi5ldmVudCAmJiBwcmV2aWV3RXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdGlvbi5ldmVudC5zdGFydCA9IHByZXZpZXdFdmVudC5zdGFydDtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdGlvbi5ldmVudC5lbmQgPSBwcmV2aWV3RXZlbnQuZW5kO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTdGFydFRpbWVzbG90ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlcyQubmV4dCh0aGlzLnJlc291cmNlcyQudmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0V2ZW50JC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gdy0xMDAgb3ZlcmZsb3cteS1hdXRvIG1iLTAgd2Vlay1zY2hlZHVsZVwiIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cIm51bGxcIlxuICAgICpuZ0lmPVwiKG1vZGUkIHwgYXN5bmMpID09PSBtb2Rlcy53ZWVrXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWhlYWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBjYWxlbmRhci1sZWZ0IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBmbGV4LXN0YXJ0XCIgKGNsaWNrKT1cIm9uUHJldmlvdXNXZWVrT3JNb250aCgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxicy1pY29uIFtpY29uXT1cIidjaGV2cm9uLWxlZnQnXCIgY2xhc3M9XCJweC0wXCI+PC9icy1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgZmxleC1lbmRcIiAoY2xpY2spPVwib25OZXh0V2Vla09yTW9udGgoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnMtaWNvbiBbaWNvbl09XCInY2hldnJvbi1yaWdodCdcIiBjbGFzcz1cInB4LTBcIj48L2JzLWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBjYWxlbmRhci1oZWFkLWNlbGxcIiAqbmdGb3I9XCJsZXQgZGF5IG9mIChzaG93bkRheXMkIHwgYXN5bmMpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWJsb2NrIGNvbC1mb3JtLWxhYmVsIHRleHQtY2VudGVyIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRheSB8IGRhdGU6ICdkZC1NTScgfX08L3NwYW4+PHNwYW4gY2xhc3M9XCJkLW5vbmUgZC1sZy1pbmxpbmUtYmxvY2tcIj4te3sgZGF5IHwgZGF0ZTogJ3l5eXknIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItYm9keVwiIFtzdHlsZS5oZWlnaHQucHhdPVwibWF4SW5uZXJIZWlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCIgKm5nSWY9XCIodGltZVNsb3RzJCB8IGFzeW5jKSBhcyByb3dcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIod2Vla09wdGlvbnMkIHwgYXN5bmMpIGFzIHdlZWtPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBUaW1lc2xvdHMgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdGltZXNsb3RzIG9mIHJvdzsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IHAtMCB0aW1lc2xvdFwiIFtzdHlsZS5oZWlnaHQucHhdPVwid2Vla09wdGlvbnMudW5pdEhlaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItY2VsbCBjYWxlbmRhci1sZWZ0IGFsaWduLXRvcCBweC0yIHB5LTBcIj57eyB0aW1lc2xvdHMuc2xvdHNbMF0uc3RhcnQgfCBkYXRlOiAnSEg6bW06c3MnIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1jZWxsIGZsZXgtZ3Jvdy0xXCIgKm5nRm9yPVwibGV0IHNsb3Qgb2YgdGltZXNsb3RzLnNsb3RzOyBsZXQgaiA9IGluZGV4XCIgI3Nsb3QgKG1vdXNlZG93bik9XCJvbkNyZWF0ZUV2ZW50KCRldmVudCwgc2xvdClcIiBbYXR0ci5kYXRhLXJvd109XCJpXCIgW2F0dHIuZGF0YS1jb2x1bW5dPVwialwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBFdmVudHMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih0aW1lU2xvdER1cmF0aW9uJCB8IGFzeW5jKSBhcyB0aW1lU2xvdER1cmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodGltZWxpbmVkRXZlbnRQYXJ0c0ZvclRoaXNXZWVrJCB8IGFzeW5jKSBhcyBwYXJ0RGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZXZlbnRQYXJ0IG9mIHBhcnREYXRhLnBhcnRzXCIgY2xhc3M9XCJldmVudCBwLTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiKGV2ZW50UGFydC5wYXJ0IHwgYnNTZWNvbmRzVG9kYXlPZmZzZXQpIC8gdGltZVNsb3REdXJhdGlvbiAqIHdlZWtPcHRpb25zLnVuaXRIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiKGV2ZW50UGFydC5wYXJ0IHwgYnNTZWNvbmRzVGltZXNwYW4pIC8gdGltZVNsb3REdXJhdGlvbiAqIHdlZWtPcHRpb25zLnVuaXRIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0XT1cIidjYWxjKDkwcHggKyAoKDEwMCUgLSA5MHB4KSAvIDcgKiAnICsgKChldmVudFBhcnQucGFydCB8IGRheU9mV2VlaykgLSAxKSArICcpKSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtaW5uZXJcIiBbY2xhc3MuaG92ZXJdPVwiKGhvdmVyZWRFdmVudCQgfCBhc3luYykgPT09IGV2ZW50UGFydC5wYXJ0LmV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIidjYWxjKDEwMCUgLyAnICsgcGFydERhdGEudG90YWwgKyAnKSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIihldmVudFBhcnQucGFydCB8IGJzU2Vjb25kc1RpbWVzcGFuKSAvIHRpbWVTbG90RHVyYXRpb24gKiB3ZWVrT3B0aW9ucy51bml0SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbi1sZWZ0XT1cIidjYWxjKDEwMCUgLyAnICsgcGFydERhdGEudG90YWwgKyAnICogJyArIGV2ZW50UGFydC5pbmRleCArICcpJ1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1yZXNpemUgdG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXZlbnRQYXJ0LnBhcnQuc3RhcnQgPT09IGV2ZW50UGFydC5wYXJ0LmV2ZW50Py5zdGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uU3RhcnRSZXNpemVFdmVudChldmVudFBhcnQucGFydC5ldmVudCwgJ3RvcCcpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1ib3JkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXdyYXBwZXJcIiAqbmdJZj1cImV2ZW50UGFydC5wYXJ0LmV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25TdGFydERyYWdFdmVudChldmVudFBhcnQucGFydCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbkhvdmVyRXZlbnQoZXZlbnRQYXJ0LnBhcnQuZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uTGVhdmVFdmVudChldmVudFBhcnQucGFydC5ldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1iZ1wiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImV2ZW50UGFydC5wYXJ0LmV2ZW50LmNvbG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtbGFiZWxcIj57eyBldmVudFBhcnQucGFydC5ldmVudC5kZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXJlc2l6ZSBib3R0b21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJldmVudFBhcnQucGFydC5lbmQgPT09IGV2ZW50UGFydC5wYXJ0LmV2ZW50Py5lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblN0YXJ0UmVzaXplRXZlbnQoZXZlbnRQYXJ0LnBhcnQuZXZlbnQsICdib3R0b20nKVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHByZXZpZXdFdmVudFBhcnRzRm9yVGhpc1dlZWskIHwgYXN5bmMpIGFzIHByZXZpZXdQYXJ0RGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZXZlbnRQYXJ0IG9mIHByZXZpZXdQYXJ0RGF0YVwiIGNsYXNzPVwiZXZlbnQgcHJldmlldyBwLTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiKGV2ZW50UGFydCB8IGJzU2Vjb25kc1RvZGF5T2Zmc2V0KSAvIHRpbWVTbG90RHVyYXRpb24gKiB3ZWVrT3B0aW9ucy51bml0SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIihldmVudFBhcnQgfCBic1NlY29uZHNUaW1lc3BhbikgLyB0aW1lU2xvdER1cmF0aW9uICogd2Vla09wdGlvbnMudW5pdEhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnRdPVwiJ2NhbGMoOTBweCArICgoMTAwJSAtIDkwcHgpIC8gNyAqICcgKyAoKGV2ZW50UGFydCB8IGRheU9mV2VlaykgLSAxKSArICcpKSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtaW5uZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIihldmVudFBhcnQgfCBic1NlY29uZHNUaW1lc3BhbikgLyB0aW1lU2xvdER1cmF0aW9uICogd2Vla09wdGlvbnMudW5pdEhlaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uLTEwMCBvdmVyZmxvdy15LWF1dG8gbWItMCBiZy13aGl0ZSB0aW1lbGluZVwiICpuZ0lmPVwiKG1vZGUkIHwgYXN5bmMpID09PSBtb2Rlcy50aW1lbGluZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1oZWFkIGQtZmxleFwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGZsZXgtc3RhcnRcIiAoY2xpY2spPVwib25QcmV2aW91c1dlZWtPck1vbnRoKClcIj5cbiAgICAgICAgICAgIDxicy1pY29uIFtpY29uXT1cIidjaGV2cm9uLWxlZnQnXCIgY2xhc3M9XCJweC0wXCI+PC9icy1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIGgzIHB5LTIgbWItMCB0ZXh0LWNlbnRlclwiPnt7IGN1cnJlbnRXZWVrT3JNb250aCQgfCBhc3luYyB8IGRhdGU6ICdNTU1NIHl5eXknIH19PC9kaXY+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZmxleC1zdGFydFwiIChjbGljayk9XCJvbk5leHRXZWVrT3JNb250aCgpXCI+XG4gICAgICAgICAgICA8YnMtaWNvbiBbaWNvbl09XCInY2hldnJvbi1yaWdodCdcIiBjbGFzcz1cInB4LTBcIj48L2JzLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1ib2R5IHRhYmxlLXJlc3BvbnNpdmUgb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIG1iLTBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodGltZVNsb3RzJCB8IGFzeW5jKSBhcyB0aW1lU2xvdHNcIj5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGRheSBvZiB0aW1lU2xvdHNcIiBbYXR0ci5jb2xzcGFuXT1cImRheS5zbG90cy5sZW5ndGhcIiBjbGFzcz1cInRleHQtY2VudGVyIHB4LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicG9zaXRpb24tc3RpY2t5IGRheS1sYWJlbFwiPnt7IGRheS5zdGFtcCB8IGRhdGU6ICdkIEVFJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodGltZWxpbmVPcHRpb25zJCB8IGFzeW5jKSBhcyB0aW1lbGluZU9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRheSBvZiB0aW1lU2xvdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IHNsb3Qgb2YgZGF5LnNsb3RzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1ibG9jayBwLTAgdGV4dC1jZW50ZXJcIiBbc3R5bGUud2lkdGgucHhdPVwidGltZWxpbmVPcHRpb25zLnVuaXRXaWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2xvdC5zdGFydCB8IGRhdGU6ICdISDptbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8YnMtcmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyICpuZ0Zvcj1cImxldCBncm91cCBvZiAocmVzb3VyY2VzJCB8IGFzeW5jKVwiIFtyZXNvdXJjZUdyb3VwXT1cImdyb3VwXCIgW3RpbWVTbG90c109XCJ0aW1lU2xvdHNcIj48L2JzLXJlc291cmNlLWdyb3VwLXByZXNlbnRlcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
530
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9jb21wb25lbnRzL3NjaGVkdWxlci9zY2hlZHVsZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zY2hlZHVsZXIvc3JjL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NjaGVkdWxlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFPNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7Ozs7QUFZN0UsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUFvQixvQkFBNEMsRUFBVSxlQUFrQztRQUF4Rix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXdCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQW1CO1FBdUo1RyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQStCLEVBQUUsQ0FBQyxDQUFDO1FBS25F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R0FBRyxJQUFJLENBQUM7Z0NBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzZCQUMvQjt3QkFDSCxDQUFDLENBQUMsQ0FBQztxQkFDTjtvQkFBQyxNQUFNO2FBQ1Q7U0FDRjtJQUNILENBQUM7OEdBdmdCVSxvQkFBb0I7a0dBQXBCLG9CQUFvQixtaEJDeEJqQyw2ME9BNEdNOzsyRkRwRk8sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGNBQWM7NklBa0xGLGdCQUFnQjtzQkFBckMsWUFBWTt1QkFBQyxNQUFNO2dCQXdCSCxVQUFVO3NCQUExQixNQUFNO2dCQUlhLElBQUk7c0JBQXZCLEtBQUs7Z0JBZVcsaUJBQWlCO3NCQUFqQyxNQUFNO2dCQUlhLFdBQVc7c0JBQTlCLEtBQUs7Z0JBS1cscUJBQXFCO3NCQUFyQyxNQUFNO2dCQUlhLGVBQWU7c0JBQWxDLEtBQUs7Z0JBS1UsY0FBYztzQkFBN0IsS0FBSztnQkFNYyxTQUFTO3NCQUE1QixLQUFLO2dCQWdKTixXQUFXO3NCQURWLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMkY5QyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQnNDYWxlbmRhck1vbnRoU2VydmljZSB9IGZyb20gJ0BtaW50cGxheWVyL25nLWJvb3RzdHJhcC9jYWxlbmRhci1tb250aCc7XG5pbXBvcnQgeyBFU2NoZWR1bGVyTW9kZSB9IGZyb20gJy4uLy4uL2VudW1zL3NjaGVkdWxlci1tb2RlJztcbmltcG9ydCB7IEVEcmFnT3BlcmF0aW9uIH0gZnJvbSAnLi4vLi4vZW51bXMvZHJhZy1vcGVyYXRpb24nO1xuaW1wb3J0IHsgRHJhZ09wZXJhdGlvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZHJhZy1vcGVyYXRpb24nO1xuaW1wb3J0IHsgUHJldmlld0V2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wcmV2aWV3LWV2ZW50JztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnRQYXJ0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQtcGFydCc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudFdpdGhQYXJ0cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50LXdpdGgtcGFydHMnO1xuaW1wb3J0IHsgVGltZVNsb3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3RpbWUtc2xvdCc7XG5pbXBvcnQgeyBCc1RpbWVsaW5lU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpbWVsaW5lL3RpbWVsaW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVzb3VyY2UtZ3JvdXAnO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Jlc291cmNlJztcbmltcG9ydCB7IFNjaGVkdWxlclN0YW1wV2l0aFNsb3RzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItc3RhbXAtd2l0aC1zbG90cyc7XG5pbXBvcnQgeyBXZWVrT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvd2Vlay1vcHRpb25zJztcbmltcG9ydCB7IFRpbWVsaW5lT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdGltZWxpbmUtb3B0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JzLXNjaGVkdWxlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zY2hlZHVsZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQnNTY2hlZHVsZXJDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhbGVuZGFyTW9udGhTZXJ2aWNlOiBCc0NhbGVuZGFyTW9udGhTZXJ2aWNlLCBwcml2YXRlIHRpbWVsaW5lU2VydmljZTogQnNUaW1lbGluZVNlcnZpY2UpIHtcbiAgICBjb25zdCBtb25kYXkgPSB0aGlzLmNhbGVuZGFyTW9udGhTZXJ2aWNlLmdldE1vbmRheUJlZm9yZShuZXcgRGF0ZSgpKTtcbiAgICB0aGlzLmN1cnJlbnRXZWVrT3JNb250aCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGU+KG1vbmRheSk7XG5cbiAgICB0aGlzLnNob3duRGF5cyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmN1cnJlbnRXZWVrT3JNb250aCQsIHRoaXMubW9kZSRdKVxuICAgICAgLnBpcGUobWFwKChbY3VycmVudERheSwgbW9kZV0pID0+IHtcbiAgICAgICAgY3VycmVudERheS5zZXRIb3VycygwKTtcbiAgICAgICAgY3VycmVudERheS5zZXRNaW51dGVzKDApO1xuICAgICAgICBjdXJyZW50RGF5LnNldFNlY29uZHMoMCk7XG4gICAgICAgIGN1cnJlbnREYXkuc2V0TWlsbGlzZWNvbmRzKDApO1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICBjYXNlIEVTY2hlZHVsZXJNb2RlLndlZWs6IHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKEFycmF5KDcpLmtleXMoKSkubWFwKCh4KSA9PiB0aGlzLmFkZERheXMoY3VycmVudERheSwgeCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEVTY2hlZHVsZXJNb2RlLnRpbWVsaW5lOiB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdERheSA9IG5ldyBEYXRlKGN1cnJlbnREYXkuZ2V0RnVsbFllYXIoKSwgY3VycmVudERheS5nZXRNb250aCgpLCAxKTtcbiAgICAgICAgICAgIGNvbnN0IGRheXNPZk1vbnRoID0gbmV3IERhdGUoY3VycmVudERheS5nZXRGdWxsWWVhcigpLCBjdXJyZW50RGF5LmdldE1vbnRoKCkgKyAxLCAwKS5nZXREYXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShBcnJheShkYXlzT2ZNb250aCkua2V5cygpKS5tYXAoKHgpID0+IHRoaXMuYWRkRGF5cyhmaXJzdERheSwgeCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5kYXlzT2ZXZWVrV2l0aFRpbWVzdGFtcHMkID0gdGhpcy5zaG93bkRheXMkXG4gICAgICAucGlwZShtYXAoKHNob3duRGF5cykgPT4gKHsgc3RhcnQ6IHNob3duRGF5c1swXS5nZXRUaW1lKCksIGVuZDogc2hvd25EYXlzW3Nob3duRGF5cy5sZW5ndGggLSAxXS5nZXRUaW1lKCkgKyAyNCAqIDYwICogNjAgKiAxMDAwIH0pKSk7XG4gICAgXG4gICAgdGhpcy5ldmVudHMkID0gdGhpcy5yZXNvdXJjZXMkXG4gICAgICAucGlwZShtYXAoKHJlc291cmNlc09yR3JvdXBzKSA9PiByZXNvdXJjZXNPckdyb3Vwcy5tYXAocmVzT3JHcm91cCA9PiB0aGlzLmdldFJlc291cmNlc0Zvckdyb3VwKHJlc09yR3JvdXApKSkpXG4gICAgICAucGlwZShtYXAoamFnZ2VkUmVzb3VyY2VzID0+IGphZ2dlZFJlc291cmNlcy5yZWR1Y2UoKGZsYXQsIHRvRmxhdHRlbikgPT4gZmxhdC5jb25jYXQodG9GbGF0dGVuKSwgW10pKSlcbiAgICAgIC5waXBlKG1hcChyZXNvdXJjZXMgPT4gcmVzb3VyY2VzLm1hcChyZXMgPT4gcmVzLmV2ZW50cykpKVxuICAgICAgLnBpcGUobWFwKGphZ2dlZEV2ZW50cyA9PiBqYWdnZWRFdmVudHMucmVkdWNlKChmbGF0LCB0b0ZsYXR0ZW4pID0+IGZsYXQuY29uY2F0KHRvRmxhdHRlbiksIFtdKSkpO1xuXG4gICAgICAvLyBncm91cHMucmVkdWNlKChmbGF0LCB0b0ZsYXR0ZW4pID0+IGZsYXQuY29uY2F0KHRvRmxhdHRlbi5jaGlsZHJlbiksIFtdKVxuICAgIHRoaXMuZXZlbnRQYXJ0cyQgPSB0aGlzLmV2ZW50cyQucGlwZShcbiAgICAgIG1hcCgoZXZlbnRzKSA9PiAgZXZlbnRzLm1hcCgoZXYpID0+IHRoaXMudGltZWxpbmVTZXJ2aWNlLnNwbGl0SW5QYXJ0cyhldikpKVxuICAgICk7XG5cbiAgICB0aGlzLmV2ZW50UGFydHNGb3JUaGlzV2VlayQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZGF5c09mV2Vla1dpdGhUaW1lc3RhbXBzJCxcbiAgICAgIHRoaXMuZXZlbnRQYXJ0cyRcbiAgICAgICAgLnBpcGUobWFwKGV2ZW50UGFydHMgPT4gZXZlbnRQYXJ0cy5tYXAoZXZwID0+IGV2cC5wYXJ0cykpKVxuICAgICAgICAucGlwZShtYXAoamFnZ2VkUGFydHMgPT4gIGphZ2dlZFBhcnRzLnJlZHVjZSgoZmxhdCwgdG9GbGF0dGVuKSA9PiBmbGF0LmNvbmNhdCh0b0ZsYXR0ZW4pLCBbXSkpKVxuICAgICAgXSlcbiAgICAgIC5waXBlKG1hcCgoW3N0YXJ0QW5kRW5kLCBldmVudFBhcnRzXSkgPT4ge1xuICAgICAgICByZXR1cm4gZXZlbnRQYXJ0cy5maWx0ZXIoZXZlbnRQYXJ0ID0+IHtcbiAgICAgICAgICByZXR1cm4gISgoZXZlbnRQYXJ0LmVuZC5nZXRUaW1lKCkgPD0gc3RhcnRBbmRFbmQuc3RhcnQpIHx8IChldmVudFBhcnQuc3RhcnQuZ2V0VGltZSgpID49IHN0YXJ0QW5kRW5kLmVuZCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pKTtcblxuICAgIHRoaXMucHJldmlld0V2ZW50UGFydHMkID0gdGhpcy5wcmV2aWV3RXZlbnQkLnBpcGUoXG4gICAgICBtYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRpbWVsaW5lU2VydmljZS5zcGxpdEluUGFydHMoZXZlbnQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnByZXZpZXdFdmVudFBhcnRzRm9yVGhpc1dlZWskID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXlzT2ZXZWVrV2l0aFRpbWVzdGFtcHMkLCB0aGlzLnByZXZpZXdFdmVudFBhcnRzJF0pXG4gICAgICAucGlwZShtYXAoKFtzdGFydEFuZEVuZCwgcHJldmlld0V2ZW50UGFydHNdKSA9PiB7XG4gICAgICAgIGlmIChwcmV2aWV3RXZlbnRQYXJ0cykge1xuICAgICAgICAgIHJldHVybiBwcmV2aWV3RXZlbnRQYXJ0cy5wYXJ0cy5maWx0ZXIoZXZlbnRQYXJ0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhKChldmVudFBhcnQuZW5kLmdldFRpbWUoKSA8PSBzdGFydEFuZEVuZC5zdGFydCkgfHwgKGV2ZW50UGFydC5zdGFydC5nZXRUaW1lKCkgPj0gc3RhcnRBbmRFbmQuZW5kKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9KSk7XG5cbiAgICB0aGlzLnRpbWVsaW5lZEV2ZW50UGFydHNGb3JUaGlzV2VlayQgPSB0aGlzLmV2ZW50UGFydHNGb3JUaGlzV2VlayRcbiAgICAgIC5waXBlKG1hcChldmVudFBhcnRzID0+IHtcbiAgICAgICAgLy8gV2UnbGwgb25seSB1c2UgdGhlIGV2ZW50cyBmb3IgdGhpcyB3ZWVrXG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IGV2ZW50UGFydHMubWFwKGVwID0+IGVwLmV2ZW50KVxuICAgICAgICAgIC5maWx0ZXIoKGUsIGksIGxpc3QpID0+IGxpc3QuaW5kZXhPZihlKSA9PT0gaSlcbiAgICAgICAgICAuZmlsdGVyKChlKSA9PiAhIWUpXG4gICAgICAgICAgLm1hcCgoZSkgPT4gPFNjaGVkdWxlckV2ZW50PmUpO1xuICAgICAgICBjb25zdCB0aW1lbGluZSA9IHRoaXMudGltZWxpbmVTZXJ2aWNlLmdldFRpbWVsaW5lKGV2ZW50cyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGltZWxpbmUubWFwKHRyYWNrID0+IHRyYWNrLmV2ZW50cy5tYXAoZXYgPT4gKHsgZXZlbnQ6IGV2LCBpbmRleDogdHJhY2suaW5kZXggfSkpKVxuICAgICAgICAgIC5yZWR1Y2UoKGZsYXQsIHRvRmxhdHRlbikgPT4gZmxhdC5jb25jYXQodG9GbGF0dGVuKSwgW10pXG4gICAgICAgICAgLm1hcCgoZXZpKSA9PiBldmVudFBhcnRzLmZpbHRlcihwID0+IHAuZXZlbnQgPT09IGV2aS5ldmVudCkubWFwKHAgPT4gKHsgcGFydDogcCwgaW5kZXg6IGV2aS5pbmRleCB9KSkpXG4gICAgICAgICAgLnJlZHVjZSgoZmxhdCwgdG9GbGF0dGVuKSA9PiBmbGF0LmNvbmNhdCh0b0ZsYXR0ZW4pLCBbXSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b3RhbDogdGltZWxpbmUubGVuZ3RoLFxuICAgICAgICAgIHBhcnRzOiByZXN1bHRcbiAgICAgICAgfTtcbiAgICAgIH0pKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMubW9kZSQsIHRoaXMuc2hvd25EYXlzJCwgdGhpcy50aW1lU2xvdER1cmF0aW9uJF0pXG4gICAgICAucGlwZShmaWx0ZXIoKFttb2RlLCBzaG93bkRheXMsIGR1cmF0aW9uXSkgPT4gbW9kZSAhPT0gbnVsbCkpXG4gICAgICAucGlwZShtYXAoKFttb2RlLCBzaG93bkRheXMsIGR1cmF0aW9uXSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICBjYXNlIEVTY2hlZHVsZXJNb2RlLndlZWs6IHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTbG90c1BlckRheSA9IE1hdGguZmxvb3IoKDYwICogNjAgKiAyNCkgLyBkdXJhdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0aW1lU2xvdHNQZXJEYXkpLmtleXMoKSkubWFwKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0aW1lc2xvdEZvck1vbmRheSA9IHRoaXMuY3JlYXRlVGltZXNsb3Qoc2hvd25EYXlzWzBdLCBpbmRleCwgZHVyYXRpb24pO1xuXG4gICAgICAgICAgICAgIHJldHVybiA8U2NoZWR1bGVyU3RhbXBXaXRoU2xvdHM+e1xuICAgICAgICAgICAgICAgIHNsb3RzOiBzaG93bkRheXMubWFwKChkYXkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoZGF5KTtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0LnNldEhvdXJzKHRpbWVzbG90Rm9yTW9uZGF5LnN0YXJ0LmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgICAgICAgc3RhcnQuc2V0TWludXRlcyh0aW1lc2xvdEZvck1vbmRheS5zdGFydC5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgICAgICAgc3RhcnQuc2V0U2Vjb25kcyh0aW1lc2xvdEZvck1vbmRheS5zdGFydC5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgICAgICAgc3RhcnQuc2V0TWlsbGlzZWNvbmRzKHRpbWVzbG90Rm9yTW9uZGF5LnN0YXJ0LmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgIFxuICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoZGF5KTtcbiAgICAgICAgICAgICAgICAgIGVuZC5zZXRIb3Vycyh0aW1lc2xvdEZvck1vbmRheS5lbmQuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICAgICAgICBlbmQuc2V0TWludXRlcyh0aW1lc2xvdEZvck1vbmRheS5lbmQuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgICAgICAgIGVuZC5zZXRTZWNvbmRzKHRpbWVzbG90Rm9yTW9uZGF5LmVuZC5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgICAgICAgZW5kLnNldE1pbGxpc2Vjb25kcyh0aW1lc2xvdEZvck1vbmRheS5lbmQuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICAgICAgICAgICAgZW5kLnNldERhdGUoZW5kLmdldERhdGUoKSArIHRpbWVzbG90Rm9yTW9uZGF5LmVuZC5nZXREYXRlKCkgLSB0aW1lc2xvdEZvck1vbmRheS5zdGFydC5nZXREYXRlKCkpO1xuICAgICAgXG4gICAgICAgICAgICAgICAgICByZXR1cm4gPFRpbWVTbG90Pnsgc3RhcnQsIGVuZCB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN0YW1wOiB0aW1lc2xvdEZvck1vbmRheS5zdGFydFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRVNjaGVkdWxlck1vZGUudGltZWxpbmU6IHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsVGltZXNsb3RzID0gKDI0ICogNjAgKiA2MCkgLyBkdXJhdGlvbjtcbiAgICAgICAgICAgIHJldHVybiBzaG93bkRheXMubWFwKChkYXkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIDxTY2hlZHVsZXJTdGFtcFdpdGhTbG90cz57XG4gICAgICAgICAgICAgICAgc2xvdHM6IEFycmF5LmZyb20oQXJyYXkodG90YWxUaW1lc2xvdHMpLmtleXMoKSlcbiAgICAgICAgICAgICAgICAgIC5tYXAoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRpbWVzbG90KGRheSwgaW5kZXgsIGR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN0YW1wOiBkYXlcbiAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0aHJvdyAnVW5rbm93biB2YWx1ZSBmb3IgTW9kZTogJyArIG1vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSlcbiAgICAgIC5zdWJzY3JpYmUoKHRpbWVzbG90cykgPT4ge1xuICAgICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgd2UncmUgbm90IHVzaW5nIGFuIG9ic2VydmFibGUgaGVyZSwgYnV0IHBlcnNpc3QgdGhlIHRpbWVzbG90cyBpbiBhIEJlaGF2aW9yU3ViamVjdC5cbiAgICAgICAgdGhpcy50aW1lU2xvdHMkLm5leHQodGltZXNsb3RzKTtcbiAgICAgIH0pO1xuICAgIFxuICAgIHRoaXMud2Vla09wdGlvbnMkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKHdlZWtPcHRpb25zID0+IHRoaXMud2Vla09wdGlvbnNDaGFuZ2UuZW1pdCh3ZWVrT3B0aW9ucykpO1xuICAgIHRoaXMudGltZWxpbmVPcHRpb25zJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSh0aW1lbGluZU9wdGlvbnMgPT4gdGhpcy50aW1lbGluZU9wdGlvbnNDaGFuZ2UuZW1pdCh0aW1lbGluZU9wdGlvbnMpKTtcblxuICAgIC8vIGNvbWJpbmVMYXRlc3QoW3RoaXMubW9kZSQsIHRoaXMuc2NhbGUkXSlcbiAgICAvLyAgIC5waXBlKGZpbHRlcigoW21vZGUsIHNjYWxlXSkgPT4gbW9kZSA9PT0gRVNjaGVkdWxlck1vZGUudGltZWxpbmUpKVxuXG4gIH1cblxuICByZXNvdXJjZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDwoUmVzb3VyY2UgfCBSZXNvdXJjZUdyb3VwKVtdPihbXSk7XG4gIGV2ZW50cyQ6IE9ic2VydmFibGU8U2NoZWR1bGVyRXZlbnRbXT47XG4gIGV2ZW50UGFydHMkOiBPYnNlcnZhYmxlPFNjaGVkdWxlckV2ZW50V2l0aFBhcnRzW10+O1xuICBldmVudFBhcnRzRm9yVGhpc1dlZWskOiBPYnNlcnZhYmxlPFNjaGVkdWxlckV2ZW50UGFydFtdPjtcbiAgdGltZWxpbmVkRXZlbnRQYXJ0c0ZvclRoaXNXZWVrJDogT2JzZXJ2YWJsZTx7IHRvdGFsOiBudW1iZXIsIHBhcnRzOiB7IHBhcnQ6IFNjaGVkdWxlckV2ZW50UGFydCwgaW5kZXg6IG51bWJlcn1bXSB9PjtcbiAgd2Vla09wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxXZWVrT3B0aW9ucz4oeyB1bml0SGVpZ2h0OiAzMCB9KTtcbiAgdGltZWxpbmVPcHRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGltZWxpbmVPcHRpb25zPih7IHVuaXRXaWR0aDogNTAgfSk7XG4gIFxuICBwcmV2aWV3RXZlbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcmV2aWV3RXZlbnQgfCBudWxsPihudWxsKTtcbiAgcHJldmlld0V2ZW50UGFydHMkOiBPYnNlcnZhYmxlPFNjaGVkdWxlckV2ZW50V2l0aFBhcnRzIHwgbnVsbD47XG4gIHByZXZpZXdFdmVudFBhcnRzRm9yVGhpc1dlZWskOiBPYnNlcnZhYmxlPFNjaGVkdWxlckV2ZW50UGFydFtdPjtcbiAgXG4gIGN1cnJlbnRXZWVrT3JNb250aCQ6IEJlaGF2aW9yU3ViamVjdDxEYXRlPjtcbiAgc2hvd25EYXlzJDogT2JzZXJ2YWJsZTxEYXRlW10+O1xuICBkYXlzT2ZXZWVrV2l0aFRpbWVzdGFtcHMkOiBPYnNlcnZhYmxlPHtzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcn0+O1xuICB0aW1lU2xvdER1cmF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxODAwKTtcbiAgdGltZVNsb3RzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2NoZWR1bGVyU3RhbXBXaXRoU2xvdHNbXT4oW10pO1xuICBtb3VzZVN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBob3ZlcmVkVGltZVNsb3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaW1lU2xvdCB8IG51bGw+KG51bGwpO1xuICBob3ZlcmVkRXZlbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY2hlZHVsZXJFdmVudCB8IG51bGw+KG51bGwpO1xuICByZXNvdXJjZUdyb3VwUHJlc2VudGVyQ291bnRlciA9IDE7XG5cbiAgQFZpZXdDaGlsZHJlbignc2xvdCcpIHRpbWVTbG90RWxlbWVudHMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+O1xuXG4gIGNyZWF0ZVRpbWVzbG90KGRhdGU6IERhdGUsIGluZGV4OiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICBjb25zdCB0aW1lU2xvdFN0YXJ0ID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgdGltZVNsb3RTdGFydC5zZXRUaW1lKCt0aW1lU2xvdFN0YXJ0LmdldFRpbWUoKSArIGluZGV4ICogZHVyYXRpb24gKiAxMDAwKTtcbiAgICBjb25zdCB0aW1lU2xvdEVuZCA9IG5ldyBEYXRlKHRpbWVTbG90U3RhcnQpO1xuICAgIHRpbWVTbG90RW5kLnNldFRpbWUoK3RpbWVTbG90RW5kLmdldFRpbWUoKSArIGR1cmF0aW9uICogMTAwMCk7XG5cbiAgICByZXR1cm4gPFRpbWVTbG90Pnsgc3RhcnQ6IHRpbWVTbG90U3RhcnQsIGVuZDogdGltZVNsb3RFbmQgfTtcbiAgfVxuXG4gIGdldFJlc291cmNlc0Zvckdyb3VwKHJlc291cmNlT3JHcm91cDogUmVzb3VyY2UgfCBSZXNvdXJjZUdyb3VwKSA6IFJlc291cmNlW10ge1xuICAgIGlmICgnY2hpbGRyZW4nIGluIHJlc291cmNlT3JHcm91cCkge1xuICAgICAgcmV0dXJuIHJlc291cmNlT3JHcm91cC5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZCkgPT4gdGhpcy5nZXRSZXNvdXJjZXNGb3JHcm91cChjaGlsZCkpXG4gICAgICAgIC5yZWR1Y2UoKGZsYXQsIHRvRmxhdHRlbikgPT4gZmxhdC5jb25jYXQodG9GbGF0dGVuKSwgW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3Jlc291cmNlT3JHcm91cF07XG4gICAgfVxuICB9XG5cbiAgLy8jcmVnaW9uIE1vZGVcbiAgbW9kZXMgPSBFU2NoZWR1bGVyTW9kZTtcbiAgbW9kZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVTY2hlZHVsZXJNb2RlPihFU2NoZWR1bGVyTW9kZS53ZWVrKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBtb2RlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFU2NoZWR1bGVyTW9kZT4oKTtcbiAgcHVibGljIGdldCBtb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm1vZGUkLnZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgbW9kZSh2YWx1ZTogRVNjaGVkdWxlck1vZGUpIHtcbiAgICB0aGlzLm1vZGUkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuICAvLyAvLyNyZWdpb24gU2NhbGVcbiAgLy8gc2NhbGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY2hlZHVsZXJTY2FsZT4oYXZhaWxhYmxlU2NhbGVzWzRdKTtcbiAgLy8gQE91dHB1dCgpIHB1YmxpYyBzY2FsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2NoZWR1bGVyU2NhbGU+KCk7XG4gIC8vIHB1YmxpYyBnZXQgc2NhbGUoKSB7XG4gIC8vICAgcmV0dXJuIHRoaXMuc2NhbGUkLnZhbHVlO1xuICAvLyB9XG4gIC8vIEBJbnB1dCgpIHB1YmxpYyBzZXQgc2NhbGUodmFsdWU6IFNjaGVkdWxlclNjYWxlKSB7XG4gIC8vICAgdGhpcy5zY2FsZSQubmV4dCh2YWx1ZSk7XG4gIC8vIH1cbiAgLy8gLy8jZW5kcmVnaW9uXG4gIC8vI3JlZ2lvbiBXZWVrT3B0aW9uc1xuICBAT3V0cHV0KCkgcHVibGljIHdlZWtPcHRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxXZWVrT3B0aW9ucz4oKTtcbiAgcHVibGljIGdldCB3ZWVrT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy53ZWVrT3B0aW9ucyQudmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCB3ZWVrT3B0aW9ucyh2YWx1ZTogV2Vla09wdGlvbnMpIHtcbiAgICB0aGlzLndlZWtPcHRpb25zJC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbiAgLy8jcmVnaW9uIFRpbWVsaW5lT3B0aW9uc1xuICBAT3V0cHV0KCkgcHVibGljIHRpbWVsaW5lT3B0aW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGltZWxpbmVPcHRpb25zPigpO1xuICBwdWJsaWMgZ2V0IHRpbWVsaW5lT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy50aW1lbGluZU9wdGlvbnMkLnZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgdGltZWxpbmVPcHRpb25zKHZhbHVlOiBUaW1lbGluZU9wdGlvbnMpIHtcbiAgICB0aGlzLnRpbWVsaW5lT3B0aW9ucyQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG4gIC8vI3JlZ2lvbiBtYXhJbm5lckhlaWdodFxuICBASW5wdXQoKSBwdWJsaWMgbWF4SW5uZXJIZWlnaHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAvLyNlbmRyZWdpb25cbiAgLy8jcmVnaW9uIFJlc291cmNlc1xuICBwdWJsaWMgZ2V0IHJlc291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXMkLnZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgcmVzb3VyY2VzKHZhbHVlOiAoUmVzb3VyY2UgfCBSZXNvdXJjZUdyb3VwKVtdKSB7XG4gICAgdGhpcy5yZXNvdXJjZXMkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHByaXZhdGUgYWRkRGF5cyhkYXRlOiBEYXRlLCBkYXlzOiBudW1iZXIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICByZXN1bHQuc2V0RGF0ZShyZXN1bHQuZ2V0RGF0ZSgpICsgZGF5cyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG9uUHJldmlvdXNXZWVrT3JNb250aCgpIHtcbiAgICB0aGlzLm9uQ2hhbmdlV2Vla09yTW9udGgoZmFsc2UpO1xuICB9XG5cbiAgb25OZXh0V2Vla09yTW9udGgoKSB7XG4gICAgdGhpcy5vbkNoYW5nZVdlZWtPck1vbnRoKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZVdlZWtPck1vbnRoKG5leHQ6IGJvb2xlYW4pIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmN1cnJlbnRXZWVrT3JNb250aCQsIHRoaXMubW9kZSRdKVxuICAgICAgLnBpcGUobWFwKChbY3VycmVudFdlZWtPck1vbnRoLCBtb2RlXSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICBjYXNlIEVTY2hlZHVsZXJNb2RlLndlZWs6IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZERheXMoY3VycmVudFdlZWtPck1vbnRoLCAobmV4dCA/IDcgOiAtNykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEVTY2hlZHVsZXJNb2RlLnRpbWVsaW5lOiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoY3VycmVudFdlZWtPck1vbnRoLmdldEZ1bGxZZWFyKCksIGN1cnJlbnRXZWVrT3JNb250aC5nZXRNb250aCgpICsgKG5leHQgPyAxIDogLTEpLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLCB0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgodykgPT4gdGhpcy5jdXJyZW50V2Vla09yTW9udGgkLm5leHQodykpO1xuICB9XG5cbiAgb25Ib3ZlckV2ZW50KGV2OiBTY2hlZHVsZXJFdmVudCB8IG51bGwpIHtcbiAgICB0aGlzLmhvdmVyZWRFdmVudCQubmV4dChldik7XG4gIH1cblxuICBvbkxlYXZlRXZlbnQoZXY6IFNjaGVkdWxlckV2ZW50IHwgbnVsbCkge1xuICAgIHRoaXMuaG92ZXJlZEV2ZW50JC5uZXh0KG51bGwpO1xuICB9XG5cbiAgb3BlcmF0aW9uOiBEcmFnT3BlcmF0aW9uIHwgbnVsbCA9IG51bGw7XG4gIGRyYWdTdGFydFRpbWVzbG90OiBUaW1lU2xvdCB8IG51bGwgPSBudWxsO1xuICBvbkNyZWF0ZUV2ZW50KGV2OiBNb3VzZUV2ZW50LCBzbG90OiBUaW1lU2xvdCkge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5tb3VzZVN0YXRlJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QgPSBzbG90O1xuICAgIHRoaXMub3BlcmF0aW9uID0ge1xuICAgICAgb3BlcmF0aW9uOiBFRHJhZ09wZXJhdGlvbi5jcmVhdGVFdmVudCxcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIHN0YXJ0OiBzbG90LnN0YXJ0LFxuICAgICAgICBlbmQ6IHNsb3QuZW5kLFxuICAgICAgICBjb2xvcjogJyNGMDAnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1Rlc3QgZXZlbnQnLFxuICAgICAgfSxcbiAgICAgIG1ldGE6IG51bGwsXG4gICAgfTtcbiAgICB0aGlzLnByZXZpZXdFdmVudCQubmV4dCh7IHN0YXJ0OiBzbG90LnN0YXJ0LCBlbmQ6IHNsb3QuZW5kIH0pO1xuICB9XG5cbiAgcmFuZG9tQ29sb3IoKSB7XG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IDEyODtcbiAgICByZXR1cm4gJyMnICsgdGhpcy5yYW5kb21DaGFubmVsKGJyaWdodG5lc3MpICsgdGhpcy5yYW5kb21DaGFubmVsKGJyaWdodG5lc3MpICsgdGhpcy5yYW5kb21DaGFubmVsKGJyaWdodG5lc3MpO1xuICB9XG4gIHJhbmRvbUNoYW5uZWwoYnJpZ2h0bmVzczogbnVtYmVyKXtcbiAgICBjb25zdCByID0gMjU1LWJyaWdodG5lc3M7XG4gICAgY29uc3QgbiA9IDB8KChNYXRoLnJhbmRvbSgpICogcikgKyBicmlnaHRuZXNzKTtcbiAgICBjb25zdCBzID0gbi50b1N0cmluZygxNik7XG4gICAgcmV0dXJuIChzLmxlbmd0aD09MSkgPyAnMCcrcyA6IHM7XG4gIH1cblxuICBvblN0YXJ0RHJhZ0V2ZW50KGV2ZW50UGFydDogU2NoZWR1bGVyRXZlbnRQYXJ0LCBldjogTW91c2VFdmVudCkge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5ob3ZlcmVkVGltZVNsb3QkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChob3ZlcmVkVGltZVNsb3QpID0+IHtcbiAgICAgIGlmIChldmVudFBhcnQuZXZlbnQpIHtcbiAgICAgICAgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCA9IGhvdmVyZWRUaW1lU2xvdDtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSB7XG4gICAgICAgICAgb3BlcmF0aW9uOiBFRHJhZ09wZXJhdGlvbi5tb3ZlRXZlbnQsXG4gICAgICAgICAgZXZlbnQ6IGV2ZW50UGFydC5ldmVudCxcbiAgICAgICAgICBtZXRhOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnByZXZpZXdFdmVudCQubmV4dCh7IHN0YXJ0OiBldmVudFBhcnQuZXZlbnQuc3RhcnQsIGVuZDogZXZlbnRQYXJ0LmV2ZW50LmVuZCB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uU3RhcnRSZXNpemVFdmVudChldmVudDogU2NoZWR1bGVyRXZlbnQgfCBudWxsLCBwb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJykge1xuICAgIGlmIChldmVudCkge1xuICAgICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgICBjYXNlICd0b3AnOiB7XG4gICAgICAgICAgdGhpcy5vcGVyYXRpb24gPSB7XG4gICAgICAgICAgICBvcGVyYXRpb246IEVEcmFnT3BlcmF0aW9uLnJlc2l6ZUV2ZW50LFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgbWV0YTogeyBwb3NpdGlvbiB9LFxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnByZXZpZXdFdmVudCQubmV4dCh7IHN0YXJ0OiBldmVudC5zdGFydCwgZW5kOiBldmVudC5lbmQgfSk7XG4gICAgICAgIH0gYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6IHtcbiAgICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRURyYWdPcGVyYXRpb24ucmVzaXplRXZlbnQsXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICBtZXRhOiB7IHBvc2l0aW9uIH0sXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucHJldmlld0V2ZW50JC5uZXh0KHsgc3RhcnQ6IGV2ZW50LnN0YXJ0LCBlbmQ6IGV2ZW50LmVuZCB9KTtcbiAgICAgICAgfSBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyNyZWdpb24gaG92ZXJlZFRpbWVzbG90JFxuICBwcml2YXRlIGdldEhvdmVyZWRUaW1lc2xvdChldjogTW91c2VFdmVudCwgdGltZVNsb3RzOiBTY2hlZHVsZXJTdGFtcFdpdGhTbG90c1tdKSB7XG4gICAgY29uc3QgaG92ZXJlZFNsb3RzID0gdGhpcy50aW1lU2xvdEVsZW1lbnRzLmZpbHRlcigoZWwpID0+IHtcbiAgICAgIGNvbnN0IHJjdCA9IGVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAocmN0LmxlZnQgPD0gZXYueCAmJiBldi54IDw9IHJjdC5yaWdodCAmJiByY3QudG9wIDw9IGV2LnkgJiYgZXYueSA8PSByY3QuYm90dG9tKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFob3ZlcmVkU2xvdHMgfHwgaG92ZXJlZFNsb3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc2xvdEVsZW1lbnQgPSBob3ZlcmVkU2xvdHNbMF0ubmF0aXZlRWxlbWVudDtcblxuICAgIGNvbnN0IHN0clJvdyA9IHNsb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKTtcbiAgICBpZiAoIXN0clJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJvdyA9IHBhcnNlSW50KHN0clJvdyk7XG5cbiAgICBjb25zdCBzdHJDb2x1bW4gPSBzbG90RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sdW1uJyk7XG4gICAgaWYgKCFzdHJDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSBwYXJzZUludChzdHJDb2x1bW4pO1xuXG4gICAgY29uc3Qgc2xvdCA9IHRpbWVTbG90c1tyb3ddLnNsb3RzW2NvbHVtbl07XG4gICAgcmV0dXJuIHNsb3Q7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICBvbk1vdXNlbW92ZShldjogTW91c2VFdmVudCkge1xuICAgIHRoaXMudGltZVNsb3RzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgodGltZVNsb3RzKSA9PiB7XG4gICAgICBjb25zdCBob3ZlcmVkID0gdGhpcy5nZXRIb3ZlcmVkVGltZXNsb3QoZXYsIHRpbWVTbG90cyk7XG4gICAgICB0aGlzLmhvdmVyZWRUaW1lU2xvdCQubmV4dChob3ZlcmVkKTtcblxuICAgICAgaWYgKHRoaXMub3BlcmF0aW9uKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5vcGVyYXRpb24ub3BlcmF0aW9uKSB7XG4gICAgICAgICAgY2FzZSBFRHJhZ09wZXJhdGlvbi5jcmVhdGVFdmVudDoge1xuICAgICAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uLmV2ZW50ICYmIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QgJiYgaG92ZXJlZCAmJiAodGhpcy5vcGVyYXRpb24uZXZlbnQuZW5kLmdldFRpbWUoKSAhPSBob3ZlcmVkLmVuZC5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmRyYWdTdGFydFRpbWVzbG90LnN0YXJ0LmdldFRpbWUoKSA9PT0gaG92ZXJlZC5zdGFydC5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICAvLyAxIHNsb3RcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyYWdTdGFydFRpbWVzbG90LnN0YXJ0LmdldFRpbWUoKSA8IGhvdmVyZWQuc3RhcnQuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gRHJhZyBkb3duXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3RXZlbnQkXG4gICAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKGV2KSA9PiAhIWV2ICYmICEhdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCkpXG4gICAgICAgICAgICAgICAgICAucGlwZShtYXAoKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldiAmJiB0aGlzLmRyYWdTdGFydFRpbWVzbG90KSB7XG4gICAgICAgICAgICAgICAgICAgICAgZXYuc3RhcnQgPSB0aGlzLmRyYWdTdGFydFRpbWVzbG90LnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgIGV2LmVuZCA9IGhvdmVyZWQuZW5kO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldjtcbiAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2KSA9PiB0aGlzLnByZXZpZXdFdmVudCQubmV4dChldikpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3Quc3RhcnQuZ2V0VGltZSgpID4gaG92ZXJlZC5zdGFydC5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBEcmFnIHVwXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3RXZlbnQkXG4gICAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKGV2KSA9PiAhIWV2ICYmICEhdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCkpXG4gICAgICAgICAgICAgICAgICAucGlwZShtYXAoKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldiAmJiB0aGlzLmRyYWdTdGFydFRpbWVzbG90KSB7XG4gICAgICAgICAgICAgICAgICAgICAgZXYuc3RhcnQgPSBob3ZlcmVkLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgIGV2LmVuZCA9IHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QuZW5kO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldjtcbiAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2KSA9PiB0aGlzLnByZXZpZXdFdmVudCQubmV4dChldikpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBicmVhaztcbiAgICAgICAgICBjYXNlIEVEcmFnT3BlcmF0aW9uLm1vdmVFdmVudDoge1xuICAgICAgICAgICAgaWYgKGhvdmVyZWQgJiYgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCkge1xuICAgICAgICAgICAgICB0aGlzLnByZXZpZXdFdmVudCRcbiAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKGV2KSA9PiAhIWV2ICYmICEhdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCkpXG4gICAgICAgICAgICAgICAgLnBpcGUobWFwKChldikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGV2ICYmIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gIDxQcmV2aWV3RXZlbnQ+e1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBuZXcgRGF0ZShldi5zdGFydC5nZXRUaW1lKCkgKyBob3ZlcmVkLnN0YXJ0LmdldFRpbWUoKSAtIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3Quc3RhcnQuZ2V0VGltZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG5ldyBEYXRlKGV2LmVuZC5nZXRUaW1lKCkgKyBob3ZlcmVkLnN0YXJ0LmdldFRpbWUoKSAtIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3Quc3RhcnQuZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCA9IGhvdmVyZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZXYgPT4gdGhpcy5wcmV2aWV3RXZlbnQkLm5leHQoZXYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGJyZWFrO1xuICAgICAgICAgIGNhc2UgRURyYWdPcGVyYXRpb24ucmVzaXplRXZlbnQ6IHtcbiAgICAgICAgICAgIGlmIChob3ZlcmVkKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJldmlld0V2ZW50JFxuICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoZXYpID0+ICEhZXYpKVxuICAgICAgICAgICAgICAgIC5waXBlKG1hcCgoZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChldiAmJiB0aGlzLm9wZXJhdGlvbiAmJiB0aGlzLm9wZXJhdGlvbi5ldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcGVyYXRpb24ubWV0YS5wb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICBldi5zdGFydCA9IGhvdmVyZWQuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgZXYuZW5kID0gdGhpcy5vcGVyYXRpb24uZXZlbnQuZW5kO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3BlcmF0aW9uLm1ldGEucG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZXYuc3RhcnQgPSB0aGlzLm9wZXJhdGlvbi5ldmVudC5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICBldi5lbmQgPSBob3ZlcmVkLmVuZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2O1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXYpID0+IHRoaXMucHJldmlld0V2ZW50JC5uZXh0KGV2KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gIG9uTW91c2VVcChldjogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbikge1xuICAgICAgc3dpdGNoICh0aGlzLm9wZXJhdGlvbi5vcGVyYXRpb24pIHtcbiAgICAgICAgY2FzZSBFRHJhZ09wZXJhdGlvbi5jcmVhdGVFdmVudDoge1xuICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucHJldmlld0V2ZW50JF0pXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW3ByZXZpZXdFdmVudF0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHByZXZpZXdFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTdGFydFRpbWVzbG90ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlcyQubmV4dChbXG4gICAgICAgICAgICAgICAgICAuLi50aGlzLnJlc291cmNlcyQudmFsdWUsXG4gICAgICAgICAgICAgICAgICA8UmVzb3VyY2U+e1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05ldyByZXNvdXJjZSBncm91cCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50czogW3tcbiAgICAgICAgICAgICAgICAgICAgICBzdGFydDogcHJldmlld0V2ZW50LnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgIGVuZDogcHJldmlld0V2ZW50LmVuZCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5yYW5kb21Db2xvcigpLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTmV3IGV2ZW50J1xuICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0V2ZW50JC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBicmVhaztcbiAgICAgICAgY2FzZSBFRHJhZ09wZXJhdGlvbi5tb3ZlRXZlbnQ6XG4gICAgICAgIGNhc2UgRURyYWdPcGVyYXRpb24ucmVzaXplRXZlbnQ6IHtcbiAgICAgICAgICB0aGlzLnByZXZpZXdFdmVudCRcbiAgICAgICAgICAgIC5waXBlKGZpbHRlcigoZXYpID0+ICEhZXYpKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHByZXZpZXdFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5vcGVyYXRpb24gJiYgdGhpcy5vcGVyYXRpb24uZXZlbnQgJiYgcHJldmlld0V2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRpb24uZXZlbnQuc3RhcnQgPSBwcmV2aWV3RXZlbnQuc3RhcnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRpb24uZXZlbnQuZW5kID0gcHJldmlld0V2ZW50LmVuZDtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXMkLm5leHQodGhpcy5yZXNvdXJjZXMkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdFdmVudCQubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHctMTAwIG92ZXJmbG93LXktYXV0byBtYi0wIHdlZWstc2NoZWR1bGVcIiBbc3R5bGUubWF4LWhlaWdodC5weF09XCJudWxsXCJcbiAgICAqbmdJZj1cIihtb2RlJCB8IGFzeW5jKSA9PT0gbW9kZXMud2Vla1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1oZWFkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggY2FsZW5kYXItbGVmdCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgZmxleC1zdGFydFwiIChjbGljayk9XCJvblByZXZpb3VzV2Vla09yTW9udGgoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnMtaWNvbiBbaWNvbl09XCInY2hldnJvbi1sZWZ0J1wiIGNsYXNzPVwicHgtMFwiPjwvYnMtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGZsZXgtZW5kXCIgKGNsaWNrKT1cIm9uTmV4dFdlZWtPck1vbnRoKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJzLWljb24gW2ljb25dPVwiJ2NoZXZyb24tcmlnaHQnXCIgY2xhc3M9XCJweC0wXCI+PC9icy1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgY2FsZW5kYXItaGVhZC1jZWxsXCIgKm5nRm9yPVwibGV0IGRheSBvZiAoc2hvd25EYXlzJCB8IGFzeW5jKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1ibG9jayBjb2wtZm9ybS1sYWJlbCB0ZXh0LWNlbnRlciB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkYXkgfCBkYXRlOiAnZGQtTU0nIH19PC9zcGFuPjxzcGFuIGNsYXNzPVwiZC1ub25lIGQtbGctaW5saW5lLWJsb2NrXCI+LXt7IGRheSB8IGRhdGU6ICd5eXl5JyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWJvZHlcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIm1heElubmVySGVpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiICpuZ0lmPVwiKHRpbWVTbG90cyQgfCBhc3luYykgYXMgcm93XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHdlZWtPcHRpb25zJCB8IGFzeW5jKSBhcyB3ZWVrT3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gVGltZXNsb3RzIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHRpbWVzbG90cyBvZiByb3c7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBwLTAgdGltZXNsb3RcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIndlZWtPcHRpb25zLnVuaXRIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWNlbGwgY2FsZW5kYXItbGVmdCBhbGlnbi10b3AgcHgtMiBweS0wXCI+e3sgdGltZXNsb3RzLnNsb3RzWzBdLnN0YXJ0IHwgZGF0ZTogJ0hIOm1tOnNzJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItY2VsbCBmbGV4LWdyb3ctMVwiICpuZ0Zvcj1cImxldCBzbG90IG9mIHRpbWVzbG90cy5zbG90czsgbGV0IGogPSBpbmRleFwiICNzbG90IChtb3VzZWRvd24pPVwib25DcmVhdGVFdmVudCgkZXZlbnQsIHNsb3QpXCIgW2F0dHIuZGF0YS1yb3ddPVwiaVwiIFthdHRyLmRhdGEtY29sdW1uXT1cImpcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gRXZlbnRzIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodGltZVNsb3REdXJhdGlvbiQgfCBhc3luYykgYXMgdGltZVNsb3REdXJhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHRpbWVsaW5lZEV2ZW50UGFydHNGb3JUaGlzV2VlayQgfCBhc3luYykgYXMgcGFydERhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGV2ZW50UGFydCBvZiBwYXJ0RGF0YS5wYXJ0c1wiIGNsYXNzPVwiZXZlbnQgcC0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cIihldmVudFBhcnQucGFydCB8IGJzU2Vjb25kc1RvZGF5T2Zmc2V0KSAvIHRpbWVTbG90RHVyYXRpb24gKiB3ZWVrT3B0aW9ucy51bml0SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIihldmVudFBhcnQucGFydCB8IGJzU2Vjb25kc1RpbWVzcGFuKSAvIHRpbWVTbG90RHVyYXRpb24gKiB3ZWVrT3B0aW9ucy51bml0SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdF09XCInY2FsYyg5MHB4ICsgKCgxMDAlIC0gOTBweCkgLyA3ICogJyArICgoZXZlbnRQYXJ0LnBhcnQgfCBkYXlPZldlZWspIC0gMSkgKyAnKSknXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LWlubmVyXCIgW2NsYXNzLmhvdmVyXT1cIihob3ZlcmVkRXZlbnQkIHwgYXN5bmMpID09PSBldmVudFBhcnQucGFydC5ldmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCInY2FsYygxMDAlIC8gJyArIHBhcnREYXRhLnRvdGFsICsgJyknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCIoZXZlbnRQYXJ0LnBhcnQgfCBic1NlY29uZHNUaW1lc3BhbikgLyB0aW1lU2xvdER1cmF0aW9uICogd2Vla09wdGlvbnMudW5pdEhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW4tbGVmdF09XCInY2FsYygxMDAlIC8gJyArIHBhcnREYXRhLnRvdGFsICsgJyAqICcgKyBldmVudFBhcnQuaW5kZXggKyAnKSdcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtcmVzaXplIHRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV2ZW50UGFydC5wYXJ0LnN0YXJ0ID09PSBldmVudFBhcnQucGFydC5ldmVudD8uc3RhcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblN0YXJ0UmVzaXplRXZlbnQoZXZlbnRQYXJ0LnBhcnQuZXZlbnQsICd0b3AnKVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtYm9yZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC13cmFwcGVyXCIgKm5nSWY9XCJldmVudFBhcnQucGFydC5ldmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uU3RhcnREcmFnRXZlbnQoZXZlbnRQYXJ0LnBhcnQsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Ib3ZlckV2ZW50KGV2ZW50UGFydC5wYXJ0LmV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbkxlYXZlRXZlbnQoZXZlbnRQYXJ0LnBhcnQuZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtYmdcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJldmVudFBhcnQucGFydC5ldmVudC5jb2xvclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LWxhYmVsXCI+e3sgZXZlbnRQYXJ0LnBhcnQuZXZlbnQuZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1yZXNpemUgYm90dG9tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXZlbnRQYXJ0LnBhcnQuZW5kID09PSBldmVudFBhcnQucGFydC5ldmVudD8uZW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25TdGFydFJlc2l6ZUV2ZW50KGV2ZW50UGFydC5wYXJ0LmV2ZW50LCAnYm90dG9tJylcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihwcmV2aWV3RXZlbnRQYXJ0c0ZvclRoaXNXZWVrJCB8IGFzeW5jKSBhcyBwcmV2aWV3UGFydERhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGV2ZW50UGFydCBvZiBwcmV2aWV3UGFydERhdGFcIiBjbGFzcz1cImV2ZW50IHByZXZpZXcgcC0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cIihldmVudFBhcnQgfCBic1NlY29uZHNUb2RheU9mZnNldCkgLyB0aW1lU2xvdER1cmF0aW9uICogd2Vla09wdGlvbnMudW5pdEhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCIoZXZlbnRQYXJ0IHwgYnNTZWNvbmRzVGltZXNwYW4pIC8gdGltZVNsb3REdXJhdGlvbiAqIHdlZWtPcHRpb25zLnVuaXRIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0XT1cIidjYWxjKDkwcHggKyAoKDEwMCUgLSA5MHB4KSAvIDcgKiAnICsgKChldmVudFBhcnQgfCBkYXlPZldlZWspIC0gMSkgKyAnKSknXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LWlubmVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCIoZXZlbnRQYXJ0IHwgYnNTZWNvbmRzVGltZXNwYW4pIC8gdGltZVNsb3REdXJhdGlvbiAqIHdlZWtPcHRpb25zLnVuaXRIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbi0xMDAgb3ZlcmZsb3cteS1hdXRvIG1iLTAgYmctd2hpdGUgdGltZWxpbmVcIiAqbmdJZj1cIihtb2RlJCB8IGFzeW5jKSA9PT0gbW9kZXMudGltZWxpbmVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItaGVhZCBkLWZsZXhcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBmbGV4LXN0YXJ0XCIgKGNsaWNrKT1cIm9uUHJldmlvdXNXZWVrT3JNb250aCgpXCI+XG4gICAgICAgICAgICA8YnMtaWNvbiBbaWNvbl09XCInY2hldnJvbi1sZWZ0J1wiIGNsYXNzPVwicHgtMFwiPjwvYnMtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBoMyBweS0yIG1iLTAgdGV4dC1jZW50ZXJcIj57eyBjdXJyZW50V2Vla09yTW9udGgkIHwgYXN5bmMgfCBkYXRlOiAnTU1NTSB5eXl5JyB9fTwvZGl2PlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGZsZXgtc3RhcnRcIiAoY2xpY2spPVwib25OZXh0V2Vla09yTW9udGgoKVwiPlxuICAgICAgICAgICAgPGJzLWljb24gW2ljb25dPVwiJ2NoZXZyb24tcmlnaHQnXCIgY2xhc3M9XCJweC0wXCI+PC9icy1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItYm9keSB0YWJsZS1yZXNwb25zaXZlIG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBtYi0wXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHRpbWVTbG90cyQgfCBhc3luYykgYXMgdGltZVNsb3RzXCI+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBkYXkgb2YgdGltZVNsb3RzXCIgW2F0dHIuY29sc3Bhbl09XCJkYXkuc2xvdHMubGVuZ3RoXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLXN0aWNreSBkYXktbGFiZWxcIj57eyBkYXkuc3RhbXAgfCBkYXRlOiAnZCBFRScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHRpbWVsaW5lT3B0aW9ucyQgfCBhc3luYykgYXMgdGltZWxpbmVPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXkgb2YgdGltZVNsb3RzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBzbG90IG9mIGRheS5zbG90c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtYmxvY2sgcC0wIHRleHQtY2VudGVyXCIgW3N0eWxlLndpZHRoLnB4XT1cInRpbWVsaW5lT3B0aW9ucy51bml0V2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNsb3Quc3RhcnQgfCBkYXRlOiAnSEg6bW0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPGJzLXJlc291cmNlLWdyb3VwLXByZXNlbnRlciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgKHJlc291cmNlcyQgfCBhc3luYylcIiBbcmVzb3VyY2VHcm91cF09XCJncm91cFwiIFt0aW1lU2xvdHNdPVwidGltZVNsb3RzXCI+PC9icy1yZXNvdXJjZS1ncm91cC1wcmVzZW50ZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -1,17 +1,16 @@
1
1
  import { Pipe } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- class BsSecondsTimespanPipe {
3
+ export class BsSecondsTimespanPipe {
4
4
  transform(value) {
5
5
  return (value.end.getTime() - value.start.getTime()) / 1000;
6
6
  }
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: BsSecondsTimespanPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
8
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.4", ngImport: i0, type: BsSecondsTimespanPipe, name: "bsSecondsTimespan" }); }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsSecondsTimespanPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
8
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.1.2", ngImport: i0, type: BsSecondsTimespanPipe, name: "bsSecondsTimespan" }); }
9
9
  }
10
- export { BsSecondsTimespanPipe };
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: BsSecondsTimespanPipe, decorators: [{
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsSecondsTimespanPipe, decorators: [{
12
11
  type: Pipe,
13
12
  args: [{
14
13
  name: 'bsSecondsTimespan'
15
14
  }]
16
15
  }] });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtc2Vjb25kcy10aW1lc3Bhbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zY2hlZHVsZXIvc3JjL3BpcGVzL2JzLXNlY29uZHMtdGltZXNwYW4ucGlwZS9icy1zZWNvbmRzLXRpbWVzcGFuLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBSXBELE1BR2EscUJBQXFCO0lBRWhDLFNBQVMsQ0FBQyxLQUEwQztRQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzlELENBQUM7OEdBSlUscUJBQXFCOzRHQUFyQixxQkFBcUI7O1NBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQUhqQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxtQkFBbUI7aUJBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1ldmVudCc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudFBhcnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1ldmVudC1wYXJ0JztcblxuQFBpcGUoe1xuICBuYW1lOiAnYnNTZWNvbmRzVGltZXNwYW4nXG59KVxuZXhwb3J0IGNsYXNzIEJzU2Vjb25kc1RpbWVzcGFuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIHRyYW5zZm9ybSh2YWx1ZTogU2NoZWR1bGVyRXZlbnRQYXJ0IHwgU2NoZWR1bGVyRXZlbnQpIHtcbiAgICByZXR1cm4gKHZhbHVlLmVuZC5nZXRUaW1lKCkgLSB2YWx1ZS5zdGFydC5nZXRUaW1lKCkpIC8gMTAwMDtcbiAgfVxuXG59XG4iXX0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtc2Vjb25kcy10aW1lc3Bhbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zY2hlZHVsZXIvc3JjL3BpcGVzL2JzLXNlY29uZHMtdGltZXNwYW4ucGlwZS9icy1zZWNvbmRzLXRpbWVzcGFuLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBT3BELE1BQU0sT0FBTyxxQkFBcUI7SUFFaEMsU0FBUyxDQUFDLEtBQTBDO1FBQ2xELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDOUQsQ0FBQzs4R0FKVSxxQkFBcUI7NEdBQXJCLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFIakMsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsbUJBQW1CO2lCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnRQYXJ0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQtcGFydCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2JzU2Vjb25kc1RpbWVzcGFuJ1xufSlcbmV4cG9ydCBjbGFzcyBCc1NlY29uZHNUaW1lc3BhblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICB0cmFuc2Zvcm0odmFsdWU6IFNjaGVkdWxlckV2ZW50UGFydCB8IFNjaGVkdWxlckV2ZW50KSB7XG4gICAgcmV0dXJuICh2YWx1ZS5lbmQuZ2V0VGltZSgpIC0gdmFsdWUuc3RhcnQuZ2V0VGltZSgpKSAvIDEwMDA7XG4gIH1cblxufVxuIl19
@@ -1,6 +1,6 @@
1
1
  import { Pipe } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- class BsSecondsTodayOffsetPipe {
3
+ export class BsSecondsTodayOffsetPipe {
4
4
  transform(value) {
5
5
  const today = new Date(value.start);
6
6
  today.setHours(0);
@@ -8,14 +8,13 @@ class BsSecondsTodayOffsetPipe {
8
8
  today.setSeconds(0);
9
9
  return (value.start.getTime() - today.getTime()) / 1000;
10
10
  }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: BsSecondsTodayOffsetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
12
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.4", ngImport: i0, type: BsSecondsTodayOffsetPipe, name: "bsSecondsTodayOffset" }); }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsSecondsTodayOffsetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
12
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.1.2", ngImport: i0, type: BsSecondsTodayOffsetPipe, name: "bsSecondsTodayOffset" }); }
13
13
  }
14
- export { BsSecondsTodayOffsetPipe };
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: BsSecondsTodayOffsetPipe, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsSecondsTodayOffsetPipe, decorators: [{
16
15
  type: Pipe,
17
16
  args: [{
18
17
  name: 'bsSecondsTodayOffset'
19
18
  }]
20
19
  }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtc2Vjb25kcy10b2RheS1vZmZzZXQucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9waXBlcy9icy1zZWNvbmRzLXRvZGF5LW9mZnNldC9icy1zZWNvbmRzLXRvZGF5LW9mZnNldC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUlwRCxNQUdhLHdCQUF3QjtJQUVuQyxTQUFTLENBQUMsS0FBMEM7UUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUQsQ0FBQzs4R0FQVSx3QkFBd0I7NEdBQXhCLHdCQUF3Qjs7U0FBeEIsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBSHBDLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLHNCQUFzQjtpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50JztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50UGFydCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50LXBhcnQnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdic1NlY29uZHNUb2RheU9mZnNldCdcbn0pXG5leHBvcnQgY2xhc3MgQnNTZWNvbmRzVG9kYXlPZmZzZXRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBTY2hlZHVsZXJFdmVudFBhcnQgfCBTY2hlZHVsZXJFdmVudCkge1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUodmFsdWUuc3RhcnQpO1xuICAgIHRvZGF5LnNldEhvdXJzKDApOyB0b2RheS5zZXRNaW51dGVzKDApOyB0b2RheS5zZXRTZWNvbmRzKDApO1xuXG4gICAgcmV0dXJuICh2YWx1ZS5zdGFydC5nZXRUaW1lKCkgLSB0b2RheS5nZXRUaW1lKCkpIC8gMTAwMDtcbiAgfVxuXG59XG4iXX0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtc2Vjb25kcy10b2RheS1vZmZzZXQucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9waXBlcy9icy1zZWNvbmRzLXRvZGF5LW9mZnNldC9icy1zZWNvbmRzLXRvZGF5LW9mZnNldC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU9wRCxNQUFNLE9BQU8sd0JBQXdCO0lBRW5DLFNBQVMsQ0FBQyxLQUEwQztRQUNsRCxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxRCxDQUFDOzhHQVBVLHdCQUF3Qjs0R0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUhwQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxzQkFBc0I7aUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1ldmVudCc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudFBhcnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1ldmVudC1wYXJ0JztcblxuQFBpcGUoe1xuICBuYW1lOiAnYnNTZWNvbmRzVG9kYXlPZmZzZXQnXG59KVxuZXhwb3J0IGNsYXNzIEJzU2Vjb25kc1RvZGF5T2Zmc2V0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIHRyYW5zZm9ybSh2YWx1ZTogU2NoZWR1bGVyRXZlbnRQYXJ0IHwgU2NoZWR1bGVyRXZlbnQpIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKHZhbHVlLnN0YXJ0KTtcbiAgICB0b2RheS5zZXRIb3VycygwKTsgdG9kYXkuc2V0TWludXRlcygwKTsgdG9kYXkuc2V0U2Vjb25kcygwKTtcblxuICAgIHJldHVybiAodmFsdWUuc3RhcnQuZ2V0VGltZSgpIC0gdG9kYXkuZ2V0VGltZSgpKSAvIDEwMDA7XG4gIH1cblxufVxuIl19