cmat 0.0.6 → 0.0.8

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 (327) hide show
  1. package/components/adapter/dayjs-datetime-adapter.d.ts +1 -1
  2. package/components/breadcrumb/breadcrumb.service.d.ts +1 -1
  3. package/components/breadcrumb/public-api.d.ts +2 -0
  4. package/components/card/card.component.d.ts +1 -1
  5. package/components/card/public-api.d.ts +1 -0
  6. package/components/cascade/cascade-list/cascade-list.component.d.ts +45 -21
  7. package/components/cascade/public-api.d.ts +1 -0
  8. package/components/chip-input/chip-input.component.d.ts +39 -12
  9. package/components/custom-formly/extension/addons.extension.d.ts +2 -0
  10. package/components/custom-formly/index.d.ts +5 -0
  11. package/components/custom-formly/public-api.d.ts +21 -0
  12. package/components/custom-formly/types/button/button.component.d.ts +18 -0
  13. package/components/custom-formly/types/checklist/checklist.component.d.ts +41 -0
  14. package/components/custom-formly/types/chips/chips.component.d.ts +27 -0
  15. package/components/custom-formly/types/multicheckbox/multicheckbox.component.d.ts +44 -0
  16. package/components/custom-formly/types/number/number.component.d.ts +20 -0
  17. package/components/custom-formly/types/radio/radio.component.d.ts +44 -0
  18. package/components/custom-formly/types/rating/rating.component.d.ts +24 -0
  19. package/components/custom-formly/types/repeat/repeat.component.d.ts +16 -0
  20. package/components/custom-formly/types/select/select.component.d.ts +54 -0
  21. package/components/custom-formly/types/select-tree/select-tree.component.d.ts +43 -0
  22. package/components/custom-formly/types/stepper/horizontal/stepper.component.d.ts +9 -0
  23. package/components/custom-formly/types/stepper/stepper.type.d.ts +6 -0
  24. package/components/custom-formly/types/stepper/vertical/stepper.component.d.ts +9 -0
  25. package/components/custom-formly/types/table/table.component.d.ts +43 -0
  26. package/components/custom-formly/types/tabs/tab.component.d.ts +8 -0
  27. package/components/custom-formly/types/tags/tags.component.d.ts +41 -0
  28. package/components/custom-formly/types/textarea/textarea.component.d.ts +13 -0
  29. package/components/custom-formly/wrappers/addons/addons.component.d.ts +10 -0
  30. package/components/custom-formly/wrappers/card/card.component.d.ts +6 -0
  31. package/components/custom-formly/wrappers/expansion/expansion.component.d.ts +6 -0
  32. package/components/custom-formly/wrappers/panel/panel.component.d.ts +6 -0
  33. package/components/date-range/date-range.component.d.ts +8 -6
  34. package/components/drawer/drawer.component.d.ts +2 -2
  35. package/components/fullscreen/fullscreen.component.d.ts +2 -9
  36. package/components/fullscreen/public-api.d.ts +0 -1
  37. package/components/material-color-picker/material-color-picker.component.d.ts +8 -4
  38. package/components/material-datetimepicker/calendar.d.ts +2 -2
  39. package/components/material-datetimepicker/clock.d.ts +1 -1
  40. package/components/material-datetimepicker/datetimepicker-input.d.ts +1 -1
  41. package/components/material-datetimepicker/datetimepicker-toggle.d.ts +1 -1
  42. package/components/material-datetimepicker/datetimepicker.d.ts +5 -10
  43. package/components/material-datetimepicker/month-view.d.ts +1 -2
  44. package/components/material-datetimepicker/multi-year-view.d.ts +1 -1
  45. package/components/material-datetimepicker/public-api.d.ts +1 -0
  46. package/components/material-datetimepicker/time.d.ts +2 -2
  47. package/components/material-datetimepicker/year-view.d.ts +1 -1
  48. package/components/navigation/horizontal/components/basic/basic.component.d.ts +1 -1
  49. package/components/navigation/horizontal/components/branch/branch.component.d.ts +1 -1
  50. package/components/navigation/horizontal/horizontal.component.d.ts +2 -2
  51. package/components/navigation/vertical/components/aside/aside.component.d.ts +1 -1
  52. package/components/navigation/vertical/components/basic/basic.component.d.ts +1 -7
  53. package/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +1 -1
  54. package/components/navigation/vertical/components/group/group.component.d.ts +1 -1
  55. package/components/navigation/vertical/vertical.component.d.ts +5 -5
  56. package/components/pagination/public-api.d.ts +1 -0
  57. package/components/popover/popover-trigger.d.ts +121 -0
  58. package/components/popover/popover.component.d.ts +3 -3
  59. package/components/popover/popover.target.d.ts +8 -0
  60. package/components/popover/public-api.d.ts +3 -0
  61. package/components/rating/rating.component.d.ts +38 -9
  62. package/components/select-search/select-search.component.d.ts +4 -4
  63. package/components/select-tree/public-api.d.ts +2 -0
  64. package/components/select-tree/select-tree.component.d.ts +50 -21
  65. package/components/toast/public-api.d.ts +4 -0
  66. package/components/toast/toast.component.d.ts +4 -4
  67. package/components/transfer-picker/filter/filter.component.d.ts +1 -1
  68. package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.d.ts +2 -2
  69. package/components/transfer-picker/transfer-picker.component.d.ts +1 -1
  70. package/components/upload/files.type.d.ts +22 -0
  71. package/components/upload/files.util.service.d.ts +20 -0
  72. package/components/upload/index.d.ts +5 -0
  73. package/components/upload/public-api.d.ts +4 -0
  74. package/components/upload/upload-queue/upload-queue.component.d.ts +39 -0
  75. package/components/upload/upload.component.d.ts +32 -0
  76. package/esm2022/animations/public-api.mjs +2 -2
  77. package/esm2022/components/adapter/dayjs-date-adapter.mjs +6 -6
  78. package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +5 -5
  79. package/esm2022/components/adapter/native-datetime-adapter.mjs +3 -3
  80. package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +3 -3
  81. package/esm2022/components/breadcrumb/breadcrumb.component.mjs +6 -6
  82. package/esm2022/components/breadcrumb/breadcrumb.service.mjs +5 -5
  83. package/esm2022/components/breadcrumb/public-api.mjs +3 -1
  84. package/esm2022/components/card/card.component.mjs +5 -5
  85. package/esm2022/components/card/public-api.mjs +2 -1
  86. package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +7 -7
  87. package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +207 -114
  88. package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +4 -4
  89. package/esm2022/components/cascade/public-api.mjs +2 -1
  90. package/esm2022/components/chip-input/chip-input.component.mjs +152 -49
  91. package/esm2022/components/custom-formly/cmat-components-custom-formly.mjs +5 -0
  92. package/esm2022/components/custom-formly/extension/addons.extension.mjs +13 -0
  93. package/esm2022/components/custom-formly/public-api.mjs +22 -0
  94. package/esm2022/components/custom-formly/types/button/button.component.mjs +39 -0
  95. package/esm2022/components/custom-formly/types/checklist/checklist.component.mjs +161 -0
  96. package/esm2022/components/custom-formly/types/chips/chips.component.mjs +55 -0
  97. package/esm2022/components/custom-formly/types/multicheckbox/multicheckbox.component.mjs +89 -0
  98. package/esm2022/components/custom-formly/types/number/number.component.mjs +27 -0
  99. package/esm2022/components/custom-formly/types/radio/radio.component.mjs +88 -0
  100. package/esm2022/components/custom-formly/types/rating/rating.component.mjs +27 -0
  101. package/esm2022/components/custom-formly/types/repeat/repeat.component.mjs +28 -0
  102. package/esm2022/components/custom-formly/types/select/select.component.mjs +169 -0
  103. package/esm2022/components/custom-formly/types/select-tree/select-tree.component.mjs +66 -0
  104. package/esm2022/components/custom-formly/types/stepper/horizontal/stepper.component.mjs +31 -0
  105. package/esm2022/components/custom-formly/types/stepper/stepper.type.mjs +2 -0
  106. package/esm2022/components/custom-formly/types/stepper/vertical/stepper.component.mjs +31 -0
  107. package/esm2022/components/custom-formly/types/table/table.component.mjs +116 -0
  108. package/esm2022/components/custom-formly/types/tabs/tab.component.mjs +19 -0
  109. package/esm2022/components/custom-formly/types/tags/tags.component.mjs +149 -0
  110. package/esm2022/components/custom-formly/types/textarea/textarea.component.mjs +25 -0
  111. package/esm2022/components/custom-formly/wrappers/addons/addons.component.mjs +92 -0
  112. package/esm2022/components/custom-formly/wrappers/card/card.component.mjs +14 -0
  113. package/esm2022/components/custom-formly/wrappers/expansion/expansion.component.mjs +14 -0
  114. package/esm2022/components/custom-formly/wrappers/panel/panel.component.mjs +12 -0
  115. package/esm2022/components/date-range/date-range.component.mjs +26 -17
  116. package/esm2022/components/drawer/drawer.component.mjs +5 -5
  117. package/esm2022/components/drawer/drawer.service.mjs +3 -3
  118. package/esm2022/components/fullscreen/fullscreen.component.mjs +16 -73
  119. package/esm2022/components/fullscreen/public-api.mjs +1 -2
  120. package/esm2022/components/highlight/highlight.component.mjs +5 -5
  121. package/esm2022/components/highlight/highlight.service.mjs +3 -3
  122. package/esm2022/components/json-editor/json-editor.component.mjs +3 -3
  123. package/esm2022/components/masonry/masonry.component.mjs +5 -5
  124. package/esm2022/components/material-color-picker/material-color-picker.component.mjs +22 -12
  125. package/esm2022/components/material-datetimepicker/calendar-body.mjs +3 -3
  126. package/esm2022/components/material-datetimepicker/calendar.mjs +11 -12
  127. package/esm2022/components/material-datetimepicker/clock.mjs +5 -5
  128. package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +4 -5
  129. package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +3 -3
  130. package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +9 -9
  131. package/esm2022/components/material-datetimepicker/datetimepicker.mjs +17 -22
  132. package/esm2022/components/material-datetimepicker/month-view.mjs +5 -6
  133. package/esm2022/components/material-datetimepicker/multi-year-view.mjs +7 -8
  134. package/esm2022/components/material-datetimepicker/public-api.mjs +2 -1
  135. package/esm2022/components/material-datetimepicker/time.mjs +8 -8
  136. package/esm2022/components/material-datetimepicker/year-view.mjs +7 -8
  137. package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +8 -8
  138. package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +8 -8
  139. package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +5 -5
  140. package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +6 -6
  141. package/esm2022/components/navigation/horizontal/horizontal.component.mjs +6 -6
  142. package/esm2022/components/navigation/navigation.service.mjs +3 -3
  143. package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +11 -11
  144. package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +7 -24
  145. package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +10 -10
  146. package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +5 -5
  147. package/esm2022/components/navigation/vertical/components/group/group.component.mjs +9 -9
  148. package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +6 -6
  149. package/esm2022/components/navigation/vertical/vertical.component.mjs +11 -11
  150. package/esm2022/components/pagination/pagination.component.mjs +10 -10
  151. package/esm2022/components/pagination/pagination.directive.mjs +4 -4
  152. package/esm2022/components/pagination/pagination.pipe.mjs +4 -4
  153. package/esm2022/components/pagination/pagination.service.mjs +3 -3
  154. package/esm2022/components/pagination/public-api.mjs +2 -1
  155. package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +6 -6
  156. package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +5 -5
  157. package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +6 -6
  158. package/esm2022/components/popover/popover-trigger.mjs +444 -0
  159. package/esm2022/components/popover/popover.component.mjs +8 -9
  160. package/esm2022/components/popover/popover.target.mjs +18 -0
  161. package/esm2022/components/popover/public-api.mjs +4 -1
  162. package/esm2022/components/progress-bar/progress-bar.component.mjs +6 -6
  163. package/esm2022/components/rating/rating.component.mjs +122 -23
  164. package/esm2022/components/select-search/select-no-entries-found.directive.mjs +3 -3
  165. package/esm2022/components/select-search/select-search-clear.directive.mjs +3 -3
  166. package/esm2022/components/select-search/select-search.component.mjs +15 -15
  167. package/esm2022/components/select-tree/public-api.mjs +3 -1
  168. package/esm2022/components/select-tree/select-tree.component.mjs +281 -157
  169. package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +9 -9
  170. package/esm2022/components/timeline/timeline.component.mjs +5 -5
  171. package/esm2022/components/toast/public-api.mjs +5 -1
  172. package/esm2022/components/toast/toast-modal.component.mjs +5 -5
  173. package/esm2022/components/toast/toast.component.mjs +6 -6
  174. package/esm2022/components/toast/toast.service.mjs +3 -3
  175. package/esm2022/components/transfer-picker/filter/filter.component.mjs +9 -9
  176. package/esm2022/components/transfer-picker/search/search.component.mjs +6 -6
  177. package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +11 -11
  178. package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +5 -5
  179. package/esm2022/components/transfer-picker/transfer-picker.component.mjs +7 -7
  180. package/esm2022/components/transfer-picker/transfer-picker.service.mjs +4 -4
  181. package/esm2022/components/upload/cmat-components-upload.mjs +5 -0
  182. package/esm2022/components/upload/files.type.mjs +2 -0
  183. package/esm2022/components/upload/files.util.service.mjs +100 -0
  184. package/esm2022/components/upload/public-api.mjs +5 -0
  185. package/esm2022/components/upload/upload-queue/upload-queue.component.mjs +154 -0
  186. package/esm2022/components/upload/upload.component.mjs +118 -0
  187. package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +3 -3
  188. package/esm2022/directives/animate-on-scroll/scroll.service.mjs +3 -3
  189. package/esm2022/directives/autofocus/autofocus.directive.mjs +3 -3
  190. package/esm2022/directives/debounce/abstract-debounce.directive.mjs +3 -3
  191. package/esm2022/directives/debounce/debounce-click.directive.mjs +3 -3
  192. package/esm2022/directives/debounce/debounce-keyup.directive.mjs +3 -3
  193. package/esm2022/directives/digit-only/digit-only.directive.mjs +3 -3
  194. package/esm2022/directives/digit-only/mask.directive.mjs +3 -3
  195. package/esm2022/directives/equal-validator/equal-validator.directive.mjs +3 -3
  196. package/esm2022/lib/mock-api/mock-api.interceptor.mjs +5 -5
  197. package/esm2022/lib/mock-api/mock-api.service.mjs +3 -3
  198. package/esm2022/pipes/bytes/bytes.pipe.mjs +3 -3
  199. package/esm2022/pipes/date-format/date-format.pipe.mjs +3 -3
  200. package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +3 -3
  201. package/esm2022/pipes/group-by/group-by.pipe.mjs +3 -3
  202. package/esm2022/pipes/keys/keys.pipe.mjs +3 -3
  203. package/esm2022/pipes/secure/secure-pipe.mjs +5 -5
  204. package/esm2022/pipes/uppercase/uppercase.pipe.mjs +3 -3
  205. package/esm2022/public-api.mjs +1 -1
  206. package/esm2022/services/alert/alert.service.mjs +7 -7
  207. package/esm2022/services/alert/enum.mjs +2 -2
  208. package/esm2022/services/config/config.service.mjs +5 -5
  209. package/esm2022/services/config/urlStateConfig.service.mjs +5 -5
  210. package/esm2022/services/confirmation/confirmation.service.mjs +5 -5
  211. package/esm2022/services/confirmation/dialog/dialog.component.mjs +7 -7
  212. package/esm2022/services/data/data.service.mjs +5 -5
  213. package/esm2022/services/loading/loading.interceptor.mjs +4 -4
  214. package/esm2022/services/loading/loading.service.mjs +3 -3
  215. package/esm2022/services/local-storage/local-storage.service.mjs +3 -3
  216. package/esm2022/services/media-watcher/media-watcher.service.mjs +5 -5
  217. package/esm2022/services/platform/platform.service.mjs +4 -4
  218. package/esm2022/services/splash-screen/splash-screen.service.mjs +6 -6
  219. package/esm2022/services/title/title.service.mjs +4 -4
  220. package/esm2022/services/translation/translation.service.mjs +3 -3
  221. package/esm2022/services/utils/utils.service.mjs +54 -9
  222. package/fesm2022/cmat-animations.mjs +15 -15
  223. package/fesm2022/cmat-animations.mjs.map +1 -1
  224. package/fesm2022/cmat-components-adapter.mjs +11 -11
  225. package/fesm2022/cmat-components-adapter.mjs.map +1 -1
  226. package/fesm2022/cmat-components-breadcrumb.mjs +11 -11
  227. package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
  228. package/fesm2022/cmat-components-card.mjs +4 -4
  229. package/fesm2022/cmat-components-card.mjs.map +1 -1
  230. package/fesm2022/cmat-components-cascade.mjs +215 -123
  231. package/fesm2022/cmat-components-cascade.mjs.map +1 -1
  232. package/fesm2022/cmat-components-chip-input.mjs +153 -50
  233. package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
  234. package/fesm2022/cmat-components-custom-formly.mjs +1141 -0
  235. package/fesm2022/cmat-components-custom-formly.mjs.map +1 -0
  236. package/fesm2022/cmat-components-date-range.mjs +27 -18
  237. package/fesm2022/cmat-components-date-range.mjs.map +1 -1
  238. package/fesm2022/cmat-components-drawer.mjs +8 -8
  239. package/fesm2022/cmat-components-drawer.mjs.map +1 -1
  240. package/fesm2022/cmat-components-fullscreen.mjs +16 -73
  241. package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
  242. package/fesm2022/cmat-components-highlight.mjs +7 -7
  243. package/fesm2022/cmat-components-highlight.mjs.map +1 -1
  244. package/fesm2022/cmat-components-json-editor.mjs +3 -3
  245. package/fesm2022/cmat-components-masonry.mjs +4 -4
  246. package/fesm2022/cmat-components-masonry.mjs.map +1 -1
  247. package/fesm2022/cmat-components-material-color-picker.mjs +21 -11
  248. package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
  249. package/fesm2022/cmat-components-material-datetimepicker.mjs +189 -195
  250. package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
  251. package/fesm2022/cmat-components-navigation.mjs +166 -183
  252. package/fesm2022/cmat-components-navigation.mjs.map +1 -1
  253. package/fesm2022/cmat-components-pagination.mjs +20 -20
  254. package/fesm2022/cmat-components-pagination.mjs.map +1 -1
  255. package/fesm2022/cmat-components-password-strength.mjs +13 -13
  256. package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
  257. package/fesm2022/cmat-components-popover.mjs +464 -10
  258. package/fesm2022/cmat-components-popover.mjs.map +1 -1
  259. package/fesm2022/cmat-components-progress-bar.mjs +6 -6
  260. package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
  261. package/fesm2022/cmat-components-rating.mjs +121 -22
  262. package/fesm2022/cmat-components-rating.mjs.map +1 -1
  263. package/fesm2022/cmat-components-select-search.mjs +41 -41
  264. package/fesm2022/cmat-components-select-search.mjs.map +1 -1
  265. package/fesm2022/cmat-components-select-tree.mjs +285 -158
  266. package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
  267. package/fesm2022/cmat-components-timeline.mjs +12 -12
  268. package/fesm2022/cmat-components-timeline.mjs.map +1 -1
  269. package/fesm2022/cmat-components-toast.mjs +12 -12
  270. package/fesm2022/cmat-components-toast.mjs.map +1 -1
  271. package/fesm2022/cmat-components-transfer-picker.mjs +33 -33
  272. package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
  273. package/fesm2022/cmat-components-upload.mjs +366 -0
  274. package/fesm2022/cmat-components-upload.mjs.map +1 -0
  275. package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -6
  276. package/fesm2022/cmat-directives-autofocus.mjs +3 -3
  277. package/fesm2022/cmat-directives-debounce.mjs +9 -9
  278. package/fesm2022/cmat-directives-digit-only.mjs +6 -6
  279. package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
  280. package/fesm2022/cmat-lib-mock-api.mjs +6 -6
  281. package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
  282. package/fesm2022/cmat-pipes-bytes.mjs +3 -3
  283. package/fesm2022/cmat-pipes-date-format.mjs +3 -3
  284. package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
  285. package/fesm2022/cmat-pipes-group-by.mjs +3 -3
  286. package/fesm2022/cmat-pipes-keys.mjs +3 -3
  287. package/fesm2022/cmat-pipes-secure.mjs +4 -4
  288. package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
  289. package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
  290. package/fesm2022/cmat-services-alert.mjs +6 -6
  291. package/fesm2022/cmat-services-alert.mjs.map +1 -1
  292. package/fesm2022/cmat-services-config.mjs +7 -7
  293. package/fesm2022/cmat-services-config.mjs.map +1 -1
  294. package/fesm2022/cmat-services-confirmation.mjs +11 -11
  295. package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
  296. package/fesm2022/cmat-services-data.mjs +5 -5
  297. package/fesm2022/cmat-services-data.mjs.map +1 -1
  298. package/fesm2022/cmat-services-loading.mjs +6 -6
  299. package/fesm2022/cmat-services-loading.mjs.map +1 -1
  300. package/fesm2022/cmat-services-local-storage.mjs +3 -3
  301. package/fesm2022/cmat-services-media-watcher.mjs +4 -4
  302. package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
  303. package/fesm2022/cmat-services-platform.mjs +3 -3
  304. package/fesm2022/cmat-services-platform.mjs.map +1 -1
  305. package/fesm2022/cmat-services-splash-screen.mjs +5 -5
  306. package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
  307. package/fesm2022/cmat-services-title.mjs +3 -3
  308. package/fesm2022/cmat-services-title.mjs.map +1 -1
  309. package/fesm2022/cmat-services-translation.mjs +3 -3
  310. package/fesm2022/cmat-services-utils.mjs +53 -8
  311. package/fesm2022/cmat-services-utils.mjs.map +1 -1
  312. package/package.json +75 -63
  313. package/pipes/secure/secure-pipe.d.ts +1 -1
  314. package/services/alert/enum.d.ts +1 -1
  315. package/services/confirmation/confirmation.service.d.ts +1 -1
  316. package/services/data/data.service.d.ts +1 -1
  317. package/services/media-watcher/media-watcher.service.d.ts +1 -1
  318. package/services/title/title.service.d.ts +1 -1
  319. package/services/utils/utils.service.d.ts +1 -0
  320. package/styles/components/bundle.scss +18 -5
  321. package/styles/overrides/angular-material.scss +51 -52
  322. package/styles/tailwind.scss +2 -8
  323. package/styles/themes.scss +7 -7
  324. package/styles/user-themes.scss +1 -1
  325. package/tailwind/plugins/utilities.js +1 -1
  326. package/components/fullscreen/fullscreen.types.d.ts +0 -13
  327. package/esm2022/components/fullscreen/fullscreen.types.mjs +0 -2
