@c8y/ngx-components 1021.52.0 → 1021.54.4

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 (259) hide show
  1. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts +10 -2
  2. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts.map +1 -1
  3. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.model.d.ts +11 -0
  4. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.model.d.ts.map +1 -0
  5. package/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.d.ts +10 -4
  6. package/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.d.ts.map +1 -1
  7. package/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.d.ts +3 -1
  8. package/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.d.ts.map +1 -1
  9. package/alarm-event-selector/alarm-event-selector.model.d.ts +7 -0
  10. package/alarm-event-selector/alarm-event-selector.model.d.ts.map +1 -1
  11. package/core/application/app-icon.component.d.ts.map +1 -1
  12. package/core/dashboard/dashboard-child-action.component.d.ts +1 -1
  13. package/core/dashboard/dashboard-child-action.component.d.ts.map +1 -1
  14. package/core/dashboard/dashboard.module.d.ts +29 -29
  15. package/core/dashboard/index.d.ts +3 -0
  16. package/core/dashboard/index.d.ts.map +1 -1
  17. package/core/dashboard/widgets-dashboard.component.d.ts +1 -1
  18. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  19. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +1 -1
  20. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
  21. package/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.d.ts +1 -1
  22. package/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.d.ts.map +1 -1
  23. package/core/dashboard/wiget-time-context/widget-time-context-date-range.service.d.ts +10 -0
  24. package/core/dashboard/wiget-time-context/widget-time-context-date-range.service.d.ts.map +1 -0
  25. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +7 -4
  26. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
  27. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +0 -1
  28. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
  29. package/core/date-picker/date-picker.component.d.ts +1 -1
  30. package/core/date-picker/date-picker.component.d.ts.map +1 -1
  31. package/core/date-picker/date-picker.module.d.ts +9 -9
  32. package/core/date-time-picker/close-date-picker.directive.d.ts +1 -1
  33. package/core/date-time-picker/close-date-picker.directive.d.ts.map +1 -1
  34. package/core/date-time-picker/date-time-picker.component.d.ts +6 -3
  35. package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
  36. package/core/date-time-picker/date-time-picker.module.d.ts +11 -11
  37. package/core/date-time-picker/date-time-picker.module.d.ts.map +1 -1
  38. package/core/forms/forms.module.d.ts +18 -18
  39. package/core/forms/required-input-placeholder.directive.d.ts +1 -1
  40. package/core/forms/required-input-placeholder.directive.d.ts.map +1 -1
  41. package/core/router/router.service.d.ts.map +1 -1
  42. package/core/user/user-menu.service.d.ts +36 -11
  43. package/core/user/user-menu.service.d.ts.map +1 -1
  44. package/datapoint-explorer/c8y-ngx-components-datapoint-explorer.d.ts.map +1 -0
  45. package/datapoint-explorer/datapoint-explorer.module.d.ts +7 -0
  46. package/datapoint-explorer/datapoint-explorer.module.d.ts.map +1 -0
  47. package/datapoint-explorer/index.d.ts +2 -0
  48. package/datapoint-explorer/index.d.ts.map +1 -0
  49. package/datapoint-explorer/view/c8y-ngx-components-datapoint-explorer-view.d.ts.map +1 -0
  50. package/datapoint-explorer/view/configuration/naming-dictionary.d.ts +3 -0
  51. package/datapoint-explorer/view/configuration/naming-dictionary.d.ts.map +1 -0
  52. package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts +38 -0
  53. package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts.map +1 -0
  54. package/datapoint-explorer/view/configuration/workspace-configuration.model.d.ts +7 -0
  55. package/datapoint-explorer/view/configuration/workspace-configuration.model.d.ts.map +1 -0
  56. package/datapoint-explorer/view/configuration/workspace-configuration.service.d.ts +15 -0
  57. package/datapoint-explorer/view/configuration/workspace-configuration.service.d.ts.map +1 -0
  58. package/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.d.ts +25 -0
  59. package/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.d.ts.map +1 -0
  60. package/datapoint-explorer/view/datapoint-explorer.component.d.ts +67 -0
  61. package/datapoint-explorer/view/datapoint-explorer.component.d.ts.map +1 -0
  62. package/datapoint-explorer/view/datapoint-explorer.service.d.ts +9 -0
  63. package/datapoint-explorer/view/datapoint-explorer.service.d.ts.map +1 -0
  64. package/datapoint-explorer/view/index.d.ts +2 -0
  65. package/datapoint-explorer/view/index.d.ts.map +1 -0
  66. package/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.d.ts +23 -0
  67. package/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.d.ts.map +1 -0
  68. package/echart/c8y-ngx-components-echart.d.ts.map +1 -0
  69. package/echart/chart-alerts/chart-alerts.component.d.ts +8 -0
  70. package/echart/chart-alerts/chart-alerts.component.d.ts.map +1 -0
  71. package/echart/charts.component.d.ts +63 -0
  72. package/echart/charts.component.d.ts.map +1 -0
  73. package/echart/index.d.ts +5 -0
  74. package/echart/index.d.ts.map +1 -0
  75. package/echart/models/c8y-ngx-components-echart-models.d.ts.map +1 -0
  76. package/echart/models/chart.model.d.ts +37 -0
  77. package/echart/models/chart.model.d.ts.map +1 -0
  78. package/echart/models/datapoints-graph-widget.model.d.ts +126 -0
  79. package/echart/models/datapoints-graph-widget.model.d.ts.map +1 -0
  80. package/echart/models/index.d.ts +4 -0
  81. package/echart/models/index.d.ts.map +1 -0
  82. package/echart/models/svg-icons.model.d.ts +22 -0
  83. package/echart/models/svg-icons.model.d.ts.map +1 -0
  84. package/echart/services/chart-alarms.service.d.ts +17 -0
  85. package/echart/services/chart-alarms.service.d.ts.map +1 -0
  86. package/echart/services/chart-events.service.d.ts +17 -0
  87. package/echart/services/chart-events.service.d.ts.map +1 -0
  88. package/echart/services/chart-realtime.service.d.ts +35 -0
  89. package/echart/services/chart-realtime.service.d.ts.map +1 -0
  90. package/echart/services/chart-types.service.d.ts +15 -0
  91. package/echart/services/chart-types.service.d.ts.map +1 -0
  92. package/echart/services/custom-measurements.service.d.ts +12 -0
  93. package/echart/services/custom-measurements.service.d.ts.map +1 -0
  94. package/echart/services/echarts-options.service.d.ts +143 -0
  95. package/echart/services/echarts-options.service.d.ts.map +1 -0
  96. package/echart/services/y-axis.service.d.ts +17 -0
  97. package/echart/services/y-axis.service.d.ts.map +1 -0
  98. package/esm2022/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.mjs +37 -12
  99. package/esm2022/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.model.mjs +2 -0
  100. package/esm2022/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.mjs +39 -12
  101. package/esm2022/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.mjs +6 -4
  102. package/esm2022/alarm-event-selector/alarm-event-selector.component.mjs +1 -1
  103. package/esm2022/alarm-event-selector/alarm-event-selector.model.mjs +1 -1
  104. package/esm2022/alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.mjs +1 -1
  105. package/esm2022/alarms/alarms-filter.component.mjs +3 -3
  106. package/esm2022/core/application/app-icon.component.mjs +4 -4
  107. package/esm2022/core/dashboard/dashboard-child-action.component.mjs +3 -3
  108. package/esm2022/core/dashboard/dashboard.module.mjs +17 -14
  109. package/esm2022/core/dashboard/index.mjs +4 -1
  110. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +9 -9
  111. package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +11 -9
  112. package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +8 -7
  113. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-date-range.service.mjs +23 -0
  114. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +70 -26
  115. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -1
  116. package/esm2022/core/date-picker/date-picker.component.mjs +29 -14
  117. package/esm2022/core/date-picker/date-picker.module.mjs +9 -7
  118. package/esm2022/core/date-time-picker/close-date-picker.directive.mjs +4 -3
  119. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +57 -29
  120. package/esm2022/core/date-time-picker/date-time-picker.module.mjs +11 -7
  121. package/esm2022/core/forms/forms.module.mjs +3 -3
  122. package/esm2022/core/forms/ip-range-input-list.component.mjs +5 -5
  123. package/esm2022/core/forms/required-input-placeholder.directive.mjs +4 -3
  124. package/esm2022/core/router/router.service.mjs +1 -1
  125. package/esm2022/core/time-interval/time-interval.component.mjs +3 -3
  126. package/esm2022/core/user/user-menu.service.mjs +57 -17
  127. package/esm2022/datapoint-explorer/c8y-ngx-components-datapoint-explorer.mjs +5 -0
  128. package/esm2022/datapoint-explorer/datapoint-explorer.module.mjs +65 -0
  129. package/esm2022/datapoint-explorer/index.mjs +2 -0
  130. package/esm2022/datapoint-explorer/view/c8y-ngx-components-datapoint-explorer-view.mjs +5 -0
  131. package/esm2022/datapoint-explorer/view/configuration/naming-dictionary.mjs +65 -0
  132. package/esm2022/datapoint-explorer/view/configuration/workspace-configuration.component.mjs +169 -0
  133. package/esm2022/datapoint-explorer/view/configuration/workspace-configuration.model.mjs +2 -0
  134. package/esm2022/datapoint-explorer/view/configuration/workspace-configuration.service.mjs +40 -0
  135. package/esm2022/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.mjs +64 -0
  136. package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +279 -0
  137. package/esm2022/datapoint-explorer/view/datapoint-explorer.service.mjs +23 -0
  138. package/esm2022/datapoint-explorer/view/index.mjs +2 -0
  139. package/esm2022/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.mjs +48 -0
  140. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +3 -3
  141. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
  142. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.mjs +3 -3
  143. package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +3 -3
  144. package/esm2022/device-list/add-smart-group.component.mjs +3 -3
  145. package/esm2022/echart/c8y-ngx-components-echart.mjs +5 -0
  146. package/esm2022/echart/chart-alerts/chart-alerts.component.mjs +16 -0
  147. package/esm2022/echart/charts.component.mjs +560 -0
  148. package/esm2022/echart/index.mjs +5 -0
  149. package/esm2022/echart/models/c8y-ngx-components-echart-models.mjs +5 -0
  150. package/esm2022/echart/models/chart.model.mjs +2 -0
  151. package/esm2022/echart/models/datapoints-graph-widget.model.mjs +17 -0
  152. package/esm2022/echart/models/index.mjs +4 -0
  153. package/esm2022/echart/models/svg-icons.model.mjs +22 -0
  154. package/esm2022/echart/services/chart-alarms.service.mjs +58 -0
  155. package/esm2022/echart/services/chart-events.service.mjs +44 -0
  156. package/esm2022/echart/services/chart-realtime.service.mjs +193 -0
  157. package/esm2022/echart/services/chart-types.service.mjs +102 -0
  158. package/esm2022/echart/services/custom-measurements.service.mjs +52 -0
  159. package/esm2022/echart/services/echarts-options.service.mjs +857 -0
  160. package/esm2022/echart/services/y-axis.service.mjs +150 -0
  161. package/esm2022/interval-picker/interval-picker.component.mjs +3 -3
  162. package/esm2022/interval-picker/interval-picker.model.mjs +1 -1
  163. package/esm2022/map/map.component.mjs +4 -1
  164. package/esm2022/report-dashboard/index.mjs +2 -1
  165. package/esm2022/time-context/c8y-ngx-components-time-context.mjs +5 -0
  166. package/esm2022/time-context/index.mjs +2 -0
  167. package/esm2022/time-context/time-context.component.mjs +217 -0
  168. package/esm2022/time-context/time-context.service.mjs +83 -0
  169. package/esm2022/tracking/tracking.component.mjs +5 -6
  170. package/esm2022/tracking/tracking.service.mjs +7 -3
  171. package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +6 -5
  172. package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
  173. package/esm2022/widgets/definitions/datapoints-graph/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +5 -0
  174. package/esm2022/widgets/definitions/datapoints-graph/index.mjs +31 -0
  175. package/esm2022/widgets/definitions/index.mjs +3 -2
  176. package/esm2022/widgets/implementations/datapoints-graph/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +5 -0
  177. package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.mjs +239 -0
  178. package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.mjs +241 -0
  179. package/esm2022/widgets/implementations/datapoints-graph/index.mjs +3 -0
  180. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +80 -28
  181. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  182. package/fesm2022/c8y-ngx-components-alarms.mjs +2 -2
  183. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  184. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +658 -0
  185. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -0
  186. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +72 -0
  187. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -0
  188. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +4 -4
  189. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  190. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +4 -4
  191. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  192. package/fesm2022/c8y-ngx-components-device-list.mjs +2 -2
  193. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  194. package/fesm2022/c8y-ngx-components-echart-models.mjs +46 -0
  195. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -0
  196. package/fesm2022/c8y-ngx-components-echart.mjs +2023 -0
  197. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -0
  198. package/fesm2022/c8y-ngx-components-interval-picker.mjs +2 -2
  199. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
  200. package/fesm2022/c8y-ngx-components-map.mjs +3 -0
  201. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  202. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +1 -1
  203. package/fesm2022/c8y-ngx-components-time-context.mjs +300 -0
  204. package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -0
  205. package/fesm2022/c8y-ngx-components-tracking.mjs +10 -7
  206. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  207. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +5 -4
  208. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  209. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
  210. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
  211. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +38 -0
  212. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -0
  213. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +2 -1
  214. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  215. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +467 -0
  216. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -0
  217. package/fesm2022/c8y-ngx-components.mjs +433 -281
  218. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  219. package/interval-picker/interval-picker.component.d.ts.map +1 -1
  220. package/interval-picker/interval-picker.model.d.ts.map +1 -1
  221. package/locales/de.po +206 -279
  222. package/locales/es.po +206 -279
  223. package/locales/fr.po +206 -279
  224. package/locales/ja_JP.po +196 -279
  225. package/locales/ko.po +455 -444
  226. package/locales/locales.pot +200 -0
  227. package/locales/nl.po +206 -279
  228. package/locales/pl.po +206 -279
  229. package/locales/pt_BR.po +206 -279
  230. package/locales/zh_CN.po +450 -443
  231. package/locales/zh_TW.po +452 -445
  232. package/map/map.component.d.ts.map +1 -1
  233. package/package.json +1 -1
  234. package/report-dashboard/index.d.ts +1 -0
  235. package/report-dashboard/index.d.ts.map +1 -1
  236. package/time-context/c8y-ngx-components-time-context.d.ts.map +1 -0
  237. package/time-context/index.d.ts +2 -0
  238. package/time-context/index.d.ts.map +1 -0
  239. package/time-context/time-context.component.d.ts +61 -0
  240. package/time-context/time-context.component.d.ts.map +1 -0
  241. package/time-context/time-context.service.d.ts +25 -0
  242. package/time-context/time-context.service.d.ts.map +1 -0
  243. package/tracking/tracking.component.d.ts.map +1 -1
  244. package/tracking/tracking.service.d.ts.map +1 -1
  245. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -1
  246. package/widgets/cockpit-exports/index.d.ts +6 -0
  247. package/widgets/cockpit-exports/index.d.ts.map +1 -1
  248. package/widgets/definitions/datapoints-graph/c8y-ngx-components-widgets-definitions-datapoints-graph.d.ts.map +1 -0
  249. package/widgets/definitions/datapoints-graph/index.d.ts +16 -0
  250. package/widgets/definitions/datapoints-graph/index.d.ts.map +1 -0
  251. package/widgets/definitions/index.d.ts +1 -0
  252. package/widgets/definitions/index.d.ts.map +1 -1
  253. package/widgets/implementations/datapoints-graph/c8y-ngx-components-widgets-implementations-datapoints-graph.d.ts.map +1 -0
  254. package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts +43 -0
  255. package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts.map +1 -0
  256. package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts +54 -0
  257. package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts.map +1 -0
  258. package/widgets/implementations/datapoints-graph/index.d.ts +3 -0
  259. package/widgets/implementations/datapoints-graph/index.d.ts.map +1 -0