@@ -1,17 +1,16 @@
1
+ import { A11yModule } from '@angular/cdk/a11y';
1
2
  import { coerceBooleanProperty, coerceStringArray } from '@angular/cdk/coercion';
3
+ import { hasModifierKey } from '@angular/cdk/keycodes';
2
4
  import { Overlay, OverlayConfig } from '@angular/cdk/overlay';
5
+ import { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';
3
6
  import { ComponentPortal } from '@angular/cdk/portal';
4
7
  import { DOCUMENT, NgClass } from '@angular/common';
5
8
  import { ChangeDetectionStrategy, Component, EventEmitter, Inject, InjectionToken, Input, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';
6
9
  import { Subject, Subscription, merge } from 'rxjs';
7
10
  import { filter, take } from 'rxjs/operators';
8
- import { createMissingDateImplError } from './datetimepicker-errors';
9
- import { mixinColor } from '@angular/material/core';
10
- import { fadeInCalendar, transformPanel } from './datetimepicker-animations';
11
- import { hasModifierKey } from '@angular/cdk/keycodes';
12
- import { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';
13
11
  import { CmatDatetimepickerCalendarComponent } from './calendar';
14
- import { A11yModule } from '@angular/cdk/a11y';
12
+ import { fadeInCalendar, transformPanel } from './datetimepicker-animations';
13
+ import { createMissingDateImplError } from './datetimepicker-errors';
15
14
  import * as i0 from "@angular/core";
16
15
  import * as i1 from "@angular/cdk/a11y";
17
16
  import * as i2 from "@angular/cdk/overlay";
@@ -30,21 +29,15 @@ export const CMAT_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {
30
29
  deps: [Overlay],
31
30
  useFactory: CMAT_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY
32
31
  };
33
- // Boilerplate for applying mixins to CmatDatetimepickerContent.
34
- const cmatDatetimepickerContentBase = mixinColor(class {
35
- constructor(_elementRef) {
36
- this._elementRef = _elementRef;
37
- }
38
- });
39
32
  /**
40
33
  * Component used as the content for the datepicker dialog and popup. We use this instead of using
41
34
  * MatCalendar directly as the content so we can control the initial focus. This also gives us a
42
35
  * place to put additional features of the popup that are not part of the calendar itself in the
43
36
  * future. (e.g. confirmation buttons).
44
37
  */
45
- export class CmatDatetimepickerContentComponent extends cmatDatetimepickerContentBase {
46
- constructor(elementRef, _changeDetectorRef) {
47
- super(elementRef);
38
+ export class CmatDatetimepickerContentComponent {
39
+ constructor(_elementRef, _changeDetectorRef) {
40
+ this._elementRef = _elementRef;
48
41
  this._changeDetectorRef = _changeDetectorRef;
49
42
  /** Emits when an animation has finished. */
50
43
  this.animationDone = new Subject();
@@ -64,17 +57,19 @@ export class CmatDatetimepickerContentComponent extends cmatDatetimepickerConten
64
57
  ngOnDestroy() {
65
58
  this.animationDone.complete();
66
59
  }
67
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatDatetimepickerContentComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
68
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: CmatDatetimepickerContentComponent, isStandalone: true, selector: "cmat-datetimepicker-content", inputs: { color: "color" }, host: { listeners: { "@transformPanel.done": "animationDone.next()" }, properties: { "class.cmat-datetimepicker-content-touch": "datetimepicker?.touchUi", "attr.mode": "datetimepicker.mode", "@transformPanel": "animationState" }, classAttribute: "cmat-datetimepicker-content" }, viewQueries: [{ propertyName: "_calendar", first: true, predicate: CmatDatetimepickerCalendarComponent, descendants: true, static: true }], exportAs: ["cmatDatetimepickerContent"], usesInheritance: true, ngImport: i0, template: "<div cdkTrapFocus role=\"dialog\" [attr.aria-modal]=\"true\" [attr.aria-labelledby]=\"dialogLabelId ?? undefined\"\r\n [attr.mode]=\"datetimepicker.mode\" class=\"cmat-datetimepicker-content-container\">\r\n <cmat-datetimepicker-calendar [id]=\"datetimepicker.id\" [ngClass]=\"datetimepicker.panelClass\"\r\n [attr.mode]=\"datetimepicker.mode\" [type]=\"datetimepicker.type\" [startAt]=\"datetimepicker.startAt\"\r\n [startView]=\"datetimepicker.startView\" [maxDate]=\"datetimepicker.maxDate\" [minDate]=\"datetimepicker.minDate\"\r\n [dateFilter]=\"datetimepicker.dateFilter\" [multiYearSelector]=\"datetimepicker.multiYearSelector\"\r\n [preventSameDateTimeSelection]=\"datetimepicker.preventSameDateTimeSelection\"\r\n [timeInterval]=\"datetimepicker.timeInterval\" [twelvehour]=\"datetimepicker.twelvehour\"\r\n [selected]=\"datetimepicker.selected\" [timeInput]=\"datetimepicker.timeInput\"\r\n (selectedChange)=\"datetimepicker.select($event)\" (viewChanged)=\"datetimepicker.viewChange($event)\"\r\n (userSelection)=\"datetimepicker.close()\" [@fadeInCalendar]=\"'enter'\">\r\n </cmat-datetimepicker-calendar>\r\n</div>", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: CmatDatetimepickerCalendarComponent, selector: "cmat-datetimepicker-calendar", inputs: ["multiYearSelector", "startView", "twelvehour", "timeInterval", "dateFilter", "preventSameDateTimeSelection", "type", "startAt", "timeInput", "selected", "minDate", "maxDate"], outputs: ["userSelection", "selectedChange", "viewChanged"], exportAs: ["cmatDatetimepickerCalendar"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CmatDatetimepickerContentComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
61
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: CmatDatetimepickerContentComponent, isStandalone: true, selector: "cmat-datetimepicker-content", inputs: { color: "color" }, host: { listeners: { "@transformPanel.done": "animationDone.next()" }, properties: { "class": "color ? \"mat-\" + color : \"\"", "class.cmat-datetimepicker-content-touch": "datetimepicker?.touchUi", "attr.mode": "datetimepicker.mode", "@transformPanel": "animationState" }, classAttribute: "cmat-datetimepicker-content" }, viewQueries: [{ propertyName: "_calendar", first: true, predicate: CmatDatetimepickerCalendarComponent, descendants: true, static: true }], exportAs: ["cmatDatetimepickerContent"], ngImport: i0, template: "<div cdkTrapFocus role=\"dialog\" [attr.aria-modal]=\"true\" [attr.aria-labelledby]=\"dialogLabelId ?? undefined\"\r\n [attr.mode]=\"datetimepicker.mode\" class=\"cmat-datetimepicker-content-container\">\r\n <cmat-datetimepicker-calendar [id]=\"datetimepicker.id\" [ngClass]=\"datetimepicker.panelClass\"\r\n [attr.mode]=\"datetimepicker.mode\" [type]=\"datetimepicker.type\" [startAt]=\"datetimepicker.startAt\"\r\n [startView]=\"datetimepicker.startView\" [maxDate]=\"datetimepicker.maxDate\" [minDate]=\"datetimepicker.minDate\"\r\n [dateFilter]=\"datetimepicker.dateFilter\" [multiYearSelector]=\"datetimepicker.multiYearSelector\"\r\n [preventSameDateTimeSelection]=\"datetimepicker.preventSameDateTimeSelection\"\r\n [timeInterval]=\"datetimepicker.timeInterval\" [twelvehour]=\"datetimepicker.twelvehour\"\r\n [selected]=\"datetimepicker.selected\" [timeInput]=\"datetimepicker.timeInput\"\r\n (selectedChange)=\"datetimepicker.select($event)\" (viewChanged)=\"datetimepicker.viewChange($event)\"\r\n (userSelection)=\"datetimepicker.close()\" [@fadeInCalendar]=\"'enter'\">\r\n </cmat-datetimepicker-calendar>\r\n</div>", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: CmatDatetimepickerCalendarComponent, selector: "cmat-datetimepicker-calendar", inputs: ["multiYearSelector", "startView", "twelvehour", "timeInterval", "dateFilter", "preventSameDateTimeSelection", "type", "startAt", "timeInput", "selected", "minDate", "maxDate"], outputs: ["userSelection", "selectedChange", "viewChanged"], exportAs: ["cmatDatetimepickerCalendar"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [
69
62
  transformPanel,
70
63
  fadeInCalendar,
71
64
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
72
65
  }
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatDatetimepickerContentComponent, decorators: [{
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CmatDatetimepickerContentComponent, decorators: [{
74
67
  type: Component,
75
68
  args: [{ selector: 'cmat-datetimepicker-content', host: {
76
69
  'class': 'cmat-datetimepicker-content',
77
70
  // eslint-disable-next-line @typescript-eslint/naming-convention
71
+ '[class]': 'color ? "mat-" + color : ""',
72
+ // eslint-disable-next-line @typescript-eslint/naming-convention
78
73
  '[class.cmat-datetimepicker-content-touch]': 'datetimepicker?.touchUi',
79
74
  // eslint-disable-next-line @typescript-eslint/naming-convention
80
75
  '[attr.mode]': 'datetimepicker.mode',
@@ -470,10 +465,10 @@ export class CmatDatetimepickerComponent {
470
465
  hasModifierKey(event, 'altKey') &&
471
466
  event.code === 'ArrowUp')))));
472
467
  }
473
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatDatetimepickerComponent, deps: [{ token: i2.Overlay }, { token: i0.NgZone }, { token: i0.ViewContainerRef }, { token: CMAT_DATETIMEPICKER_SCROLL_STRATEGY }, { token: i3.DatetimeAdapter, optional: true }, { token: i4.Directionality, optional: true }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
474
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: CmatDatetimepickerComponent, isStandalone: true, selector: "cmat-datetimepicker", inputs: { startView: "startView", mode: "mode", timeInterval: "timeInterval", preventSameDateTimeSelection: "preventSameDateTimeSelection", xPosition: "xPosition", yPosition: "yPosition", multiYearSelector: "multiYearSelector", twelvehour: "twelvehour", panelClass: "panelClass", opened: "opened", color: "color", startAt: "startAt", type: "type", timeInput: "timeInput", touchUi: "touchUi", disabled: "disabled", restoreFocus: "restoreFocus" }, outputs: { selectedChanged: "selectedChanged", openedStream: "openedStream", closedStream: "closedStream", viewChanged: "viewChanged" }, exportAs: ["cmatDatetimepicker"], ngImport: i0, template: '', isInline: true, styles: [".cmat-datetimepicker-calendar-header,.cmat-datetimepicker-calendar-body-cell-content.cmat-datetimepicker-calendar-body-selected{color:#fff!important}.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected).cmat-datetimepicker-calendar-body-today{border-color:var(--cmat-text-hint)}.cmat-datetimepicker-calendar-body-cell:not(.cmat-datetimepicker-calendar-body-disabled):hover>.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected),.cmat-datetimepicker-calendar-body-active>.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected){background-color:rgba(var(--cmat-primary-rgb),.3)}.cmat-datetimepicker-calendar-body-disabled>.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected){color:var(--cmat-text-disabled)}.cmat-datetimepicker-calendar-body-disabled>.cmat-datetimepicker-calendar-body-today:not(.cmat-datetimepicker-calendar-body-selected){border-color:rgba(var(--cmat-text-disabled),.8)}.cmat-datetimepicker-calendar-body-disabled>.cmat-datetimepicker-calendar-body-selected{background-color:rgba(var(--cmat-primary-rgb),.4)}.cmat-datetimepicker-calendar-previous-button.disabled,.cmat-datetimepicker-calendar-next-button.disabled{color:var(--cmat-text-disabled)}.cmat-datetimepicker-clock-wrapper{background-color:var(--cmat-divider)}.cmat-datetimepicker-clock-cell.cmat-datetimepicker-clock-cell-selected{color:#fff!important}.cmat-datetimepicker-clock-cell.cmat-datetimepicker-clock-cell-disabled{color:var(--cmat-text-disabled)}.cmat-datetimepicker-time-input{background-color:var(--cmat-text-disabled)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-active{background-color:rgba(var(--cmat-primary-rgb),.2)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-active:focus{border-color:var(--cmat-primary);background-color:var(--cmat-divider)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-active:focus::placeholder{color:rgba(var(--cmat-primary-rgb),.6)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-warning{border-color:var(--cmat-warn)}.cmat-datetimepicker-time-am.mat-mdc-button,.cmat-datetimepicker-time-pm.mat-mdc-button{color:var(--cmat-text-hint);border-color:var(--cmat-text-hint)}.cmat-datetimepicker-time-am.mat-mdc-button.cmat-datetimepicker-time-ampm-active,.cmat-datetimepicker-time-pm.mat-mdc-button.cmat-datetimepicker-time-ampm-active{background-color:rgba(var(--cmat-accent-rgb),.2)}.cmat-datetimepicker-content{display:block;border-radius:4px;overflow:hidden}.cmat-datetimepicker-content-container{display:flex;flex-direction:column;justify-content:space-between}.cmat-datetimepicker-content .cmat-calendar{width:296px;height:424px}.cmat-datetimepicker-content .cmat-calendar.cmat-datetimepicker-calendar-with-time-input{height:490px}.cmat-datetimepicker-content-touch{display:block;position:relative;overflow:visible}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container{min-height:300px;max-height:850px;min-width:250px;max-width:750px}.cmat-datetimepicker-content-touch .cmat-datetimepicker-calendar{width:100%;height:auto}@media all and (orientation: landscape){.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto],.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape]{width:120vh;height:100%;min-height:80vh}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto] .cmat-datetimepicker-calendar,.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape] .cmat-datetimepicker-calendar{width:auto;height:100%}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait]{width:64vh;height:90vh}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait] .cmat-datetimepicker-calendar{width:100%;height:auto}}@media all and (orientation: portrait){.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto],.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait]{width:80vw;height:120vw}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto] .cmat-datetimepicker-calendar,.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait] .cmat-datetimepicker-calendar{width:100%;height:auto}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape]{width:90vw;height:64vw}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape] .cmat-datetimepicker-calendar{width:auto;height:100%}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container-with-actions{height:135vw}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
468
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CmatDatetimepickerComponent, deps: [{ token: i2.Overlay }, { token: i0.NgZone }, { token: i0.ViewContainerRef }, { token: CMAT_DATETIMEPICKER_SCROLL_STRATEGY }, { token: i3.DatetimeAdapter, optional: true }, { token: i4.Directionality, optional: true }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
469
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: CmatDatetimepickerComponent, isStandalone: true, selector: "cmat-datetimepicker", inputs: { startView: "startView", mode: "mode", timeInterval: "timeInterval", preventSameDateTimeSelection: "preventSameDateTimeSelection", xPosition: "xPosition", yPosition: "yPosition", multiYearSelector: "multiYearSelector", twelvehour: "twelvehour", panelClass: "panelClass", opened: "opened", color: "color", startAt: "startAt", type: "type", timeInput: "timeInput", touchUi: "touchUi", disabled: "disabled", restoreFocus: "restoreFocus" }, outputs: { selectedChanged: "selectedChanged", openedStream: "openedStream", closedStream: "closedStream", viewChanged: "viewChanged" }, exportAs: ["cmatDatetimepicker"], ngImport: i0, template: '', isInline: true, styles: [".cmat-datetimepicker-calendar-header,.cmat-datetimepicker-calendar-body-cell-content.cmat-datetimepicker-calendar-body-selected{color:#fff!important}.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected).cmat-datetimepicker-calendar-body-today{border-color:var(--cmat-text-hint)}.cmat-datetimepicker-calendar-body-cell:not(.cmat-datetimepicker-calendar-body-disabled):hover>.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected),.cmat-datetimepicker-calendar-body-active>.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected){background-color:rgba(var(--cmat-primary-rgb),.3)}.cmat-datetimepicker-calendar-body-disabled>.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected){color:var(--cmat-text-disabled)}.cmat-datetimepicker-calendar-body-disabled>.cmat-datetimepicker-calendar-body-today:not(.cmat-datetimepicker-calendar-body-selected){border-color:rgba(var(--cmat-text-disabled),.8)}.cmat-datetimepicker-calendar-body-disabled>.cmat-datetimepicker-calendar-body-selected{background-color:rgba(var(--cmat-primary-rgb),.4)}.cmat-datetimepicker-calendar-previous-button.disabled,.cmat-datetimepicker-calendar-next-button.disabled{color:var(--cmat-text-disabled)}.cmat-datetimepicker-clock-wrapper{background-color:var(--cmat-divider)}.cmat-datetimepicker-clock-cell.cmat-datetimepicker-clock-cell-selected{color:#fff!important}.cmat-datetimepicker-clock-cell.cmat-datetimepicker-clock-cell-disabled{color:var(--cmat-text-disabled)}.cmat-datetimepicker-time-input{background-color:var(--cmat-text-disabled)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-active{background-color:rgba(var(--cmat-primary-rgb),.2)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-active:focus{border-color:var(--cmat-primary);background-color:var(--cmat-divider)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-active:focus::placeholder{color:rgba(var(--cmat-primary-rgb),.6)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-warning{border-color:var(--cmat-warn)}.cmat-datetimepicker-time-am.mat-mdc-button,.cmat-datetimepicker-time-pm.mat-mdc-button{color:var(--cmat-text-hint);border-color:var(--cmat-text-hint)}.cmat-datetimepicker-time-am.mat-mdc-button.cmat-datetimepicker-time-ampm-active,.cmat-datetimepicker-time-pm.mat-mdc-button.cmat-datetimepicker-time-ampm-active{background-color:rgba(var(--cmat-accent-rgb),.2)}.cmat-datetimepicker-content{display:block;border-radius:4px;overflow:hidden}.cmat-datetimepicker-content-container{display:flex;flex-direction:column;justify-content:space-between}.cmat-datetimepicker-content .cmat-calendar{width:296px;height:424px}.cmat-datetimepicker-content .cmat-calendar.cmat-datetimepicker-calendar-with-time-input{height:490px}.cmat-datetimepicker-content-touch{display:block;position:relative;overflow:visible}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container{min-height:300px;max-height:850px;min-width:250px;max-width:750px}.cmat-datetimepicker-content-touch .cmat-datetimepicker-calendar{width:100%;height:auto}@media all and (orientation: landscape){.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto],.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape]{width:120vh;height:100%;min-height:80vh}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto] .cmat-datetimepicker-calendar,.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape] .cmat-datetimepicker-calendar{width:auto;height:100%}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait]{width:64vh;height:90vh}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait] .cmat-datetimepicker-calendar{width:100%;height:auto}}@media all and (orientation: portrait){.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto],.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait]{width:80vw;height:120vw}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto] .cmat-datetimepicker-calendar,.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait] .cmat-datetimepicker-calendar{width:100%;height:auto}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape]{width:90vw;height:64vw}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape] .cmat-datetimepicker-calendar{width:auto;height:100%}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container-with-actions{height:135vw}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
475
470
  }
476
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatDatetimepickerComponent, decorators: [{
471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CmatDatetimepickerComponent, decorators: [{
477
472
  type: Component,
478
473
  args: [{ selector: 'cmat-datetimepicker', exportAs: 'cmatDatetimepicker', template: '', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, preserveWhitespaces: false, standalone: true, styles: [".cmat-datetimepicker-calendar-header,.cmat-datetimepicker-calendar-body-cell-content.cmat-datetimepicker-calendar-body-selected{color:#fff!important}.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected).cmat-datetimepicker-calendar-body-today{border-color:var(--cmat-text-hint)}.cmat-datetimepicker-calendar-body-cell:not(.cmat-datetimepicker-calendar-body-disabled):hover>.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected),.cmat-datetimepicker-calendar-body-active>.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected){background-color:rgba(var(--cmat-primary-rgb),.3)}.cmat-datetimepicker-calendar-body-disabled>.cmat-datetimepicker-calendar-body-cell-content:not(.cmat-datetimepicker-calendar-body-selected){color:var(--cmat-text-disabled)}.cmat-datetimepicker-calendar-body-disabled>.cmat-datetimepicker-calendar-body-today:not(.cmat-datetimepicker-calendar-body-selected){border-color:rgba(var(--cmat-text-disabled),.8)}.cmat-datetimepicker-calendar-body-disabled>.cmat-datetimepicker-calendar-body-selected{background-color:rgba(var(--cmat-primary-rgb),.4)}.cmat-datetimepicker-calendar-previous-button.disabled,.cmat-datetimepicker-calendar-next-button.disabled{color:var(--cmat-text-disabled)}.cmat-datetimepicker-clock-wrapper{background-color:var(--cmat-divider)}.cmat-datetimepicker-clock-cell.cmat-datetimepicker-clock-cell-selected{color:#fff!important}.cmat-datetimepicker-clock-cell.cmat-datetimepicker-clock-cell-disabled{color:var(--cmat-text-disabled)}.cmat-datetimepicker-time-input{background-color:var(--cmat-text-disabled)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-active{background-color:rgba(var(--cmat-primary-rgb),.2)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-active:focus{border-color:var(--cmat-primary);background-color:var(--cmat-divider)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-active:focus::placeholder{color:rgba(var(--cmat-primary-rgb),.6)}.cmat-datetimepicker-time-input.cmat-datetimepicker-time-input-warning{border-color:var(--cmat-warn)}.cmat-datetimepicker-time-am.mat-mdc-button,.cmat-datetimepicker-time-pm.mat-mdc-button{color:var(--cmat-text-hint);border-color:var(--cmat-text-hint)}.cmat-datetimepicker-time-am.mat-mdc-button.cmat-datetimepicker-time-ampm-active,.cmat-datetimepicker-time-pm.mat-mdc-button.cmat-datetimepicker-time-ampm-active{background-color:rgba(var(--cmat-accent-rgb),.2)}.cmat-datetimepicker-content{display:block;border-radius:4px;overflow:hidden}.cmat-datetimepicker-content-container{display:flex;flex-direction:column;justify-content:space-between}.cmat-datetimepicker-content .cmat-calendar{width:296px;height:424px}.cmat-datetimepicker-content .cmat-calendar.cmat-datetimepicker-calendar-with-time-input{height:490px}.cmat-datetimepicker-content-touch{display:block;position:relative;overflow:visible}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container{min-height:300px;max-height:850px;min-width:250px;max-width:750px}.cmat-datetimepicker-content-touch .cmat-datetimepicker-calendar{width:100%;height:auto}@media all and (orientation: landscape){.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto],.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape]{width:120vh;height:100%;min-height:80vh}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto] .cmat-datetimepicker-calendar,.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape] .cmat-datetimepicker-calendar{width:auto;height:100%}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait]{width:64vh;height:90vh}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait] .cmat-datetimepicker-calendar{width:100%;height:auto}}@media all and (orientation: portrait){.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto],.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait]{width:80vw;height:120vw}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=auto] .cmat-datetimepicker-calendar,.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=portrait] .cmat-datetimepicker-calendar{width:100%;height:auto}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape]{width:90vw;height:64vw}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container[mode=landscape] .cmat-datetimepicker-calendar{width:auto;height:100%}.cmat-datetimepicker-content-touch .cmat-datetimepicker-content-container-with-actions{height:135vw}}\n"] }]
479
474
  }], ctorParameters: () => [{ type: i2.Overlay }, { type: i0.NgZone }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
@@ -531,4 +526,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
531
526
  }], restoreFocus: [{
532
527
  type: Input
533
528
  }] } });
534
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWVwaWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvbWF0ZXJpYWwtZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXIudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvbWF0ZXJpYWwtZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXItY29udGVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pGLE9BQU8sRUFBNkQsT0FBTyxFQUFFLGFBQWEsRUFBOEIsTUFBTSxzQkFBc0IsQ0FBQztBQUNySixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFHVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBRVQsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzlDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXJFLE9BQU8sRUFBWSxVQUFVLEVBQWdCLE1BQU0sd0JBQXdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7O0FBRS9DLGlFQUFpRTtBQUNqRSxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUUxQixzRkFBc0Y7QUFDdEYsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsSUFBSSxjQUFjLENBQ2pFLHFDQUFxQyxDQUN4QyxDQUFDO0FBRUYsZ0VBQWdFO0FBQ2hFLE1BQU0sVUFBVSwyQ0FBMkMsQ0FBQyxPQUFnQjtJQUN4RSxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sb0RBQW9ELEdBQUc7SUFDaEUsT0FBTyxFQUFFLG1DQUFtQztJQUM1QyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7SUFDZixVQUFVLEVBQUUsMkNBQTJDO0NBQzFELENBQUM7QUFFRixnRUFBZ0U7QUFDaEUsTUFBTSw2QkFBNkIsR0FBRyxVQUFVLENBQzVDO0lBQ0ksWUFBbUIsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7SUFBSSxDQUFDO0NBQ2xELENBQ0osQ0FBQztBQUVGOzs7OztHQUtHO0FBMEJILE1BQU0sT0FBTyxrQ0FBc0MsU0FBUSw2QkFBNkI7SUFrQnBGLFlBQVksVUFBc0IsRUFBVSxrQkFBcUM7UUFDN0UsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRHNCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFOakYsNENBQTRDO1FBQ25DLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU3Qyx1REFBdUQ7UUFDdkQsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO0lBSXBDLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxRixDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzhHQXJDUSxrQ0FBa0M7a0dBQWxDLGtDQUFrQyxxYkFDaEMsbUNBQW1DLDhIQ2xHbEQsMHFDQVlNLDJDRG1GUSxVQUFVLDBMQUFFLG1DQUFtQywwV0FBRSxPQUFPLHNFQVJ0RDtZQUNSLGNBQWM7WUFDZCxjQUFjO1NBQ2pCOzsyRkFPUSxrQ0FBa0M7a0JBekI5QyxTQUFTOytCQUNJLDZCQUE2QixRQUdqQzt3QkFDRixPQUFPLEVBQUUsNkJBQTZCO3dCQUN0QyxnRUFBZ0U7d0JBQ2hFLDJDQUEyQyxFQUFFLHlCQUF5Qjt3QkFDdEUsZ0VBQWdFO3dCQUNoRSxhQUFhLEVBQUUscUJBQXFCO3dCQUNwQyxnRUFBZ0U7d0JBQ2hFLG1CQUFtQixFQUFFLGdCQUFnQjt3QkFDckMsZ0VBQWdFO3dCQUNoRSx3QkFBd0IsRUFBRSxzQkFBc0I7cUJBQ25ELGNBQ1c7d0JBQ1IsY0FBYzt3QkFDZCxjQUFjO3FCQUNqQixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDLDJCQUEyQixjQUN6QixJQUFJLFdBQ1AsQ0FBQyxVQUFVLEVBQUUsbUNBQW1DLEVBQUUsT0FBTyxDQUFDOytHQUdELFNBQVM7c0JBQTFFLFNBQVM7dUJBQUMsbUNBQW1DLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUM5QyxLQUFLO3NCQUF0QixLQUFLOztBQWdEVixNQUFNLE9BQU8sMkJBQTJCO0lBNERwQyxZQUNZLFFBQWlCLEVBQ2pCLE9BQWUsRUFDZixpQkFBbUMsRUFDVSxlQUFvQixFQUNyRCxZQUFnQyxFQUNoQyxJQUFvQixFQUNGLFNBQWM7UUFONUMsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2Ysc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNVLG9CQUFlLEdBQWYsZUFBZSxDQUFLO1FBQ3JELGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUNoQyxTQUFJLEdBQUosSUFBSSxDQUFnQjtRQUNGLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFsRXhELGtEQUFrRDtRQUN6QyxjQUFTLEdBQXFCLE9BQU8sQ0FBQztRQUN0QyxTQUFJLEdBQTJCLE1BQU0sQ0FBQztRQUN0QyxpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUNsQyw0Q0FBNEM7UUFDbkMsaUNBQTRCLEdBQUcsS0FBSyxDQUFDO1FBRTlDLDhEQUE4RDtRQUU5RCxjQUFTLEdBQW9DLE9BQU8sQ0FBQztRQUVyRCw4REFBOEQ7UUFFOUQsY0FBUyxHQUFvQyxPQUFPLENBQUM7UUFFM0Msb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO1FBQ2xELGlEQUFpRDtRQUN2QyxpQkFBWSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3RFLGlEQUFpRDtRQUN2QyxpQkFBWSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3RFLDZDQUE2QztRQUNuQyxnQkFBVyxHQUFtQyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUM3RixvQ0FBb0M7UUFFcEMsMENBQTBDO1FBQzFDLE9BQUUsR0FBRyx1QkFBdUIsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1FBR2xELDZDQUE2QztRQUM3QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFFaEMsbUJBQWMsR0FBYSxJQUFJLENBQUM7UUFReEMseUVBQXlFO1FBQ2pFLDhCQUF5QixHQUF1QixJQUFJLENBQUM7UUFFN0QsaUdBQWlHO1FBQ3pGLDBCQUFxQixHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsV0FBVyxDQUFDO1FBRTlDLHVCQUFrQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFFeEMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFHaEIsVUFBSyxHQUEyQixVQUFVLENBQUM7UUFDM0MsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBVXpCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BCLE1BQU0sMEJBQTBCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUN2RDtJQUNMLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsSUFDSSxpQkFBaUI7UUFDakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksaUJBQWlCLENBQUMsS0FBYztRQUNoQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELDZDQUE2QztJQUM3Qyw4REFBOEQ7SUFDOUQsSUFDSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILDhEQUE4RDtJQUM5RCxJQUNJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLEtBQXdCO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELG9DQUFvQztJQUNwQyw4REFBOEQ7SUFDOUQsSUFDSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFjO1FBQ3JCLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRUQsNkRBQTZEO0lBQzdELDhEQUE4RDtJQUM5RCxJQUNJLEtBQUs7UUFDTCxPQUFPLENBQ0gsSUFBSSxDQUFDLE1BQU07WUFDWCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FDdEYsQ0FBQztJQUNOLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFtQjtRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELDhEQUE4RDtJQUM5RCxJQUNJLE9BQU87UUFDUCw2RkFBNkY7UUFDN0YscUJBQXFCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLElBQWM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsSUFDSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxLQUE2QjtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNILDhEQUE4RDtJQUM5RCxJQUNJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUFjO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILDhEQUE4RDtJQUM5RCxJQUNJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEtBQWM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsd0RBQXdEO0lBQ3hELDhEQUE4RDtJQUM5RCxJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlDLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7WUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDhEQUE4RDtJQUM5RCxJQUNJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLEtBQWM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLDhEQUE4RDtJQUM5RCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLEtBQWU7UUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELG1DQUFtQztJQUNuQyw4REFBOEQ7SUFDOUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztJQUNwRSxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLDhEQUE4RDtJQUM5RCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDO0lBQ3BFLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztJQUMzRSxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxLQUEwQztRQUNwRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixNQUFNLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1NBQzlFO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCO1lBQ25CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFHRCx5QkFBeUI7SUFDekIsSUFBSTtRQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzlCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDM0IsTUFBTSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztTQUMvRTtRQUVELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxpQ0FBaUMsRUFBRSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsS0FBSztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBRUQsTUFBTSxlQUFlLEdBQ2pCLElBQUksQ0FBQyxhQUFhO1lBQ2xCLElBQUksQ0FBQyx5QkFBeUI7WUFDOUIsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQztRQUUvRCxNQUFNLGFBQWEsR0FBRyxHQUFTLEVBQUU7WUFDN0IsK0NBQStDO1lBQy9DLHlDQUF5QztZQUN6QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDNUI7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ2xELFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzlCLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO2dCQUVuRCx5RUFBeUU7Z0JBQ3pFLG9FQUFvRTtnQkFDcEUsSUFDSSxlQUFlO29CQUNmLENBQUMsQ0FBQyxhQUFhO3dCQUNYLGFBQWEsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWE7d0JBQzlDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQ3JEO29CQUNFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLEVBQUUsQ0FBQztpQkFDM0M7Z0JBRUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLGVBQWUsRUFBRTtZQUNqQiwwRkFBMEY7WUFDMUYsMkZBQTJGO1lBQzNGLHlGQUF5RjtZQUN6Rix1RkFBdUY7WUFDdkYsMkNBQTJDO1lBQzNDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0gsYUFBYSxFQUFFLENBQUM7U0FDbkI7SUFDTCxDQUFDO0lBQ0QsNkJBQTZCO0lBQzdCLE1BQU0sQ0FBQyxJQUFPO1FBQ1YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBc0I7UUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHFCQUFxQixDQUFDLFFBQStDO1FBQ3pFLFFBQVEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQy9CLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM1QixRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzFFLENBQUM7SUFFRCwyQ0FBMkM7SUFDbkMsWUFBWTtRQUNoQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUU3RCxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FDOUIsa0NBQWtDLEVBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDdkQsSUFBSSxhQUFhLENBQUM7WUFDZCxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDcEYsV0FBVyxFQUFFLElBQUk7WUFDakIsYUFBYSxFQUFFO2dCQUNYLFFBQVEsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztnQkFDM0UsSUFBSSxDQUFDLHFCQUFxQjthQUM3QjtZQUNELFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNwQixjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzFGLFVBQVUsRUFBRSx1QkFBdUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtTQUNyRSxDQUFDLENBQ0wsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQztRQUNqRCxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU5QyxJQUFJLE9BQU8sRUFBRTtZQUNULGNBQWMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDM0Q7UUFFRCxJQUFJLFFBQVEsRUFBRTtZQUNWLGNBQWMsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFxQyxFQUFFLEVBQUU7WUFDakYsSUFBSSxLQUFLLEVBQUU7Z0JBQ1AsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQzFCO1lBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhELHNGQUFzRjtRQUN0RixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUNwRjtJQUNMLENBQUM7SUFFRCxvQ0FBb0M7SUFDNUIsZUFBZTtRQUNuQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQ2hEO0lBQ0wsQ0FBQztJQUVELDBFQUEwRTtJQUNsRSxrQkFBa0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNyRixDQUFDO0lBRUQsMEVBQTBFO0lBQ2xFLG9CQUFvQjtRQUN4QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUTthQUN6QixRQUFRLEVBQUU7YUFDVixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLEVBQUUsQ0FBQzthQUN6RSxxQkFBcUIsQ0FBQyw4QkFBOEIsQ0FBQzthQUNyRCxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7YUFDN0Isa0JBQWtCLENBQUMsQ0FBQyxDQUFDO2FBQ3JCLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssc0JBQXNCLENBQUMsUUFBMkM7UUFDdEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzVELE1BQU0sVUFBVSxHQUFHLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMvRCxNQUFNLFVBQVUsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUV6RCxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDMUI7Z0JBQ0ksT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsUUFBUSxFQUFFLFFBQVE7YUFDckI7WUFDRDtnQkFDSSxPQUFPLEVBQUUsUUFBUTtnQkFDakIsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixRQUFRLEVBQUUsVUFBVTthQUN2QjtZQUNEO2dCQUNJLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixPQUFPLEVBQUUsVUFBVTtnQkFDbkIsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLFFBQVEsRUFBRSxRQUFRO2FBQ3JCO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixRQUFRLEVBQUUsVUFBVTtnQkFDcEIsUUFBUSxFQUFFLFVBQVU7YUFDdkI7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsbUZBQW1GO0lBQzNFLGVBQWUsQ0FBQyxVQUFzQjtRQUMxQyxPQUFPLEtBQUssQ0FDUixVQUFVLENBQUMsYUFBYSxFQUFFLEVBQzFCLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFDeEIsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FDM0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsOEZBQThGO1FBQzlGLENBQ0ksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxDQUFDLElBQUksQ0FBQyxtQkFBbUI7Z0JBQ3JCLGNBQWMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO2dCQUMvQixLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUNoQyxDQUNBLENBQ0osQ0FDSixDQUFDO0lBQ04sQ0FBQzs4R0FqZVEsMkJBQTJCLCtGQWdFeEIsbUNBQW1DLDBHQUd2QixRQUFRO2tHQW5FdkIsMkJBQTJCLHdyQkFQMUIsRUFBRTs7MkZBT0gsMkJBQTJCO2tCQVZ2QyxTQUFTOytCQUNJLHFCQUFxQixZQUNyQixvQkFBb0IsWUFDcEIsRUFBRSxtQkFFSyx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLHVCQUNoQixLQUFLLGNBQ2QsSUFBSTs7MEJBa0VYLE1BQU07MkJBQUMsbUNBQW1DOzswQkFDMUMsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxRQUFRO3lDQWpFdkIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFHSSxlQUFlO3NCQUF4QixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUcsWUFBWTtzQkFBckIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNO2dCQXFESCxpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBV0YsVUFBVTtzQkFEYixLQUFLO2dCQWNGLFVBQVU7c0JBRGIsS0FBSztnQkFXRixNQUFNO3NCQURULEtBQUs7Z0JBV0YsS0FBSztzQkFEUixLQUFLO2dCQWNGLE9BQU87c0JBRFYsS0FBSztnQkFhRixJQUFJO3NCQURQLEtBQUs7Z0JBZUYsU0FBUztzQkFEWixLQUFLO2dCQWNGLE9BQU87c0JBRFYsS0FBSztnQkFZRixRQUFRO3NCQURYLEtBQUs7Z0JBc0JGLFlBQVk7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZVN0cmluZ0FycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LCBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5LCBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmLCBTY3JvbGxTdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7IERPQ1VNRU5ULCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICAgIEFmdGVyQ29udGVudEluaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgQ29tcG9uZW50UmVmLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEluamVjdCxcclxuICAgIEluamVjdGlvblRva2VuLFxyXG4gICAgSW5wdXQsXHJcbiAgICBOZ1pvbmUsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxuICAgIFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIG1lcmdlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGF0ZXRpbWVBZGFwdGVyIH0gZnJvbSAnY21hdC9jb21wb25lbnRzL2FkYXB0ZXInO1xyXG5cclxuaW1wb3J0IHsgY3JlYXRlTWlzc2luZ0RhdGVJbXBsRXJyb3IgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLWVycm9ycyc7XHJcbmltcG9ydCB7IENtYXREYXRldGltZXBpY2tlckZpbHRlclR5cGUgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLWZpbHRlcnR5cGUnO1xyXG5pbXBvcnQgeyBDbWF0RGF0ZXRpbWVwaWNrZXJJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItaW5wdXQnO1xyXG5pbXBvcnQgeyBDbWF0Q2FsZW5kYXJWaWV3LCBDbWF0RGF0ZXRpbWVwaWNrZXJNb2RlLCBDbWF0RGF0ZXRpbWVwaWNrZXJUeXBlLCBEYXRldGltZXBpY2tlckRyb3Bkb3duUG9zaXRpb25YLCBEYXRldGltZXBpY2tlckRyb3Bkb3duUG9zaXRpb25ZIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci10eXBlcyc7XHJcbmltcG9ydCB7IENhbkNvbG9yLCBtaXhpbkNvbG9yLCBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgZmFkZUluQ2FsZW5kYXIsIHRyYW5zZm9ybVBhbmVsIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1hbmltYXRpb25zJztcclxuaW1wb3J0IHsgaGFzTW9kaWZpZXJLZXkgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xyXG5pbXBvcnQgeyBfZ2V0Rm9jdXNlZEVsZW1lbnRQaWVyY2VTaGFkb3dEb20gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xyXG5pbXBvcnQgeyBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXInO1xyXG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5cclxuLyoqIFVzZWQgdG8gZ2VuZXJhdGUgYSB1bmlxdWUgSUQgZm9yIGVhY2ggZGF0ZXBpY2tlciBpbnN0YW5jZS4gKi9cclxubGV0IGRhdGV0aW1lcGlja2VyVWlkID0gMDtcclxuXHJcbi8qKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBkZXRlcm1pbmVzIHRoZSBzY3JvbGwgaGFuZGxpbmcgd2hpbGUgdGhlIGNhbGVuZGFyIGlzIG9wZW4uICovXHJcbmV4cG9ydCBjb25zdCBDTUFUX0RBVEVUSU1FUElDS0VSX1NDUk9MTF9TVFJBVEVHWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjwoKSA9PiBTY3JvbGxTdHJhdGVneT4oXHJcbiAgICAnY21hdC1kYXRldGltZXBpY2tlci1zY3JvbGwtc3RyYXRlZ3knXHJcbik7XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXHJcbmV4cG9ydCBmdW5jdGlvbiBDTUFUX0RBVEVUSU1FUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZKG92ZXJsYXk6IE92ZXJsYXkpOiAoKSA9PiBTY3JvbGxTdHJhdGVneSB7XHJcbiAgICByZXR1cm4gKCkgPT4gb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IENNQVRfREFURVRJTUVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVIgPSB7XHJcbiAgICBwcm92aWRlOiBDTUFUX0RBVEVUSU1FUElDS0VSX1NDUk9MTF9TVFJBVEVHWSxcclxuICAgIGRlcHM6IFtPdmVybGF5XSxcclxuICAgIHVzZUZhY3Rvcnk6IENNQVRfREFURVRJTUVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllcclxufTtcclxuXHJcbi8vIEJvaWxlcnBsYXRlIGZvciBhcHBseWluZyBtaXhpbnMgdG8gQ21hdERhdGV0aW1lcGlja2VyQ29udGVudC5cclxuY29uc3QgY21hdERhdGV0aW1lcGlja2VyQ29udGVudEJhc2UgPSBtaXhpbkNvbG9yKFxyXG4gICAgY2xhc3Mge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XHJcbiAgICB9XHJcbik7XHJcblxyXG4vKipcclxuICogQ29tcG9uZW50IHVzZWQgYXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBkYXRlcGlja2VyIGRpYWxvZyBhbmQgcG9wdXAuIFdlIHVzZSB0aGlzIGluc3RlYWQgb2YgdXNpbmdcclxuICogTWF0Q2FsZW5kYXIgZGlyZWN0bHkgYXMgdGhlIGNvbnRlbnQgc28gd2UgY2FuIGNvbnRyb2wgdGhlIGluaXRpYWwgZm9jdXMuIFRoaXMgYWxzbyBnaXZlcyB1cyBhXHJcbiAqIHBsYWNlIHRvIHB1dCBhZGRpdGlvbmFsIGZlYXR1cmVzIG9mIHRoZSBwb3B1cCB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgY2FsZW5kYXIgaXRzZWxmIGluIHRoZVxyXG4gKiBmdXR1cmUuIChlLmcuIGNvbmZpcm1hdGlvbiBidXR0b25zKS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjbWF0LWRhdGV0aW1lcGlja2VyLWNvbnRlbnQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICdkYXRldGltZXBpY2tlci1jb250ZW50Lmh0bWwnLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1ob3N0LW1ldGFkYXRhLXByb3BlcnR5XHJcbiAgICBob3N0OiB7XHJcbiAgICAgICAgJ2NsYXNzJzogJ2NtYXQtZGF0ZXRpbWVwaWNrZXItY29udGVudCcsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxyXG4gICAgICAgICdbY2xhc3MuY21hdC1kYXRldGltZXBpY2tlci1jb250ZW50LXRvdWNoXSc6ICdkYXRldGltZXBpY2tlcj8udG91Y2hVaScsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxyXG4gICAgICAgICdbYXR0ci5tb2RlXSc6ICdkYXRldGltZXBpY2tlci5tb2RlJyxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXHJcbiAgICAgICAgJ1tAdHJhbnNmb3JtUGFuZWxdJzogJ2FuaW1hdGlvblN0YXRlJyxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXHJcbiAgICAgICAgJyhAdHJhbnNmb3JtUGFuZWwuZG9uZSknOiAnYW5pbWF0aW9uRG9uZS5uZXh0KCknLFxyXG4gICAgfSxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmFuc2Zvcm1QYW5lbCxcclxuICAgICAgICBmYWRlSW5DYWxlbmRhcixcclxuICAgIF0sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBleHBvcnRBczogJ2NtYXREYXRldGltZXBpY2tlckNvbnRlbnQnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtBMTF5TW9kdWxlLCBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNvbXBvbmVudCwgTmdDbGFzc11cclxufSlcclxuZXhwb3J0IGNsYXNzIENtYXREYXRldGltZXBpY2tlckNvbnRlbnRDb21wb25lbnQ8RD4gZXh0ZW5kcyBjbWF0RGF0ZXRpbWVwaWNrZXJDb250ZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBDYW5Db2xvciB7XHJcbiAgICBAVmlld0NoaWxkKENtYXREYXRldGltZXBpY2tlckNhbGVuZGFyQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBfY2FsZW5kYXIhOiBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNvbXBvbmVudDxEPjtcclxuICAgIEBJbnB1dCgpIG92ZXJyaWRlIGNvbG9yOiBUaGVtZVBhbGV0dGU7XHJcblxyXG4gICAgZGF0ZXRpbWVwaWNrZXIhOiBDbWF0RGF0ZXRpbWVwaWNrZXJDb21wb25lbnQ8RD47XHJcblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGV0aW1lcGlja2VyIGlzIGFib3ZlIG9yIGJlbG93IHRoZSBpbnB1dC4gKi9cclxuICAgIGlzQWJvdmUhOiBib29sZWFuO1xyXG5cclxuICAgIC8qKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBhbmltYXRpb24uICovXHJcbiAgICBhbmltYXRpb25TdGF0ZSE6ICdlbnRlci1kcm9wZG93bicgfCAnZW50ZXItZGlhbG9nJyB8ICd2b2lkJztcclxuXHJcbiAgICAvKiogRW1pdHMgd2hlbiBhbiBhbmltYXRpb24gaGFzIGZpbmlzaGVkLiAqL1xyXG4gICAgcmVhZG9ubHkgYW5pbWF0aW9uRG9uZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqIElkIG9mIHRoZSBsYWJlbCBmb3IgdGhlIGByb2xlPVwiZGlhbG9nXCJgIGVsZW1lbnQuICovXHJcbiAgICBkaWFsb2dMYWJlbElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgICAgICBzdXBlcihlbGVtZW50UmVmKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0gdGhpcy5kYXRldGltZXBpY2tlci50b3VjaFVpID8gJ2VudGVyLWRpYWxvZycgOiAnZW50ZXItZHJvcGRvd24nO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jYWxlbmRhci5mb2N1c0FjdGl2ZUNlbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydEV4aXRBbmltYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hbmltYXRpb25TdGF0ZSA9ICd2b2lkJztcclxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFuaW1hdGlvbkRvbmUuY29tcGxldGUoKTtcclxuICAgIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NtYXQtZGF0ZXRpbWVwaWNrZXInLFxyXG4gICAgZXhwb3J0QXM6ICdjbWF0RGF0ZXRpbWVwaWNrZXInLFxyXG4gICAgdGVtcGxhdGU6ICcnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ2RhdGV0aW1lcGlja2VyLnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ21hdERhdGV0aW1lcGlja2VyQ29tcG9uZW50PEQ+IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAgIC8qKiBUaGUgdmlldyB0aGF0IHRoZSBjYWxlbmRhciBzaG91bGQgc3RhcnQgaW4uICovXHJcbiAgICBASW5wdXQoKSBzdGFydFZpZXc6IENtYXRDYWxlbmRhclZpZXcgPSAnbW9udGgnO1xyXG4gICAgQElucHV0KCkgbW9kZTogQ21hdERhdGV0aW1lcGlja2VyTW9kZSA9ICdhdXRvJztcclxuICAgIEBJbnB1dCgpIHRpbWVJbnRlcnZhbDogbnVtYmVyID0gMTtcclxuICAgIC8qKiBQcmV2ZW50IHVzZXIgdG8gc2VsZWN0IHNhbWUgZGF0ZSB0aW1lICovXHJcbiAgICBASW5wdXQoKSBwcmV2ZW50U2FtZURhdGVUaW1lU2VsZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFByZWZlcnJlZCBwb3NpdGlvbiBvZiB0aGUgZGF0ZXRpbWVwaWNrZXIgaW4gdGhlIFggYXhpcy4gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICB4UG9zaXRpb246IERhdGV0aW1lcGlja2VyRHJvcGRvd25Qb3NpdGlvblggPSAnc3RhcnQnO1xyXG5cclxuICAgIC8qKiBQcmVmZXJyZWQgcG9zaXRpb24gb2YgdGhlIGRhdGV0aW1lcGlja2VyIGluIHRoZSBZIGF4aXMuICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgeVBvc2l0aW9uOiBEYXRldGltZXBpY2tlckRyb3Bkb3duUG9zaXRpb25ZID0gJ2JlbG93JztcclxuXHJcbiAgICBAT3V0cHV0KCkgc2VsZWN0ZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xyXG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIGRhdGVwaWNrZXIgaGFzIGJlZW4gb3BlbmVkLiAqL1xyXG4gICAgQE91dHB1dCgpIG9wZW5lZFN0cmVhbTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIGRhdGVwaWNrZXIgaGFzIGJlZW4gY2xvc2VkLiAqL1xyXG4gICAgQE91dHB1dCgpIGNsb3NlZFN0cmVhbTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIHZpZXcgaGFzIGJlZW4gY2hhbmdlZC4gKiovXHJcbiAgICBAT3V0cHV0KCkgdmlld0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxDbWF0Q2FsZW5kYXJWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q21hdENhbGVuZGFyVmlldz4oKTtcclxuICAgIC8qKiBXaGV0aGVyIHRoZSBjYWxlbmRhciBpcyBvcGVuLiAqL1xyXG5cclxuICAgIC8qKiBUaGUgaWQgZm9yIHRoZSBkYXRlcGlja2VyIGNhbGVuZGFyLiAqL1xyXG4gICAgaWQgPSBgY21hdC1kYXRldGltZXBpY2tlci0ke2RhdGV0aW1lcGlja2VyVWlkKyt9YDtcclxuICAgIC8qKiBUaGUgaW5wdXQgZWxlbWVudCB0aGlzIGRhdGVwaWNrZXIgaXMgYXNzb2NpYXRlZCB3aXRoLiAqL1xyXG4gICAgZGF0ZXRpbWVwaWNrZXJJbnB1dDogQ21hdERhdGV0aW1lcGlja2VySW5wdXREaXJlY3RpdmU8RD47XHJcbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgZGF0ZXBpY2tlciBpcyBkaXNhYmxlZC4gKi9cclxuICAgIGRpc2FibGVkQ2hhbmdlID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBwcml2YXRlIF92YWxpZFNlbGVjdGVkOiBEIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoZSBvdmVybGF5IGludG8gd2hpY2ggd2UndmUgcmVuZGVyZWQgdGhlIGNhbGVuZGFyLiAqL1xyXG4gICAgcHJpdmF0ZSBfb3ZlcmxheVJlZiE6IE92ZXJsYXlSZWYgfCBudWxsO1xyXG5cclxuICAgIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZSByZW5kZXJlZCBpbiB0aGUgb3ZlcmxheS4gKi9cclxuICAgIHByaXZhdGUgX2NvbXBvbmVudFJlZiE6IENvbXBvbmVudFJlZjxDbWF0RGF0ZXRpbWVwaWNrZXJDb250ZW50Q29tcG9uZW50PEQ+PiB8IG51bGw7XHJcblxyXG4gICAgLyoqIFRoZSBlbGVtZW50IHRoYXQgd2FzIGZvY3VzZWQgYmVmb3JlIHRoZSBkYXRldGltZXBpY2tlciB3YXMgb3BlbmVkLiAqL1xyXG4gICAgcHJpdmF0ZSBfZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIC8qKiBVbmlxdWUgY2xhc3MgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBiYWNrZHJvcCBzbyB0aGF0IHRoZSB0ZXN0IGhhcm5lc3NlcyBjYW4gbG9vayBpdCB1cC4gKi9cclxuICAgIHByaXZhdGUgX2JhY2tkcm9wSGFybmVzc0NsYXNzID0gYCR7dGhpcy5pZH0tYmFja2Ryb3BgO1xyXG5cclxuICAgIHByaXZhdGUgX2lucHV0U3RhdGVDaGFuZ2VzID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xyXG5cclxuICAgIHByaXZhdGUgX211bHRpWWVhclNlbGVjdG9yID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF90d2VsdmVob3VyID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9wYW5lbENsYXNzITogc3RyaW5nW107XHJcbiAgICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX2NvbG9yOiBUaGVtZVBhbGV0dGU7XHJcbiAgICBwcml2YXRlIF9zdGFydEF0OiBEIHwgbnVsbDtcclxuICAgIHByaXZhdGUgX3R5cGU6IENtYXREYXRldGltZXBpY2tlclR5cGUgPSAnZGF0ZXRpbWUnO1xyXG4gICAgcHJpdmF0ZSBfdG91Y2hVaSA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIF90aW1lSW5wdXQgPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSBfcmVzdG9yZUZvY3VzID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9vdmVybGF5OiBPdmVybGF5LFxyXG4gICAgICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxyXG4gICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgQEluamVjdChDTUFUX0RBVEVUSU1FUElDS0VSX1NDUk9MTF9TVFJBVEVHWSkgcHJpdmF0ZSBfc2Nyb2xsU3RyYXRlZ3k6IGFueSxcclxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9kYXRlQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxyXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RpcjogRGlyZWN0aW9uYWxpdHksXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZGF0ZUFkYXB0ZXIpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsRXJyb3IoJ0RhdGV0aW1lQWRhcHRlcicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogV2hldGhlciB0byBzaG93IG11bHRpLXllYXIgdmlldy4gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgbXVsdGlZZWFyU2VsZWN0b3IoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX211bHRpWWVhclNlbGVjdG9yO1xyXG4gICAgfVxyXG4gICAgc2V0IG11bHRpWWVhclNlbGVjdG9yKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fbXVsdGlZZWFyU2VsZWN0b3IgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBXaGV0aGVyIHRoZSBjbG9jayB1c2VzIDEyIGhvdXIgZm9ybWF0LiAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdHdlbHZlaG91cigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdHdlbHZlaG91cjtcclxuICAgIH1cclxuICAgIHNldCB0d2VsdmVob3VyKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fdHdlbHZlaG91ciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGFzc2VzIHRvIGJlIHBhc3NlZCB0byB0aGUgZGF0ZSBwaWNrZXIgcGFuZWwuXHJcbiAgICAgKiBTdXBwb3J0cyBzdHJpbmcgYW5kIHN0cmluZyBhcnJheSB2YWx1ZXMsIHNpbWlsYXIgdG8gYG5nQ2xhc3NgLlxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwYW5lbENsYXNzKCk6IHN0cmluZyB8IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGFuZWxDbGFzcztcclxuICAgIH1cclxuICAgIHNldCBwYW5lbENsYXNzKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xyXG4gICAgICAgIHRoaXMuX3BhbmVsQ2xhc3MgPSBjb2VyY2VTdHJpbmdBcnJheSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNhbGVuZGFyIGlzIG9wZW4uICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZW5lZDtcclxuICAgIH1cclxuICAgIHNldCBvcGVuZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpID8gdGhpcy5vcGVuKCkgOiB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENvbG9yIHBhbGV0dGUgdG8gdXNlIG9uIHRoZSBkYXRldGltZXBpY2tlcidzIGNhbGVuZGFyLiAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgY29sb3IoKTogVGhlbWVQYWxldHRlIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLl9jb2xvciB8fFxyXG4gICAgICAgICAgICAodGhpcy5kYXRldGltZXBpY2tlcklucHV0ID8gdGhpcy5kYXRldGltZXBpY2tlcklucHV0LmdldFRoZW1lUGFsZXR0ZSgpIDogdW5kZWZpbmVkKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBzZXQgY29sb3IodmFsdWU6IFRoZW1lUGFsZXR0ZSkge1xyXG4gICAgICAgIHRoaXMuX2NvbG9yID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBkYXRlIHRvIG9wZW4gdGhlIGNhbGVuZGFyIHRvIGluaXRpYWxseS4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHN0YXJ0QXQoKTogRCB8IG51bGwge1xyXG4gICAgICAgIC8vIElmIGFuIGV4cGxpY2l0IHN0YXJ0QXQgaXMgc2V0IHdlIHN0YXJ0IHRoZXJlLCBvdGhlcndpc2Ugd2Ugc3RhcnQgYXQgd2hhdGV2ZXIgdGhlIGN1cnJlbnRseVxyXG4gICAgICAgIC8vIHNlbGVjdGVkIHZhbHVlIGlzLlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydEF0IHx8ICh0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQgPyB0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQudmFsdWUgOiBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgc3RhcnRBdChkYXRlOiBEIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0QXQgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwoZGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdHlwZSgpOiBDbWF0RGF0ZXRpbWVwaWNrZXJUeXBlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgdHlwZSh2YWx1ZTogQ21hdERhdGV0aW1lcGlja2VyVHlwZSkge1xyXG4gICAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZSB8fCAnZGF0ZXRpbWUnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgY2FsZW5kYXIgaXMgaW4gdGltZSBtb2RlLiBJbiB0aW1lIG1vZGUgdGhlIGNhbGVuZGFyIGNsb2NrIGdldHMgdGltZSBpbnB1dFxyXG4gICAgICogZWxlbWVudHMgcmF0aGVyIHRoZW4ganVzdCBjbG9jay4gV2hlbiBgdG91Y2hVaWAgaXMgZW5hYmxlZCB0aGlzIHdpbGwgYmUgZGlzYWJsZWQuXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHRpbWVJbnB1dCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGltZUlucHV0ICYmICF0aGlzLnRvdWNoVWk7XHJcbiAgICB9XHJcbiAgICBzZXQgdGltZUlucHV0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fdGltZUlucHV0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIGNhbGVuZGFyIFVJIGlzIGluIHRvdWNoIG1vZGUuIEluIHRvdWNoIG1vZGUgdGhlIGNhbGVuZGFyIG9wZW5zIGluIGEgZGlhbG9nIHJhdGhlclxyXG4gICAgICogdGhhbiBhIHBvcHVwIGFuZCBlbGVtZW50cyBoYXZlIG1vcmUgcGFkZGluZyB0byBhbGxvdyBmb3IgYmlnZ2VyIHRvdWNoIHRhcmdldHMuXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHRvdWNoVWkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvdWNoVWk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHRvdWNoVWkodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl90b3VjaFVpID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogV2hldGhlciB0aGUgZGF0ZXBpY2tlciBwb3AtdXAgc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkID09PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRldGltZXBpY2tlcklucHV0ID9cclxuICAgICAgICAgICAgdGhpcy5kYXRldGltZXBpY2tlcklucHV0LmRpc2FibGVkIDogISF0aGlzLl9kaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcblxyXG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5fZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZENoYW5nZS5uZXh0KG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRvIHJlc3RvcmUgZm9jdXMgdG8gdGhlIHByZXZpb3VzbHktZm9jdXNlZCBlbGVtZW50IHdoZW4gdGhlIHBhbmVsIGlzIGNsb3NlZC5cclxuICAgICAqIE5vdGUgdGhhdCBhdXRvbWF0aWMgZm9jdXMgcmVzdG9yYXRpb24gaXMgYW4gYWNjZXNzaWJpbGl0eSBmZWF0dXJlIGFuZCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0XHJcbiAgICAgKiB5b3UgcHJvdmlkZSB5b3VyIG93biBlcXVpdmFsZW50LCBpZiB5b3UgZGVjaWRlIHRvIHR1cm4gaXQgb2ZmLlxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCByZXN0b3JlRm9jdXMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3RvcmVGb2N1cztcclxuICAgIH1cclxuICAgIHNldCByZXN0b3JlRm9jdXModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9yZXN0b3JlRm9jdXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUuICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IHNlbGVjdGVkKCk6IEQgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRTZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IEQgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRTZWxlY3RlZCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUaGUgbWluaW11bSBzZWxlY3RhYmxlIGRhdGUuICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IG1pbkRhdGUoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQgJiYgdGhpcy5kYXRldGltZXBpY2tlcklucHV0Lm1pbjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVGhlIG1heGltdW0gc2VsZWN0YWJsZSBkYXRlLiAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBtYXhEYXRlKCk6IEQgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRldGltZXBpY2tlcklucHV0ICYmIHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnB1dC5tYXg7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBkYXRlRmlsdGVyKCk6IChkYXRlOiBEIHwgbnVsbCwgdHlwZTogQ21hdERhdGV0aW1lcGlja2VyRmlsdGVyVHlwZSkgPT4gYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnB1dCAmJiB0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQuZGF0ZUZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kZXN0cm95T3ZlcmxheSgpO1xyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLl9pbnB1dFN0YXRlQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRDaGFuZ2UuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyIGFuIGlucHV0IHdpdGggdGhpcyBkYXRlcGlja2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpbnB1dCBUaGUgZGF0ZXBpY2tlciBpbnB1dCB0byByZWdpc3RlciB3aXRoIHRoaXMgZGF0ZXBpY2tlci5cclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXJJbnB1dChpbnB1dDogQ21hdERhdGV0aW1lcGlja2VySW5wdXREaXJlY3RpdmU8RD4pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRldGltZXBpY2tlcklucHV0KSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdBIE1hdERhdGVwaWNrZXIgY2FuIG9ubHkgYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQgPSBpbnB1dDtcclxuICAgICAgICB0aGlzLl9pbnB1dFN0YXRlQ2hhbmdlcyA9XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnB1dC52YWx1ZUNoYW5nZS5zdWJzY3JpYmUoKHZhbHVlOiBEIHwgbnVsbCkgPT4gdGhpcy5zZWxlY3RlZCA9IHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqIE9wZW4gdGhlIGNhbGVuZGFyLiAqL1xyXG4gICAgb3BlbigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5vcGVuZWQgfHwgdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5kYXRldGltZXBpY2tlcklucHV0KSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdBdHRlbXB0ZWQgdG8gb3BlbiBhbiBNYXREYXRlcGlja2VyIHdpdGggbm8gYXNzb2NpYXRlZCBpbnB1dC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2ZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiA9IF9nZXRGb2N1c2VkRWxlbWVudFBpZXJjZVNoYWRvd0RvbSgpO1xyXG4gICAgICAgIHRoaXMuX29wZW5PdmVybGF5KCk7XHJcbiAgICAgICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9wZW5lZFN0cmVhbS5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENsb3NlIHRoZSBjYWxlbmRhci4gKi9cclxuICAgIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5fb3BlbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNhblJlc3RvcmVGb2N1cyA9XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVGb2N1cyAmJlxyXG4gICAgICAgICAgICB0aGlzLl9mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4gJiZcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuX2ZvY3VzZWRFbGVtZW50QmVmb3JlT3Blbi5mb2N1cyA9PT0gJ2Z1bmN0aW9uJztcclxuXHJcbiAgICAgICAgY29uc3QgY29tcGxldGVDbG9zZSA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgLy8gVGhlIGBfb3BlbmVkYCBjb3VsZCd2ZSBiZWVuIHJlc2V0IGFscmVhZHkgaWZcclxuICAgICAgICAgICAgLy8gd2UgZ290IHR3byBldmVudHMgaW4gcXVpY2sgc3VjY2Vzc2lvbi5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX29wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlZFN0cmVhbS5lbWl0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgaW5zdGFuY2UsIGxvY2F0aW9uIH0gPSB0aGlzLl9jb21wb25lbnRSZWY7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLnN0YXJ0RXhpdEFuaW1hdGlvbigpO1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5hbmltYXRpb25Eb25lLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNpbmNlIHdlIHJlc3RvcmUgZm9jdXMgYWZ0ZXIgdGhlIGV4aXQgYW5pbWF0aW9uLCB3ZSBoYXZlIHRvIGNoZWNrIHRoYXRcclxuICAgICAgICAgICAgICAgIC8vIHRoZSB1c2VyIGRpZG4ndCBtb3ZlIGZvY3VzIHRoZW1zZWx2ZXMgaW5zaWRlIHRoZSBgY2xvc2VgIGhhbmRsZXIuXHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgY2FuUmVzdG9yZUZvY3VzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKCFhY3RpdmVFbGVtZW50IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ubmF0aXZlRWxlbWVudC5jb250YWlucyhhY3RpdmVFbGVtZW50KSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzZWRFbGVtZW50QmVmb3JlT3Blbj8uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveU92ZXJsYXkoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2FuUmVzdG9yZUZvY3VzKSB7XHJcbiAgICAgICAgICAgIC8vIEJlY2F1c2UgSUUgbW92ZXMgZm9jdXMgYXN5bmNocm9ub3VzbHksIHdlIGNhbid0IGNvdW50IG9uIGl0IGJlaW5nIHJlc3RvcmVkIGJlZm9yZSB3ZSd2ZVxyXG4gICAgICAgICAgICAvLyBtYXJrZWQgdGhlIGRhdGVwaWNrZXIgYXMgY2xvc2VkLiBJZiB0aGUgZXZlbnQgZmlyZXMgb3V0IG9mIHNlcXVlbmNlIGFuZCB0aGUgZWxlbWVudCB0aGF0XHJcbiAgICAgICAgICAgIC8vIHdlJ3JlIHJlZm9jdXNpbmcgb3BlbnMgdGhlIGRhdGVwaWNrZXIgb24gZm9jdXMsIHRoZSB1c2VyIGNvdWxkIGJlIHN0dWNrIHdpdGggbm90IGJlaW5nXHJcbiAgICAgICAgICAgIC8vIGFibGUgdG8gY2xvc2UgdGhlIGNhbGVuZGFyIGF0IGFsbC4gV2Ugd29yayBhcm91bmQgaXQgYnkgbWFraW5nIHRoZSBsb2dpYywgdGhhdCBtYXJrc1xyXG4gICAgICAgICAgICAvLyB0aGUgZGF0ZXBpY2tlciBhcyBjbG9zZWQsIGFzeW5jIGFzIHdlbGwuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY29tcGxldGVDbG9zZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29tcGxldGVDbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKiBTZWxlY3RzIHRoZSBnaXZlbiBkYXRlICovXHJcbiAgICBzZWxlY3QoZGF0ZTogRCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkID0gZGF0ZTtcclxuICAgICAgICBpZiAoIXRoaXMuX2RhdGVBZGFwdGVyLnNhbWVEYXRldGltZShvbGRWYWx1ZSwgdGhpcy5zZWxlY3RlZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChkYXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmlld0NoYW5nZSh0eXBlOiBDbWF0Q2FsZW5kYXJWaWV3KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3Q2hhbmdlZC5lbWl0KHR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9yd2FyZHMgcmVsZXZhbnQgdmFsdWVzIGZyb20gdGhlIGRhdGV0aW1lcGlja2VyIHRvIHRoZVxyXG4gICAgICogZGF0ZXRpbWVwaWNrZXIgY29udGVudCBpbnNpZGUgdGhlIG92ZXJsYXkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2ZvcndhcmRDb250ZW50VmFsdWVzKGluc3RhbmNlOiBDbWF0RGF0ZXRpbWVwaWNrZXJDb250ZW50Q29tcG9uZW50PEQ+KTogdm9pZCB7XHJcbiAgICAgICAgaW5zdGFuY2UuZGF0ZXRpbWVwaWNrZXIgPSB0aGlzO1xyXG4gICAgICAgIGluc3RhbmNlLmNvbG9yID0gdGhpcy5jb2xvcjtcclxuICAgICAgICBpbnN0YW5jZS5kaWFsb2dMYWJlbElkID0gdGhpcy5kYXRldGltZXBpY2tlcklucHV0LmdldE92ZXJsYXlMYWJlbElkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIE9wZW5zIHRoZSBvdmVybGF5IHdpdGggdGhlIGNhbGVuZGFyLiAqL1xyXG4gICAgcHJpdmF0ZSBfb3Blbk92ZXJsYXkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGVzdHJveU92ZXJsYXkoKTtcclxuXHJcbiAgICAgICAgY29uc3QgaXNEaWFsb2cgPSB0aGlzLnRvdWNoVWk7XHJcbiAgICAgICAgY29uc3QgbGFiZWxJZCA9IHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnB1dC5nZXRPdmVybGF5TGFiZWxJZCgpO1xyXG5cclxuICAgICAgICBjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsPENtYXREYXRldGltZXBpY2tlckNvbnRlbnRDb21wb25lbnQ8RD4+KFxyXG4gICAgICAgICAgICBDbWF0RGF0ZXRpbWVwaWNrZXJDb250ZW50Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBvdmVybGF5UmVmID0gKHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZShcclxuICAgICAgICAgICAgbmV3IE92ZXJsYXlDb25maWcoe1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogaXNEaWFsb2cgPyB0aGlzLl9nZXREaWFsb2dTdHJhdGVneSgpIDogdGhpcy5fZ2V0RHJvcGRvd25TdHJhdGVneSgpLFxyXG4gICAgICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBiYWNrZHJvcENsYXNzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgaXNEaWFsb2cgPyAnY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCcgOiAnbWF0LW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2JhY2tkcm9wSGFybmVzc0NsYXNzLFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5fZGlyLFxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IGlzRGlhbG9nID8gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCkgOiB0aGlzLl9zY3JvbGxTdHJhdGVneSgpLFxyXG4gICAgICAgICAgICAgICAgcGFuZWxDbGFzczogYGNtYXQtZGF0ZXRpbWVwaWNrZXItJHtpc0RpYWxvZyA/ICdkaWFsb2cnIDogJ3BvcHVwJ31gLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkpO1xyXG5cclxuICAgICAgICBjb25zdCBvdmVybGF5RWxlbWVudCA9IG92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQ7XHJcbiAgICAgICAgb3ZlcmxheUVsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xyXG5cclxuICAgICAgICBpZiAobGFiZWxJZCkge1xyXG4gICAgICAgICAgICBvdmVybGF5RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGxhYmVsSWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzRGlhbG9nKSB7XHJcbiAgICAgICAgICAgIG92ZXJsYXlFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsICd0cnVlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9nZXRDbG9zZVN0cmVhbShvdmVybGF5UmVmKS5zdWJzY3JpYmUoKGV2ZW50OiB7IHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkIH0pID0+IHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gb3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcclxuICAgICAgICB0aGlzLl9mb3J3YXJkQ29udGVudFZhbHVlcyh0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UpO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG9uY2UgdGhlIGNhbGVuZGFyIGhhcyByZW5kZXJlZC4gT25seSByZWxldmFudCBpbiBkcm9wZG93biBtb2RlLlxyXG4gICAgICAgIGlmICghaXNEaWFsb2cpIHtcclxuICAgICAgICAgICAgdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IG92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBEZXN0cm95cyB0aGUgY3VycmVudCBvdmVybGF5LiAqL1xyXG4gICAgcHJpdmF0ZSBfZGVzdHJveU92ZXJsYXkoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9jb21wb25lbnRSZWYgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0cyBhIHBvc2l0aW9uIHN0cmF0ZWd5IHRoYXQgd2lsbCBvcGVuIHRoZSBjYWxlbmRhciBhcyBhIGRyb3Bkb3duLiAqL1xyXG4gICAgcHJpdmF0ZSBfZ2V0RGlhbG9nU3RyYXRlZ3koKTogR2xvYmFsUG9zaXRpb25TdHJhdGVneSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdldHMgYSBwb3NpdGlvbiBzdHJhdGVneSB0aGF0IHdpbGwgb3BlbiB0aGUgY2FsZW5kYXIgYXMgYSBkcm9wZG93bi4gKi9cclxuICAgIHByaXZhdGUgX2dldERyb3Bkb3duU3RyYXRlZ3koKTogRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5IHtcclxuICAgICAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMuX292ZXJsYXlcclxuICAgICAgICAgICAgLnBvc2l0aW9uKClcclxuICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5kYXRldGltZXBpY2tlcklucHV0LmdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKSlcclxuICAgICAgICAgICAgLndpdGhUcmFuc2Zvcm1PcmlnaW5PbignLmNtYXQtZGF0ZXRpbWVwaWNrZXItY29udGVudCcpXHJcbiAgICAgICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxyXG4gICAgICAgICAgICAud2l0aFZpZXdwb3J0TWFyZ2luKDgpXHJcbiAgICAgICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24oKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldENvbm5lY3RlZFBvc2l0aW9ucyhzdHJhdGVneSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGRhdGV0aW1lcGlja2VyIGluIGRyb3Bkb3duIG1vZGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfc2V0Q29ubmVjdGVkUG9zaXRpb25zKHN0cmF0ZWd5OiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kpOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xyXG4gICAgICAgIGNvbnN0IHByaW1hcnlYID0gdGhpcy54UG9zaXRpb24gPT09ICdlbmQnID8gJ2VuZCcgOiAnc3RhcnQnO1xyXG4gICAgICAgIGNvbnN0IHNlY29uZGFyeVggPSBwcmltYXJ5WCA9PT0gJ3N0YXJ0JyA/ICdlbmQnIDogJ3N0YXJ0JztcclxuICAgICAgICBjb25zdCBwcmltYXJ5WSA9IHRoaXMueVBvc2l0aW9uID09PSAnYWJvdmUnID8gJ2JvdHRvbScgOiAndG9wJztcclxuICAgICAgICBjb25zdCBzZWNvbmRhcnlZID0gcHJpbWFyeVkgPT09ICd0b3AnID8gJ2JvdHRvbScgOiAndG9wJztcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0cmF0ZWd5LndpdGhQb3NpdGlvbnMoW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiBwcmltYXJ5WCxcclxuICAgICAgICAgICAgICAgIG9yaWdpblk6IHNlY29uZGFyeVksXHJcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogcHJpbWFyeVgsXHJcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogcHJpbWFyeVksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9yaWdpblg6IHByaW1hcnlYLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogcHJpbWFyeVksXHJcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogcHJpbWFyeVgsXHJcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogc2Vjb25kYXJ5WSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luWDogc2Vjb25kYXJ5WCxcclxuICAgICAgICAgICAgICAgIG9yaWdpblk6IHNlY29uZGFyeVksXHJcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogc2Vjb25kYXJ5WCxcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlZOiBwcmltYXJ5WSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luWDogc2Vjb25kYXJ5WCxcclxuICAgICAgICAgICAgICAgIG9yaWdpblk6IHByaW1hcnlZLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVg6IHNlY29uZGFyeVgsXHJcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogc2Vjb25kYXJ5WSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0cyBhbiBvYnNlcnZhYmxlIHRoYXQgd2lsbCBlbWl0IHdoZW4gdGhlIG92ZXJsYXkgaXMgc3VwcG9zZWQgdG8gYmUgY2xvc2VkLiAqL1xyXG4gICAgcHJpdmF0ZSBfZ2V0Q2xvc2VTdHJlYW0ob3ZlcmxheVJlZjogT3ZlcmxheVJlZik6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIG1lcmdlKFxyXG4gICAgICAgICAgICBvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSxcclxuICAgICAgICAgICAgb3ZlcmxheVJlZi5kZXRhY2htZW50cygpLFxyXG4gICAgICAgICAgICBvdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+XHJcbiAgICAgICAgICAgICAgICAvLyBDbG9zaW5nIG9uIGFsdCArIHVwIGlzIG9ubHkgdmFsaWQgd2hlbiB0aGVyZSdzIGFuIGlucHV0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZXRpbWVwaWNrZXIuXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50LmNvZGUgPT09ICdFc2NhcGUnICYmICFoYXNNb2RpZmllcktleShldmVudCkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnB1dCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNNb2RpZmllcktleShldmVudCwgJ2FsdEtleScpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmNvZGUgPT09ICdBcnJvd1VwJylcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjZGtUcmFwRm9jdXMgcm9sZT1cImRpYWxvZ1wiIFthdHRyLmFyaWEtbW9kYWxdPVwidHJ1ZVwiIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJkaWFsb2dMYWJlbElkID8/IHVuZGVmaW5lZFwiXHJcbiAgICBbYXR0ci5tb2RlXT1cImRhdGV0aW1lcGlja2VyLm1vZGVcIiBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXItY29udGVudC1jb250YWluZXJcIj5cclxuICAgIDxjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyIFtpZF09XCJkYXRldGltZXBpY2tlci5pZFwiIFtuZ0NsYXNzXT1cImRhdGV0aW1lcGlja2VyLnBhbmVsQ2xhc3NcIlxyXG4gICAgICAgIFthdHRyLm1vZGVdPVwiZGF0ZXRpbWVwaWNrZXIubW9kZVwiIFt0eXBlXT1cImRhdGV0aW1lcGlja2VyLnR5cGVcIiBbc3RhcnRBdF09XCJkYXRldGltZXBpY2tlci5zdGFydEF0XCJcclxuICAgICAgICBbc3RhcnRWaWV3XT1cImRhdGV0aW1lcGlja2VyLnN0YXJ0Vmlld1wiIFttYXhEYXRlXT1cImRhdGV0aW1lcGlja2VyLm1heERhdGVcIiBbbWluRGF0ZV09XCJkYXRldGltZXBpY2tlci5taW5EYXRlXCJcclxuICAgICAgICBbZGF0ZUZpbHRlcl09XCJkYXRldGltZXBpY2tlci5kYXRlRmlsdGVyXCIgW211bHRpWWVhclNlbGVjdG9yXT1cImRhdGV0aW1lcGlja2VyLm11bHRpWWVhclNlbGVjdG9yXCJcclxuICAgICAgICBbcHJldmVudFNhbWVEYXRlVGltZVNlbGVjdGlvbl09XCJkYXRldGltZXBpY2tlci5wcmV2ZW50U2FtZURhdGVUaW1lU2VsZWN0aW9uXCJcclxuICAgICAgICBbdGltZUludGVydmFsXT1cImRhdGV0aW1lcGlja2VyLnRpbWVJbnRlcnZhbFwiIFt0d2VsdmVob3VyXT1cImRhdGV0aW1lcGlja2VyLnR3ZWx2ZWhvdXJcIlxyXG4gICAgICAgIFtzZWxlY3RlZF09XCJkYXRldGltZXBpY2tlci5zZWxlY3RlZFwiIFt0aW1lSW5wdXRdPVwiZGF0ZXRpbWVwaWNrZXIudGltZUlucHV0XCJcclxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiZGF0ZXRpbWVwaWNrZXIuc2VsZWN0KCRldmVudClcIiAodmlld0NoYW5nZWQpPVwiZGF0ZXRpbWVwaWNrZXIudmlld0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAodXNlclNlbGVjdGlvbik9XCJkYXRldGltZXBpY2tlci5jbG9zZSgpXCIgW0BmYWRlSW5DYWxlbmRhcl09XCInZW50ZXInXCI+XHJcbiAgICA8L2NtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXI+XHJcbjwvZGl2PiJdfQ==
529
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWVwaWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvbWF0ZXJpYWwtZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXIudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvbWF0ZXJpYWwtZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXItY29udGVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUE2RCxPQUFPLEVBQUUsYUFBYSxFQUE4QixNQUFNLHNCQUFzQixDQUFDO0FBQ3JKLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUdULFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sWUFBWSxDQUFD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LFNBQVM7K0JBQ0kscUJBQXFCLFlBQ3JCLG9CQUFvQixZQUNwQixFQUFFLG1CQUVLLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksdUJBQ2hCLEtBQUssY0FDZCxJQUFJOzswQkFrRVgsTUFBTTsyQkFBQyxtQ0FBbUM7OzBCQUMxQyxRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFFBQVE7eUNBakV2QixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUdJLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcsWUFBWTtzQkFBckIsTUFBTTtnQkFFRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBcURILGlCQUFpQjtzQkFEcEIsS0FBSztnQkFXRixVQUFVO3NCQURiLEtBQUs7Z0JBY0YsVUFBVTtzQkFEYixLQUFLO2dCQVdGLE1BQU07c0JBRFQsS0FBSztnQkFXRixLQUFLO3NCQURSLEtBQUs7Z0JBY0YsT0FBTztzQkFEVixLQUFLO2dCQWFGLElBQUk7c0JBRFAsS0FBSztnQkFlRixTQUFTO3NCQURaLEtBQUs7Z0JBY0YsT0FBTztzQkFEVixLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSztnQkFzQkYsWUFBWTtzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQTExeU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcclxuaW1wb3J0IHsgRGlyZWN0aW9uYWxpdHkgfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlU3RyaW5nQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSwgR2xvYmFsUG9zaXRpb25TdHJhdGVneSwgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IF9nZXRGb2N1c2VkRWxlbWVudFBpZXJjZVNoYWRvd0RvbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgICBBZnRlckNvbnRlbnRJbml0LFxyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbXBvbmVudFJlZixcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbmplY3QsXHJcbiAgICBJbmplY3Rpb25Ub2tlbixcclxuICAgIElucHV0LFxyXG4gICAgTmdab25lLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3B0aW9uYWwsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgbWVyZ2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdjbWF0L2NvbXBvbmVudHMvYWRhcHRlcic7XHJcbmltcG9ydCB7IENtYXREYXRldGltZXBpY2tlckNhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhcic7XHJcbmltcG9ydCB7IGZhZGVJbkNhbGVuZGFyLCB0cmFuc2Zvcm1QYW5lbCB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbEVycm9yIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1lcnJvcnMnO1xyXG5pbXBvcnQgeyBDbWF0RGF0ZXRpbWVwaWNrZXJGaWx0ZXJUeXBlIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1maWx0ZXJ0eXBlJztcclxuaW1wb3J0IHsgQ21hdERhdGV0aW1lcGlja2VySW5wdXREaXJlY3RpdmUgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLWlucHV0JztcclxuaW1wb3J0IHsgQ21hdENhbGVuZGFyVmlldywgQ21hdERhdGV0aW1lcGlja2VyTW9kZSwgQ21hdERhdGV0aW1lcGlja2VyVHlwZSwgRGF0ZXRpbWVwaWNrZXJEcm9wZG93blBvc2l0aW9uWCwgRGF0ZXRpbWVwaWNrZXJEcm9wZG93blBvc2l0aW9uWSB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItdHlwZXMnO1xyXG5cclxuLyoqIFVzZWQgdG8gZ2VuZXJhdGUgYSB1bmlxdWUgSUQgZm9yIGVhY2ggZGF0ZXBpY2tlciBpbnN0YW5jZS4gKi9cclxubGV0IGRhdGV0aW1lcGlja2VyVWlkID0gMDtcclxuXHJcbi8qKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBkZXRlcm1pbmVzIHRoZSBzY3JvbGwgaGFuZGxpbmcgd2hpbGUgdGhlIGNhbGVuZGFyIGlzIG9wZW4uICovXHJcbmV4cG9ydCBjb25zdCBDTUFUX0RBVEVUSU1FUElDS0VSX1NDUk9MTF9TVFJBVEVHWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjwoKSA9PiBTY3JvbGxTdHJhdGVneT4oXHJcbiAgICAnY21hdC1kYXRldGltZXBpY2tlci1zY3JvbGwtc3RyYXRlZ3knXHJcbik7XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXHJcbmV4cG9ydCBmdW5jdGlvbiBDTUFUX0RBVEVUSU1FUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZKG92ZXJsYXk6IE92ZXJsYXkpOiAoKSA9PiBTY3JvbGxTdHJhdGVneSB7XHJcbiAgICByZXR1cm4gKCkgPT4gb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IENNQVRfREFURVRJTUVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVIgPSB7XHJcbiAgICBwcm92aWRlOiBDTUFUX0RBVEVUSU1FUElDS0VSX1NDUk9MTF9TVFJBVEVHWSxcclxuICAgIGRlcHM6IFtPdmVybGF5XSxcclxuICAgIHVzZUZhY3Rvcnk6IENNQVRfREFURVRJTUVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnQgdXNlZCBhcyB0aGUgY29udGVudCBmb3IgdGhlIGRhdGVwaWNrZXIgZGlhbG9nIGFuZCBwb3B1cC4gV2UgdXNlIHRoaXMgaW5zdGVhZCBvZiB1c2luZ1xyXG4gKiBNYXRDYWxlbmRhciBkaXJlY3RseSBhcyB0aGUgY29udGVudCBzbyB3ZSBjYW4gY29udHJvbCB0aGUgaW5pdGlhbCBmb2N1cy4gVGhpcyBhbHNvIGdpdmVzIHVzIGFcclxuICogcGxhY2UgdG8gcHV0IGFkZGl0aW9uYWwgZmVhdHVyZXMgb2YgdGhlIHBvcHVwIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjYWxlbmRhciBpdHNlbGYgaW4gdGhlXHJcbiAqIGZ1dHVyZS4gKGUuZy4gY29uZmlybWF0aW9uIGJ1dHRvbnMpLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NtYXQtZGF0ZXRpbWVwaWNrZXItY29udGVudCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJ2RhdGV0aW1lcGlja2VyLWNvbnRlbnQuaHRtbCcsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcclxuICAgIGhvc3Q6IHtcclxuICAgICAgICAnY2xhc3MnOiAnY21hdC1kYXRldGltZXBpY2tlci1jb250ZW50JyxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXHJcbiAgICAgICAgJ1tjbGFzc10nOiAnY29sb3IgPyBcIm1hdC1cIiArIGNvbG9yIDogXCJcIicsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxyXG4gICAgICAgICdbY2xhc3MuY21hdC1kYXRldGltZXBpY2tlci1jb250ZW50LXRvdWNoXSc6ICdkYXRldGltZXBpY2tlcj8udG91Y2hVaScsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxyXG4gICAgICAgICdbYXR0ci5tb2RlXSc6ICdkYXRldGltZXBpY2tlci5tb2RlJyxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXHJcbiAgICAgICAgJ1tAdHJhbnNmb3JtUGFuZWxdJzogJ2FuaW1hdGlvblN0YXRlJyxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXHJcbiAgICAgICAgJyhAdHJhbnNmb3JtUGFuZWwuZG9uZSknOiAnYW5pbWF0aW9uRG9uZS5uZXh0KCknLFxyXG4gICAgfSxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmFuc2Zvcm1QYW5lbCxcclxuICAgICAgICBmYWRlSW5DYWxlbmRhcixcclxuICAgIF0sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBleHBvcnRBczogJ2NtYXREYXRldGltZXBpY2tlckNvbnRlbnQnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtBMTF5TW9kdWxlLCBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNvbXBvbmVudCwgTmdDbGFzc11cclxufSlcclxuZXhwb3J0IGNsYXNzIENtYXREYXRldGltZXBpY2tlckNvbnRlbnRDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBAVmlld0NoaWxkKENtYXREYXRldGltZXBpY2tlckNhbGVuZGFyQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBfY2FsZW5kYXIhOiBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNvbXBvbmVudDxEPjtcclxuICAgIEBJbnB1dCgpIGNvbG9yOiBUaGVtZVBhbGV0dGU7XHJcblxyXG4gICAgZGF0ZXRpbWVwaWNrZXIhOiBDbWF0RGF0ZXRpbWVwaWNrZXJDb21wb25lbnQ8RD47XHJcblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGV0aW1lcGlja2VyIGlzIGFib3ZlIG9yIGJlbG93IHRoZSBpbnB1dC4gKi9cclxuICAgIGlzQWJvdmUhOiBib29sZWFuO1xyXG5cclxuICAgIC8qKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBhbmltYXRpb24uICovXHJcbiAgICBhbmltYXRpb25TdGF0ZSE6ICdlbnRlci1kcm9wZG93bicgfCAnZW50ZXItZGlhbG9nJyB8ICd2b2lkJztcclxuXHJcbiAgICAvKiogRW1pdHMgd2hlbiBhbiBhbmltYXRpb24gaGFzIGZpbmlzaGVkLiAqL1xyXG4gICAgcmVhZG9ubHkgYW5pbWF0aW9uRG9uZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqIElkIG9mIHRoZSBsYWJlbCBmb3IgdGhlIGByb2xlPVwiZGlhbG9nXCJgIGVsZW1lbnQuICovXHJcbiAgICBkaWFsb2dMYWJlbElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYscHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUgPSB0aGlzLmRhdGV0aW1lcGlja2VyLnRvdWNoVWkgPyAnZW50ZXItZGlhbG9nJyA6ICdlbnRlci1kcm9wZG93bic7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmZvY3VzQWN0aXZlQ2VsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0RXhpdEFuaW1hdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0gJ3ZvaWQnO1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uRG9uZS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY21hdC1kYXRldGltZXBpY2tlcicsXHJcbiAgICBleHBvcnRBczogJ2NtYXREYXRldGltZXBpY2tlcicsXHJcbiAgICB0ZW1wbGF0ZTogJycsXHJcbiAgICBzdHlsZVVybHM6IFsnZGF0ZXRpbWVwaWNrZXIuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0RGF0ZXRpbWVwaWNrZXJDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgLyoqIFRoZSB2aWV3IHRoYXQgdGhlIGNhbGVuZGFyIHNob3VsZCBzdGFydCBpbi4gKi9cclxuICAgIEBJbnB1dCgpIHN0YXJ0VmlldzogQ21hdENhbGVuZGFyVmlldyA9ICdtb250aCc7XHJcbiAgICBASW5wdXQoKSBtb2RlOiBDbWF0RGF0ZXRpbWVwaWNrZXJNb2RlID0gJ2F1dG8nO1xyXG4gICAgQElucHV0KCkgdGltZUludGVydmFsOiBudW1iZXIgPSAxO1xyXG4gICAgLyoqIFByZXZlbnQgdXNlciB0byBzZWxlY3Qgc2FtZSBkYXRlIHRpbWUgKi9cclxuICAgIEBJbnB1dCgpIHByZXZlbnRTYW1lRGF0ZVRpbWVTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogUHJlZmVycmVkIHBvc2l0aW9uIG9mIHRoZSBkYXRldGltZXBpY2tlciBpbiB0aGUgWCBheGlzLiAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHhQb3NpdGlvbjogRGF0ZXRpbWVwaWNrZXJEcm9wZG93blBvc2l0aW9uWCA9ICdzdGFydCc7XHJcblxyXG4gICAgLyoqIFByZWZlcnJlZCBwb3NpdGlvbiBvZiB0aGUgZGF0ZXRpbWVwaWNrZXIgaW4gdGhlIFkgYXhpcy4gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICB5UG9zaXRpb246IERhdGV0aW1lcGlja2VyRHJvcGRvd25Qb3NpdGlvblkgPSAnYmVsb3cnO1xyXG5cclxuICAgIEBPdXRwdXQoKSBzZWxlY3RlZENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XHJcbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgZGF0ZXBpY2tlciBoYXMgYmVlbiBvcGVuZWQuICovXHJcbiAgICBAT3V0cHV0KCkgb3BlbmVkU3RyZWFtOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgZGF0ZXBpY2tlciBoYXMgYmVlbiBjbG9zZWQuICovXHJcbiAgICBAT3V0cHV0KCkgY2xvc2VkU3RyZWFtOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgdmlldyBoYXMgYmVlbiBjaGFuZ2VkLiAqKi9cclxuICAgIEBPdXRwdXQoKSB2aWV3Q2hhbmdlZDogRXZlbnRFbWl0dGVyPENtYXRDYWxlbmRhclZpZXc+ID0gbmV3IEV2ZW50RW1pdHRlcjxDbWF0Q2FsZW5kYXJWaWV3PigpO1xyXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNhbGVuZGFyIGlzIG9wZW4uICovXHJcblxyXG4gICAgLyoqIFRoZSBpZCBmb3IgdGhlIGRhdGVwaWNrZXIgY2FsZW5kYXIuICovXHJcbiAgICBpZCA9IGBjbWF0LWRhdGV0aW1lcGlja2VyLSR7ZGF0ZXRpbWVwaWNrZXJVaWQrK31gO1xyXG4gICAgLyoqIFRoZSBpbnB1dCBlbGVtZW50IHRoaXMgZGF0ZXBpY2tlciBpcyBhc3NvY2lhdGVkIHdpdGguICovXHJcbiAgICBkYXRldGltZXBpY2tlcklucHV0OiBDbWF0RGF0ZXRpbWVwaWNrZXJJbnB1dERpcmVjdGl2ZTxEPjtcclxuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSBkYXRlcGlja2VyIGlzIGRpc2FibGVkLiAqL1xyXG4gICAgZGlzYWJsZWRDaGFuZ2UgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAgIHByaXZhdGUgX3ZhbGlkU2VsZWN0ZWQ6IEQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIG92ZXJsYXkgaW50byB3aGljaCB3ZSd2ZSByZW5kZXJlZCB0aGUgY2FsZW5kYXIuICovXHJcbiAgICBwcml2YXRlIF9vdmVybGF5UmVmITogT3ZlcmxheVJlZiB8IG51bGw7XHJcblxyXG4gICAgLyoqIFJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50IGluc3RhbmNlIHJlbmRlcmVkIGluIHRoZSBvdmVybGF5LiAqL1xyXG4gICAgcHJpdmF0ZSBfY29tcG9uZW50UmVmITogQ29tcG9uZW50UmVmPENtYXREYXRldGltZXBpY2tlckNvbnRlbnRDb21wb25lbnQ8RD4+IHwgbnVsbDtcclxuXHJcbiAgICAvKiogVGhlIGVsZW1lbnQgdGhhdCB3YXMgZm9jdXNlZCBiZWZvcmUgdGhlIGRhdGV0aW1lcGlja2VyIHdhcyBvcGVuZWQuICovXHJcbiAgICBwcml2YXRlIF9mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW46IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqIFVuaXF1ZSBjbGFzcyB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGJhY2tkcm9wIHNvIHRoYXQgdGhlIHRlc3QgaGFybmVzc2VzIGNhbiBsb29rIGl0IHVwLiAqL1xyXG4gICAgcHJpdmF0ZSBfYmFja2Ryb3BIYXJuZXNzQ2xhc3MgPSBgJHt0aGlzLmlkfS1iYWNrZHJvcGA7XHJcblxyXG4gICAgcHJpdmF0ZSBfaW5wdXRTdGF0ZUNoYW5nZXMgPSBTdWJzY3JpcHRpb24uRU1QVFk7XHJcblxyXG4gICAgcHJpdmF0ZSBfbXVsdGlZZWFyU2VsZWN0b3IgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX3R3ZWx2ZWhvdXIgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX3BhbmVsQ2xhc3MhOiBzdHJpbmdbXTtcclxuICAgIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfY29sb3I6IFRoZW1lUGFsZXR0ZTtcclxuICAgIHByaXZhdGUgX3N0YXJ0QXQ6IEQgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSBfdHlwZTogQ21hdERhdGV0aW1lcGlja2VyVHlwZSA9ICdkYXRldGltZSc7XHJcbiAgICBwcml2YXRlIF90b3VjaFVpID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX3RpbWVJbnB1dCA9IHRydWU7XHJcbiAgICBwcml2YXRlIF9yZXN0b3JlRm9jdXMgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX292ZXJsYXk6IE92ZXJsYXksXHJcbiAgICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXHJcbiAgICAgICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICBASW5qZWN0KENNQVRfREFURVRJTUVQSUNLRVJfU0NST0xMX1NUUkFURUdZKSBwcml2YXRlIF9zY3JvbGxTdHJhdGVneTogYW55LFxyXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RhdGVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGlyOiBEaXJlY3Rpb25hbGl0eSxcclxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlQWRhcHRlcikge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvcignRGF0ZXRpbWVBZGFwdGVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBXaGV0aGVyIHRvIHNob3cgbXVsdGkteWVhciB2aWV3LiAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBtdWx0aVllYXJTZWxlY3RvcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbXVsdGlZZWFyU2VsZWN0b3I7XHJcbiAgICB9XHJcbiAgICBzZXQgbXVsdGlZZWFyU2VsZWN0b3IodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9tdWx0aVllYXJTZWxlY3RvciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNsb2NrIHVzZXMgMTIgaG91ciBmb3JtYXQuICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0d2VsdmVob3VyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90d2VsdmVob3VyO1xyXG4gICAgfVxyXG4gICAgc2V0IHR3ZWx2ZWhvdXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl90d2VsdmVob3VyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsYXNzZXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBkYXRlIHBpY2tlciBwYW5lbC5cclxuICAgICAqIFN1cHBvcnRzIHN0cmluZyBhbmQgc3RyaW5nIGFycmF5IHZhbHVlcywgc2ltaWxhciB0byBgbmdDbGFzc2AuXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHBhbmVsQ2xhc3MoKTogc3RyaW5nIHwgc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYW5lbENsYXNzO1xyXG4gICAgfVxyXG4gICAgc2V0IHBhbmVsQ2xhc3ModmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgdGhpcy5fcGFuZWxDbGFzcyA9IGNvZXJjZVN0cmluZ0FycmF5KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgaXMgb3Blbi4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG9wZW5lZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb3BlbmVkO1xyXG4gICAgfVxyXG4gICAgc2V0IG9wZW5lZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSkgPyB0aGlzLm9wZW4oKSA6IHRoaXMuY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29sb3IgcGFsZXR0ZSB0byB1c2Ugb24gdGhlIGRhdGV0aW1lcGlja2VyJ3MgY2FsZW5kYXIuICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBjb2xvcigpOiBUaGVtZVBhbGV0dGUge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuX2NvbG9yIHx8XHJcbiAgICAgICAgICAgICh0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQgPyB0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQuZ2V0VGhlbWVQYWxldHRlKCkgOiB1bmRlZmluZWQpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHNldCBjb2xvcih2YWx1ZTogVGhlbWVQYWxldHRlKSB7XHJcbiAgICAgICAgdGhpcy5fY29sb3IgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVGhlIGRhdGUgdG8gb3BlbiB0aGUgY2FsZW5kYXIgdG8gaW5pdGlhbGx5LiAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc3RhcnRBdCgpOiBEIHwgbnVsbCB7XHJcbiAgICAgICAgLy8gSWYgYW4gZXhwbGljaXQgc3RhcnRBdCBpcyBzZXQgd2Ugc3RhcnQgdGhlcmUsIG90aGVyd2lzZSB3ZSBzdGFydCBhdCB3aGF0ZXZlciB0aGUgY3VycmVudGx5XHJcbiAgICAgICAgLy8gc2VsZWN0ZWQgdmFsdWUgaXMuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QXQgfHwgKHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnB1dCA/IHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnB1dC52YWx1ZSA6IG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBzdGFydEF0KGRhdGU6IEQgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fc3RhcnRBdCA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0eXBlKCk6IENtYXREYXRldGltZXBpY2tlclR5cGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCB0eXBlKHZhbHVlOiBDbWF0RGF0ZXRpbWVwaWNrZXJUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlIHx8ICdkYXRldGltZSc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRoZSBjYWxlbmRhciBpcyBpbiB0aW1lIG1vZGUuIEluIHRpbWUgbW9kZSB0aGUgY2FsZW5kYXIgY2xvY2sgZ2V0cyB0aW1lIGlucHV0XHJcbiAgICAgKiBlbGVtZW50cyByYXRoZXIgdGhlbiBqdXN0IGNsb2NrLiBXaGVuIGB0b3VjaFVpYCBpcyBlbmFibGVkIHRoaXMgd2lsbCBiZSBkaXNhYmxlZC5cclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdGltZUlucHV0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90aW1lSW5wdXQgJiYgIXRoaXMudG91Y2hVaTtcclxuICAgIH1cclxuICAgIHNldCB0aW1lSW5wdXQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl90aW1lSW5wdXQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgY2FsZW5kYXIgVUkgaXMgaW4gdG91Y2ggbW9kZS4gSW4gdG91Y2ggbW9kZSB0aGUgY2FsZW5kYXIgb3BlbnMgaW4gYSBkaWFsb2cgcmF0aGVyXHJcbiAgICAgKiB0aGFuIGEgcG9wdXAgYW5kIGVsZW1lbnRzIGhhdmUgbW9yZSBwYWRkaW5nIHRvIGFsbG93IGZvciBiaWdnZXIgdG91Y2ggdGFyZ2V0cy5cclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdG91Y2hVaSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdG91Y2hVaTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgdG91Y2hVaSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3RvdWNoVWkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBXaGV0aGVyIHRoZSBkYXRlcGlja2VyIHBvcC11cCBzaG91bGQgYmUgZGlzYWJsZWQuICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQgP1xyXG4gICAgICAgICAgICB0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQuZGlzYWJsZWQgOiAhIXRoaXMuX2Rpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSB0aGlzLl9kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkQ2hhbmdlLm5leHQobmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdG8gcmVzdG9yZSBmb2N1cyB0byB0aGUgcHJldmlvdXNseS1mb2N1c2VkIGVsZW1lbnQgd2hlbiB0aGUgcGFuZWwgaXMgY2xvc2VkLlxyXG4gICAgICogTm90ZSB0aGF0IGF1dG9tYXRpYyBmb2N1cyByZXN0b3JhdGlvbiBpcyBhbiBhY2Nlc3NpYmlsaXR5IGZlYXR1cmUgYW5kIGl0IGlzIHJlY29tbWVuZGVkIHRoYXRcclxuICAgICAqIHlvdSBwcm92aWRlIHlvdXIgb3duIGVxdWl2YWxlbnQsIGlmIHlvdSBkZWNpZGUgdG8gdHVybiBpdCBvZmYuXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHJlc3RvcmVGb2N1cygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzdG9yZUZvY3VzO1xyXG4gICAgfVxyXG4gICAgc2V0IHJlc3RvcmVGb2N1cyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3Jlc3RvcmVGb2N1cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZS4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgc2VsZWN0ZWQoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZFNlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBzZWxlY3RlZCh2YWx1ZTogRCB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLl92YWxpZFNlbGVjdGVkID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgbWluRGF0ZSgpOiBEIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnB1dCAmJiB0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQubWluO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IG1heERhdGUoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQgJiYgdGhpcy5kYXRldGltZXBpY2tlcklucHV0Lm1heDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IGRhdGVGaWx0ZXIoKTogKGRhdGU6IEQgfCBudWxsLCB0eXBlOiBDbWF0RGF0ZXRpbWVwaWNrZXJGaWx0ZXJUeXBlKSA9PiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRldGltZXBpY2tlcklucHV0ICYmIHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnB1dC5kYXRlRmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCk7XHJcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuX2lucHV0U3RhdGVDaGFuZ2VzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZENoYW5nZS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXIgYW4gaW5wdXQgd2l0aCB0aGlzIGRhdGVwaWNrZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGlucHV0IFRoZSBkYXRlcGlja2VyIGlucHV0IHRvIHJlZ2lzdGVyIHdpdGggdGhpcyBkYXRlcGlja2VyLlxyXG4gICAgICovXHJcbiAgICByZWdpc3RlcklucHV0KGlucHV0OiBDbWF0RGF0ZXRpbWVwaWNrZXJJbnB1dERpcmVjdGl2ZTxEPik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0EgTWF0RGF0ZXBpY2tlciBjYW4gb25seSBiZSBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgaW5wdXQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnB1dCA9IGlucHV0O1xyXG4gICAgICAgIHRoaXMuX2lucHV0U3RhdGVDaGFuZ2VzID1cclxuICAgICAgICAgICAgdGhpcy5kYXRldGltZXBpY2tlcklucHV0LnZhbHVlQ2hhbmdlLnN1YnNjcmliZSgodmFsdWU6IEQgfCBudWxsKSA9PiB0aGlzLnNlbGVjdGVkID0gdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogT3BlbiB0aGUgY2FsZW5kYXIuICovXHJcbiAgICBvcGVuKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLm9wZW5lZCB8fCB0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0F0dGVtcHRlZCB0byBvcGVuIGFuIE1hdERhdGVwaWNrZXIgd2l0aCBubyBhc3NvY2lhdGVkIGlucHV0LicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuID0gX2dldEZvY3VzZWRFbGVtZW50UGllcmNlU2hhZG93RG9tKCk7XHJcbiAgICAgICAgdGhpcy5fb3Blbk92ZXJsYXkoKTtcclxuICAgICAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub3BlbmVkU3RyZWFtLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ2xvc2UgdGhlIGNhbGVuZGFyLiAqL1xyXG4gICAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9vcGVuZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY2FuUmVzdG9yZUZvY3VzID1cclxuICAgICAgICAgICAgdGhpcy5fcmVzdG9yZUZvY3VzICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5fZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuLmZvY3VzID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICAgICAgICBjb25zdCBjb21wbGV0ZUNsb3NlID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICAvLyBUaGUgYF9vcGVuZWRgIGNvdWxkJ3ZlIGJlZW4gcmVzZXQgYWxyZWFkeSBpZlxyXG4gICAgICAgICAgICAvLyB3ZSBnb3QgdHdvIGV2ZW50cyBpbiBxdWljayBzdWNjZXNzaW9uLlxyXG4gICAgICAgICAgICBpZiAodGhpcy5fb3BlbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VkU3RyZWFtLmVtaXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBpbnN0YW5jZSwgbG9jYXRpb24gfSA9IHRoaXMuX2NvbXBvbmVudFJlZjtcclxuICAgICAgICAgICAgaW5zdGFuY2Uuc3RhcnRFeGl0QW5pbWF0aW9uKCk7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLmFuaW1hdGlvbkRvbmUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2luY2Ugd2UgcmVzdG9yZSBmb2N1cyBhZnRlciB0aGUgZXhpdCBhbmltYXRpb24sIHdlIGhhdmUgdG8gY2hlY2sgdGhhdFxyXG4gICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIgZGlkbid0IG1vdmUgZm9jdXMgdGhlbXNlbHZlcyBpbnNpZGUgdGhlIGBjbG9zZWAgaGFuZGxlci5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBjYW5SZXN0b3JlRm9jdXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAoIWFjdGl2ZUVsZW1lbnQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQpKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuPy5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95T3ZlcmxheSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjYW5SZXN0b3JlRm9jdXMpIHtcclxuICAgICAgICAgICAgLy8gQmVjYXVzZSBJRSBtb3ZlcyBmb2N1cyBhc3luY2hyb25vdXNseSwgd2UgY2FuJ3QgY291bnQgb24gaXQgYmVpbmcgcmVzdG9yZWQgYmVmb3JlIHdlJ3ZlXHJcbiAgICAgICAgICAgIC8vIG1hcmtlZCB0aGUgZGF0ZXBpY2tlciBhcyBjbG9zZWQuIElmIHRoZSBldmVudCBmaXJlcyBvdXQgb2Ygc2VxdWVuY2UgYW5kIHRoZSBlbGVtZW50IHRoYXRcclxuICAgICAgICAgICAgLy8gd2UncmUgcmVmb2N1c2luZyBvcGVucyB0aGUgZGF0ZXBpY2tlciBvbiBmb2N1cywgdGhlIHVzZXIgY291bGQgYmUgc3R1Y2sgd2l0aCBub3QgYmVpbmdcclxuICAgICAgICAgICAgLy8gYWJsZSB0byBjbG9zZSB0aGUgY2FsZW5kYXIgYXQgYWxsLiBXZSB3b3JrIGFyb3VuZCBpdCBieSBtYWtpbmcgdGhlIGxvZ2ljLCB0aGF0IG1hcmtzXHJcbiAgICAgICAgICAgIC8vIHRoZSBkYXRlcGlja2VyIGFzIGNsb3NlZCwgYXN5bmMgYXMgd2VsbC5cclxuICAgICAgICAgICAgc2V0VGltZW91dChjb21wbGV0ZUNsb3NlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb21wbGV0ZUNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqIFNlbGVjdHMgdGhlIGdpdmVuIGRhdGUgKi9cclxuICAgIHNlbGVjdChkYXRlOiBEKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBkYXRlO1xyXG4gICAgICAgIGlmICghdGhpcy5fZGF0ZUFkYXB0ZXIuc2FtZURhdGV0aW1lKG9sZFZhbHVlLCB0aGlzLnNlbGVjdGVkKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2aWV3Q2hhbmdlKHR5cGU6IENtYXRDYWxlbmRhclZpZXcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdDaGFuZ2VkLmVtaXQodHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3J3YXJkcyByZWxldmFudCB2YWx1ZXMgZnJvbSB0aGUgZGF0ZXRpbWVwaWNrZXIgdG8gdGhlXHJcbiAgICAgKiBkYXRldGltZXBpY2tlciBjb250ZW50IGluc2lkZSB0aGUgb3ZlcmxheS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZm9yd2FyZENvbnRlbnRWYWx1ZXMoaW5zdGFuY2U6IENtYXREYXRldGltZXBpY2tlckNvbnRlbnRDb21wb25lbnQ8RD4pOiB2b2lkIHtcclxuICAgICAgICBpbnN0YW5jZS5kYXRldGltZXBpY2tlciA9IHRoaXM7XHJcbiAgICAgICAgaW5zdGFuY2UuY29sb3IgPSB0aGlzLmNvbG9yO1xyXG4gICAgICAgIGluc3RhbmNlLmRpYWxvZ0xhYmVsSWQgPSB0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQuZ2V0T3ZlcmxheUxhYmVsSWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogT3BlbnMgdGhlIG92ZXJsYXkgd2l0aCB0aGUgY2FsZW5kYXIuICovXHJcbiAgICBwcml2YXRlIF9vcGVuT3ZlcmxheSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kZXN0cm95T3ZlcmxheSgpO1xyXG5cclxuICAgICAgICBjb25zdCBpc0RpYWxvZyA9IHRoaXMudG91Y2hVaTtcclxuICAgICAgICBjb25zdCBsYWJlbElkID0gdGhpcy5kYXRldGltZXBpY2tlcklucHV0LmdldE92ZXJsYXlMYWJlbElkKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWw8Q21hdERhdGV0aW1lcGlja2VyQ29udGVudENvbXBvbmVudDxEPj4oXHJcbiAgICAgICAgICAgIENtYXREYXRldGltZXBpY2tlckNvbnRlbnRDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWZcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IG92ZXJsYXlSZWYgPSAodGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMuX292ZXJsYXkuY3JlYXRlKFxyXG4gICAgICAgICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBpc0RpYWxvZyA/IHRoaXMuX2dldERpYWxvZ1N0cmF0ZWd5KCkgOiB0aGlzLl9nZXREcm9wZG93blN0cmF0ZWd5KCksXHJcbiAgICAgICAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6IFtcclxuICAgICAgICAgICAgICAgICAgICBpc0RpYWxvZyA/ICdjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wJyA6ICdtYXQtb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFja2Ryb3BIYXJuZXNzQ2xhc3MsXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9kaXIsXHJcbiAgICAgICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogaXNEaWFsb2cgPyB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKSA6IHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksXHJcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBgY21hdC1kYXRldGltZXBpY2tlci0ke2lzRGlhbG9nID8gJ2RpYWxvZycgOiAncG9wdXAnfWAsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG92ZXJsYXlFbGVtZW50ID0gb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudDtcclxuICAgICAgICBvdmVybGF5RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJyk7XHJcblxyXG4gICAgICAgIGlmIChsYWJlbElkKSB7XHJcbiAgICAgICAgICAgIG92ZXJsYXlFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgbGFiZWxJZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNEaWFsb2cpIHtcclxuICAgICAgICAgICAgb3ZlcmxheUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgJ3RydWUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2dldENsb3NlU3RyZWFtKG92ZXJsYXlSZWYpLnN1YnNjcmliZSgoZXZlbnQ6IHsgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQgfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRSZWYgPSBvdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG4gICAgICAgIHRoaXMuX2ZvcndhcmRDb250ZW50VmFsdWVzKHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZSk7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb24gb25jZSB0aGUgY2FsZW5kYXIgaGFzIHJlbmRlcmVkLiBPbmx5IHJlbGV2YW50IGluIGRyb3Bkb3duIG1vZGUuXHJcbiAgICAgICAgaWYgKCFpc0RpYWxvZykge1xyXG4gICAgICAgICAgICB0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4gb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIERlc3Ryb3lzIHRoZSBjdXJyZW50IG92ZXJsYXkuICovXHJcbiAgICBwcml2YXRlIF9kZXN0cm95T3ZlcmxheSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMuX2NvbXBvbmVudFJlZiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXRzIGEgcG9zaXRpb24gc3RyYXRlZ3kgdGhhdCB3aWxsIG9wZW4gdGhlIGNhbGVuZGFyIGFzIGEgZHJvcGRvd24uICovXHJcbiAgICBwcml2YXRlIF9nZXREaWFsb2dTdHJhdGVneSgpOiBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLmNlbnRlckhvcml6b250YWxseSgpLmNlbnRlclZlcnRpY2FsbHkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0cyBhIHBvc2l0aW9uIHN0cmF0ZWd5IHRoYXQgd2lsbCBvcGVuIHRoZSBjYWxlbmRhciBhcyBhIGRyb3Bkb3duLiAqL1xyXG4gICAgcHJpdmF0ZSBfZ2V0RHJvcGRvd25TdHJhdGVneSgpOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xyXG4gICAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheVxyXG4gICAgICAgICAgICAucG9zaXRpb24oKVxyXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmRhdGV0aW1lcGlja2VySW5wdXQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpKVxyXG4gICAgICAgICAgICAud2l0aFRyYW5zZm9ybU9yaWdpbk9uKCcuY21hdC1kYXRldGltZXBpY2tlci1jb250ZW50JylcclxuICAgICAgICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXHJcbiAgICAgICAgICAgIC53aXRoVmlld3BvcnRNYXJnaW4oOClcclxuICAgICAgICAgICAgLndpdGhMb2NrZWRQb3NpdGlvbigpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2V0Q29ubmVjdGVkUG9zaXRpb25zKHN0cmF0ZWd5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgZGF0ZXRpbWVwaWNrZXIgaW4gZHJvcGRvd24gbW9kZSBiYXNlZCBvbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9zZXRDb25uZWN0ZWRQb3NpdGlvbnMoc3RyYXRlZ3k6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSk6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSB7XHJcbiAgICAgICAgY29uc3QgcHJpbWFyeVggPSB0aGlzLnhQb3NpdGlvbiA9PT0gJ2VuZCcgPyAnZW5kJyA6ICdzdGFydCc7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5WCA9IHByaW1hcnlYID09PSAnc3RhcnQnID8gJ2VuZCcgOiAnc3RhcnQnO1xyXG4gICAgICAgIGNvbnN0IHByaW1hcnlZID0gdGhpcy55UG9zaXRpb24gPT09ICdhYm92ZScgPyAnYm90dG9tJyA6ICd0b3AnO1xyXG4gICAgICAgIGNvbnN0IHNlY29uZGFyeVkgPSBwcmltYXJ5WSA9PT0gJ3RvcCcgPyAnYm90dG9tJyA6ICd0b3AnO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RyYXRlZ3kud2l0aFBvc2l0aW9ucyhbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9yaWdpblg6IHByaW1hcnlYLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogc2Vjb25kYXJ5WSxcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiBwcmltYXJ5WCxcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlZOiBwcmltYXJ5WSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luWDogcHJpbWFyeVgsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiBwcmltYXJ5WSxcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiBwcmltYXJ5WCxcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlZOiBzZWNvbmRhcnlZLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiBzZWNvbmRhcnlYLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogc2Vjb25kYXJ5WSxcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiBzZWNvbmRhcnlYLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6IHByaW1hcnlZLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiBzZWNvbmRhcnlYLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogcHJpbWFyeVksXHJcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogc2Vjb25kYXJ5WCxcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlZOiBzZWNvbmRhcnlZLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIGVtaXQgd2hlbiB0aGUgb3ZlcmxheSBpcyBzdXBwb3NlZCB0byBiZSBjbG9zZWQuICovXHJcbiAgICBwcml2YXRlIF9nZXRDbG9zZVN0cmVhbShvdmVybGF5UmVmOiBPdmVybGF5UmVmKTogYW55IHtcclxuICAgICAgICByZXR1cm4gbWVyZ2UoXHJcbiAgICAgICAgICAgIG92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLFxyXG4gICAgICAgICAgICBvdmVybGF5UmVmLmRldGFjaG1lbnRzKCksXHJcbiAgICAgICAgICAgIG92ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT5cclxuICAgICAgICAgICAgICAgIC8vIENsb3Npbmcgb24gYWx0ICsgdXAgaXMgb25seSB2YWxpZCB3aGVuIHRoZXJlJ3MgYW4gaW5wdXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRldGltZXBpY2tlci5cclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScgJiYgIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAodGhpcy5kYXRldGltZXBpY2tlcklucHV0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc01vZGlmaWVyS2V5KGV2ZW50LCAnYWx0S2V5JykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY29kZSA9PT0gJ0Fycm93VXAnKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNka1RyYXBGb2N1cyByb2xlPVwiZGlhbG9nXCIgW2F0dHIuYXJpYS1tb2RhbF09XCJ0cnVlXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImRpYWxvZ0xhYmVsSWQgPz8gdW5kZWZpbmVkXCJcclxuICAgIFthdHRyLm1vZGVdPVwiZGF0ZXRpbWVwaWNrZXIubW9kZVwiIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jb250ZW50LWNvbnRhaW5lclwiPlxyXG4gICAgPGNtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXIgW2lkXT1cImRhdGV0aW1lcGlja2VyLmlkXCIgW25nQ2xhc3NdPVwiZGF0ZXRpbWVwaWNrZXIucGFuZWxDbGFzc1wiXHJcbiAgICAgICAgW2F0dHIubW9kZV09XCJkYXRldGltZXBpY2tlci5tb2RlXCIgW3R5cGVdPVwiZGF0ZXRpbWVwaWNrZXIudHlwZVwiIFtzdGFydEF0XT1cImRhdGV0aW1lcGlja2VyLnN0YXJ0QXRcIlxyXG4gICAgICAgIFtzdGFydFZpZXddPVwiZGF0ZXRpbWVwaWNrZXIuc3RhcnRWaWV3XCIgW21heERhdGVdPVwiZGF0ZXRpbWVwaWNrZXIubWF4RGF0ZVwiIFttaW5EYXRlXT1cImRhdGV0aW1lcGlja2VyLm1pbkRhdGVcIlxyXG4gICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGV0aW1lcGlja2VyLmRhdGVGaWx0ZXJcIiBbbXVsdGlZZWFyU2VsZWN0b3JdPVwiZGF0ZXRpbWVwaWNrZXIubXVsdGlZZWFyU2VsZWN0b3JcIlxyXG4gICAgICAgIFtwcmV2ZW50U2FtZURhdGVUaW1lU2VsZWN0aW9uXT1cImRhdGV0aW1lcGlja2VyLnByZXZlbnRTYW1lRGF0ZVRpbWVTZWxlY3Rpb25cIlxyXG4gICAgICAgIFt0aW1lSW50ZXJ2YWxdPVwiZGF0ZXRpbWVwaWNrZXIudGltZUludGVydmFsXCIgW3R3ZWx2ZWhvdXJdPVwiZGF0ZXRpbWVwaWNrZXIudHdlbHZlaG91clwiXHJcbiAgICAgICAgW3NlbGVjdGVkXT1cImRhdGV0aW1lcGlja2VyLnNlbGVjdGVkXCIgW3RpbWVJbnB1dF09XCJkYXRldGltZXBpY2tlci50aW1lSW5wdXRcIlxyXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJkYXRldGltZXBpY2tlci5zZWxlY3QoJGV2ZW50KVwiICh2aWV3Q2hhbmdlZCk9XCJkYXRldGltZXBpY2tlci52aWV3Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICh1c2VyU2VsZWN0aW9uKT1cImRhdGV0aW1lcGlja2VyLmNsb3NlKClcIiBbQGZhZGVJbkNhbGVuZGFyXT1cIidlbnRlcidcIj5cclxuICAgIDwvY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhcj5cclxuPC9kaXY+Il19
@@ -1,9 +1,8 @@
1
1
  import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional, Output, ViewEncapsulation } from '@angular/core';
2
2
  import { CMAT_DATETIME_FORMATS } from 'cmat/components/adapter';
3
- import { CmatDatetimepickerCalendarCellComponent } from './calendar-body';
3
+ import { CmatDatetimepickerCalendarCellComponent, CmatDatetimepickerCalendarBodyComponent } from './calendar-body';
4
4
  import { slideCalendar } from './datetimepicker-animations';
5
5
  import { createMissingDateImplError } from './datetimepicker-errors';
6
- import { CmatDatetimepickerCalendarBodyComponent } from './calendar-body';
7
6
  import * as i0 from "@angular/core";
8
7
  import * as i1 from "cmat/components/adapter";
9
8
  const DAYS_PER_WEEK = 7;
@@ -116,10 +115,10 @@ export class CmatDatetimepickerMonthViewComponent {
116
115
  _changeCalendarState(direction) {
117
116
  this.calendarState = direction;
118
117
  }
119
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatDatetimepickerMonthViewComponent, deps: [{ token: i1.DatetimeAdapter, optional: true }, { token: CMAT_DATETIME_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
120
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: CmatDatetimepickerMonthViewComponent, isStandalone: true, selector: "cmat-datetimepicker-month-view", inputs: { type: "type", dateFilter: "dateFilter", activeDate: "activeDate", selected: "selected" }, outputs: { userSelection: "userSelection", selectedChange: "selectedChange" }, exportAs: ["cmatDatetimepickerMonthView"], ngImport: i0, template: "<table class=\"cmat-datetimepicker-calendar-table\">\n <thead class=\"cmat-datetimepicker-calendar-table-header\">\n <tr>\n @for (day of weekdays; track trackByFn($index, day)) {\n <th [attr.aria-label]=\"day.long\">{{day.narrow}}</th>\n }\n </tr>\n <tr>\n <th colspan=\"7\" class=\"cmat-calendar-table-header-divider\"></th>\n </tr>\n </thead>\n <tbody (@slideCalendar.done)=\"calendarStateDone()\" (selectedValueChange)=\"dateSelected($event)\"\n [@slideCalendar]=\"calendarState\" [activeCell]=\"adapter.getDate(activeDate) - 1\" [rows]=\"weeks\"\n [selectedValue]=\"selectedDate\" [todayValue]=\"todayDate\" cmat-datetimepicker-calendar-body role=\"grid\"></tbody>\n</table>", dependencies: [{ kind: "component", type: CmatDatetimepickerCalendarBodyComponent, selector: "[cmat-datetimepicker-calendar-body]", inputs: ["label", "rows", "todayValue", "selectedValue", "labelMinRequiredCells", "numCols", "allowDisabledSelection", "activeCell"], outputs: ["selectedValueChange"], exportAs: ["cmatDatetimepickerCalendarBody"] }], animations: [slideCalendar], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
118
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CmatDatetimepickerMonthViewComponent, deps: [{ token: i1.DatetimeAdapter, optional: true }, { token: CMAT_DATETIME_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
119
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.7", type: CmatDatetimepickerMonthViewComponent, isStandalone: true, selector: "cmat-datetimepicker-month-view", inputs: { type: "type", dateFilter: "dateFilter", activeDate: "activeDate", selected: "selected" }, outputs: { userSelection: "userSelection", selectedChange: "selectedChange" }, exportAs: ["cmatDatetimepickerMonthView"], ngImport: i0, template: "<table class=\"cmat-datetimepicker-calendar-table\">\n <thead class=\"cmat-datetimepicker-calendar-table-header\">\n <tr>\n @for (day of weekdays; track trackByFn($index, day)) {\n <th [attr.aria-label]=\"day.long\">{{day.narrow}}</th>\n }\n </tr>\n <tr>\n <th colspan=\"7\" class=\"cmat-calendar-table-header-divider\"></th>\n </tr>\n </thead>\n <tbody (@slideCalendar.done)=\"calendarStateDone()\" (selectedValueChange)=\"dateSelected($event)\"\n [@slideCalendar]=\"calendarState\" [activeCell]=\"adapter.getDate(activeDate) - 1\" [rows]=\"weeks\"\n [selectedValue]=\"selectedDate\" [todayValue]=\"todayDate\" cmat-datetimepicker-calendar-body role=\"grid\"></tbody>\n</table>", dependencies: [{ kind: "component", type: CmatDatetimepickerCalendarBodyComponent, selector: "[cmat-datetimepicker-calendar-body]", inputs: ["label", "rows", "todayValue", "selectedValue", "labelMinRequiredCells", "numCols", "allowDisabledSelection", "activeCell"], outputs: ["selectedValueChange"], exportAs: ["cmatDatetimepickerCalendarBody"] }], animations: [slideCalendar], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
121
120
  }
122
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatDatetimepickerMonthViewComponent, decorators: [{
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CmatDatetimepickerMonthViewComponent, decorators: [{
123
122
  type: Component,
124
123
  args: [{ selector: 'cmat-datetimepicker-month-view', animations: [slideCalendar], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatDatetimepickerMonthView', standalone: true, imports: [CmatDatetimepickerCalendarBodyComponent], template: "<table class=\"cmat-datetimepicker-calendar-table\">\n <thead class=\"cmat-datetimepicker-calendar-table-header\">\n <tr>\n @for (day of weekdays; track trackByFn($index, day)) {\n <th [attr.aria-label]=\"day.long\">{{day.narrow}}</th>\n }\n </tr>\n <tr>\n <th colspan=\"7\" class=\"cmat-calendar-table-header-divider\"></th>\n </tr>\n </thead>\n <tbody (@slideCalendar.done)=\"calendarStateDone()\" (selectedValueChange)=\"dateSelected($event)\"\n [@slideCalendar]=\"calendarState\" [activeCell]=\"adapter.getDate(activeDate) - 1\" [rows]=\"weeks\"\n [selectedValue]=\"selectedDate\" [todayValue]=\"todayDate\" cmat-datetimepicker-calendar-body role=\"grid\"></tbody>\n</table>" }]
125
124
  }], ctorParameters: () => [{ type: i1.DatetimeAdapter, decorators: [{
@@ -142,4 +141,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
142
141
  }], selected: [{
143
142
  type: Input
144
143
  }] } });
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGgtdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9tYXRlcmlhbC1kYXRldGltZXBpY2tlci9tb250aC12aWV3LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL21hdGVyaWFsLWRhdGV0aW1lcGlja2VyL21vbnRoLXZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQXVCLE1BQU0seUJBQXlCLENBQUM7QUFFckYsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJFLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFHMUUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRXhCOztHQUVHO0FBV0gsTUFBTSxPQUFPLG9DQUFvQztJQTJCN0MsWUFBK0IsT0FBMkIsRUFDSCxZQUFpQztRQUR6RCxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUNILGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQTNCL0UsU0FBSSxHQUEyQixNQUFNLENBQUM7UUFFckMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBR25ELHlDQUF5QztRQUMvQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFzQjdDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2YsTUFB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QUFVO3NCQURiLEtBQUs7Z0JBdUJGLFFBQVE7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlckNvbnRlbnRJbml0LFxyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbmplY3QsXHJcbiAgICBJbnB1dCxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ01BVF9EQVRFVElNRV9GT1JNQVRTLCBDbWF0RGF0ZXRpbWVGb3JtYXRzIH0gZnJvbSAnY21hdC9jb21wb25lbnRzL2FkYXB0ZXInO1xyXG5pbXBvcnQgeyBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdjbWF0L2NvbXBvbmVudHMvYWRhcHRlcic7XHJcbmltcG9ydCB7IENtYXREYXRldGltZXBpY2tlckNhbGVuZGFyQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItYm9keSc7XHJcbmltcG9ydCB7IHNsaWRlQ2FsZW5kYXIgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLWFuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvciB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItZXJyb3JzJztcclxuaW1wb3J0IHsgQ21hdERhdGV0aW1lcGlja2VyVHlwZSB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItdHlwZXMnO1xyXG5pbXBvcnQgeyBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckJvZHlDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLWJvZHknO1xyXG5cclxuXHJcbmNvbnN0IERBWVNfUEVSX1dFRUsgPSA3O1xyXG5cclxuLyoqXHJcbiAqIEFuIGludGVybmFsIGNvbXBvbmVudCB1c2VkIHRvIGRpc3BsYXkgYSBzaW5nbGUgbW9udGggaW4gdGhlIGRhdGVwaWNrZXIuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY21hdC1kYXRldGltZXBpY2tlci1tb250aC12aWV3JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnbW9udGgtdmlldy5odG1sJyxcclxuICAgIGFuaW1hdGlvbnM6IFtzbGlkZUNhbGVuZGFyXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGV4cG9ydEFzOiAnY21hdERhdGV0aW1lcGlja2VyTW9udGhWaWV3JyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbQ21hdERhdGV0aW1lcGlja2VyQ2FsZW5kYXJCb2R5Q29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ21hdERhdGV0aW1lcGlja2VyTW9udGhWaWV3Q29tcG9uZW50PEQ+IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAgICBASW5wdXQoKSB0eXBlOiBDbWF0RGF0ZXRpbWVwaWNrZXJUeXBlID0gJ2RhdGUnO1xyXG5cclxuICAgIEBPdXRwdXQoKSB1c2VyU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgLyoqIEEgZnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgd2hpY2ggZGF0ZXMgYXJlIHNlbGVjdGFibGUuICovXHJcbiAgICBASW5wdXQoKSBkYXRlRmlsdGVyOiAoZGF0ZTogRCkgPT4gYm9vbGVhbjtcclxuICAgIC8qKiBFbWl0cyB3aGVuIGEgbmV3IGRhdGUgaXMgc2VsZWN0ZWQuICovXHJcbiAgICBAT3V0cHV0KCkgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XHJcblxyXG4gICAgLyoqIEdyaWQgb2YgY2FsZW5kYXIgY2VsbHMgcmVwcmVzZW50aW5nIHRoZSBkYXRlcyBvZiB0aGUgbW9udGguICovXHJcbiAgICB3ZWVrczogQ21hdERhdGV0aW1lcGlja2VyQ2FsZW5kYXJDZWxsQ29tcG9uZW50W11bXTtcclxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIGJsYW5rIGNlbGxzIGluIHRoZSBmaXJzdCByb3cgYmVmb3JlIHRoZSAxc3Qgb2YgdGhlIG1vbnRoLiAqL1xyXG4gICAgZmlyc3RXZWVrT2Zmc2V0OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkYXRlIG9mIHRoZSBtb250aCB0aGF0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgRGF0ZSBmYWxscyBvbi5cclxuICAgICAqIE51bGwgaWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBEYXRlIGlzIGluIGFub3RoZXIgbW9udGguXHJcbiAgICAgKi9cclxuICAgIHNlbGVjdGVkRGF0ZTogbnVtYmVyIHwgbnVsbDtcclxuICAgIC8qKiBUaGUgZGF0ZSBvZiB0aGUgbW9udGggdGhhdCB0b2RheSBmYWxscyBvbi4gTnVsbCBpZiB0b2RheSBpcyBpbiBhbm90aGVyIG1vbnRoLiAqL1xyXG4gICAgdG9kYXlEYXRlOiBudW1iZXIgfCBudWxsO1xyXG4gICAgLyoqIFRoZSBuYW1lcyBvZiB0aGUgd2Vla2RheXMuICovXHJcbiAgICB3ZWVrZGF5czogeyBsb25nOiBzdHJpbmc7IG5hcnJvdzogc3RyaW5nIH1bXTtcclxuICAgIGNhbGVuZGFyU3RhdGU6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF9hY3RpdmVEYXRlOiBEO1xyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQ6IEQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHVibGljIGFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcclxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KENNQVRfREFURVRJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZUZvcm1hdHM6IENtYXREYXRldGltZUZvcm1hdHMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYWRhcHRlcikge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvcignQ0RhdGV0aW1lQWRhcHRlcicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlRm9ybWF0cykge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvcignQ01BVF9EQVRFVElNRV9GT1JNQVRTJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmaXJzdERheU9mV2VlayA9IHRoaXMuYWRhcHRlci5nZXRGaXJzdERheU9mV2VlaygpO1xyXG4gICAgICAgIGNvbnN0IG5hcnJvd1dlZWtkYXlzID0gdGhpcy5hZGFwdGVyLmdldERheU9mV2Vla05hbWVzKCduYXJyb3cnKTtcclxuICAgICAgICBjb25zdCBsb25nV2Vla2RheXMgPSB0aGlzLmFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ2xvbmcnKTtcclxuXHJcbiAgICAgICAgLy8gUm90YXRlIHRoZSBsYWJlbHMgZm9yIGRheXMgb2YgdGhlIHdlZWsgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxyXG4gICAgICAgIGNvbnN0IHdlZWtkYXlzID0gbG9uZ1dlZWtkYXlzLm1hcCgobG9uZywgaSkgPT4gKHsgbG9uZywgbmFycm93OiBuYXJyb3dXZWVrZGF5c1tpXSB9KSk7XHJcbiAgICAgICAgdGhpcy53ZWVrZGF5cyA9IHdlZWtkYXlzLnNsaWNlKGZpcnN0RGF5T2ZXZWVrKS5jb25jYXQod2Vla2RheXMuc2xpY2UoMCwgZmlyc3REYXlPZldlZWspKTtcclxuXHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuYWRhcHRlci50b2RheSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkYXRlIHRvIGRpc3BsYXkgaW4gdGhpcyBtb250aCB2aWV3IChldmVyeXRoaW5nIG90aGVyIHRoYW4gdGhlIG1vbnRoIGFuZCB5ZWFyIGlzIGlnbm9yZWQpLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGFjdGl2ZURhdGUoKTogRCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZURhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGFjdGl2ZURhdGUodmFsdWU6IEQpIHtcclxuICAgICAgICBjb25zdCBvbGRBY3RpdmVEYXRlID0gdGhpcy5fYWN0aXZlRGF0ZTtcclxuICAgICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdmFsdWUgfHwgdGhpcy5hZGFwdGVyLnRvZGF5KCk7XHJcbiAgICAgICAgaWYgKG9sZEFjdGl2ZURhdGUgJiYgdGhpcy5fYWN0aXZlRGF0ZSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5hZGFwdGVyLnNhbWVNb250aEFuZFllYXIob2xkQWN0aXZlRGF0ZSwgdGhpcy5fYWN0aXZlRGF0ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5pdCgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hZGFwdGVyLmlzSW5OZXh0TW9udGgob2xkQWN0aXZlRGF0ZSwgdGhpcy5fYWN0aXZlRGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUNhbGVuZGFyU3RhdGUoJ3JpZ2h0Jyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VDYWxlbmRhclN0YXRlKCdsZWZ0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUuICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzZWxlY3RlZCgpOiBEIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHNlbGVjdGVkKHZhbHVlOiBEKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRoaXMuX2dldERhdGVJbkN1cnJlbnRNb250aCh0aGlzLnNlbGVjdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIYW5kbGVzIHdoZW4gYSBuZXcgZGF0ZSBpcyBzZWxlY3RlZC4gKi9cclxuICAgIGRhdGVTZWxlY3RlZChkYXRlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQodGhpcy5hZGFwdGVyLmNyZWF0ZURhdGV0aW1lKFxyXG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0WWVhcih0aGlzLmFjdGl2ZURhdGUpLCB0aGlzLmFkYXB0ZXIuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlKSxcclxuICAgICAgICAgICAgZGF0ZSwgdGhpcy5hZGFwdGVyLmdldEhvdXIodGhpcy5hY3RpdmVEYXRlKSxcclxuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmdldE1pbnV0ZSh0aGlzLmFjdGl2ZURhdGUpKSk7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlbGVjdGlvbi5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNhbGVuZGFyU3RhdGVEb25lKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTdGF0ZSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBpbmRleCB8fCBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJbml0aWFsaXplcyB0aGlzIG1vbnRoIHZpZXcuICovXHJcbiAgICBwcml2YXRlIF9pbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdGhpcy5fZ2V0RGF0ZUluQ3VycmVudE1vbnRoKHRoaXMuc2VsZWN0ZWQpO1xyXG4gICAgICAgIHRoaXMudG9kYXlEYXRlID0gdGhpcy5fZ2V0RGF0ZUluQ3VycmVudE1vbnRoKHRoaXMuYWRhcHRlci50b2RheSgpKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3RPZk1vbnRoID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGV0aW1lKHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSksXHJcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpLCAxLFxyXG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0SG91cih0aGlzLmFjdGl2ZURhdGUpLFxyXG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0TWludXRlKHRoaXMuYWN0aXZlRGF0ZSkpO1xyXG4gICAgICAgIHRoaXMuZmlyc3RXZWVrT2Zmc2V0ID1cclxuICAgICAgICAgICAgKERBWVNfUEVSX1dFRUsgKyB0aGlzLmFkYXB0ZXIuZ2V0RGF5T2ZXZWVrKGZpcnN0T2ZNb250aCkgLVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmdldEZpcnN0RGF5T2ZXZWVrKCkpICUgREFZU19QRVJfV0VFSztcclxuXHJcbiAgICAgICAgdGhpcy5fY3JlYXRlV2Vla0NlbGxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENyZWF0ZXMgTWRDYWxlbmRhckNlbGxzIGZvciB0aGUgZGF0ZXMgaW4gdGhpcyBtb250aC4gKi9cclxuICAgIHByaXZhdGUgX2NyZWF0ZVdlZWtDZWxscygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkYXlzSW5Nb250aCA9IHRoaXMuYWRhcHRlci5nZXROdW1EYXlzSW5Nb250aCh0aGlzLmFjdGl2ZURhdGUpO1xyXG4gICAgICAgIGNvbnN0IGRhdGVOYW1lcyA9IHRoaXMuYWRhcHRlci5nZXREYXRlTmFtZXMoKTtcclxuICAgICAgICB0aGlzLndlZWtzID0gW1tdXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgY2VsbCA9IHRoaXMuZmlyc3RXZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjZWxsID09PSBEQVlTX1BFUl9XRUVLKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndlZWtzLnB1c2goW10pO1xyXG4gICAgICAgICAgICAgICAgY2VsbCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuYWRhcHRlci5jcmVhdGVEYXRldGltZShcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlKSwgaSArIDEsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0SG91cih0aGlzLmFjdGl2ZURhdGUpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmdldE1pbnV0ZSh0aGlzLmFjdGl2ZURhdGUpKTtcclxuICAgICAgICAgICAgY29uc3QgZW5hYmxlZCA9ICF0aGlzLmRhdGVGaWx0ZXIgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUZpbHRlcihkYXRlKTtcclxuICAgICAgICAgICAgY29uc3QgYXJpYUxhYmVsID0gdGhpcy5hZGFwdGVyLmZvcm1hdChkYXRlLCB0aGlzLl9kYXRlRm9ybWF0cy5kaXNwbGF5LmRhdGVBMTF5TGFiZWwpO1xyXG4gICAgICAgICAgICB0aGlzLndlZWtzW3RoaXMud2Vla3MubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgICAgIC5wdXNoKG5ldyBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNlbGxDb21wb25lbnQoaSArIDEsIGRhdGVOYW1lc1tpXSwgYXJpYUxhYmVsLCBlbmFibGVkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZGF0ZSBpbiB0aGlzIG1vbnRoIHRoYXQgdGhlIGdpdmVuIERhdGUgZmFsbHMgb24uXHJcbiAgICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIGdpdmVuIERhdGUgaXMgaW4gYW5vdGhlciBtb250aC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZ2V0RGF0ZUluQ3VycmVudE1vbnRoKGRhdGU6IEQpOiBudW1iZXIgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGFwdGVyLnNhbWVNb250aEFuZFllYXIoZGF0ZSwgdGhpcy5hY3RpdmVEYXRlKSA/XHJcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXREYXRlKGRhdGUpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jaGFuZ2VDYWxlbmRhclN0YXRlKGRpcmVjdGlvbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclN0YXRlID0gZGlyZWN0aW9uO1xyXG4gICAgfVxyXG59XHJcbiIsIjx0YWJsZSBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXItdGFibGVcIj5cbiAgPHRoZWFkIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci10YWJsZS1oZWFkZXJcIj5cbiAgICA8dHI+XG4gICAgICBAZm9yIChkYXkgb2Ygd2Vla2RheXM7IHRyYWNrIHRyYWNrQnlGbigkaW5kZXgsIGRheSkpIHtcbiAgICAgICAgPHRoIFthdHRyLmFyaWEtbGFiZWxdPVwiZGF5LmxvbmdcIj57e2RheS5uYXJyb3d9fTwvdGg+XG4gICAgICB9XG4gICAgPC90cj5cbiAgICA8dHI+XG4gICAgICA8dGggY29sc3Bhbj1cIjdcIiBjbGFzcz1cImNtYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXJcIj48L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keSAoQHNsaWRlQ2FsZW5kYXIuZG9uZSk9XCJjYWxlbmRhclN0YXRlRG9uZSgpXCIgKHNlbGVjdGVkVmFsdWVDaGFuZ2UpPVwiZGF0ZVNlbGVjdGVkKCRldmVudClcIlxuICAgIFtAc2xpZGVDYWxlbmRhcl09XCJjYWxlbmRhclN0YXRlXCIgW2FjdGl2ZUNlbGxdPVwiYWRhcHRlci5nZXREYXRlKGFjdGl2ZURhdGUpIC0gMVwiIFtyb3dzXT1cIndlZWtzXCJcbiAgW3NlbGVjdGVkVmFsdWVdPVwic2VsZWN0ZWREYXRlXCIgW3RvZGF5VmFsdWVdPVwidG9kYXlEYXRlXCIgY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1ib2R5IHJvbGU9XCJncmlkXCI+PC90Ym9keT5cbjwvdGFibGU+Il19
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGgtdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9tYXRlcmlhbC1kYXRldGltZXBpY2tlci9tb250aC12aWV3LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL21hdGVyaWFsLWRhdGV0aW1lcGlja2VyL21vbnRoLXZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQXlDLE1BQU0seUJBQXlCLENBQUM7QUFDdkcsT0FBTyxFQUFFLHVDQUF1QyxFQUFHLHVDQUF1QyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFLckUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRXhCOztHQUVHO0FBV0gsTUFBTSxPQUFPLG9DQUFvQztJQTJCN0MsWUFBK0IsT0FBMkIsRUFDSCxZQUFpQztRQUR6RCxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUNILGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQTNCL0UsU0FBSSxHQUEyQixNQUFNLENBQUM7UUFFckMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBR25ELHlDQUF5QztRQUMvQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFzQjdDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2YsTUFBTSwwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NB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S0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlckNvbnRlbnRJbml0LFxyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbmplY3QsXHJcbiAgICBJbnB1dCxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ01BVF9EQVRFVElNRV9GT1JNQVRTLCBDbWF0RGF0ZXRpbWVGb3JtYXRzICwgRGF0ZXRpbWVBZGFwdGVyIH0gZnJvbSAnY21hdC9jb21wb25lbnRzL2FkYXB0ZXInO1xyXG5pbXBvcnQgeyBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNlbGxDb21wb25lbnQgLCBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckJvZHlDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLWJvZHknO1xyXG5pbXBvcnQgeyBzbGlkZUNhbGVuZGFyIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1hbmltYXRpb25zJztcclxuaW1wb3J0IHsgY3JlYXRlTWlzc2luZ0RhdGVJbXBsRXJyb3IgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLWVycm9ycyc7XHJcbmltcG9ydCB7IENtYXREYXRldGltZXBpY2tlclR5cGUgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLXR5cGVzJztcclxuXHJcblxyXG5cclxuY29uc3QgREFZU19QRVJfV0VFSyA9IDc7XHJcblxyXG4vKipcclxuICogQW4gaW50ZXJuYWwgY29tcG9uZW50IHVzZWQgdG8gZGlzcGxheSBhIHNpbmdsZSBtb250aCBpbiB0aGUgZGF0ZXBpY2tlci5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjbWF0LWRhdGV0aW1lcGlja2VyLW1vbnRoLXZpZXcnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICdtb250aC12aWV3Lmh0bWwnLFxyXG4gICAgYW5pbWF0aW9uczogW3NsaWRlQ2FsZW5kYXJdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgZXhwb3J0QXM6ICdjbWF0RGF0ZXRpbWVwaWNrZXJNb250aFZpZXcnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckJvZHlDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0RGF0ZXRpbWVwaWNrZXJNb250aFZpZXdDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcclxuICAgIEBJbnB1dCgpIHR5cGU6IENtYXREYXRldGltZXBpY2tlclR5cGUgPSAnZGF0ZSc7XHJcblxyXG4gICAgQE91dHB1dCgpIHVzZXJTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICAvKiogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciB3aGljaCBkYXRlcyBhcmUgc2VsZWN0YWJsZS4gKi9cclxuICAgIEBJbnB1dCgpIGRhdGVGaWx0ZXI6IChkYXRlOiBEKSA9PiBib29sZWFuO1xyXG4gICAgLyoqIEVtaXRzIHdoZW4gYSBuZXcgZGF0ZSBpcyBzZWxlY3RlZC4gKi9cclxuICAgIEBPdXRwdXQoKSBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcclxuXHJcbiAgICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgdGhlIGRhdGVzIG9mIHRoZSBtb250aC4gKi9cclxuICAgIHdlZWtzOiBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNlbGxDb21wb25lbnRbXVtdO1xyXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgYmxhbmsgY2VsbHMgaW4gdGhlIGZpcnN0IHJvdyBiZWZvcmUgdGhlIDFzdCBvZiB0aGUgbW9udGguICovXHJcbiAgICBmaXJzdFdlZWtPZmZzZXQ6IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRhdGUgb2YgdGhlIG1vbnRoIHRoYXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBEYXRlIGZhbGxzIG9uLlxyXG4gICAgICogTnVsbCBpZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIERhdGUgaXMgaW4gYW5vdGhlciBtb250aC5cclxuICAgICAqL1xyXG4gICAgc2VsZWN0ZWREYXRlOiBudW1iZXIgfCBudWxsO1xyXG4gICAgLyoqIFRoZSBkYXRlIG9mIHRoZSBtb250aCB0aGF0IHRvZGF5IGZhbGxzIG9uLiBOdWxsIGlmIHRvZGF5IGlzIGluIGFub3RoZXIgbW9udGguICovXHJcbiAgICB0b2RheURhdGU6IG51bWJlciB8IG51bGw7XHJcbiAgICAvKiogVGhlIG5hbWVzIG9mIHRoZSB3ZWVrZGF5cy4gKi9cclxuICAgIHdlZWtkYXlzOiB7IGxvbmc6IHN0cmluZzsgbmFycm93OiBzdHJpbmcgfVtdO1xyXG4gICAgY2FsZW5kYXJTdGF0ZTogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgX2FjdGl2ZURhdGU6IEQ7XHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZDogRDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwdWJsaWMgYWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQ01BVF9EQVRFVElNRV9GT1JNQVRTKSBwcml2YXRlIF9kYXRlRm9ybWF0czogQ21hdERhdGV0aW1lRm9ybWF0cykge1xyXG4gICAgICAgIGlmICghdGhpcy5hZGFwdGVyKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbEVycm9yKCdDRGF0ZXRpbWVBZGFwdGVyJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2RhdGVGb3JtYXRzKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbEVycm9yKCdDTUFUX0RBVEVUSU1FX0ZPUk1BVFMnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0RGF5T2ZXZWVrID0gdGhpcy5hZGFwdGVyLmdldEZpcnN0RGF5T2ZXZWVrKCk7XHJcbiAgICAgICAgY29uc3QgbmFycm93V2Vla2RheXMgPSB0aGlzLmFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ25hcnJvdycpO1xyXG4gICAgICAgIGNvbnN0IGxvbmdXZWVrZGF5cyA9IHRoaXMuYWRhcHRlci5nZXREYXlPZldlZWtOYW1lcygnbG9uZycpO1xyXG5cclxuICAgICAgICAvLyBSb3RhdGUgdGhlIGxhYmVscyBmb3IgZGF5cyBvZiB0aGUgd2VlayBiYXNlZCBvbiB0aGUgY29uZmlndXJlZCBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXHJcbiAgICAgICAgY29uc3Qgd2Vla2RheXMgPSBsb25nV2Vla2RheXMubWFwKChsb25nLCBpKSA9PiAoeyBsb25nLCBuYXJyb3c6IG5hcnJvd1dlZWtkYXlzW2ldIH0pKTtcclxuICAgICAgICB0aGlzLndlZWtkYXlzID0gd2Vla2RheXMuc2xpY2UoZmlyc3REYXlPZldlZWspLmNvbmNhdCh3ZWVrZGF5cy5zbGljZSgwLCBmaXJzdERheU9mV2VlaykpO1xyXG5cclxuICAgICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5hZGFwdGVyLnRvZGF5KCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRhdGUgdG8gZGlzcGxheSBpbiB0aGlzIG1vbnRoIHZpZXcgKGV2ZXJ5dGhpbmcgb3RoZXIgdGhhbiB0aGUgbW9udGggYW5kIHllYXIgaXMgaWdub3JlZCkuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgYWN0aXZlRGF0ZSgpOiBEIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgYWN0aXZlRGF0ZSh2YWx1ZTogRCkge1xyXG4gICAgICAgIGNvbnN0IG9sZEFjdGl2ZURhdGUgPSB0aGlzLl9hY3RpdmVEYXRlO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB2YWx1ZSB8fCB0aGlzLmFkYXB0ZXIudG9kYXkoKTtcclxuICAgICAgICBpZiAob2xkQWN0aXZlRGF0ZSAmJiB0aGlzLl9hY3RpdmVEYXRlICYmXHJcbiAgICAgICAgICAgICF0aGlzLmFkYXB0ZXIuc2FtZU1vbnRoQW5kWWVhcihvbGRBY3RpdmVEYXRlLCB0aGlzLl9hY3RpdmVEYXRlKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbml0KCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFkYXB0ZXIuaXNJbk5leHRNb250aChvbGRBY3RpdmVEYXRlLCB0aGlzLl9hY3RpdmVEYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlQ2FsZW5kYXJTdGF0ZSgncmlnaHQnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUNhbGVuZGFyU3RhdGUoJ2xlZnQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZS4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNlbGVjdGVkKCk6IEQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IEQpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdGhpcy5fZ2V0RGF0ZUluQ3VycmVudE1vbnRoKHRoaXMuc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhhbmRsZXMgd2hlbiBhIG5ldyBkYXRlIGlzIHNlbGVjdGVkLiAqL1xyXG4gICAgZGF0ZVNlbGVjdGVkKGRhdGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZXRpbWUoXHJcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSksIHRoaXMuYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpLFxyXG4gICAgICAgICAgICBkYXRlLCB0aGlzLmFkYXB0ZXIuZ2V0SG91cih0aGlzLmFjdGl2ZURhdGUpLFxyXG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0TWludXRlKHRoaXMuYWN0aXZlRGF0ZSkpKTtcclxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyU2VsZWN0aW9uLmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2FsZW5kYXJTdGF0ZURvbmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclN0YXRlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4IHx8IGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEluaXRpYWxpemVzIHRoaXMgbW9udGggdmlldy4gKi9cclxuICAgIHByaXZhdGUgX2luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSB0aGlzLl9nZXREYXRlSW5DdXJyZW50TW9udGgodGhpcy5zZWxlY3RlZCk7XHJcbiAgICAgICAgdGhpcy50b2RheURhdGUgPSB0aGlzLl9nZXREYXRlSW5DdXJyZW50TW9udGgodGhpcy5hZGFwdGVyLnRvZGF5KCkpO1xyXG5cclxuICAgICAgICBjb25zdCBmaXJzdE9mTW9udGggPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZXRpbWUodGhpcy5hZGFwdGVyLmdldFllYXIodGhpcy5hY3RpdmVEYXRlKSxcclxuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSksIDEsXHJcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRIb3VyKHRoaXMuYWN0aXZlRGF0ZSksXHJcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKSk7XHJcbiAgICAgICAgdGhpcy5maXJzdFdlZWtPZmZzZXQgPVxyXG4gICAgICAgICAgICAoREFZU19QRVJfV0VFSyArIHRoaXMuYWRhcHRlci5nZXREYXlPZldlZWsoZmlyc3RPZk1vbnRoKSAtXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0Rmlyc3REYXlPZldlZWsoKSkgJSBEQVlTX1BFUl9XRUVLO1xyXG5cclxuICAgICAgICB0aGlzLl9jcmVhdGVXZWVrQ2VsbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ3JlYXRlcyBNZENhbGVuZGFyQ2VsbHMgZm9yIHRoZSBkYXRlcyBpbiB0aGlzIG1vbnRoLiAqL1xyXG4gICAgcHJpdmF0ZSBfY3JlYXRlV2Vla0NlbGxzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gdGhpcy5hZGFwdGVyLmdldE51bURheXNJbk1vbnRoKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgY29uc3QgZGF0ZU5hbWVzID0gdGhpcy5hZGFwdGVyLmdldERhdGVOYW1lcygpO1xyXG4gICAgICAgIHRoaXMud2Vla3MgPSBbW11dO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjZWxsID0gdGhpcy5maXJzdFdlZWtPZmZzZXQ7IGkgPCBkYXlzSW5Nb250aDsgaSsrLCBjZWxsKyspIHtcclxuICAgICAgICAgICAgaWYgKGNlbGwgPT09IERBWVNfUEVSX1dFRUspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2Vla3MucHVzaChbXSk7XHJcbiAgICAgICAgICAgICAgICBjZWxsID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGV0aW1lKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmdldFllYXIodGhpcy5hY3RpdmVEYXRlKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpLCBpICsgMSxcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRIb3VyKHRoaXMuYWN0aXZlRGF0ZSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0TWludXRlKHRoaXMuYWN0aXZlRGF0ZSkpO1xyXG4gICAgICAgICAgICBjb25zdCBlbmFibGVkID0gIXRoaXMuZGF0ZUZpbHRlciB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlRmlsdGVyKGRhdGUpO1xyXG4gICAgICAgICAgICBjb25zdCBhcmlhTGFiZWwgPSB0aGlzLmFkYXB0ZXIuZm9ybWF0KGRhdGUsIHRoaXMuX2RhdGVGb3JtYXRzLmRpc3BsYXkuZGF0ZUExMXlMYWJlbCk7XHJcbiAgICAgICAgICAgIHRoaXMud2Vla3NbdGhpcy53ZWVrcy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAgICAgLnB1c2gobmV3IENtYXREYXRldGltZXBpY2tlckNhbGVuZGFyQ2VsbENvbXBvbmVudChpICsgMSwgZGF0ZU5hbWVzW2ldLCBhcmlhTGFiZWwsIGVuYWJsZWQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBkYXRlIGluIHRoaXMgbW9udGggdGhhdCB0aGUgZ2l2ZW4gRGF0ZSBmYWxscyBvbi5cclxuICAgICAqIFJldHVybnMgbnVsbCBpZiB0aGUgZ2l2ZW4gRGF0ZSBpcyBpbiBhbm90aGVyIG1vbnRoLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9nZXREYXRlSW5DdXJyZW50TW9udGgoZGF0ZTogRCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuc2FtZU1vbnRoQW5kWWVhcihkYXRlLCB0aGlzLmFjdGl2ZURhdGUpID9cclxuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmdldERhdGUoZGF0ZSkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NoYW5nZUNhbGVuZGFyU3RhdGUoZGlyZWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyU3RhdGUgPSBkaXJlY3Rpb247XHJcbiAgICB9XHJcbn1cclxuIiwiPHRhYmxlIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci10YWJsZVwiPlxuICA8dGhlYWQgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLXRhYmxlLWhlYWRlclwiPlxuICAgIDx0cj5cbiAgICAgIEBmb3IgKGRheSBvZiB3ZWVrZGF5czsgdHJhY2sgdHJhY2tCeUZuKCRpbmRleCwgZGF5KSkge1xuICAgICAgICA8dGggW2F0dHIuYXJpYS1sYWJlbF09XCJkYXkubG9uZ1wiPnt7ZGF5Lm5hcnJvd319PC90aD5cbiAgICAgIH1cbiAgICA8L3RyPlxuICAgIDx0cj5cbiAgICAgIDx0aCBjb2xzcGFuPVwiN1wiIGNsYXNzPVwiY21hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlclwiPjwvdGg+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5IChAc2xpZGVDYWxlbmRhci5kb25lKT1cImNhbGVuZGFyU3RhdGVEb25lKClcIiAoc2VsZWN0ZWRWYWx1ZUNoYW5nZSk9XCJkYXRlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgW0BzbGlkZUNhbGVuZGFyXT1cImNhbGVuZGFyU3RhdGVcIiBbYWN0aXZlQ2VsbF09XCJhZGFwdGVyLmdldERhdGUoYWN0aXZlRGF0ZSkgLSAxXCIgW3Jvd3NdPVwid2Vla3NcIlxuICBbc2VsZWN0ZWRWYWx1ZV09XCJzZWxlY3RlZERhdGVcIiBbdG9kYXlWYWx1ZV09XCJ0b2RheURhdGVcIiBjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLWJvZHkgcm9sZT1cImdyaWRcIj48L3Rib2R5PlxuPC90YWJsZT4iXX0=