@@ -1,8 +1,8 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { FormBuilder } from '@angular/forms';
1
+ import { Component, effect, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';
3
3
  import { ActivationEnd, NavigationEnd, NavigationStart, Router } from '@angular/router';
4
4
  import { aggregationType } from '@c8y/client';
5
- import { BsDropdownDirective } from 'ngx-bootstrap/dropdown';
5
+ import { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';
6
6
  import { interval, Subject } from 'rxjs';
7
7
  import { filter, takeUntil } from 'rxjs/operators';
8
8
  import { ActionBarService } from '../../action-bar';
@@ -14,7 +14,21 @@ import { DashboardChildComponent } from '../dashboard-child.component';
14
14
  import { WidgetsDashboardEventService } from '../widgets-dashboard-event.service';
15
15
  import { WidgetTimeContextHelperService } from './widget-time-context-helper.service';
16
16
  import { WidgetTimeContextQueryService } from './widget-time-context-query.service';
17
- import { INTERVAL_TITLES } from '@c8y/ngx-components/interval-picker';
17
+ import { INTERVAL_TITLES, IntervalPickerComponent } from '@c8y/ngx-components/interval-picker';
18
+ import { WidgetTimeContextDateRangeService } from './widget-time-context-date-range.service';
19
+ import { NgIf, NgTemplateOutlet, NgClass } from '@angular/common';
20
+ import { ActionBarItemComponent } from '../../action-bar/action-bar-item.component';
21
+ import { TooltipModule } from 'ngx-bootstrap/tooltip';
22
+ import { IconDirective } from '../../common/icon.directive';
23
+ import { FormGroupComponent } from '../../forms/form-group.component';
24
+ import { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';
25
+ import { MessagesComponent } from '../../forms/messages.component';
26
+ import { MessageDirective } from '../../forms/message.directive';
27
+ import { RealtimeControlComponent } from './realtime-control/realtime-control.component';
28
+ import { AggregationPickerComponent } from './aggregation-picker/aggregation-picker.component';
29
+ import { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';
30
+ import { DatePipe } from '../../common/date.pipe';
31
+ import { DateTimePickerComponent } from '../../date-time-picker';
18
32
  import * as i0 from "@angular/core";
19
33
  import * as i1 from "../widgets-dashboard-event.service";
20
34
  import * as i2 from "../dashboard-child.component";
@@ -24,27 +38,14 @@ import * as i5 from "./widget-time-context-helper.service";
24
38
  import * as i6 from "@angular/router";
25
39
  import * as i7 from "../../action-bar";
26
40
  import * as i8 from "../../aggregation/aggregation.service";
27
- import * as i9 from "../../common/icon.directive";
28
- import * as i10 from "../../i18n/c8y-translate.directive";
29
- import * as i11 from "@angular/common";
30
- import * as i12 from "../../action-bar/action-bar-item.component";
31
- import * as i13 from "ngx-bootstrap/dropdown";
32
- import * as i14 from "ngx-bootstrap/tooltip";
33
- import * as i15 from "../../forms/form-group.component";
34
- import * as i16 from "../../forms/message.directive";
35
- import * as i17 from "../../forms/messages.component";
36
- import * as i18 from "../../date-time-picker/date-time-picker.component";
37
- import * as i19 from "@ngx-translate/core";
38
- import * as i20 from "@c8y/ngx-components/interval-picker";
39
- import * as i21 from "../dashboard-child-action.component";
40
- import * as i22 from "./realtime-control/realtime-control.component";
41
- import * as i23 from "./aggregation-picker/aggregation-picker.component";
42
- import * as i24 from "../../common/date.pipe";
41
+ import * as i9 from "./widget-time-context-date-range.service";
42
+ import * as i10 from "ngx-bootstrap/dropdown";
43
+ import * as i11 from "ngx-bootstrap/tooltip";
43
44
  export class WidgetTimeContextComponent {
44
45
  /**
45
46
  * @ignore only DI.
46
47
  */
47
- constructor(widgetEventService, dashboardChild, formBuilder, queryService, helperService, router, actionBarService, aggregationService) {
48
+ constructor(widgetEventService, dashboardChild, formBuilder, queryService, helperService, router, actionBarService, aggregationService, widgetTimeContextDateRangeService) {
48
49
  this.widgetEventService = widgetEventService;
49
50
  this.dashboardChild = dashboardChild;
50
51
  this.formBuilder = formBuilder;
@@ -53,6 +54,7 @@ export class WidgetTimeContextComponent {
53
54
  this.router = router;
54
55
  this.actionBarService = actionBarService;
55
56
  this.aggregationService = aggregationService;
57
+ this.widgetTimeContextDateRangeService = widgetTimeContextDateRangeService;
56
58
  this.INTERVAL_TITLES = INTERVAL_TITLES;
57
59
  this.DATE_FORMAT = 'short';
58
60
  /**
@@ -76,6 +78,21 @@ export class WidgetTimeContextComponent {
76
78
  this.ACTION_BAR_GROUP_ID = 'timecontext';
77
79
  this.REALTIME_INTERVAL = 1000;
78
80
  this.destroy$ = new Subject();
81
+ effect(() => {
82
+ const data = this.widgetTimeContextDateRangeService.timeContextChange();
83
+ if (data) {
84
+ const updatedFormData = {
85
+ date: [new Date(data.dateFrom), new Date(data.dateTo)],
86
+ interval: data.interval,
87
+ realtime: false,
88
+ aggregation: this.form.value.aggregation
89
+ };
90
+ this.sliderChange = true;
91
+ this.dateContextChange.emit({ ...updatedFormData, sliderChange: true });
92
+ this.stopRealtime();
93
+ this.updateFormValues(updatedFormData);
94
+ }
95
+ });
79
96
  }
80
97
  /**
81
98
  * @ignore Subscribing to the global context.
@@ -203,6 +220,10 @@ export class WidgetTimeContextComponent {
203
220
  this.form.controls.aggregation.valueChanges
204
221
  .pipe(takeUntil(this.destroy$))
205
222
  .subscribe(aggregation => {
223
+ if (this.sliderChange) {
224
+ this.sliderChange = false;
225
+ return;
226
+ }
206
227
  this.update({
207
228
  date: [
208
229
  new Date(this.form.value.currentDateContextFromDate),
@@ -254,6 +275,8 @@ export class WidgetTimeContextComponent {
254
275
  }
255
276
  this.dateContextChange.emit({
256
277
  date,
278
+ sliderChange: false,
279
+ interval,
257
280
  realtime,
258
281
  aggregation
259
282
  });
@@ -431,13 +454,34 @@ export class WidgetTimeContextComponent {
431
454
  return null;
432
455
  }
433
456
  }
434
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetTimeContextComponent, deps: [{ token: i1.WidgetsDashboardEventService }, { token: i2.DashboardChildComponent }, { token: i3.FormBuilder }, { token: i4.WidgetTimeContextQueryService }, { token: i5.WidgetTimeContextHelperService }, { token: i6.Router }, { token: i7.ActionBarService }, { token: i8.AggregationService }], target: i0.ɵɵFactoryTarget.Component }); }
435
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: WidgetTimeContextComponent, selector: "c8y-widget-time-context", inputs: { canDecouple: "canDecouple", displaySettings: "displaySettings", hidden: "hidden" }, outputs: { dateContextChange: "dateContextChange" }, host: { classAttribute: "d-flex a-i-center gap-4" }, viewQueries: [{ propertyName: "action", first: true, predicate: DashboardChildActionComponent, descendants: true }, { propertyName: "dropdown", first: true, predicate: BsDropdownDirective, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item\n *ngIf=\"isCoupled && !hidden\"\n [priority]=\"ACTION_BAR_PRIORITY\"\n [groupId]=\"ACTION_BAR_GROUP_ID\"\n [inGroupPriority]=\"actionBarInGroupPriority\"\n [placement]=\"'left'\"\n>\n <ng-container\n [ngTemplateOutlet]=\"dateTimePicker\"\n [ngTemplateOutletContext]=\"{\n date: [form.value.currentDateContextFromDate, form.value.currentDateContextToDate]\n }\"\n ></ng-container>\n</c8y-action-bar-item>\n\n<ng-container\n *ngIf=\"!isCoupled\"\n [ngTemplateOutlet]=\"dateTimePicker\"\n [ngTemplateOutletContext]=\"{\n date: [form.value.currentDateContextFromDate, form.value.currentDateContextToDate]\n }\"\n></ng-container>\n\n<ng-template\n #dateTimePicker\n let-date=\"date\"\n>\n <form\n class=\"d-flex gap-16 p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n [formGroup]=\"form\"\n >\n <ng-container *ngIf=\"displaySettings.globalTimeContext\">\n <div>\n <div\n class=\"dropdown flex-grow\"\n #dropdown=\"bs-dropdown\"\n dropdown\n [insideClick]=\"true\"\n *ngIf=\"date\"\n >\n <button\n class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n attr.aria-label=\"{{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{\n date[1] | c8yDate: DATE_FORMAT\n }}\"\n tooltip=\"{{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\"\n placement=\"top\"\n container=\"body\"\n data-cy=\"widget-time-context--date-picker-dropdown-button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"schedule1\"\n ></i>\n <div class=\"d-col text-left fit-w\">\n <span\n class=\"text-12\"\n data-cy=\"widget-time-context--selected-interval\"\n >\n {{ INTERVAL_TITLES[form.controls.currentDateContextInterval.value] | translate }}\n </span>\n <span\n class=\"text-10 text-muted text-truncate\"\n data-cy=\"widget-time-context--selected-time-range\"\n >\n {{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\n </span>\n </div>\n <span class=\"caret m-r-16 m-l-4\"></span>\n </button>\n\n <ul\n class=\"dropdown-menu dropdown-menu--date-range\"\n *dropdownMenu\n >\n <c8y-interval-picker\n class=\"d-contents\"\n formControlName=\"currentDateContextInterval\"\n ></c8y-interval-picker>\n\n <ng-container *ngIf=\"form.controls.currentDateContextInterval.value === 'custom'\">\n <div class=\"p-l-16 p-r-16\">\n <c8y-form-group\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'From`date`' | translate\"\n for=\"temporaryUserSelectedFromDate\"\n translate\n >\n From`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedFromDate\"\n [maxDate]=\"form.value.temporaryUserSelectedToDate\"\n [placeholder]=\"'From`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedFromDate\"\n [ngClass]=\"\n form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\n \"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedFromDate.errors\">\n <c8y-message\n name=\"dateAfterRangeMax\"\n [text]=\"'This date is after the latest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'To`date`' | translate\"\n for=\"temporaryUserSelectedToDate\"\n translate\n >\n To`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedToDate\"\n [minDate]=\"form.value.temporaryUserSelectedFromDate\"\n [placeholder]=\"'To`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedToDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedToDate.errors\">\n <c8y-message\n name=\"dateBeforeRangeMin\"\n [text]=\"'This date is before the earliest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n title=\"{{ 'Reset' | translate }}\"\n type=\"button\"\n (click)=\"reset(); dropdown.isOpen = false\"\n [disabled]=\"form.value.realtime\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyDatetimeContext(); dropdown.isOpen = false\"\n [disabled]=\"\n (form.pristine && form.untouched) || form.invalid || form.value.realtime\n \"\n translate\n >\n Apply\n </button>\n </div>\n </ng-container>\n </ul>\n </div>\n </div>\n </ng-container>\n\n <div class=\"input-group w-auto\">\n <c8y-realtime-control\n class=\"form-control p-0 flex-no-grow w-auto\"\n *ngIf=\"displaySettings.globalRealtimeContext\"\n formControlName=\"realtime\"\n ></c8y-realtime-control>\n\n <c8y-aggregation-picker\n *ngIf=\"displaySettings.globalAggregationContext\"\n formControlName=\"aggregation\"\n [disabledAggregations]=\"disabledAggregations\"\n ></c8y-aggregation-picker>\n </div>\n </form>\n</ng-template>\n\n<c8y-dashboard-child-action>\n <button\n type=\"button\"\n (click)=\"toggleDecoupling()\"\n >\n <i [c8yIcon]=\"isCoupled ? 'schedule1' : 'today'\"></i>\n <span class=\"m-l-4\">\n {{ (isCoupled ? decoupleTimeContextLabel : coupleTimeContextLabel) | translate }}\n </span>\n </button>\n</c8y-dashboard-child-action>\n", dependencies: [{ kind: "directive", type: i9.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i10.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i12.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i13.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i13.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i13.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i14.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i15.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i16.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i17.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i18.DateTimePickerComponent, selector: "c8y-date-time-picker", inputs: ["minDate", "maxDate", "placeholder", "dateInputFormat", "adaptivePosition", "size", "dateType", "config"], outputs: ["onDateSelected"] }, { kind: "directive", type: i19.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i20.IntervalPickerComponent, selector: "c8y-interval-picker", inputs: ["INTERVALS"] }, { kind: "component", type: i21.DashboardChildActionComponent, selector: "c8y-dashboard-child-action" }, { kind: "component", type: i22.RealtimeControlComponent, selector: "c8y-realtime-control" }, { kind: "component", type: i23.AggregationPickerComponent, selector: "c8y-aggregation-picker", inputs: ["disabledAggregations"] }, { kind: "pipe", type: i24.DatePipe, name: "c8yDate" }, { kind: "pipe", type: i19.TranslatePipe, name: "translate" }] }); }
457
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetTimeContextComponent, deps: [{ token: i1.WidgetsDashboardEventService }, { token: i2.DashboardChildComponent }, { token: i3.FormBuilder }, { token: i4.WidgetTimeContextQueryService }, { token: i5.WidgetTimeContextHelperService }, { token: i6.Router }, { token: i7.ActionBarService }, { token: i8.AggregationService }, { token: i9.WidgetTimeContextDateRangeService }], target: i0.ɵɵFactoryTarget.Component }); }
458
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: WidgetTimeContextComponent, isStandalone: true, selector: "c8y-widget-time-context", inputs: { canDecouple: "canDecouple", displaySettings: "displaySettings", hidden: "hidden" }, outputs: { dateContextChange: "dateContextChange" }, host: { classAttribute: "d-flex a-i-center gap-4" }, viewQueries: [{ propertyName: "action", first: true, predicate: DashboardChildActionComponent, descendants: true }, { propertyName: "dropdown", first: true, predicate: BsDropdownDirective, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item\n *ngIf=\"isCoupled && !hidden\"\n [priority]=\"ACTION_BAR_PRIORITY\"\n [groupId]=\"ACTION_BAR_GROUP_ID\"\n [inGroupPriority]=\"actionBarInGroupPriority\"\n [placement]=\"'left'\"\n>\n <ng-container\n [ngTemplateOutlet]=\"dateTimePicker\"\n [ngTemplateOutletContext]=\"{\n date: [form.value.currentDateContextFromDate, form.value.currentDateContextToDate]\n }\"\n ></ng-container>\n</c8y-action-bar-item>\n\n<ng-container\n *ngIf=\"!isCoupled\"\n [ngTemplateOutlet]=\"dateTimePicker\"\n [ngTemplateOutletContext]=\"{\n date: [form.value.currentDateContextFromDate, form.value.currentDateContextToDate]\n }\"\n></ng-container>\n\n<ng-template\n #dateTimePicker\n let-date=\"date\"\n>\n <form\n class=\"d-flex gap-16 p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n [formGroup]=\"form\"\n >\n <ng-container *ngIf=\"displaySettings.globalTimeContext\">\n <div>\n <div\n class=\"dropdown flex-grow\"\n #dropdown=\"bs-dropdown\"\n dropdown\n [insideClick]=\"true\"\n *ngIf=\"date\"\n >\n <button\n class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n attr.aria-label=\"{{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{\n date[1] | c8yDate: DATE_FORMAT\n }}\"\n tooltip=\"{{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\"\n placement=\"top\"\n container=\"body\"\n data-cy=\"widget-time-context--date-picker-dropdown-button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"schedule1\"\n ></i>\n <div class=\"d-col text-left fit-w\">\n <span\n class=\"text-12\"\n data-cy=\"widget-time-context--selected-interval\"\n >\n {{ INTERVAL_TITLES[form.controls.currentDateContextInterval.value] | translate }}\n </span>\n <span\n class=\"text-10 text-muted text-truncate\"\n data-cy=\"widget-time-context--selected-time-range\"\n >\n {{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\n </span>\n </div>\n <span class=\"caret m-r-16 m-l-4\"></span>\n </button>\n\n <ul\n class=\"dropdown-menu dropdown-menu--date-range\"\n *dropdownMenu\n >\n <c8y-interval-picker\n class=\"d-contents\"\n formControlName=\"currentDateContextInterval\"\n ></c8y-interval-picker>\n\n <ng-container *ngIf=\"form.controls.currentDateContextInterval.value === 'custom'\">\n <div class=\"p-l-16 p-r-16\">\n <c8y-form-group\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'From`date`' | translate\"\n for=\"temporaryUserSelectedFromDate\"\n translate\n >\n From`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedFromDate\"\n [maxDate]=\"form.value.temporaryUserSelectedToDate\"\n [placeholder]=\"'From`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedFromDate\"\n [ngClass]=\"\n form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\n \"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedFromDate.errors\">\n <c8y-message\n name=\"dateAfterRangeMax\"\n [text]=\"'This date is after the latest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'To`date`' | translate\"\n for=\"temporaryUserSelectedToDate\"\n translate\n >\n To`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedToDate\"\n [minDate]=\"form.value.temporaryUserSelectedFromDate\"\n [placeholder]=\"'To`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedToDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedToDate.errors\">\n <c8y-message\n name=\"dateBeforeRangeMin\"\n [text]=\"'This date is before the earliest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n title=\"{{ 'Reset' | translate }}\"\n type=\"button\"\n (click)=\"reset(); dropdown.isOpen = false\"\n [disabled]=\"form.value.realtime\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyDatetimeContext(); dropdown.isOpen = false\"\n [disabled]=\"\n (form.pristine && form.untouched) || form.invalid || form.value.realtime\n \"\n translate\n >\n Apply\n </button>\n </div>\n </ng-container>\n </ul>\n </div>\n </div>\n </ng-container>\n\n <div class=\"input-group w-auto\">\n <c8y-realtime-control\n class=\"form-control p-0 flex-no-grow w-auto\"\n *ngIf=\"displaySettings.globalRealtimeContext\"\n formControlName=\"realtime\"\n ></c8y-realtime-control>\n\n <c8y-aggregation-picker\n *ngIf=\"displaySettings.globalAggregationContext\"\n formControlName=\"aggregation\"\n [disabledAggregations]=\"disabledAggregations\"\n ></c8y-aggregation-picker>\n </div>\n </form>\n</ng-template>\n\n<c8y-dashboard-child-action>\n <button\n type=\"button\"\n (click)=\"toggleDecoupling()\"\n >\n <i [c8yIcon]=\"isCoupled ? 'schedule1' : 'today'\"></i>\n <span class=\"m-l-4\">\n {{ (isCoupled ? decoupleTimeContextLabel : coupleTimeContextLabel) | translate }}\n </span>\n </button>\n</c8y-dashboard-child-action>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i10.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i10.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i10.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i11.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: IntervalPickerComponent, selector: "c8y-interval-picker", inputs: ["INTERVALS"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: RealtimeControlComponent, selector: "c8y-realtime-control" }, { kind: "component", type: AggregationPickerComponent, selector: "c8y-aggregation-picker", inputs: ["disabledAggregations"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }, { kind: "component", type: DashboardChildActionComponent, selector: "c8y-dashboard-child-action" }, { kind: "component", type: DateTimePickerComponent, selector: "c8y-date-time-picker", inputs: ["minDate", "maxDate", "placeholder", "dateInputFormat", "adaptivePosition", "size", "dateType", "config"], outputs: ["onDateSelected"] }] }); }
436
459
  }
437
460
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetTimeContextComponent, decorators: [{
438
461
  type: Component,
439
- args: [{ selector: 'c8y-widget-time-context', host: { class: 'd-flex a-i-center gap-4' }, template: "<c8y-action-bar-item\n *ngIf=\"isCoupled && !hidden\"\n [priority]=\"ACTION_BAR_PRIORITY\"\n [groupId]=\"ACTION_BAR_GROUP_ID\"\n [inGroupPriority]=\"actionBarInGroupPriority\"\n [placement]=\"'left'\"\n>\n <ng-container\n [ngTemplateOutlet]=\"dateTimePicker\"\n [ngTemplateOutletContext]=\"{\n date: [form.value.currentDateContextFromDate, form.value.currentDateContextToDate]\n }\"\n ></ng-container>\n</c8y-action-bar-item>\n\n<ng-container\n *ngIf=\"!isCoupled\"\n [ngTemplateOutlet]=\"dateTimePicker\"\n [ngTemplateOutletContext]=\"{\n date: [form.value.currentDateContextFromDate, form.value.currentDateContextToDate]\n }\"\n></ng-container>\n\n<ng-template\n #dateTimePicker\n let-date=\"date\"\n>\n <form\n class=\"d-flex gap-16 p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n [formGroup]=\"form\"\n >\n <ng-container *ngIf=\"displaySettings.globalTimeContext\">\n <div>\n <div\n class=\"dropdown flex-grow\"\n #dropdown=\"bs-dropdown\"\n dropdown\n [insideClick]=\"true\"\n *ngIf=\"date\"\n >\n <button\n class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n attr.aria-label=\"{{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{\n date[1] | c8yDate: DATE_FORMAT\n }}\"\n tooltip=\"{{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\"\n placement=\"top\"\n container=\"body\"\n data-cy=\"widget-time-context--date-picker-dropdown-button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"schedule1\"\n ></i>\n <div class=\"d-col text-left fit-w\">\n <span\n class=\"text-12\"\n data-cy=\"widget-time-context--selected-interval\"\n >\n {{ INTERVAL_TITLES[form.controls.currentDateContextInterval.value] | translate }}\n </span>\n <span\n class=\"text-10 text-muted text-truncate\"\n data-cy=\"widget-time-context--selected-time-range\"\n >\n {{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\n </span>\n </div>\n <span class=\"caret m-r-16 m-l-4\"></span>\n </button>\n\n <ul\n class=\"dropdown-menu dropdown-menu--date-range\"\n *dropdownMenu\n >\n <c8y-interval-picker\n class=\"d-contents\"\n formControlName=\"currentDateContextInterval\"\n ></c8y-interval-picker>\n\n <ng-container *ngIf=\"form.controls.currentDateContextInterval.value === 'custom'\">\n <div class=\"p-l-16 p-r-16\">\n <c8y-form-group\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'From`date`' | translate\"\n for=\"temporaryUserSelectedFromDate\"\n translate\n >\n From`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedFromDate\"\n [maxDate]=\"form.value.temporaryUserSelectedToDate\"\n [placeholder]=\"'From`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedFromDate\"\n [ngClass]=\"\n form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\n \"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedFromDate.errors\">\n <c8y-message\n name=\"dateAfterRangeMax\"\n [text]=\"'This date is after the latest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'To`date`' | translate\"\n for=\"temporaryUserSelectedToDate\"\n translate\n >\n To`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedToDate\"\n [minDate]=\"form.value.temporaryUserSelectedFromDate\"\n [placeholder]=\"'To`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedToDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedToDate.errors\">\n <c8y-message\n name=\"dateBeforeRangeMin\"\n [text]=\"'This date is before the earliest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n title=\"{{ 'Reset' | translate }}\"\n type=\"button\"\n (click)=\"reset(); dropdown.isOpen = false\"\n [disabled]=\"form.value.realtime\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyDatetimeContext(); dropdown.isOpen = false\"\n [disabled]=\"\n (form.pristine && form.untouched) || form.invalid || form.value.realtime\n \"\n translate\n >\n Apply\n </button>\n </div>\n </ng-container>\n </ul>\n </div>\n </div>\n </ng-container>\n\n <div class=\"input-group w-auto\">\n <c8y-realtime-control\n class=\"form-control p-0 flex-no-grow w-auto\"\n *ngIf=\"displaySettings.globalRealtimeContext\"\n formControlName=\"realtime\"\n ></c8y-realtime-control>\n\n <c8y-aggregation-picker\n *ngIf=\"displaySettings.globalAggregationContext\"\n formControlName=\"aggregation\"\n [disabledAggregations]=\"disabledAggregations\"\n ></c8y-aggregation-picker>\n </div>\n </form>\n</ng-template>\n\n<c8y-dashboard-child-action>\n <button\n type=\"button\"\n (click)=\"toggleDecoupling()\"\n >\n <i [c8yIcon]=\"isCoupled ? 'schedule1' : 'today'\"></i>\n <span class=\"m-l-4\">\n {{ (isCoupled ? decoupleTimeContextLabel : coupleTimeContextLabel) | translate }}\n </span>\n </button>\n</c8y-dashboard-child-action>\n" }]
440
- }], ctorParameters: () => [{ type: i1.WidgetsDashboardEventService }, { type: i2.DashboardChildComponent }, { type: i3.FormBuilder }, { type: i4.WidgetTimeContextQueryService }, { type: i5.WidgetTimeContextHelperService }, { type: i6.Router }, { type: i7.ActionBarService }, { type: i8.AggregationService }], propDecorators: { canDecouple: [{
462
+ args: [{ selector: 'c8y-widget-time-context', host: { class: 'd-flex a-i-center gap-4' }, standalone: true, imports: [
463
+ NgIf,
464
+ ActionBarItemComponent,
465
+ NgTemplateOutlet,
466
+ FormsModule,
467
+ ReactiveFormsModule,
468
+ BsDropdownModule,
469
+ TooltipModule,
470
+ IconDirective,
471
+ IntervalPickerComponent,
472
+ FormGroupComponent,
473
+ NgClass,
474
+ C8yTranslateDirective,
475
+ MessagesComponent,
476
+ MessageDirective,
477
+ RealtimeControlComponent,
478
+ AggregationPickerComponent,
479
+ C8yTranslatePipe,
480
+ DatePipe,
481
+ DashboardChildActionComponent,
482
+ DateTimePickerComponent
483
+ ], template: "<c8y-action-bar-item\n *ngIf=\"isCoupled && !hidden\"\n [priority]=\"ACTION_BAR_PRIORITY\"\n [groupId]=\"ACTION_BAR_GROUP_ID\"\n [inGroupPriority]=\"actionBarInGroupPriority\"\n [placement]=\"'left'\"\n>\n <ng-container\n [ngTemplateOutlet]=\"dateTimePicker\"\n [ngTemplateOutletContext]=\"{\n date: [form.value.currentDateContextFromDate, form.value.currentDateContextToDate]\n }\"\n ></ng-container>\n</c8y-action-bar-item>\n\n<ng-container\n *ngIf=\"!isCoupled\"\n [ngTemplateOutlet]=\"dateTimePicker\"\n [ngTemplateOutletContext]=\"{\n date: [form.value.currentDateContextFromDate, form.value.currentDateContextToDate]\n }\"\n></ng-container>\n\n<ng-template\n #dateTimePicker\n let-date=\"date\"\n>\n <form\n class=\"d-flex gap-16 p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n [formGroup]=\"form\"\n >\n <ng-container *ngIf=\"displaySettings.globalTimeContext\">\n <div>\n <div\n class=\"dropdown flex-grow\"\n #dropdown=\"bs-dropdown\"\n dropdown\n [insideClick]=\"true\"\n *ngIf=\"date\"\n >\n <button\n class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n attr.aria-label=\"{{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{\n date[1] | c8yDate: DATE_FORMAT\n }}\"\n tooltip=\"{{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\"\n placement=\"top\"\n container=\"body\"\n data-cy=\"widget-time-context--date-picker-dropdown-button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"schedule1\"\n ></i>\n <div class=\"d-col text-left fit-w\">\n <span\n class=\"text-12\"\n data-cy=\"widget-time-context--selected-interval\"\n >\n {{ INTERVAL_TITLES[form.controls.currentDateContextInterval.value] | translate }}\n </span>\n <span\n class=\"text-10 text-muted text-truncate\"\n data-cy=\"widget-time-context--selected-time-range\"\n >\n {{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\n </span>\n </div>\n <span class=\"caret m-r-16 m-l-4\"></span>\n </button>\n\n <ul\n class=\"dropdown-menu dropdown-menu--date-range\"\n *dropdownMenu\n >\n <c8y-interval-picker\n class=\"d-contents\"\n formControlName=\"currentDateContextInterval\"\n ></c8y-interval-picker>\n\n <ng-container *ngIf=\"form.controls.currentDateContextInterval.value === 'custom'\">\n <div class=\"p-l-16 p-r-16\">\n <c8y-form-group\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'From`date`' | translate\"\n for=\"temporaryUserSelectedFromDate\"\n translate\n >\n From`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedFromDate\"\n [maxDate]=\"form.value.temporaryUserSelectedToDate\"\n [placeholder]=\"'From`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedFromDate\"\n [ngClass]=\"\n form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\n \"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedFromDate.errors\">\n <c8y-message\n name=\"dateAfterRangeMax\"\n [text]=\"'This date is after the latest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'To`date`' | translate\"\n for=\"temporaryUserSelectedToDate\"\n translate\n >\n To`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedToDate\"\n [minDate]=\"form.value.temporaryUserSelectedFromDate\"\n [placeholder]=\"'To`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedToDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedToDate.errors\">\n <c8y-message\n name=\"dateBeforeRangeMin\"\n [text]=\"'This date is before the earliest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n title=\"{{ 'Reset' | translate }}\"\n type=\"button\"\n (click)=\"reset(); dropdown.isOpen = false\"\n [disabled]=\"form.value.realtime\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyDatetimeContext(); dropdown.isOpen = false\"\n [disabled]=\"\n (form.pristine && form.untouched) || form.invalid || form.value.realtime\n \"\n translate\n >\n Apply\n </button>\n </div>\n </ng-container>\n </ul>\n </div>\n </div>\n </ng-container>\n\n <div class=\"input-group w-auto\">\n <c8y-realtime-control\n class=\"form-control p-0 flex-no-grow w-auto\"\n *ngIf=\"displaySettings.globalRealtimeContext\"\n formControlName=\"realtime\"\n ></c8y-realtime-control>\n\n <c8y-aggregation-picker\n *ngIf=\"displaySettings.globalAggregationContext\"\n formControlName=\"aggregation\"\n [disabledAggregations]=\"disabledAggregations\"\n ></c8y-aggregation-picker>\n </div>\n </form>\n</ng-template>\n\n<c8y-dashboard-child-action>\n <button\n type=\"button\"\n (click)=\"toggleDecoupling()\"\n >\n <i [c8yIcon]=\"isCoupled ? 'schedule1' : 'today'\"></i>\n <span class=\"m-l-4\">\n {{ (isCoupled ? decoupleTimeContextLabel : coupleTimeContextLabel) | translate }}\n </span>\n </button>\n</c8y-dashboard-child-action>\n" }]
484
+ }], ctorParameters: () => [{ type: i1.WidgetsDashboardEventService }, { type: i2.DashboardChildComponent }, { type: i3.FormBuilder }, { type: i4.WidgetTimeContextQueryService }, { type: i5.WidgetTimeContextHelperService }, { type: i6.Router }, { type: i7.ActionBarService }, { type: i8.AggregationService }, { type: i9.WidgetTimeContextDateRangeService }], propDecorators: { canDecouple: [{
441
485
  type: Input
442
486
  }], displaySettings: [{
443
487
  type: Input
@@ -452,4 +496,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
452
496
  type: ViewChild,
453
497
  args: [BsDropdownDirective]
454
498
  }] } });
455
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC93aWdldC10aW1lLWNvbnRleHQvd2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC93aWdldC10aW1lLWNvbnRleHQvd2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUs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QUFXO3NCQURWLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBTU4saUJBQWlCO3NCQURoQixNQUFNO2dCQUttQyxNQUFNO3NCQUEvQyxTQUFTO3VCQUFDLDZCQUE2QjtnQkFDUixRQUFRO3NCQUF2QyxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0aW9uRW5kLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvblR5cGUgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBpbnRlcnZhbCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGlvbkJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9hY3Rpb24tYmFyJztcbmltcG9ydCB7IEFHR1JFR0FUSU9OX0xJTUlUUyB9IGZyb20gJy4uLy4uL2FnZ3JlZ2F0aW9uL2FnZ3JlZ2F0aW9uLm1vZGVsJztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2FnZ3JlZ2F0aW9uL2FnZ3JlZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9kYXNoYm9hcmQtY2hpbGQtYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCB9IGZyb20gJy4uL2Rhc2hib2FyZC1jaGlsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVRpbWVDb250ZXh0LCBUaW1lQ29udGV4dEV2ZW50LCBXaWRnZXRUaW1lQ29udGV4dCB9IGZyb20gJy4uL3dpZGdldC1jaGFuZ2UtZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgV2lkZ2V0c0Rhc2hib2FyZEV2ZW50U2VydmljZSB9IGZyb20gJy4uL3dpZGdldHMtZGFzaGJvYXJkLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgV2lkZ2V0VGltZUNvbnRleHRIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQtdGltZS1jb250ZXh0LWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdpZGdldFRpbWVDb250ZXh0UXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQtdGltZS1jb250ZXh0LXF1ZXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgSW5wdXREYXRlQ29udGV4dFF1ZXJ5UGFyYW1zLFxuICBXaWRnZXREaXNwbGF5U2V0dGluZ3MsXG4gIFdpZGdldFRpbWVDb250ZXh0Q2hhbmdlLFxuICBXaWRnZXRUaW1lQ29udGV4dFN0YXRlXG59IGZyb20gJy4vd2lkZ2V0LXRpbWUtY29udGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBJbnRlcnZhbCwgSU5URVJWQUxfVElUTEVTIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktd2lkZ2V0LXRpbWUtY29udGV4dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtdGltZS1jb250ZXh0LmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2QtZmxleCBhLWktY2VudGVyIGdhcC00JyB9XG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldFRpbWVDb250ZXh0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICByZWFkb25seSBJTlRFUlZBTF9USVRMRVMgPSBJTlRFUlZBTF9USVRMRVM7XG4gIHJlYWRvbmx5IERBVEVfRk9STUFUID0gJ3Nob3J0JztcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgY29tcG9uZW50IGNhbiBkZWNvdXBsZSBvciBub3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBjYW5EZWNvdXBsZSA9IHRydWU7XG5cbiAgQElucHV0KCkgZGlzcGxheVNldHRpbmdzOiBXaWRnZXREaXNwbGF5U2V0dGluZ3M7XG5cbiAgQElucHV0KCkgaGlkZGVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGVhY2ggY2hhbmdlIGFzIGFuIGFycmF5IG9mIGRhdGVzIFtmcm9tLCB0b10uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgZGF0ZUNvbnRleHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFdpZGdldFRpbWVDb250ZXh0Q2hhbmdlPigpO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQFZpZXdDaGlsZChEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudCkgYWN0aW9uOiBEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChCc0Ryb3Bkb3duRGlyZWN0aXZlKSBkcm9wZG93bjogQnNEcm9wZG93bkRpcmVjdGl2ZTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgdGltZSBjb250ZXh0IGlzIGJvdW5kIHRvIHRoZSBnbG9iYWwgc2NvcGUuXG4gICAqL1xuICBpc0NvdXBsZWQgPSB0cnVlO1xuICBkZWNvdXBsZVRpbWVDb250ZXh0TGFiZWwgPSBnZXR0ZXh0KCdEZWNvdXBsZSB0aW1lIGNvbnRleHQnKTtcbiAgY291cGxlVGltZUNvbnRleHRMYWJlbCA9IGdldHRleHQoJ0NvdXBsZSB0aW1lIGNvbnRleHQnKTtcbiAgZm9ybTogUmV0dXJuVHlwZTxXaWRnZXRUaW1lQ29udGV4dENvbXBvbmVudFsnY3JlYXRlRm9ybSddPjtcbiAgYWN0aW9uQmFySW5Hcm91cFByaW9yaXR5OiBudW1iZXI7XG4gIGRpc2FibGVkQWdncmVnYXRpb25zOiBQYXJ0aWFsPFJlY29yZDxhZ2dyZWdhdGlvblR5cGUsIGJvb2xlYW4+PiA9IHt9O1xuICByZWFkb25seSBERUZBVUxUX0lOVEVSVkFMOiBJbnRlcnZhbFsnaWQnXSA9ICdkYXlzJztcbiAgcmVhZG9ubHkgQUNUSU9OX0JBUl9QUklPUklUWSA9IDc7XG4gIHJlYWRvbmx5IEFDVElPTl9CQVJfR1JPVVBfSUQgPSAndGltZWNvbnRleHQnO1xuICByZWFkb25seSBSRUFMVElNRV9JTlRFUlZBTCA9IDEwMDA7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG5hdmlnYXRpb25JblByb2dyZXNzOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWx0aW1lU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIEBpZ25vcmUgb25seSBESS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgd2lkZ2V0RXZlbnRTZXJ2aWNlOiBXaWRnZXRzRGFzaGJvYXJkRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGFzaGJvYXJkQ2hpbGQ6IERhc2hib2FyZENoaWxkQ29tcG9uZW50LFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBXaWRnZXRUaW1lQ29udGV4dFF1ZXJ5U2VydmljZSxcbiAgICBwcml2YXRlIGhlbHBlclNlcnZpY2U6IFdpZGdldFRpbWVDb250ZXh0SGVscGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYWN0aW9uQmFyU2VydmljZTogQWN0aW9uQmFyU2VydmljZSxcbiAgICBwcml2YXRlIGFnZ3JlZ2F0aW9uU2VydmljZTogQWdncmVnYXRpb25TZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogQGlnbm9yZSBTdWJzY3JpYmluZyB0byB0aGUgZ2xvYmFsIGNvbnRleHQuXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvbkJhckluR3JvdXBQcmlvcml0eSA9IHRoaXMuaGVscGVyU2VydmljZS5nZXRBY3Rpb25CYXJQcmlvcml0eSh0aGlzLmRpc3BsYXlTZXR0aW5ncyk7XG4gICAgY29uc3QgaW5pdGlhbENvbnRleHQ6IFdpZGdldFRpbWVDb250ZXh0U3RhdGUgPVxuICAgICAgdGhpcy5nZXRJbml0aWFsQ29udGV4dCgpIHx8IHRoaXMuZ2V0RGVmYXVsdENvbnRleHQoKTtcbiAgICBpbml0aWFsQ29udGV4dC5hZ2dyZWdhdGlvbiA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRpb24oXG4gICAgICBpbml0aWFsQ29udGV4dC5kYXRlLFxuICAgICAgaW5pdGlhbENvbnRleHQuYWdncmVnYXRpb25cbiAgICApO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuY3JlYXRlRm9ybShpbml0aWFsQ29udGV4dCk7XG5cbiAgICB0aGlzLmRhdGVDb250ZXh0Q2hhbmdlLmVtaXQoe1xuICAgICAgZGF0ZTogaW5pdGlhbENvbnRleHQuZGF0ZSxcbiAgICAgIHJlYWx0aW1lOiBpbml0aWFsQ29udGV4dC5yZWFsdGltZSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiBpbml0aWFsQ29udGV4dC5hZ2dyZWdhdGlvblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmlzQ291cGxlZCkge1xuICAgICAgdGhpcy5xdWVyeVNlcnZpY2Uuc2V0RGF0ZUNvbnRleHRRdWVyeVBhcmFtcyhpbml0aWFsQ29udGV4dCk7XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaWJlVG9HbG9iYWxDb250ZXh0KCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1F1ZXJ5UGFyYW1zQ2hhbmdlKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1JvdXRlckV2ZW50cygpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9JbnRlcnZhbENoYW5nZSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9SZWFsdGltZUNoYW5nZSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9BZ2dyZWdhdGlvbkNoYW5nZSgpO1xuXG4gICAgaWYgKGluaXRpYWxDb250ZXh0LnJlYWx0aW1lKSB7XG4gICAgICB0aGlzLm9uUmVhbHRpbWVWYWx1ZUNoYW5nZShpbml0aWFsQ29udGV4dC5yZWFsdGltZSk7XG4gICAgICB0aGlzLnN0YXJ0UmVhbHRpbWUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZSBBZGRpbmcgY3VzdG9tIGFjdGlvbnMuXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FuRGVjb3VwbGUpIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkQ2hpbGQuYWRkQWN0aW9ucyhbdGhpcy5hY3Rpb25dKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgY291cGxpbmcgb24gb3Igb2ZmLlxuICAgKi9cbiAgdG9nZ2xlRGVjb3VwbGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ291cGxlZCA9ICF0aGlzLmlzQ291cGxlZDtcbiAgICBjb25zdCBsYXN0RXZlbnRWYWx1ZSA9IHRoaXMud2lkZ2V0RXZlbnRTZXJ2aWNlLmdldExhc3RWYWx1ZSgnVElNRV9DT05URVhUJyk7XG4gICAgY29uc3QgeyByZWFsdGltZSwgYWdncmVnYXRpb24sIGludGVydmFsIH0gPSBsYXN0RXZlbnRWYWx1ZTtcbiAgICBsZXQgZGF0ZTogRGF0ZVRpbWVDb250ZXh0O1xuICAgIGlmIChpbnRlcnZhbCkge1xuICAgICAgZGF0ZSA9IHRoaXMuaGVscGVyU2VydmljZS5nZXREYXRlVGltZUNvbnRleHRCeUludGVydmFsKGludGVydmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZSA9IGxhc3RFdmVudFZhbHVlLmRhdGVUaW1lQ29udGV4dDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtVmFsdWVzKHsgZGF0ZSwgaW50ZXJ2YWwsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbiB9KTtcblxuICAgIGlmICh0aGlzLmlzQ291cGxlZCkge1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0dsb2JhbENvbnRleHQoKTtcbiAgICAgIHRoaXMuZGF0ZUNvbnRleHRDaGFuZ2UuZW1pdCh7IGRhdGUsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbiB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUZyb21HbG9iYWxDb250ZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZm9ybSB2YWx1ZSB0byBnbG9iYWwgb3IgbG9jYWwgZGF0ZSBjb250ZXh0LlxuICAgKi9cbiAgYXBwbHlEYXRldGltZUNvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGUoe1xuICAgICAgZGF0ZTogW1xuICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUpLFxuICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlKVxuICAgICAgXSxcbiAgICAgIGludGVydmFsOiBudWxsLFxuICAgICAgcmVhbHRpbWU6IHRoaXMuZm9ybS52YWx1ZS5yZWFsdGltZSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLmZvcm0udmFsdWUuYWdncmVnYXRpb25cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgZm9ybSB0byBpbml0aWFsIHZhbHVlIGFuZCB1cGRhdGUgY29udGV4dC5cbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlYWx0aW1lKCk7XG4gICAgdGhpcy51cGRhdGUodGhpcy5nZXREZWZhdWx0Q29udGV4dCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlIHVuc3Vic2NyaWJpbmcuXG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUdsb2JhbENvbnRleHQoKTtcbiAgICB0aGlzLmNsZWFyUXVlcnlQYXJhbXNJZk5lZWRlZCgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9JbnRlcnZhbENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGludGVydmFsID0+IHtcbiAgICAgICAgbGV0IGRhdGU6IERhdGVUaW1lQ29udGV4dDtcbiAgICAgICAgaWYgKGludGVydmFsID09PSAnY3VzdG9tJykge1xuICAgICAgICAgIGRhdGUgPSBbXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0uY29udHJvbHMuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUudmFsdWUpLFxuICAgICAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZS52YWx1ZSlcbiAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGUgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgdGhpcy5kcm9wZG93bi5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZSh7XG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBpbnRlcnZhbCxcbiAgICAgICAgICByZWFsdGltZTogdGhpcy5mb3JtLnZhbHVlLnJlYWx0aW1lLFxuICAgICAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLmZvcm0udmFsdWUuYWdncmVnYXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9SZWFsdGltZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMucmVhbHRpbWUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUocmVhbHRpbWUgPT4ge1xuICAgICAgdGhpcy5vblJlYWx0aW1lVmFsdWVDaGFuZ2UocmVhbHRpbWUpO1xuXG4gICAgICBpZiAocmVhbHRpbWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFJlYWx0aW1lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0b3BSZWFsdGltZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0FnZ3JlZ2F0aW9uQ2hhbmdlKCkge1xuICAgIHRoaXMuZm9ybS5jb250cm9scy5hZ2dyZWdhdGlvbi52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoYWdncmVnYXRpb24gPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZSh7XG4gICAgICAgICAgZGF0ZTogW1xuICAgICAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlKSxcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGUpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBpbnRlcnZhbDogdGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLFxuICAgICAgICAgIHJlYWx0aW1lOiB0aGlzLmZvcm0udmFsdWUucmVhbHRpbWUsXG4gICAgICAgICAgYWdncmVnYXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybShjb250ZXh0OiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGU6IGNvbnRleHQuZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlOiBjb250ZXh0LmRhdGVbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgIGN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlOiBjb250ZXh0LmRhdGVbMF0udG9JU09TdHJpbmcoKSxcbiAgICAgIGN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZTogY29udGV4dC5kYXRlWzFdLnRvSVNPU3RyaW5nKCksXG4gICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogY29udGV4dC5pbnRlcnZhbCB8fCAnY3VzdG9tJyxcbiAgICAgIHJlYWx0aW1lOiBjb250ZXh0LnJlYWx0aW1lLFxuICAgICAgYWdncmVnYXRpb246IGNvbnRleHQuYWdncmVnYXRpb25cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyBhIG5ldyBXaWRnZXRDaGFuZ2VFdmVudCBlaXRoZXIgb24gdGhlIGxvY2FsIGNoYW5nZSBlbWl0dGVyIG9yIG9uIHRoZSBnbG9iYWwgb25lLlxuICAgKiBAcGFyYW0gd2lkZ2V0VGltZUNvbnRleHRTdGF0ZSBOZXcgd2lkZ2V0IHRpbWUgY29udGV4dCB2YWx1ZS4qL1xuICBwcml2YXRlIHVwZGF0ZSh7IGRhdGUsIGludGVydmFsLCByZWFsdGltZSwgYWdncmVnYXRpb24gfTogV2lkZ2V0VGltZUNvbnRleHRTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbGlkQWdncmVnYXRpb24gPSB0aGlzLmNhbGN1bGF0ZUFnZ3JlZ2F0aW9uKGRhdGUsIGFnZ3JlZ2F0aW9uKTtcbiAgICBpZiAodGhpcy5pc0NvdXBsZWQpIHtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YTogV2lkZ2V0VGltZUNvbnRleHQgPVxuICAgICAgICBpbnRlcnZhbCAmJiBpbnRlcnZhbCAhPT0gJ2N1c3RvbSdcbiAgICAgICAgICA/IHsgaW50ZXJ2YWwsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbjogdmFsaWRBZ2dyZWdhdGlvbiB9XG4gICAgICAgICAgOiB7IGRhdGVUaW1lQ29udGV4dDogZGF0ZSwgcmVhbHRpbWUsIGFnZ3JlZ2F0aW9uOiB2YWxpZEFnZ3JlZ2F0aW9uIH07XG4gICAgICB0aGlzLndpZGdldEV2ZW50U2VydmljZS5lbWl0KHsgdHlwZTogJ1RJTUVfQ09OVEVYVCcsIGRhdGE6IGV2ZW50RGF0YSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWVzKHsgZGF0ZSwgaW50ZXJ2YWwsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbjogdmFsaWRBZ2dyZWdhdGlvbiB9KTtcbiAgICAgIHRoaXMuZGF0ZUNvbnRleHRDaGFuZ2UuZW1pdCh7IGRhdGUsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbjogdmFsaWRBZ2dyZWdhdGlvbiB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvR2xvYmFsQ29udGV4dCgpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudCQgPSB0aGlzLndpZGdldEV2ZW50U2VydmljZS5nZXRPYnNlcnZhYmxlPFRpbWVDb250ZXh0RXZlbnQ+KCdUSU1FX0NPTlRFWFQnKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IGV2ZW50JC5zdWJzY3JpYmUoKGNvbnRleHQ6IFdpZGdldFRpbWVDb250ZXh0KSA9PiB7XG4gICAgICBsZXQgZGF0ZTogRGF0ZVRpbWVDb250ZXh0O1xuICAgICAgY29uc3QgeyByZWFsdGltZSwgaW50ZXJ2YWwsIGFnZ3JlZ2F0aW9uIH0gPSBjb250ZXh0O1xuICAgICAgaWYgKGludGVydmFsKSB7XG4gICAgICAgIGRhdGUgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChjb250ZXh0LmludGVydmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUgPSBjb250ZXh0LmRhdGVUaW1lQ29udGV4dDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kYXRlQ29udGV4dENoYW5nZS5lbWl0KHtcbiAgICAgICAgZGF0ZSxcbiAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlcyh7IGRhdGUsIGludGVydmFsLCByZWFsdGltZSwgYWdncmVnYXRpb24gfSk7XG4gICAgICB0aGlzLnF1ZXJ5U2VydmljZS5zZXREYXRlQ29udGV4dFF1ZXJ5UGFyYW1zKHsgaW50ZXJ2YWwsIGRhdGUsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbiB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybVZhbHVlcyh7XG4gICAgZGF0ZSxcbiAgICBpbnRlcnZhbCxcbiAgICByZWFsdGltZSxcbiAgICBhZ2dyZWdhdGlvblxuICB9OiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIHRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlOiBkYXRlWzBdLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZTogZGF0ZVsxXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZTogZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRUb0RhdGU6IGRhdGVbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgIGN1cnJlbnREYXRlQ29udGV4dEludGVydmFsOiBpbnRlcnZhbCB8fCAnY3VzdG9tJyxcbiAgICAgICAgYWdncmVnYXRpb246IGFnZ3JlZ2F0aW9uIHx8IG51bGxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUZyb21HbG9iYWxDb250ZXh0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxDb250ZXh0KCk6IFdpZGdldFRpbWVDb250ZXh0U3RhdGUgfCBudWxsIHtcbiAgICBjb25zdCBkYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMgPSB0aGlzLnF1ZXJ5U2VydmljZS5kYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMoKTtcbiAgICBpZiAoZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMsXG4gICAgICAgIHJlYWx0aW1lOiBkYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMucmVhbHRpbWUgPz8gZmFsc2UsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiBkYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMucmVhbHRpbWVcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IGRhdGVUaW1lQ29udGV4dEZyb21RdWVyeVBhcmFtcy5hZ2dyZWdhdGlvbiB8fCBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBnZXQgdmFsdWUgZnJvbSBsYXN0IHZhbHVlIG9mIGV2ZW50cyBzZXJ2aWNlXG4gICAgY29uc3QgbGFzdEV2ZW50VmFsdWUgPSB0aGlzLndpZGdldEV2ZW50U2VydmljZS5nZXRMYXN0VmFsdWUoJ1RJTUVfQ09OVEVYVCcpO1xuICAgIGNvbnN0IHJlYWx0aW1lID0gbGFzdEV2ZW50VmFsdWU/LnJlYWx0aW1lID8/IGZhbHNlO1xuICAgIGlmIChsYXN0RXZlbnRWYWx1ZSAmJiBsYXN0RXZlbnRWYWx1ZS5kYXRlVGltZUNvbnRleHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IGxhc3RFdmVudFZhbHVlLmRhdGVUaW1lQ29udGV4dCxcbiAgICAgICAgaW50ZXJ2YWw6ICdjdXN0b20nLFxuICAgICAgICByZWFsdGltZSxcbiAgICAgICAgYWdncmVnYXRpb246IHJlYWx0aW1lID8gbnVsbCA6IGxhc3RFdmVudFZhbHVlLmFnZ3JlZ2F0aW9uXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobGFzdEV2ZW50VmFsdWUgJiYgbGFzdEV2ZW50VmFsdWUuaW50ZXJ2YWwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHRoaXMuaGVscGVyU2VydmljZS5nZXREYXRlVGltZUNvbnRleHRCeUludGVydmFsKGxhc3RFdmVudFZhbHVlLmludGVydmFsKSxcbiAgICAgICAgaW50ZXJ2YWw6IGxhc3RFdmVudFZhbHVlLmludGVydmFsLFxuICAgICAgICByZWFsdGltZSxcbiAgICAgICAgYWdncmVnYXRpb246IHJlYWx0aW1lID8gbnVsbCA6IGxhc3RFdmVudFZhbHVlLmFnZ3JlZ2F0aW9uXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1F1ZXJ5UGFyYW1zQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZXJ2aWNlXG4gICAgICAucXVlcnlQYXJhbXNDaGFuZ2UkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICh7XG4gICAgICAgICAgZGF0ZUNvbnRleHRGcm9tLFxuICAgICAgICAgIGRhdGVDb250ZXh0VG8sXG4gICAgICAgICAgZGF0ZUNvbnRleHRJbnRlcnZhbCxcbiAgICAgICAgICBkYXRlQ29udGV4dFJlYWx0aW1lLFxuICAgICAgICAgIGRhdGVDb250ZXh0QWdncmVnYXRpb25cbiAgICAgICAgfTogSW5wdXREYXRlQ29udGV4dFF1ZXJ5UGFyYW1zKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVhbHRpbWUgPSBkYXRlQ29udGV4dFJlYWx0aW1lID8/IHRoaXMuZm9ybS52YWx1ZS5yZWFsdGltZTtcbiAgICAgICAgICBpZiAoZGF0ZUNvbnRleHRJbnRlcnZhbCkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXRFdmVudFNlcnZpY2UuZW1pdCh7XG4gICAgICAgICAgICAgIHR5cGU6ICdUSU1FX0NPTlRFWFQnLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgaW50ZXJ2YWw6IGRhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICAgICAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb246IGRhdGVDb250ZXh0QWdncmVnYXRpb25cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVDb250ZXh0OiBEYXRlVGltZUNvbnRleHQgPSBbXG4gICAgICAgICAgICAgIG5ldyBEYXRlKGRhdGVDb250ZXh0RnJvbSksXG4gICAgICAgICAgICAgIG5ldyBEYXRlKGRhdGVDb250ZXh0VG8pXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy53aWRnZXRFdmVudFNlcnZpY2UuZW1pdCh7XG4gICAgICAgICAgICAgIHR5cGU6ICdUSU1FX0NPTlRFWFQnLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZGF0ZVRpbWVDb250ZXh0OiBkYXRlQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZWFsdGltZSxcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbjogZGF0ZUNvbnRleHRBZ2dyZWdhdGlvblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyUXVlcnlQYXJhbXNJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICAvLyBJZiBuYXZpZ2F0aW9uIGlzIGluIHByb2dyZXNzLCByb3V0ZXIgd2lsbCB0YWtlIGNhcmUgb2YgY2xlYXJpbmcgcXVlcnkgcGFyYW1zLiBUaGlzIHdheSB3ZSBhdm9pZCB1bm5lY2Vzc2FyeSBtYW5pcHVsYXRpb24gb2YgYnJvd3NlciBoaXN0b3J5XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gY2hlY2sgaWYgYW55IG90aGVyIFdpZGdldFRpbWVDb250ZXh0Q29tcG9uZW50IGFjdGlvbiBpbiBhY3Rpb24gYmFyIGV4aXN0c1xuICAgIGNvbnN0IGFueVdpZGdldFRpbWVDb250ZXh0QWN0aW9uTGVmdCA9IEFycmF5LmZyb20odGhpcy5hY3Rpb25CYXJTZXJ2aWNlLnN0YXRlKS5zb21lKFxuICAgICAgYWN0aW9uID0+IGFjdGlvbi5ncm91cElkID09PSB0aGlzLkFDVElPTl9CQVJfR1JPVVBfSURcbiAgICApO1xuICAgIGlmICghYW55V2lkZ2V0VGltZUNvbnRleHRBY3Rpb25MZWZ0KSB7XG4gICAgICB0aGlzLnF1ZXJ5U2VydmljZS5jbGVhclF1ZXJ5UGFyYW1zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1JvdXRlckV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgZSA9PlxuICAgICAgICAgICAgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCB8fCBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCB8fCBlIGluc3RhbmNlb2YgQWN0aXZhdGlvbkVuZFxuICAgICAgICApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MgPSBlIGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRDb250ZXh0KCk6IFdpZGdldFRpbWVDb250ZXh0U3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRlOiB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbCh0aGlzLkRFRkFVTFRfSU5URVJWQUwpLFxuICAgICAgaW50ZXJ2YWw6IHRoaXMuREVGQVVMVF9JTlRFUlZBTCxcbiAgICAgIHJlYWx0aW1lOiBmYWxzZSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblR5cGUuTUlOVVRFTFlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJlYWx0aW1lKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZS5kaXNhYmxlKCk7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZS5kaXNhYmxlKCk7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uLmRpc2FibGUoKTtcblxuICAgIHRoaXMucmVhbHRpbWVTdWJzY3JpcHRpb24gPSBpbnRlcnZhbCh0aGlzLlJFQUxUSU1FX0lOVEVSVkFMKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0RhdGVGcm9tID0gbmV3IERhdGUoXG4gICAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlKS52YWx1ZU9mKCkgKyB0aGlzLlJFQUxUSU1FX0lOVEVSVkFMXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld0RhdGVUbyA9IG5ldyBEYXRlKFxuICAgICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGUpLnZhbHVlT2YoKSArIHRoaXMuUkVBTFRJTUVfSU5URVJWQUxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWVzKHtcbiAgICAgICAgICBkYXRlOiBbbmV3RGF0ZUZyb20sIG5ld0RhdGVUb10sXG4gICAgICAgICAgaW50ZXJ2YWw6IHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbCxcbiAgICAgICAgICByZWFsdGltZTogdHJ1ZSxcbiAgICAgICAgICBhZ2dyZWdhdGlvbjogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUmVhbHRpbWUoKTogdm9pZCB7XG4gICAgdGhpcy5yZWFsdGltZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZvcm0/LmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlLmVuYWJsZSgpO1xuICAgIHRoaXMuZm9ybT8uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlLmVuYWJsZSgpO1xuICAgIHRoaXMuZm9ybT8uY29udHJvbHMuYWdncmVnYXRpb24uZW5hYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIG9uUmVhbHRpbWVWYWx1ZUNoYW5nZShyZWFsdGltZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGxldCBkYXRlVGltZUNvbnRleHQ6IERhdGVUaW1lQ29udGV4dDtcbiAgICBpZiAodGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsICE9PSAnY3VzdG9tJykge1xuICAgICAgZGF0ZVRpbWVDb250ZXh0ID0gdGhpcy5oZWxwZXJTZXJ2aWNlLmdldERhdGVUaW1lQ29udGV4dEJ5SW50ZXJ2YWwoXG4gICAgICAgIHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3VycmVudFRpbWVTcGFuSW5NcyA9XG4gICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGUpLnZhbHVlT2YoKSAtXG4gICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSkudmFsdWVPZigpO1xuICAgICAgY29uc3QgZGF0ZVRvID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGRhdGVGcm9tID0gbmV3IERhdGUoZGF0ZVRvLnZhbHVlT2YoKSAtIGN1cnJlbnRUaW1lU3BhbkluTXMpO1xuICAgICAgZGF0ZVRpbWVDb250ZXh0ID0gW2RhdGVGcm9tLCBkYXRlVG9dO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlKHtcbiAgICAgIGRhdGU6IGRhdGVUaW1lQ29udGV4dCxcbiAgICAgIGludGVydmFsOiB0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICByZWFsdGltZSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiBudWxsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZUFnZ3JlZ2F0aW9uKFxuICAgIFtkYXRlRnJvbSwgZGF0ZVRvXTogRGF0ZVRpbWVDb250ZXh0LFxuICAgIGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblR5cGVcbiAgKTogYWdncmVnYXRpb25UeXBlIHtcbiAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25zID0gdGhpcy5hZ2dyZWdhdGlvblNlcnZpY2UuZ2V0RGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoXG4gICAgICBkYXRlRnJvbSxcbiAgICAgIGRhdGVUb1xuICAgICk7XG4gICAgY29uc3QgdGltZVJhbmdlSW5NcyA9IGRhdGVUby52YWx1ZU9mKCkgLSBkYXRlRnJvbS52YWx1ZU9mKCk7XG4gICAgY29uc3QgaXNQcm9wZXJBZ2dyZWdhdGlvbiA9ICF0aGlzLmRpc2FibGVkQWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uXSB8fCBhZ2dyZWdhdGlvbiA9PT0gbnVsbDtcblxuICAgIGlmIChpc1Byb3BlckFnZ3JlZ2F0aW9uKSB7XG4gICAgICByZXR1cm4gYWdncmVnYXRpb247XG4gICAgfVxuICAgIGlmICh0aW1lUmFuZ2VJbk1zID49IEFHR1JFR0FUSU9OX0xJTUlUUy5EQUlMWV9MSU1JVCkge1xuICAgICAgcmV0dXJuIGFnZ3JlZ2F0aW9uVHlwZS5EQUlMWTtcbiAgICB9IGVsc2UgaWYgKHRpbWVSYW5nZUluTXMgPj0gQUdHUkVHQVRJT05fTElNSVRTLkhPVVJMWV9MSU1JVCkge1xuICAgICAgcmV0dXJuIGFnZ3JlZ2F0aW9uVHlwZS5IT1VSTFk7XG4gICAgfSBlbHNlIGlmICh0aW1lUmFuZ2VJbk1zID49IEFHR1JFR0FUSU9OX0xJTUlUUy5NSU5VVEVMWV9MSU1JVCkge1xuICAgICAgcmV0dXJuIGFnZ3JlZ2F0aW9uVHlwZS5NSU5VVEVMWTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAqbmdJZj1cImlzQ291cGxlZCAmJiAhaGlkZGVuXCJcbiAgW3ByaW9yaXR5XT1cIkFDVElPTl9CQVJfUFJJT1JJVFlcIlxuICBbZ3JvdXBJZF09XCJBQ1RJT05fQkFSX0dST1VQX0lEXCJcbiAgW2luR3JvdXBQcmlvcml0eV09XCJhY3Rpb25CYXJJbkdyb3VwUHJpb3JpdHlcIlxuICBbcGxhY2VtZW50XT1cIidsZWZ0J1wiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXRlVGltZVBpY2tlclwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgIGRhdGU6IFtmb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlLCBmb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZV1cbiAgICB9XCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48bmctY29udGFpbmVyXG4gICpuZ0lmPVwiIWlzQ291cGxlZFwiXG4gIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRhdGVUaW1lUGlja2VyXCJcbiAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICBkYXRlOiBbZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSwgZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGVdXG4gIH1cIlxuPjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGVcbiAgI2RhdGVUaW1lUGlja2VyXG4gIGxldC1kYXRlPVwiZGF0ZVwiXG4+XG4gIDxmb3JtXG4gICAgY2xhc3M9XCJkLWZsZXggZ2FwLTE2IHAtbC14cy0xNiBwLXIteHMtMTYgbS10LXhzLTggbS1iLXhzLThcIlxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheVNldHRpbmdzLmdsb2JhbFRpbWVDb250ZXh0XCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkcm9wZG93biBmbGV4LWdyb3dcIlxuICAgICAgICAgICNkcm9wZG93bj1cImJzLWRyb3Bkb3duXCJcbiAgICAgICAgICBkcm9wZG93blxuICAgICAgICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgICAgICAgICAqbmdJZj1cImRhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi10b2dnbGUgZm9ybS1jb250cm9sIGwtaC10aWdodCBkLWZsZXggYS1pLWNlbnRlclwiXG4gICAgICAgICAgICBhdHRyLmFyaWEtbGFiZWw9XCJ7eyBkYXRlWzBdIHwgYzh5RGF0ZTogREFURV9GT1JNQVQgfX0g4oCUIHt7XG4gICAgICAgICAgICAgIGRhdGVbMV0gfCBjOHlEYXRlOiBEQVRFX0ZPUk1BVFxuICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgdG9vbHRpcD1cInt7IGRhdGVbMF0gfCBjOHlEYXRlOiBEQVRFX0ZPUk1BVCB9fSDigJQge3sgZGF0ZVsxXSB8IGM4eURhdGU6IERBVEVfRk9STUFUIH19XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJ3aWRnZXQtdGltZS1jb250ZXh0LS1kYXRlLXBpY2tlci1kcm9wZG93bi1idXR0b25cIlxuICAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICBkcm9wZG93blRvZ2dsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgICAgICAgICBjOHlJY29uPVwic2NoZWR1bGUxXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1jb2wgdGV4dC1sZWZ0IGZpdC13XCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LTEyXCJcbiAgICAgICAgICAgICAgICBkYXRhLWN5PVwid2lkZ2V0LXRpbWUtY29udGV4dC0tc2VsZWN0ZWQtaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgSU5URVJWQUxfVElUTEVTW2Zvcm0uY29udHJvbHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwudmFsdWVdIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtMTAgdGV4dC1tdXRlZCB0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgICBkYXRhLWN5PVwid2lkZ2V0LXRpbWUtY29udGV4dC0tc2VsZWN0ZWQtdGltZS1yYW5nZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBkYXRlWzBdIHwgYzh5RGF0ZTogREFURV9GT1JNQVQgfX0g4oCUIHt7IGRhdGVbMV0gfCBjOHlEYXRlOiBEQVRFX0ZPUk1BVCB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZXQgbS1yLTE2IG0tbC00XCI+PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPHVsXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS0tZGF0ZS1yYW5nZVwiXG4gICAgICAgICAgICAqZHJvcGRvd25NZW51XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGM4eS1pbnRlcnZhbC1waWNrZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWxcIlxuICAgICAgICAgICAgPjwvYzh5LWludGVydmFsLXBpY2tlcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm0uY29udHJvbHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwudmFsdWUgPT09ICdjdXN0b20nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWwtMTYgcC1yLTE2XCI+XG4gICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlLmVycm9ycyA/ICdoYXMtZXJyb3InIDogJydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0Zyb21gZGF0ZWAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZm9yPVwidGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGVcIlxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgRnJvbWBkYXRlYFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxjOHktZGF0ZS10aW1lLXBpY2tlclxuICAgICAgICAgICAgICAgICAgICBpZD1cInRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW21heERhdGVdPVwiZm9ybS52YWx1ZS50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Zyb21gZGF0ZWAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlLmVycm9ycyA/ICdoYXMtZXJyb3InIDogJydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L2M4eS1kYXRlLXRpbWUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlcyBbc2hvd109XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlLmVycm9yc1wiPlxuICAgICAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZGF0ZUFmdGVyUmFuZ2VNYXhcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidUaGlzIGRhdGUgaXMgYWZ0ZXIgdGhlIGxhdGVzdCBhbGxvd2VkIGRhdGUuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L2M4eS1tZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW52YWxpZERhdGVUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVGhpcyBkYXRlIGlzIGludmFsaWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L2M4eS1tZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cFxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGUuZXJyb3JzID8gJ2hhcy1lcnJvcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInVG9gZGF0ZWAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZm9yPVwidGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFRvYGRhdGVgXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGM4eS1kYXRlLXRpbWUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwidGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW21pbkRhdGVdPVwiZm9ybS52YWx1ZS50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVG9gZGF0ZWAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGUuZXJyb3JzID8gJ2hhcy1lcnJvcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9jOHktZGF0ZS10aW1lLXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXMgW3Nob3ddPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGUuZXJyb3JzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJkYXRlQmVmb3JlUmFuZ2VNaW5cIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidUaGlzIGRhdGUgaXMgYmVmb3JlIHRoZSBlYXJsaWVzdCBhbGxvd2VkIGRhdGUuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L2M4eS1tZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW52YWxpZERhdGVUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVGhpcyBkYXRlIGlzIGludmFsaWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L2M4eS1tZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMTYgZC1mbGV4IGdhcC04IHNlcGFyYXRvci10b3BcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1Jlc2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldCgpOyBkcm9wZG93bi5pc09wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS52YWx1ZS5yZWFsdGltZVwiXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBSZXNldFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBcHBseScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlEYXRldGltZUNvbnRleHQoKTsgZHJvcGRvd24uaXNPcGVuID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAoZm9ybS5wcmlzdGluZSAmJiBmb3JtLnVudG91Y2hlZCkgfHwgZm9ybS5pbnZhbGlkIHx8IGZvcm0udmFsdWUucmVhbHRpbWVcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBBcHBseVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy1hdXRvXCI+XG4gICAgICA8Yzh5LXJlYWx0aW1lLWNvbnRyb2xcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcC0wIGZsZXgtbm8tZ3JvdyB3LWF1dG9cIlxuICAgICAgICAqbmdJZj1cImRpc3BsYXlTZXR0aW5ncy5nbG9iYWxSZWFsdGltZUNvbnRleHRcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWFsdGltZVwiXG4gICAgICA+PC9jOHktcmVhbHRpbWUtY29udHJvbD5cblxuICAgICAgPGM4eS1hZ2dyZWdhdGlvbi1waWNrZXJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5U2V0dGluZ3MuZ2xvYmFsQWdncmVnYXRpb25Db250ZXh0XCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWdncmVnYXRpb25cIlxuICAgICAgICBbZGlzYWJsZWRBZ2dyZWdhdGlvbnNdPVwiZGlzYWJsZWRBZ2dyZWdhdGlvbnNcIlxuICAgICAgPjwvYzh5LWFnZ3JlZ2F0aW9uLXBpY2tlcj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGM4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuICA8YnV0dG9uXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZURlY291cGxpbmcoKVwiXG4gID5cbiAgICA8aSBbYzh5SWNvbl09XCJpc0NvdXBsZWQgPyAnc2NoZWR1bGUxJyA6ICd0b2RheSdcIj48L2k+XG4gICAgPHNwYW4gY2xhc3M9XCJtLWwtNFwiPlxuICAgICAge3sgKGlzQ291cGxlZCA/IGRlY291cGxlVGltZUNvbnRleHRMYWJlbCA6IGNvdXBsZVRpbWVDb250ZXh0TGFiZWwpIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4iXX0=
499
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC93aWdldC10aW1lLWNvbnRleHQvd2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC93aWdldC10aW1lLWNvbnRleHQvd2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSw2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QUFhO3dCQUNiLGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixrQkFBa0I7d0JBQ2xCLE9BQU87d0JBQ1AscUJBQXFCO3dCQUNyQixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsd0JBQXdCO3dCQUN4QiwwQkFBMEI7d0JBQzFCLGdCQUFnQjt3QkFDaEIsUUFBUTt3QkFDUiw2QkFBNkI7d0JBQzdCLHVCQUF1QjtxQkFDeEI7K1hBU0QsV0FBVztzQkFEVixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQU1OLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFLbUMsTUFBTTtzQkFBL0MsU0FBUzt1QkFBQyw2QkFBNkI7Z0JBQ1IsUUFBUTtzQkFBdkMsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIGVmZmVjdCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGlvbkVuZCwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYWdncmVnYXRpb25UeXBlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQnNEcm9wZG93bkRpcmVjdGl2ZSwgQnNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZHJvcGRvd24nO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBY3Rpb25CYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWN0aW9uLWJhcic7XG5pbXBvcnQgeyBBR0dSRUdBVElPTl9MSU1JVFMgfSBmcm9tICcuLi8uLi9hZ2dyZWdhdGlvbi9hZ2dyZWdhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hZ2dyZWdhdGlvbi9hZ2dyZWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vZGFzaGJvYXJkLWNoaWxkLWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQgfSBmcm9tICcuLi9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVUaW1lQ29udGV4dCwgVGltZUNvbnRleHRFdmVudCwgV2lkZ2V0VGltZUNvbnRleHQgfSBmcm9tICcuLi93aWRnZXQtY2hhbmdlLWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IFdpZGdldHNEYXNoYm9hcmRFdmVudFNlcnZpY2UgfSBmcm9tICcuLi93aWRnZXRzLWRhc2hib2FyZC1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFdpZGdldFRpbWVDb250ZXh0SGVscGVyU2VydmljZSB9IGZyb20gJy4vd2lkZ2V0LXRpbWUtY29udGV4dC1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBXaWRnZXRUaW1lQ29udGV4dFF1ZXJ5U2VydmljZSB9IGZyb20gJy4vd2lkZ2V0LXRpbWUtY29udGV4dC1xdWVyeS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIElucHV0RGF0ZUNvbnRleHRRdWVyeVBhcmFtcyxcbiAgV2lkZ2V0RGlzcGxheVNldHRpbmdzLFxuICBXaWRnZXRUaW1lQ29udGV4dFN0YXRlXG59IGZyb20gJy4vd2lkZ2V0LXRpbWUtY29udGV4dC5tb2RlbCc7XG5pbXBvcnQge1xuICBJbnRlcnZhbCxcbiAgSU5URVJWQUxfVElUTEVTLFxuICBJbnRlcnZhbFBpY2tlckNvbXBvbmVudFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5pbXBvcnQgeyBXaWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UgfSBmcm9tICcuL3dpZGdldC10aW1lLWNvbnRleHQtZGF0ZS1yYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aW9uQmFySXRlbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90b29sdGlwJztcbmltcG9ydCB7IEljb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9jb21tb24vaWNvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9ybXMvZm9ybS1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQzh5VHJhbnNsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vaTE4bi9jOHktdHJhbnNsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNZXNzYWdlc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Zvcm1zL21lc3NhZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZXNzYWdlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZm9ybXMvbWVzc2FnZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmVhbHRpbWVDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi9yZWFsdGltZS1jb250cm9sL3JlYWx0aW1lLWNvbnRyb2wuY29tcG9uZW50JztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9hZ2dyZWdhdGlvbi1waWNrZXIvYWdncmVnYXRpb24tcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDOHlUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vaTE4bi9jOHktdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9jb21tb24vZGF0ZS5waXBlJztcbmltcG9ydCB7IERhdGVUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGF0ZS10aW1lLXBpY2tlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS13aWRnZXQtdGltZS1jb250ZXh0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC10aW1lLWNvbnRleHQuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnZC1mbGV4IGEtaS1jZW50ZXIgZ2FwLTQnIH0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEJzRHJvcGRvd25Nb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBJY29uRGlyZWN0aXZlLFxuICAgIEludGVydmFsUGlja2VyQ29tcG9uZW50LFxuICAgIEZvcm1Hcm91cENvbXBvbmVudCxcbiAgICBOZ0NsYXNzLFxuICAgIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBNZXNzYWdlc0NvbXBvbmVudCxcbiAgICBNZXNzYWdlRGlyZWN0aXZlLFxuICAgIFJlYWx0aW1lQ29udHJvbENvbXBvbmVudCxcbiAgICBBZ2dyZWdhdGlvblBpY2tlckNvbXBvbmVudCxcbiAgICBDOHlUcmFuc2xhdGVQaXBlLFxuICAgIERhdGVQaXBlLFxuICAgIERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50LFxuICAgIERhdGVUaW1lUGlja2VyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0VGltZUNvbnRleHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHJlYWRvbmx5IElOVEVSVkFMX1RJVExFUyA9IElOVEVSVkFMX1RJVExFUztcbiAgcmVhZG9ubHkgREFURV9GT1JNQVQgPSAnc2hvcnQnO1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBjb21wb25lbnQgY2FuIGRlY291cGxlIG9yIG5vdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGNhbkRlY291cGxlID0gdHJ1ZTtcblxuICBASW5wdXQoKSBkaXNwbGF5U2V0dGluZ3M6IFdpZGdldERpc3BsYXlTZXR0aW5ncztcblxuICBASW5wdXQoKSBoaWRkZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRW1pdHMgZWFjaCBjaGFuZ2UgYXMgYW4gYXJyYXkgb2YgZGF0ZXMgW2Zyb20sIHRvXS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBkYXRlQ29udGV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQFZpZXdDaGlsZChEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudCkgYWN0aW9uOiBEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChCc0Ryb3Bkb3duRGlyZWN0aXZlKSBkcm9wZG93bjogQnNEcm9wZG93bkRpcmVjdGl2ZTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgdGltZSBjb250ZXh0IGlzIGJvdW5kIHRvIHRoZSBnbG9iYWwgc2NvcGUuXG4gICAqL1xuICBpc0NvdXBsZWQgPSB0cnVlO1xuICBkZWNvdXBsZVRpbWVDb250ZXh0TGFiZWwgPSBnZXR0ZXh0KCdEZWNvdXBsZSB0aW1lIGNvbnRleHQnKTtcbiAgY291cGxlVGltZUNvbnRleHRMYWJlbCA9IGdldHRleHQoJ0NvdXBsZSB0aW1lIGNvbnRleHQnKTtcbiAgZm9ybTogUmV0dXJuVHlwZTxXaWRnZXRUaW1lQ29udGV4dENvbXBvbmVudFsnY3JlYXRlRm9ybSddPjtcbiAgYWN0aW9uQmFySW5Hcm91cFByaW9yaXR5OiBudW1iZXI7XG4gIGRpc2FibGVkQWdncmVnYXRpb25zOiBQYXJ0aWFsPFJlY29yZDxhZ2dyZWdhdGlvblR5cGUsIGJvb2xlYW4+PiA9IHt9O1xuICBzbGlkZXJDaGFuZ2U6IGJvb2xlYW47XG4gIHJlYWRvbmx5IERFRkFVTFRfSU5URVJWQUw6IEludGVydmFsWydpZCddID0gJ2RheXMnO1xuICByZWFkb25seSBBQ1RJT05fQkFSX1BSSU9SSVRZID0gNztcbiAgcmVhZG9ubHkgQUNUSU9OX0JBUl9HUk9VUF9JRCA9ICd0aW1lY29udGV4dCc7XG4gIHJlYWRvbmx5IFJFQUxUSU1FX0lOVEVSVkFMID0gMTAwMDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgbmF2aWdhdGlvbkluUHJvZ3Jlc3M6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhbHRpbWVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogQGlnbm9yZSBvbmx5IERJLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB3aWRnZXRFdmVudFNlcnZpY2U6IFdpZGdldHNEYXNoYm9hcmRFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXNoYm9hcmRDaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFdpZGdldFRpbWVDb250ZXh0UXVlcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaGVscGVyU2VydmljZTogV2lkZ2V0VGltZUNvbnRleHRIZWxwZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3Rpb25CYXJTZXJ2aWNlOiBBY3Rpb25CYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWdncmVnYXRpb25TZXJ2aWNlOiBBZ2dyZWdhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2U6IFdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZVxuICApIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLnRpbWVDb250ZXh0Q2hhbmdlKCk7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBjb25zdCB1cGRhdGVkRm9ybURhdGEgPSB7XG4gICAgICAgICAgZGF0ZTogW25ldyBEYXRlKGRhdGEuZGF0ZUZyb20pLCBuZXcgRGF0ZShkYXRhLmRhdGVUbyldLFxuICAgICAgICAgIGludGVydmFsOiBkYXRhLmludGVydmFsLFxuICAgICAgICAgIHJlYWx0aW1lOiBmYWxzZSxcbiAgICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5mb3JtLnZhbHVlLmFnZ3JlZ2F0aW9uXG4gICAgICAgIH0gYXMgV2lkZ2V0VGltZUNvbnRleHRTdGF0ZTtcbiAgICAgICAgdGhpcy5zbGlkZXJDaGFuZ2UgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGVDb250ZXh0Q2hhbmdlLmVtaXQoeyAuLi51cGRhdGVkRm9ybURhdGEsIHNsaWRlckNoYW5nZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5zdG9wUmVhbHRpbWUoKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWVzKHVwZGF0ZWRGb3JtRGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZSBTdWJzY3JpYmluZyB0byB0aGUgZ2xvYmFsIGNvbnRleHQuXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvbkJhckluR3JvdXBQcmlvcml0eSA9IHRoaXMuaGVscGVyU2VydmljZS5nZXRBY3Rpb25CYXJQcmlvcml0eSh0aGlzLmRpc3BsYXlTZXR0aW5ncyk7XG4gICAgY29uc3QgaW5pdGlhbENvbnRleHQ6IFdpZGdldFRpbWVDb250ZXh0U3RhdGUgPVxuICAgICAgdGhpcy5nZXRJbml0aWFsQ29udGV4dCgpIHx8IHRoaXMuZ2V0RGVmYXVsdENvbnRleHQoKTtcbiAgICBpbml0aWFsQ29udGV4dC5hZ2dyZWdhdGlvbiA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRpb24oXG4gICAgICBpbml0aWFsQ29udGV4dC5kYXRlLFxuICAgICAgaW5pdGlhbENvbnRleHQuYWdncmVnYXRpb25cbiAgICApO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuY3JlYXRlRm9ybShpbml0aWFsQ29udGV4dCk7XG5cbiAgICB0aGlzLmRhdGVDb250ZXh0Q2hhbmdlLmVtaXQoe1xuICAgICAgZGF0ZTogaW5pdGlhbENvbnRleHQuZGF0ZSxcbiAgICAgIHJlYWx0aW1lOiBpbml0aWFsQ29udGV4dC5yZWFsdGltZSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiBpbml0aWFsQ29udGV4dC5hZ2dyZWdhdGlvblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmlzQ291cGxlZCkge1xuICAgICAgdGhpcy5xdWVyeVNlcnZpY2Uuc2V0RGF0ZUNvbnRleHRRdWVyeVBhcmFtcyhpbml0aWFsQ29udGV4dCk7XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaWJlVG9HbG9iYWxDb250ZXh0KCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1F1ZXJ5UGFyYW1zQ2hhbmdlKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1JvdXRlckV2ZW50cygpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9JbnRlcnZhbENoYW5nZSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9SZWFsdGltZUNoYW5nZSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9BZ2dyZWdhdGlvbkNoYW5nZSgpO1xuXG4gICAgaWYgKGluaXRpYWxDb250ZXh0LnJlYWx0aW1lKSB7XG4gICAgICB0aGlzLm9uUmVhbHRpbWVWYWx1ZUNoYW5nZShpbml0aWFsQ29udGV4dC5yZWFsdGltZSk7XG4gICAgICB0aGlzLnN0YXJ0UmVhbHRpbWUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZSBBZGRpbmcgY3VzdG9tIGFjdGlvbnMuXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FuRGVjb3VwbGUpIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkQ2hpbGQuYWRkQWN0aW9ucyhbdGhpcy5hY3Rpb25dKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgY291cGxpbmcgb24gb3Igb2ZmLlxuICAgKi9cbiAgdG9nZ2xlRGVjb3VwbGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ291cGxlZCA9ICF0aGlzLmlzQ291cGxlZDtcbiAgICBjb25zdCBsYXN0RXZlbnRWYWx1ZSA9IHRoaXMud2lkZ2V0RXZlbnRTZXJ2aWNlLmdldExhc3RWYWx1ZSgnVElNRV9DT05URVhUJyk7XG4gICAgY29uc3QgeyByZWFsdGltZSwgYWdncmVnYXRpb24sIGludGVydmFsIH0gPSBsYXN0RXZlbnRWYWx1ZTtcbiAgICBsZXQgZGF0ZTogRGF0ZVRpbWVDb250ZXh0O1xuICAgIGlmIChpbnRlcnZhbCkge1xuICAgICAgZGF0ZSA9IHRoaXMuaGVscGVyU2VydmljZS5nZXREYXRlVGltZUNvbnRleHRCeUludGVydmFsKGludGVydmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZSA9IGxhc3RFdmVudFZhbHVlLmRhdGVUaW1lQ29udGV4dDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtVmFsdWVzKHsgZGF0ZSwgaW50ZXJ2YWwsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbiB9KTtcblxuICAgIGlmICh0aGlzLmlzQ291cGxlZCkge1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0dsb2JhbENvbnRleHQoKTtcbiAgICAgIHRoaXMuZGF0ZUNvbnRleHRDaGFuZ2UuZW1pdCh7IGRhdGUsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbiB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUZyb21HbG9iYWxDb250ZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZm9ybSB2YWx1ZSB0byBnbG9iYWwgb3IgbG9jYWwgZGF0ZSBjb250ZXh0LlxuICAgKi9cbiAgYXBwbHlEYXRldGltZUNvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGUoe1xuICAgICAgZGF0ZTogW1xuICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUpLFxuICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlKVxuICAgICAgXSxcbiAgICAgIGludGVydmFsOiBudWxsLFxuICAgICAgcmVhbHRpbWU6IHRoaXMuZm9ybS52YWx1ZS5yZWFsdGltZSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLmZvcm0udmFsdWUuYWdncmVnYXRpb25cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgZm9ybSB0byBpbml0aWFsIHZhbHVlIGFuZCB1cGRhdGUgY29udGV4dC5cbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlYWx0aW1lKCk7XG4gICAgdGhpcy51cGRhdGUodGhpcy5nZXREZWZhdWx0Q29udGV4dCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlIHVuc3Vic2NyaWJpbmcuXG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUdsb2JhbENvbnRleHQoKTtcbiAgICB0aGlzLmNsZWFyUXVlcnlQYXJhbXNJZk5lZWRlZCgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9JbnRlcnZhbENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGludGVydmFsID0+IHtcbiAgICAgICAgbGV0IGRhdGU6IERhdGVUaW1lQ29udGV4dDtcbiAgICAgICAgaWYgKGludGVydmFsID09PSAnY3VzdG9tJykge1xuICAgICAgICAgIGRhdGUgPSBbXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0uY29udHJvbHMuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUudmFsdWUpLFxuICAgICAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZS52YWx1ZSlcbiAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGUgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgdGhpcy5kcm9wZG93bi5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZSh7XG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBpbnRlcnZhbCxcbiAgICAgICAgICByZWFsdGltZTogdGhpcy5mb3JtLnZhbHVlLnJlYWx0aW1lLFxuICAgICAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLmZvcm0udmFsdWUuYWdncmVnYXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9SZWFsdGltZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMucmVhbHRpbWUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUocmVhbHRpbWUgPT4ge1xuICAgICAgdGhpcy5vblJlYWx0aW1lVmFsdWVDaGFuZ2UocmVhbHRpbWUpO1xuXG4gICAgICBpZiAocmVhbHRpbWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFJlYWx0aW1lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0b3BSZWFsdGltZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0FnZ3JlZ2F0aW9uQ2hhbmdlKCkge1xuICAgIHRoaXMuZm9ybS5jb250cm9scy5hZ2dyZWdhdGlvbi52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoYWdncmVnYXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5zbGlkZXJDaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLnNsaWRlckNoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZSh7XG4gICAgICAgICAgZGF0ZTogW1xuICAgICAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlKSxcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGUpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBpbnRlcnZhbDogdGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLFxuICAgICAgICAgIHJlYWx0aW1lOiB0aGlzLmZvcm0udmFsdWUucmVhbHRpbWUsXG4gICAgICAgICAgYWdncmVnYXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybShjb250ZXh0OiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGU6IGNvbnRleHQuZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlOiBjb250ZXh0LmRhdGVbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgIGN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlOiBjb250ZXh0LmRhdGVbMF0udG9JU09TdHJpbmcoKSxcbiAgICAgIGN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZTogY29udGV4dC5kYXRlWzFdLnRvSVNPU3RyaW5nKCksXG4gICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogY29udGV4dC5pbnRlcnZhbCB8fCAnY3VzdG9tJyxcbiAgICAgIHJlYWx0aW1lOiBjb250ZXh0LnJlYWx0aW1lLFxuICAgICAgYWdncmVnYXRpb246IGNvbnRleHQuYWdncmVnYXRpb25cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyBhIG5ldyBXaWRnZXRDaGFuZ2VFdmVudCBlaXRoZXIgb24gdGhlIGxvY2FsIGNoYW5nZSBlbWl0dGVyIG9yIG9uIHRoZSBnbG9iYWwgb25lLlxuICAgKiBAcGFyYW0gd2lkZ2V0VGltZUNvbnRleHRTdGF0ZSBOZXcgd2lkZ2V0IHRpbWUgY29udGV4dCB2YWx1ZS4qL1xuICBwcml2YXRlIHVwZGF0ZSh7IGRhdGUsIGludGVydmFsLCByZWFsdGltZSwgYWdncmVnYXRpb24gfTogV2lkZ2V0VGltZUNvbnRleHRTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbGlkQWdncmVnYXRpb24gPSB0aGlzLmNhbGN1bGF0ZUFnZ3JlZ2F0aW9uKGRhdGUsIGFnZ3JlZ2F0aW9uKTtcbiAgICBpZiAodGhpcy5pc0NvdXBsZWQpIHtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YTogV2lkZ2V0VGltZUNvbnRleHQgPVxuICAgICAgICBpbnRlcnZhbCAmJiBpbnRlcnZhbCAhPT0gJ2N1c3RvbSdcbiAgICAgICAgICA/IHsgaW50ZXJ2YWwsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbjogdmFsaWRBZ2dyZWdhdGlvbiB9XG4gICAgICAgICAgOiB7IGRhdGVUaW1lQ29udGV4dDogZGF0ZSwgcmVhbHRpbWUsIGFnZ3JlZ2F0aW9uOiB2YWxpZEFnZ3JlZ2F0aW9uIH07XG4gICAgICB0aGlzLndpZGdldEV2ZW50U2VydmljZS5lbWl0KHsgdHlwZTogJ1RJTUVfQ09OVEVYVCcsIGRhdGE6IGV2ZW50RGF0YSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWVzKHsgZGF0ZSwgaW50ZXJ2YWwsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbjogdmFsaWRBZ2dyZWdhdGlvbiB9KTtcbiAgICAgIHRoaXMuZGF0ZUNvbnRleHRDaGFuZ2UuZW1pdCh7IGRhdGUsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbjogdmFsaWRBZ2dyZWdhdGlvbiB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvR2xvYmFsQ29udGV4dCgpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudCQgPSB0aGlzLndpZGdldEV2ZW50U2VydmljZS5nZXRPYnNlcnZhYmxlPFRpbWVDb250ZXh0RXZlbnQ+KCdUSU1FX0NPTlRFWFQnKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IGV2ZW50JC5zdWJzY3JpYmUoKGNvbnRleHQ6IFdpZGdldFRpbWVDb250ZXh0KSA9PiB7XG4gICAgICBsZXQgZGF0ZTogRGF0ZVRpbWVDb250ZXh0O1xuICAgICAgY29uc3QgeyByZWFsdGltZSwgaW50ZXJ2YWwsIGFnZ3JlZ2F0aW9uIH0gPSBjb250ZXh0O1xuICAgICAgaWYgKGludGVydmFsKSB7XG4gICAgICAgIGRhdGUgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChjb250ZXh0LmludGVydmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUgPSBjb250ZXh0LmRhdGVUaW1lQ29udGV4dDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kYXRlQ29udGV4dENoYW5nZS5lbWl0KHtcbiAgICAgICAgZGF0ZSxcbiAgICAgICAgc2xpZGVyQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgaW50ZXJ2YWwsXG4gICAgICAgIHJlYWx0aW1lLFxuICAgICAgICBhZ2dyZWdhdGlvblxuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZXMoeyBkYXRlLCBpbnRlcnZhbCwgcmVhbHRpbWUsIGFnZ3JlZ2F0aW9uIH0pO1xuICAgICAgdGhpcy5xdWVyeVNlcnZpY2Uuc2V0RGF0ZUNvbnRleHRRdWVyeVBhcmFtcyh7IGludGVydmFsLCBkYXRlLCByZWFsdGltZSwgYWdncmVnYXRpb24gfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvcm1WYWx1ZXMoe1xuICAgIGRhdGUsXG4gICAgaW50ZXJ2YWwsXG4gICAgcmVhbHRpbWUsXG4gICAgYWdncmVnYXRpb25cbiAgfTogV2lkZ2V0VGltZUNvbnRleHRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICB0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZTogZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgICB0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGU6IGRhdGVbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgICAgY3VycmVudERhdGVDb250ZXh0RnJvbURhdGU6IGRhdGVbMF0udG9JU09TdHJpbmcoKSxcbiAgICAgICAgY3VycmVudERhdGVDb250ZXh0VG9EYXRlOiBkYXRlWzFdLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHJlYWx0aW1lLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogaW50ZXJ2YWwgfHwgJ2N1c3RvbScsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvbiB8fCBudWxsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVGcm9tR2xvYmFsQ29udGV4dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbml0aWFsQ29udGV4dCgpOiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlIHwgbnVsbCB7XG4gICAgY29uc3QgZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zID0gdGhpcy5xdWVyeVNlcnZpY2UuZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zKCk7XG4gICAgaWYgKGRhdGVUaW1lQ29udGV4dEZyb21RdWVyeVBhcmFtcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zLFxuICAgICAgICByZWFsdGltZTogZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zLnJlYWx0aW1lID8/IGZhbHNlLFxuICAgICAgICBhZ2dyZWdhdGlvbjogZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zLnJlYWx0aW1lXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiBkYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMuYWdncmVnYXRpb24gfHwgbnVsbFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gZ2V0IHZhbHVlIGZyb20gbGFzdCB2YWx1ZSBvZiBldmVudHMgc2VydmljZVxuICAgIGNvbnN0IGxhc3RFdmVudFZhbHVlID0gdGhpcy53aWRnZXRFdmVudFNlcnZpY2UuZ2V0TGFzdFZhbHVlKCdUSU1FX0NPTlRFWFQnKTtcbiAgICBjb25zdCByZWFsdGltZSA9IGxhc3RFdmVudFZhbHVlPy5yZWFsdGltZSA/PyBmYWxzZTtcbiAgICBpZiAobGFzdEV2ZW50VmFsdWUgJiYgbGFzdEV2ZW50VmFsdWUuZGF0ZVRpbWVDb250ZXh0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiBsYXN0RXZlbnRWYWx1ZS5kYXRlVGltZUNvbnRleHQsXG4gICAgICAgIGludGVydmFsOiAnY3VzdG9tJyxcbiAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiByZWFsdGltZSA/IG51bGwgOiBsYXN0RXZlbnRWYWx1ZS5hZ2dyZWdhdGlvblxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGxhc3RFdmVudFZhbHVlICYmIGxhc3RFdmVudFZhbHVlLmludGVydmFsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChsYXN0RXZlbnRWYWx1ZS5pbnRlcnZhbCksXG4gICAgICAgIGludGVydmFsOiBsYXN0RXZlbnRWYWx1ZS5pbnRlcnZhbCxcbiAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiByZWFsdGltZSA/IG51bGwgOiBsYXN0RXZlbnRWYWx1ZS5hZ2dyZWdhdGlvblxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9RdWVyeVBhcmFtc0NoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5U2VydmljZVxuICAgICAgLnF1ZXJ5UGFyYW1zQ2hhbmdlJCgpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoe1xuICAgICAgICAgIGRhdGVDb250ZXh0RnJvbSxcbiAgICAgICAgICBkYXRlQ29udGV4dFRvLFxuICAgICAgICAgIGRhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICAgICAgZGF0ZUNvbnRleHRSZWFsdGltZSxcbiAgICAgICAgICBkYXRlQ29udGV4dEFnZ3JlZ2F0aW9uXG4gICAgICAgIH06IElucHV0RGF0ZUNvbnRleHRRdWVyeVBhcmFtcykgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlYWx0aW1lID0gZGF0ZUNvbnRleHRSZWFsdGltZSA/PyB0aGlzLmZvcm0udmFsdWUucmVhbHRpbWU7XG4gICAgICAgICAgaWYgKGRhdGVDb250ZXh0SW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0RXZlbnRTZXJ2aWNlLmVtaXQoe1xuICAgICAgICAgICAgICB0eXBlOiAnVElNRV9DT05URVhUJyxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGludGVydmFsOiBkYXRlQ29udGV4dEludGVydmFsLFxuICAgICAgICAgICAgICAgIHJlYWx0aW1lLFxuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uOiBkYXRlQ29udGV4dEFnZ3JlZ2F0aW9uXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlQ29udGV4dDogRGF0ZVRpbWVDb250ZXh0ID0gW1xuICAgICAgICAgICAgICBuZXcgRGF0ZShkYXRlQ29udGV4dEZyb20pLFxuICAgICAgICAgICAgICBuZXcgRGF0ZShkYXRlQ29udGV4dFRvKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0RXZlbnRTZXJ2aWNlLmVtaXQoe1xuICAgICAgICAgICAgICB0eXBlOiAnVElNRV9DT05URVhUJyxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGRhdGVUaW1lQ29udGV4dDogZGF0ZUNvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb246IGRhdGVDb250ZXh0QWdncmVnYXRpb25cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclF1ZXJ5UGFyYW1zSWZOZWVkZWQoKTogdm9pZCB7XG4gICAgLy8gSWYgbmF2aWdhdGlvbiBpcyBpbiBwcm9ncmVzcywgcm91dGVyIHdpbGwgdGFrZSBjYXJlIG9mIGNsZWFyaW5nIHF1ZXJ5IHBhcmFtcy4gVGhpcyB3YXkgd2UgYXZvaWQgdW5uZWNlc3NhcnkgbWFuaXB1bGF0aW9uIG9mIGJyb3dzZXIgaGlzdG9yeVxuICAgIGlmICh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGNoZWNrIGlmIGFueSBvdGhlciBXaWRnZXRUaW1lQ29udGV4dENvbXBvbmVudCBhY3Rpb24gaW4gYWN0aW9uIGJhciBleGlzdHNcbiAgICBjb25zdCBhbnlXaWRnZXRUaW1lQ29udGV4dEFjdGlvbkxlZnQgPSBBcnJheS5mcm9tKHRoaXMuYWN0aW9uQmFyU2VydmljZS5zdGF0ZSkuc29tZShcbiAgICAgIGFjdGlvbiA9PiBhY3Rpb24uZ3JvdXBJZCA9PT0gdGhpcy5BQ1RJT05fQkFSX0dST1VQX0lEXG4gICAgKTtcbiAgICBpZiAoIWFueVdpZGdldFRpbWVDb250ZXh0QWN0aW9uTGVmdCkge1xuICAgICAgdGhpcy5xdWVyeVNlcnZpY2UuY2xlYXJRdWVyeVBhcmFtcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9Sb3V0ZXJFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIGUgPT5cbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgfHwgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgfHwgZSBpbnN0YW5jZW9mIEFjdGl2YXRpb25FbmRcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzID0gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydDtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0Q29udGV4dCgpOiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogdGhpcy5oZWxwZXJTZXJ2aWNlLmdldERhdGVUaW1lQ29udGV4dEJ5SW50ZXJ2YWwodGhpcy5ERUZBVUxUX0lOVEVSVkFMKSxcbiAgICAgIGludGVydmFsOiB0aGlzLkRFRkFVTFRfSU5URVJWQUwsXG4gICAgICByZWFsdGltZTogZmFsc2UsXG4gICAgICBhZ2dyZWdhdGlvbjogYWdncmVnYXRpb25UeXBlLk1JTlVURUxZXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRSZWFsdGltZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUuZGlzYWJsZSgpO1xuICAgIHRoaXMuZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGUuZGlzYWJsZSgpO1xuICAgIHRoaXMuZm9ybS5jb250cm9scy5hZ2dyZWdhdGlvbi5kaXNhYmxlKCk7XG5cbiAgICB0aGlzLnJlYWx0aW1lU3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwodGhpcy5SRUFMVElNRV9JTlRFUlZBTClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdEYXRlRnJvbSA9IG5ldyBEYXRlKFxuICAgICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSkudmFsdWVPZigpICsgdGhpcy5SRUFMVElNRV9JTlRFUlZBTFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdEYXRlVG8gPSBuZXcgRGF0ZShcbiAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0VG9EYXRlKS52YWx1ZU9mKCkgKyB0aGlzLlJFQUxUSU1FX0lOVEVSVkFMXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlcyh7XG4gICAgICAgICAgZGF0ZTogW25ld0RhdGVGcm9tLCBuZXdEYXRlVG9dLFxuICAgICAgICAgIGludGVydmFsOiB0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICAgICAgcmVhbHRpbWU6IHRydWUsXG4gICAgICAgICAgYWdncmVnYXRpb246IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFJlYWx0aW1lKCk6IHZvaWQge1xuICAgIHRoaXMucmVhbHRpbWVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5mb3JtPy5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZS5lbmFibGUoKTtcbiAgICB0aGlzLmZvcm0/LmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZS5lbmFibGUoKTtcbiAgICB0aGlzLmZvcm0/LmNvbnRyb2xzLmFnZ3JlZ2F0aW9uLmVuYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvblJlYWx0aW1lVmFsdWVDaGFuZ2UocmVhbHRpbWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgZGF0ZVRpbWVDb250ZXh0OiBEYXRlVGltZUNvbnRleHQ7XG4gICAgaWYgKHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbCAhPT0gJ2N1c3RvbScpIHtcbiAgICAgIGRhdGVUaW1lQ29udGV4dCA9IHRoaXMuaGVscGVyU2VydmljZS5nZXREYXRlVGltZUNvbnRleHRCeUludGVydmFsKFxuICAgICAgICB0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lU3BhbkluTXMgPVxuICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0VG9EYXRlKS52YWx1ZU9mKCkgLVxuICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUpLnZhbHVlT2YoKTtcbiAgICAgIGNvbnN0IGRhdGVUbyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBkYXRlRnJvbSA9IG5ldyBEYXRlKGRhdGVUby52YWx1ZU9mKCkgLSBjdXJyZW50VGltZVNwYW5Jbk1zKTtcbiAgICAgIGRhdGVUaW1lQ29udGV4dCA9IFtkYXRlRnJvbSwgZGF0ZVRvXTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZSh7XG4gICAgICBkYXRlOiBkYXRlVGltZUNvbnRleHQsXG4gICAgICBpbnRlcnZhbDogdGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLFxuICAgICAgcmVhbHRpbWUsXG4gICAgICBhZ2dyZWdhdGlvbjogbnVsbFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVBZ2dyZWdhdGlvbihcbiAgICBbZGF0ZUZyb20sIGRhdGVUb106IERhdGVUaW1lQ29udGV4dCxcbiAgICBhZ2dyZWdhdGlvbjogYWdncmVnYXRpb25UeXBlXG4gICk6IGFnZ3JlZ2F0aW9uVHlwZSB7XG4gICAgdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9ucyA9IHRoaXMuYWdncmVnYXRpb25TZXJ2aWNlLmdldERpc2FibGVkQWdncmVnYXRpb25PcHRpb25zKFxuICAgICAgZGF0ZUZyb20sXG4gICAgICBkYXRlVG9cbiAgICApO1xuICAgIGNvbnN0IHRpbWVSYW5nZUluTXMgPSBkYXRlVG8udmFsdWVPZigpIC0gZGF0ZUZyb20udmFsdWVPZigpO1xuICAgIGNvbnN0IGlzUHJvcGVyQWdncmVnYXRpb24gPSAhdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9uc1thZ2dyZWdhdGlvbl0gfHwgYWdncmVnYXRpb24gPT09IG51bGw7XG5cbiAgICBpZiAoaXNQcm9wZXJBZ2dyZWdhdGlvbikge1xuICAgICAgcmV0dXJuIGFnZ3JlZ2F0aW9uO1xuICAgIH1cbiAgICBpZiAodGltZVJhbmdlSW5NcyA+PSBBR0dSRUdBVElPTl9MSU1JVFMuREFJTFlfTElNSVQpIHtcbiAgICAgIHJldHVybiBhZ2dyZWdhdGlvblR5cGUuREFJTFk7XG4gICAgfSBlbHNlIGlmICh0aW1lUmFuZ2VJbk1zID49IEFHR1JFR0FUSU9OX0xJTUlUUy5IT1VSTFlfTElNSVQpIHtcbiAgICAgIHJldHVybiBhZ2dyZWdhdGlvblR5cGUuSE9VUkxZO1xuICAgIH0gZWxzZSBpZiAodGltZVJhbmdlSW5NcyA+PSBBR0dSRUdBVElPTl9MSU1JVFMuTUlOVVRFTFlfTElNSVQpIHtcbiAgICAgIHJldHVybiBhZ2dyZWdhdGlvblR5cGUuTUlOVVRFTFk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgKm5nSWY9XCJpc0NvdXBsZWQgJiYgIWhpZGRlblwiXG4gIFtwcmlvcml0eV09XCJBQ1RJT05fQkFSX1BSSU9SSVRZXCJcbiAgW2dyb3VwSWRdPVwiQUNUSU9OX0JBUl9HUk9VUF9JRFwiXG4gIFtpbkdyb3VwUHJpb3JpdHldPVwiYWN0aW9uQmFySW5Hcm91cFByaW9yaXR5XCJcbiAgW3BsYWNlbWVudF09XCInbGVmdCdcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF0ZVRpbWVQaWNrZXJcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICBkYXRlOiBbZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSwgZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGVdXG4gICAgfVwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIiFpc0NvdXBsZWRcIlxuICBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXRlVGltZVBpY2tlclwiXG4gIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgZGF0ZTogW2Zvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUsIGZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0VG9EYXRlXVxuICB9XCJcbj48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlXG4gICNkYXRlVGltZVBpY2tlclxuICBsZXQtZGF0ZT1cImRhdGVcIlxuPlxuICA8Zm9ybVxuICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0xNiBwLWwteHMtMTYgcC1yLXhzLTE2IG0tdC14cy04IG0tYi14cy04XCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlTZXR0aW5ncy5nbG9iYWxUaW1lQ29udGV4dFwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24gZmxleC1ncm93XCJcbiAgICAgICAgICAjZHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gICAgICAgICAgZHJvcGRvd25cbiAgICAgICAgICBbaW5zaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgKm5nSWY9XCJkYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGZvcm0tY29udHJvbCBsLWgtdGlnaHQgZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwie3sgZGF0ZVswXSB8IGM4eURhdGU6IERBVEVfRk9STUFUIH19IOKAlCB7e1xuICAgICAgICAgICAgICBkYXRlWzFdIHwgYzh5RGF0ZTogREFURV9GT1JNQVRcbiAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyBkYXRlWzBdIHwgYzh5RGF0ZTogREFURV9GT1JNQVQgfX0g4oCUIHt7IGRhdGVbMV0gfCBjOHlEYXRlOiBEQVRFX0ZPUk1BVCB9fVwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICBkYXRhLWN5PVwid2lkZ2V0LXRpbWUtY29udGV4dC0tZGF0ZS1waWNrZXItZHJvcGRvd24tYnV0dG9uXCJcbiAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgZHJvcGRvd25Ub2dnbGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgICAgICAgICAgYzh5SWNvbj1cInNjaGVkdWxlMVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtY29sIHRleHQtbGVmdCBmaXQtd1wiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC0xMlwiXG4gICAgICAgICAgICAgICAgZGF0YS1jeT1cIndpZGdldC10aW1lLWNvbnRleHQtLXNlbGVjdGVkLWludGVydmFsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IElOVEVSVkFMX1RJVExFU1tmb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLnZhbHVlXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LTEwIHRleHQtbXV0ZWQgdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1jeT1cIndpZGdldC10aW1lLWNvbnRleHQtLXNlbGVjdGVkLXRpbWUtcmFuZ2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZGF0ZVswXSB8IGM4eURhdGU6IERBVEVfRk9STUFUIH19IOKAlCB7eyBkYXRlWzFdIHwgYzh5RGF0ZTogREFURV9GT1JNQVQgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmV0IG0tci0xNiBtLWwtNFwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDx1bFxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtLWRhdGUtcmFuZ2VcIlxuICAgICAgICAgICAgKmRyb3Bkb3duTWVudVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxjOHktaW50ZXJ2YWwtcGlja2VyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImN1cnJlbnREYXRlQ29udGV4dEludGVydmFsXCJcbiAgICAgICAgICAgID48L2M4eS1pbnRlcnZhbC1waWNrZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLnZhbHVlID09PSAnY3VzdG9tJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1sLTE2IHAtci0xNlwiPlxuICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cFxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZS5lcnJvcnMgPyAnaGFzLWVycm9yJyA6ICcnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidGcm9tYGRhdGVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcj1cInRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEZyb21gZGF0ZWBcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWRhdGUtdGltZS1waWNrZXJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFttYXhEYXRlXT1cImZvcm0udmFsdWUudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidGcm9tYGRhdGVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZS5lcnJvcnMgPyAnaGFzLWVycm9yJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9jOHktZGF0ZS10aW1lLXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXMgW3Nob3ddPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZS5lcnJvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRhdGVBZnRlclJhbmdlTWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVGhpcyBkYXRlIGlzIGFmdGVyIHRoZSBsYXRlc3QgYWxsb3dlZCBkYXRlLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImludmFsaWREYXRlVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ1RoaXMgZGF0ZSBpcyBpbnZhbGlkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXBcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlLmVycm9ycyA/ICdoYXMtZXJyb3InIDogJydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1RvYGRhdGVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcj1cInRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBUb2BkYXRlYFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxjOHktZGF0ZS10aW1lLXBpY2tlclxuICAgICAgICAgICAgICAgICAgICBpZD1cInRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cImZvcm0udmFsdWUudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1RvYGRhdGVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlLmVycm9ycyA/ICdoYXMtZXJyb3InIDogJydcIlxuICAgICAgICAgICAgICAgICAgPjwvYzh5LWRhdGUtdGltZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzIFtzaG93XT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlLmVycm9yc1wiPlxuICAgICAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZGF0ZUJlZm9yZVJhbmdlTWluXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVGhpcyBkYXRlIGlzIGJlZm9yZSB0aGUgZWFybGllc3QgYWxsb3dlZCBkYXRlLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImludmFsaWREYXRlVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ1RoaXMgZGF0ZSBpcyBpbnZhbGlkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTE2IGQtZmxleCBnYXAtOCBzZXBhcmF0b3ItdG9wXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZXNldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXQoKTsgZHJvcGRvd24uaXNPcGVuID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0udmFsdWUucmVhbHRpbWVcIlxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgUmVzZXRcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBmbGV4LWdyb3dcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQXBwbHknIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5RGF0ZXRpbWVDb250ZXh0KCk7IGRyb3Bkb3duLmlzT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgKGZvcm0ucHJpc3RpbmUgJiYgZm9ybS51bnRvdWNoZWQpIHx8IGZvcm0uaW52YWxpZCB8fCBmb3JtLnZhbHVlLnJlYWx0aW1lXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQXBwbHlcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctYXV0b1wiPlxuICAgICAgPGM4eS1yZWFsdGltZS1jb250cm9sXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHAtMCBmbGV4LW5vLWdyb3cgdy1hdXRvXCJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5U2V0dGluZ3MuZ2xvYmFsUmVhbHRpbWVDb250ZXh0XCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVhbHRpbWVcIlxuICAgICAgPjwvYzh5LXJlYWx0aW1lLWNvbnRyb2w+XG5cbiAgICAgIDxjOHktYWdncmVnYXRpb24tcGlja2VyXG4gICAgICAgICpuZ0lmPVwiZGlzcGxheVNldHRpbmdzLmdsb2JhbEFnZ3JlZ2F0aW9uQ29udGV4dFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFnZ3JlZ2F0aW9uXCJcbiAgICAgICAgW2Rpc2FibGVkQWdncmVnYXRpb25zXT1cImRpc2FibGVkQWdncmVnYXRpb25zXCJcbiAgICAgID48L2M4eS1hZ2dyZWdhdGlvbi1waWNrZXI+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvbmctdGVtcGxhdGU+XG5cbjxjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJ0b2dnbGVEZWNvdXBsaW5nKClcIlxuICA+XG4gICAgPGkgW2M4eUljb25dPVwiaXNDb3VwbGVkID8gJ3NjaGVkdWxlMScgOiAndG9kYXknXCI+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwibS1sLTRcIj5cbiAgICAgIHt7IChpc0NvdXBsZWQgPyBkZWNvdXBsZVRpbWVDb250ZXh0TGFiZWwgOiBjb3VwbGVUaW1lQ29udGV4dExhYmVsKSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2M4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuIl19
@@ -13,4 +13,4 @@ export var WidgetTimeContextActionBarPriority;
13
13
  WidgetTimeContextActionBarPriority[WidgetTimeContextActionBarPriority["MEDIUM"] = 2] = "MEDIUM";
14
14
  WidgetTimeContextActionBarPriority[WidgetTimeContextActionBarPriority["HIGH"] = 3] = "HIGH";
15
15
  })(WidgetTimeContextActionBarPriority || (WidgetTimeContextActionBarPriority = {}));
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRpbWUtY29udGV4dC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvZGFzaGJvYXJkL3dpZ2V0LXRpbWUtY29udGV4dC93aWRnZXQtdGltZS1jb250ZXh0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1EQSxNQUFNLENBQU4sSUFBWSwwQkFNWDtBQU5ELFdBQVksMEJBQTBCO0lBQ3BDLG1FQUFxQyxDQUFBO0lBQ3JDLCtEQUFpQyxDQUFBO0lBQ2pDLDJFQUE2QyxDQUFBO0lBQzdDLDJFQUE2QyxDQUFBO0lBQzdDLGlGQUFtRCxDQUFBO0FBQ3JELENBQUMsRUFOVywwQkFBMEIsS0FBMUIsMEJBQTBCLFFBTXJDO0FBdUNELE1BQU0sQ0FBTixJQUFZLGtDQUtYO0FBTEQsV0FBWSxrQ0FBa0M7SUFDNUMsMkZBQVEsQ0FBQTtJQUNSLHlGQUFPLENBQUE7SUFDUCwrRkFBVSxDQUFBO0lBQ1YsMkZBQVEsQ0FBQTtBQUNWLENBQUMsRUFMVyxrQ0FBa0MsS0FBbEMsa0NBQWtDLFFBSzdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW50ZXJ2YWwgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlVGltZUNvbnRleHQgfSBmcm9tICcuLi93aWRnZXQtY2hhbmdlLWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uVHlwZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuZXhwb3J0IHR5cGUgV2lkZ2V0RGlzcGxheVNldHRpbmdzID0ge1xuICAvKipcbiAgICogSWYgZW5hYmxlZCB0aGUgd2lkZ2V0IGlzIGJvdW5kIHRvIHRoZSBnbG9iYWwgdGltZSBjb250ZXh0LiBZb3UgY2FuIGxpc3RlbiB0byBuZ09uQ2hhbmdlcygpIGNoYW5nZSBkZXRlY3Rpb25cbiAgICogdG8gcmVhY3QgdG8gY2hhbmdlcyBvbiB0aGUgY29udGV4dC4gV2hlbiBhIG1vcmUgZGV0YWlsZWQgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQsIHVzZSB0aGUgPGM4eS13aWRnZXQtdGltZS1jb250ZXh0PlxuICAgKiBjb21wb25lbnQgaW5zdGVhZC5cbiAgICovXG4gIGdsb2JhbFRpbWVDb250ZXh0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIGVuYWJsZWQgdGhlIHdpZGdldCBpcyBib3VuZCB0byB0aGUgZ2xvYmFsIHJlYWx0aW1lIGNvbnRleHQuIFlvdSBjYW4gbGlzdGVuIHRvIG5nT25DaGFuZ2VzKCkgY2hhbmdlIGRldGVjdGlvblxuICAgKiB0byByZWFjdCB0byBjaGFuZ2VzIG9uIHRoZSBjb250ZXh0LlxuICAgKi9cbiAgZ2xvYmFsUmVhbHRpbWVDb250ZXh0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIGVuYWJsZWQgdGhlIHdpZGdldCBpcyBib3VuZCB0byB0aGUgZ2xvYmFsIGFnZ3JlZ2F0aW9uIGNvbnRleHQuIFlvdSBjYW4gbGlzdGVuIHRvIG5nT25DaGFuZ2VzKCkgY2hhbmdlIGRldGVjdGlvblxuICAgKiB0byByZWFjdCB0byBjaGFuZ2VzIG9uIHRoZSBjb250ZXh0LlxuICAgKi9cbiAgZ2xvYmFsQWdncmVnYXRpb25Db250ZXh0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIGVuYWJsZWQgdGhlIHdpZGdldCBpcyBib3VuZCB0byB0aGUgZ2xvYmFsIGF1dG8gcmVmcmVzaCBjb250ZXh0LiBZb3UgY2FuIGxpc3RlbiB0byBuZ09uQ2hhbmdlcygpIGNoYW5nZSBkZXRlY3Rpb25cbiAgICogdG8gcmVhY3QgdG8gY2hhbmdlcyBvbiB0aGUgY29udGV4dC4gV2hlbiBhIG1vcmUgZGV0YWlsZWQgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQsIHVzZSB0aGUgV2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlXG4gICAqIHNlcnZpY2UgaW5zdGVhZC5cbiAgICovXG4gIGdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbFRpbWVDb250ZXh0V2lkZ2V0Q29uZmlnIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBpbnN0YW5jZSBvZiB3aWRnZXQgaXMgYm91bmQgdG8gZ2xvYmFsIGRhdGUgY29udGV4dC4gSXQgY2FuIGJlIG9ubHkgdXNlZCB3aXRoIHdpZGdldHMgd2hpY2hcbiAgICogZHluYW1pYyBjb21wb25lbnQgZGVmaW5pdGlvbiBjb250YWlucyBkaXNwbGF5U2V0dGluZ3MgYWxsb3dpbmcgdG8gdXNlIGl0IHdpdGggZ2xvYmFsIGRhdGUgY29udGV4dC5cbiAgICovXG4gIHdpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQ/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHdpZGdldCB0aGF0IGlzIGJvdW5kIHRvIGdsb2JhbCBkYXRlIGNvbnRleHQgY2FuIGRlY291cGxlIGZyb20gaXQuIElmIHRoYXQgd2lkZ2V0IGlzIGRlY291cGxlZCwgaXQgaXNcbiAgICogdW5zdWJzY3JpYmVkIGZyb20gZ2xvYmFsIGRhdGUgY29udGV4dCB1cGRhdGVzIGFuZCBkYXRlIGNvbnRleHQgcmVsYXRlZCBjb250cm9scyBhcmUgZGlzcGxheWVkIG9uIHdpZGdldCB2aWV3LlxuICAgKi9cbiAgY2FuRGVjb3VwbGVHbG9iYWxUaW1lQ29udGV4dD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFdpZGdldFRpbWVDb250ZXh0U3RhdGUgPSB7XG4gIGRhdGU6IERhdGVUaW1lQ29udGV4dDtcbiAgaW50ZXJ2YWw6IEludGVydmFsWydpZCddO1xuICByZWFsdGltZTogYm9vbGVhbjtcbiAgYWdncmVnYXRpb246IGFnZ3JlZ2F0aW9uVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFdpZGdldFRpbWVDb250ZXh0Q2hhbmdlID0gT21pdDxXaWRnZXRUaW1lQ29udGV4dFN0YXRlLCAnaW50ZXJ2YWwnPjtcblxuZXhwb3J0IGVudW0gRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMge1xuICBEQVRFX0NPTlRFWFRfRlJPTSA9ICdkYXRlQ29udGV4dEZyb20nLFxuICBEQVRFX0NPTlRFWFRfVE8gPSAnZGF0ZUNvbnRleHRUbycsXG4gIERBVEVfQ09OVEVYVF9JTlRFUlZBTCA9ICdkYXRlQ29udGV4dEludGVydmFsJyxcbiAgREFURV9DT05URVhUX1JFQUxUSU1FID0gJ2RhdGVDb250ZXh0UmVhbHRpbWUnLFxuICBEQVRFX0NPTlRFWFRfQUdHUkVHQVRJT04gPSAnZGF0ZUNvbnRleHRBZ2dyZWdhdGlvbidcbn1cblxudHlwZSBEYXRlQ29udGV4dEZyb21Ub1F1ZXJ5UGFyYW1zID0ge1xuICBbRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMuREFURV9DT05URVhUX0ZST01dOiBzdHJpbmc7XG4gIFtEYXRlQ29udGV4dFF1ZXJ5UGFyYW1OYW1lcy5EQVRFX0NPTlRFWFRfVE9dOiBzdHJpbmc7XG4gIFtEYXRlQ29udGV4dFF1ZXJ5UGFyYW1OYW1lcy5EQVRFX0NPTlRFWFRfSU5URVJWQUxdPzogbmV2ZXI7XG59O1xuXG50eXBlIERhdGVDb250ZXh0SW50ZXJ2YWxRdWVyeVBhcmFtcyA9IHtcbiAgW0RhdGVDb250ZXh0UXVlcnlQYXJhbU5hbWVzLkRBVEVfQ09OVEVYVF9GUk9NXT86IG5ldmVyO1xuICBbRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMuREFURV9DT05URVhUX1RPXT86IG5ldmVyO1xuICBbRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMuREFURV9DT05URVhUX0lOVEVSVkFMXTogSW50ZXJ2YWxbJ2lkJ107XG59O1xuXG4vKipcbiAqIElucHV0IHF1ZXJ5IHBhcmFtcyBpcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGFsbCBwb3NzaWJsZSBxdWVyeSBwYXJhbXMgcmVsYXRlZCB0byB3aWRnZXQgdGltZSBjb250ZXh0LlxuICogSXQgY2FuIGJlIHByb3ZpZGVkIGJ5IHVzZXIgdHlwaW5nIHRoZW0gaW4gYnJvd3NlciBVUkwgYWRkcmVzcyBiYXIsIHNvIGFsbCBvZiB0aGVtIHNob3VsZCBiZSBjb25zaWRlcmVkLlxuICovXG5leHBvcnQgdHlwZSBJbnB1dERhdGVDb250ZXh0UXVlcnlQYXJhbXMgPSB7XG4gIFtEYXRlQ29udGV4dFF1ZXJ5UGFyYW1OYW1lcy5EQVRFX0NPTlRFWFRfRlJPTV0/OiBzdHJpbmc7XG4gIFtEYXRlQ29udGV4dFF1ZXJ5UGFyYW1OYW1lcy5EQVRFX0NPTlRFWFRfVE9dPzogc3RyaW5nO1xuICBbRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMuREFURV9DT05URVhUX0lOVEVSVkFMXT86IEludGVydmFsWydpZCddO1xuICBbRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMuREFURV9DT05URVhUX1JFQUxUSU1FXT86IGJvb2xlYW47XG4gIFtEYXRlQ29udGV4dFF1ZXJ5UGFyYW1OYW1lcy5EQVRFX0NPTlRFWFRfQUdHUkVHQVRJT05dPzogYWdncmVnYXRpb25UeXBlO1xufTtcblxuLyoqXG4gKiBPdXRwdXQgcXVlcnkgcGFyYW1zIGlzIGFuIG9iamVjdCByZXByZXNlbnRpbmcgcGFyYW1zIHRoYXQgYXJlIGFwcGxpZWQgdG8gY3VycmVudCBVUkwgaW4gYnJvd3NlciBhZGRyZXNzIGJhci5cbiAqIFRoZXNlIHBhcmFtcyBhcmUgc2V0IHByb2dyYW1tYXRpY2FsbHkuXG4gKiBUaW1lIGNvbnRleHQgaW50ZXJ2YWwgYW5kIHRpbWUgcmFuZ2UgZGVzY3JpYmVkIGJ5IGRhdGUgXCJmcm9tXCIgYW5kIGRhdGUgXCJ0b1wiIGV4Y2x1ZGUgZWFjaCBvdGhlci5cbiAqL1xuZXhwb3J0IHR5cGUgT3V0cHV0RGF0ZUNvbnRleHRRdWVyeVBhcmFtcyA9IChcbiAgfCBEYXRlQ29udGV4dEZyb21Ub1F1ZXJ5UGFyYW1zXG4gIHwgRGF0ZUNvbnRleHRJbnRlcnZhbFF1ZXJ5UGFyYW1zXG4pICYge1xuICBbRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMuREFURV9DT05URVhUX1JFQUxUSU1FXTogYm9vbGVhbjtcbiAgW0RhdGVDb250ZXh0UXVlcnlQYXJhbU5hbWVzLkRBVEVfQ09OVEVYVF9BR0dSRUdBVElPTl06IGFnZ3JlZ2F0aW9uVHlwZTtcbn07XG5cbmV4cG9ydCBlbnVtIFdpZGdldFRpbWVDb250ZXh0QWN0aW9uQmFyUHJpb3JpdHkge1xuICBOT05FID0gMCxcbiAgTE9XID0gMSxcbiAgTUVESVVNID0gMixcbiAgSElHSCA9IDNcbn1cbiJdfQ==
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRpbWUtY29udGV4dC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvZGFzaGJvYXJkL3dpZ2V0LXRpbWUtY29udGV4dC93aWRnZXQtdGltZS1jb250ZXh0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlEQSxNQUFNLENBQU4sSUFBWSwwQkFNWDtBQU5ELFdBQVksMEJBQTBCO0lBQ3BDLG1FQUFxQyxDQUFBO0lBQ3JDLCtEQUFpQyxDQUFBO0lBQ2pDLDJFQUE2QyxDQUFBO0lBQzdDLDJFQUE2QyxDQUFBO0lBQzdDLGlGQUFtRCxDQUFBO0FBQ3JELENBQUMsRUFOVywwQkFBMEIsS0FBMUIsMEJBQTBCLFFBTXJDO0FBdUNELE1BQU0sQ0FBTixJQUFZLGtDQUtYO0FBTEQsV0FBWSxrQ0FBa0M7SUFDNUMsMkZBQVEsQ0FBQTtJQUNSLHlGQUFPLENBQUE7SUFDUCwrRkFBVSxDQUFBO0lBQ1YsMkZBQVEsQ0FBQTtBQUNWLENBQUMsRUFMVyxrQ0FBa0MsS0FBbEMsa0NBQWtDLFFBSzdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW50ZXJ2YWwgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlVGltZUNvbnRleHQgfSBmcm9tICcuLi93aWRnZXQtY2hhbmdlLWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uVHlwZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuZXhwb3J0IHR5cGUgV2lkZ2V0RGlzcGxheVNldHRpbmdzID0ge1xuICAvKipcbiAgICogSWYgZW5hYmxlZCB0aGUgd2lkZ2V0IGlzIGJvdW5kIHRvIHRoZSBnbG9iYWwgdGltZSBjb250ZXh0LiBZb3UgY2FuIGxpc3RlbiB0byBuZ09uQ2hhbmdlcygpIGNoYW5nZSBkZXRlY3Rpb25cbiAgICogdG8gcmVhY3QgdG8gY2hhbmdlcyBvbiB0aGUgY29udGV4dC4gV2hlbiBhIG1vcmUgZGV0YWlsZWQgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQsIHVzZSB0aGUgPGM4eS13aWRnZXQtdGltZS1jb250ZXh0PlxuICAgKiBjb21wb25lbnQgaW5zdGVhZC5cbiAgICovXG4gIGdsb2JhbFRpbWVDb250ZXh0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIGVuYWJsZWQgdGhlIHdpZGdldCBpcyBib3VuZCB0byB0aGUgZ2xvYmFsIHJlYWx0aW1lIGNvbnRleHQuIFlvdSBjYW4gbGlzdGVuIHRvIG5nT25DaGFuZ2VzKCkgY2hhbmdlIGRldGVjdGlvblxuICAgKiB0byByZWFjdCB0byBjaGFuZ2VzIG9uIHRoZSBjb250ZXh0LlxuICAgKi9cbiAgZ2xvYmFsUmVhbHRpbWVDb250ZXh0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIGVuYWJsZWQgdGhlIHdpZGdldCBpcyBib3VuZCB0byB0aGUgZ2xvYmFsIGFnZ3JlZ2F0aW9uIGNvbnRleHQuIFlvdSBjYW4gbGlzdGVuIHRvIG5nT25DaGFuZ2VzKCkgY2hhbmdlIGRldGVjdGlvblxuICAgKiB0byByZWFjdCB0byBjaGFuZ2VzIG9uIHRoZSBjb250ZXh0LlxuICAgKi9cbiAgZ2xvYmFsQWdncmVnYXRpb25Db250ZXh0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIGVuYWJsZWQgdGhlIHdpZGdldCBpcyBib3VuZCB0byB0aGUgZ2xvYmFsIGF1dG8gcmVmcmVzaCBjb250ZXh0LiBZb3UgY2FuIGxpc3RlbiB0byBuZ09uQ2hhbmdlcygpIGNoYW5nZSBkZXRlY3Rpb25cbiAgICogdG8gcmVhY3QgdG8gY2hhbmdlcyBvbiB0aGUgY29udGV4dC4gV2hlbiBhIG1vcmUgZGV0YWlsZWQgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQsIHVzZSB0aGUgV2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlXG4gICAqIHNlcnZpY2UgaW5zdGVhZC5cbiAgICovXG4gIGdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbFRpbWVDb250ZXh0V2lkZ2V0Q29uZmlnIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBpbnN0YW5jZSBvZiB3aWRnZXQgaXMgYm91bmQgdG8gZ2xvYmFsIGRhdGUgY29udGV4dC4gSXQgY2FuIGJlIG9ubHkgdXNlZCB3aXRoIHdpZGdldHMgd2hpY2hcbiAgICogZHluYW1pYyBjb21wb25lbnQgZGVmaW5pdGlvbiBjb250YWlucyBkaXNwbGF5U2V0dGluZ3MgYWxsb3dpbmcgdG8gdXNlIGl0IHdpdGggZ2xvYmFsIGRhdGUgY29udGV4dC5cbiAgICovXG4gIHdpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQ/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHdpZGdldCB0aGF0IGlzIGJvdW5kIHRvIGdsb2JhbCBkYXRlIGNvbnRleHQgY2FuIGRlY291cGxlIGZyb20gaXQuIElmIHRoYXQgd2lkZ2V0IGlzIGRlY291cGxlZCwgaXQgaXNcbiAgICogdW5zdWJzY3JpYmVkIGZyb20gZ2xvYmFsIGRhdGUgY29udGV4dCB1cGRhdGVzIGFuZCBkYXRlIGNvbnRleHQgcmVsYXRlZCBjb250cm9scyBhcmUgZGlzcGxheWVkIG9uIHdpZGdldCB2aWV3LlxuICAgKi9cbiAgY2FuRGVjb3VwbGVHbG9iYWxUaW1lQ29udGV4dD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFdpZGdldFRpbWVDb250ZXh0U3RhdGUgPSB7XG4gIGRhdGU6IERhdGVUaW1lQ29udGV4dDtcbiAgaW50ZXJ2YWw6IEludGVydmFsWydpZCddO1xuICByZWFsdGltZTogYm9vbGVhbjtcbiAgYWdncmVnYXRpb246IGFnZ3JlZ2F0aW9uVHlwZTtcbn07XG5cbmV4cG9ydCBlbnVtIERhdGVDb250ZXh0UXVlcnlQYXJhbU5hbWVzIHtcbiAgREFURV9DT05URVhUX0ZST00gPSAnZGF0ZUNvbnRleHRGcm9tJyxcbiAgREFURV9DT05URVhUX1RPID0gJ2RhdGVDb250ZXh0VG8nLFxuICBEQVRFX0NPTlRFWFRfSU5URVJWQUwgPSAnZGF0ZUNvbnRleHRJbnRlcnZhbCcsXG4gIERBVEVfQ09OVEVYVF9SRUFMVElNRSA9ICdkYXRlQ29udGV4dFJlYWx0aW1lJyxcbiAgREFURV9DT05URVhUX0FHR1JFR0FUSU9OID0gJ2RhdGVDb250ZXh0QWdncmVnYXRpb24nXG59XG5cbnR5cGUgRGF0ZUNvbnRleHRGcm9tVG9RdWVyeVBhcmFtcyA9IHtcbiAgW0RhdGVDb250ZXh0UXVlcnlQYXJhbU5hbWVzLkRBVEVfQ09OVEVYVF9GUk9NXTogc3RyaW5nO1xuICBbRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMuREFURV9DT05URVhUX1RPXTogc3RyaW5nO1xuICBbRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMuREFURV9DT05URVhUX0lOVEVSVkFMXT86IG5ldmVyO1xufTtcblxudHlwZSBEYXRlQ29udGV4dEludGVydmFsUXVlcnlQYXJhbXMgPSB7XG4gIFtEYXRlQ29udGV4dFF1ZXJ5UGFyYW1OYW1lcy5EQVRFX0NPTlRFWFRfRlJPTV0/OiBuZXZlcjtcbiAgW0RhdGVDb250ZXh0UXVlcnlQYXJhbU5hbWVzLkRBVEVfQ09OVEVYVF9UT10/OiBuZXZlcjtcbiAgW0RhdGVDb250ZXh0UXVlcnlQYXJhbU5hbWVzLkRBVEVfQ09OVEVYVF9JTlRFUlZBTF06IEludGVydmFsWydpZCddO1xufTtcblxuLyoqXG4gKiBJbnB1dCBxdWVyeSBwYXJhbXMgaXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhbGwgcG9zc2libGUgcXVlcnkgcGFyYW1zIHJlbGF0ZWQgdG8gd2lkZ2V0IHRpbWUgY29udGV4dC5cbiAqIEl0IGNhbiBiZSBwcm92aWRlZCBieSB1c2VyIHR5cGluZyB0aGVtIGluIGJyb3dzZXIgVVJMIGFkZHJlc3MgYmFyLCBzbyBhbGwgb2YgdGhlbSBzaG91bGQgYmUgY29uc2lkZXJlZC5cbiAqL1xuZXhwb3J0IHR5cGUgSW5wdXREYXRlQ29udGV4dFF1ZXJ5UGFyYW1zID0ge1xuICBbRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMuREFURV9DT05URVhUX0ZST01dPzogc3RyaW5nO1xuICBbRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMuREFURV9DT05URVhUX1RPXT86IHN0cmluZztcbiAgW0RhdGVDb250ZXh0UXVlcnlQYXJhbU5hbWVzLkRBVEVfQ09OVEVYVF9JTlRFUlZBTF0/OiBJbnRlcnZhbFsnaWQnXTtcbiAgW0RhdGVDb250ZXh0UXVlcnlQYXJhbU5hbWVzLkRBVEVfQ09OVEVYVF9SRUFMVElNRV0/OiBib29sZWFuO1xuICBbRGF0ZUNvbnRleHRRdWVyeVBhcmFtTmFtZXMuREFURV9DT05URVhUX0FHR1JFR0FUSU9OXT86IGFnZ3JlZ2F0aW9uVHlwZTtcbn07XG5cbi8qKlxuICogT3V0cHV0IHF1ZXJ5IHBhcmFtcyBpcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHBhcmFtcyB0aGF0IGFyZSBhcHBsaWVkIHRvIGN1cnJlbnQgVVJMIGluIGJyb3dzZXIgYWRkcmVzcyBiYXIuXG4gKiBUaGVzZSBwYXJhbXMgYXJlIHNldCBwcm9ncmFtbWF0aWNhbGx5LlxuICogVGltZSBjb250ZXh0IGludGVydmFsIGFuZCB0aW1lIHJhbmdlIGRlc2NyaWJlZCBieSBkYXRlIFwiZnJvbVwiIGFuZCBkYXRlIFwidG9cIiBleGNsdWRlIGVhY2ggb3RoZXIuXG4gKi9cbmV4cG9ydCB0eXBlIE91dHB1dERhdGVDb250ZXh0UXVlcnlQYXJhbXMgPSAoXG4gIHwgRGF0ZUNvbnRleHRGcm9tVG9RdWVyeVBhcmFtc1xuICB8IERhdGVDb250ZXh0SW50ZXJ2YWxRdWVyeVBhcmFtc1xuKSAmIHtcbiAgW0RhdGVDb250ZXh0UXVlcnlQYXJhbU5hbWVzLkRBVEVfQ09OVEVYVF9SRUFMVElNRV06IGJvb2xlYW47XG4gIFtEYXRlQ29udGV4dFF1ZXJ5UGFyYW1OYW1lcy5EQVRFX0NPTlRFWFRfQUdHUkVHQVRJT05dOiBhZ2dyZWdhdGlvblR5cGU7XG59O1xuXG5leHBvcnQgZW51bSBXaWRnZXRUaW1lQ29udGV4dEFjdGlvbkJhclByaW9yaXR5IHtcbiAgTk9ORSA9IDAsXG4gIExPVyA9IDEsXG4gIE1FRElVTSA9IDIsXG4gIEhJR0ggPSAzXG59XG4iXX0=