ngx-tethys 18.2.7 → 19.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (943) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/badge/badge.component.d.ts +21 -3
  3. package/cascader/cascader-search-option.component.d.ts +6 -3
  4. package/core/store/store.d.ts +1 -1
  5. package/date-picker/abstract-picker.component.d.ts +1 -1
  6. package/date-picker/abstract-picker.directive.d.ts +1 -1
  7. package/date-picker/lib/calendar/calendar-header.component.d.ts +1 -1
  8. package/date-picker/lib/calendar/calendar-table.component.d.ts +1 -1
  9. package/date-range/date-range.component.d.ts +12 -2
  10. package/divider/divider.component.d.ts +2 -8
  11. package/dropdown/dropdown-menu.component.d.ts +1 -1
  12. package/empty/empty.component.d.ts +1 -4
  13. package/fesm2022/ngx-tethys-action.mjs +12 -12
  14. package/fesm2022/ngx-tethys-action.mjs.map +1 -1
  15. package/fesm2022/ngx-tethys-affix.mjs +8 -8
  16. package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
  17. package/fesm2022/ngx-tethys-alert.mjs +12 -12
  18. package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
  19. package/fesm2022/ngx-tethys-anchor.mjs +11 -13
  20. package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
  21. package/fesm2022/ngx-tethys-arrow-switcher.mjs +9 -9
  22. package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
  23. package/fesm2022/ngx-tethys-autocomplete.mjs +20 -20
  24. package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
  25. package/fesm2022/ngx-tethys-avatar.mjs +26 -26
  26. package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
  27. package/fesm2022/ngx-tethys-back-top.mjs +10 -10
  28. package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
  29. package/fesm2022/ngx-tethys-badge.mjs +9 -9
  30. package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
  31. package/fesm2022/ngx-tethys-breadcrumb.mjs +13 -15
  32. package/fesm2022/ngx-tethys-breadcrumb.mjs.map +1 -1
  33. package/fesm2022/ngx-tethys-button.mjs +16 -16
  34. package/fesm2022/ngx-tethys-button.mjs.map +1 -1
  35. package/fesm2022/ngx-tethys-calendar.mjs +20 -20
  36. package/fesm2022/ngx-tethys-calendar.mjs.map +1 -1
  37. package/fesm2022/ngx-tethys-card.mjs +15 -15
  38. package/fesm2022/ngx-tethys-card.mjs.map +1 -1
  39. package/fesm2022/ngx-tethys-carousel.mjs +15 -15
  40. package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
  41. package/fesm2022/ngx-tethys-cascader.mjs +23 -24
  42. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  43. package/fesm2022/ngx-tethys-checkbox.mjs +9 -9
  44. package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
  45. package/fesm2022/ngx-tethys-collapse.mjs +12 -12
  46. package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
  47. package/fesm2022/ngx-tethys-color-picker.mjs +38 -38
  48. package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
  49. package/fesm2022/ngx-tethys-comment.mjs +15 -15
  50. package/fesm2022/ngx-tethys-comment.mjs.map +1 -1
  51. package/fesm2022/ngx-tethys-copy.mjs +8 -8
  52. package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
  53. package/fesm2022/ngx-tethys-core.mjs +21 -21
  54. package/fesm2022/ngx-tethys-core.mjs.map +1 -1
  55. package/fesm2022/ngx-tethys-date-picker.mjs +141 -141
  56. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  57. package/fesm2022/ngx-tethys-date-range.mjs +14 -14
  58. package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
  59. package/fesm2022/ngx-tethys-dialog.mjs +27 -28
  60. package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
  61. package/fesm2022/ngx-tethys-divider.mjs +8 -9
  62. package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
  63. package/fesm2022/ngx-tethys-dot.mjs +8 -8
  64. package/fesm2022/ngx-tethys-dot.mjs.map +1 -1
  65. package/fesm2022/ngx-tethys-drag-drop.mjs +20 -20
  66. package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
  67. package/fesm2022/ngx-tethys-dropdown.mjs +47 -48
  68. package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
  69. package/fesm2022/ngx-tethys-empty.mjs +12 -12
  70. package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
  71. package/fesm2022/ngx-tethys-flexible-text.mjs +8 -8
  72. package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
  73. package/fesm2022/ngx-tethys-form.mjs +44 -44
  74. package/fesm2022/ngx-tethys-form.mjs.map +1 -1
  75. package/fesm2022/ngx-tethys-fullscreen.mjs +14 -14
  76. package/fesm2022/ngx-tethys-fullscreen.mjs.map +1 -1
  77. package/fesm2022/ngx-tethys-grid.mjs +35 -38
  78. package/fesm2022/ngx-tethys-grid.mjs.map +1 -1
  79. package/fesm2022/ngx-tethys-guider.mjs +18 -18
  80. package/fesm2022/ngx-tethys-guider.mjs.map +1 -1
  81. package/fesm2022/ngx-tethys-i18n.mjs +3 -3
  82. package/fesm2022/ngx-tethys-i18n.mjs.map +1 -1
  83. package/fesm2022/ngx-tethys-icon.mjs +11 -11
  84. package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
  85. package/fesm2022/ngx-tethys-image.mjs +19 -19
  86. package/fesm2022/ngx-tethys-image.mjs.map +1 -1
  87. package/fesm2022/ngx-tethys-input-number.mjs +11 -11
  88. package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
  89. package/fesm2022/ngx-tethys-input.mjs +23 -23
  90. package/fesm2022/ngx-tethys-input.mjs.map +1 -1
  91. package/fesm2022/ngx-tethys-layout.mjs +63 -64
  92. package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
  93. package/fesm2022/ngx-tethys-list.mjs +19 -19
  94. package/fesm2022/ngx-tethys-list.mjs.map +1 -1
  95. package/fesm2022/ngx-tethys-loading.mjs +9 -9
  96. package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
  97. package/fesm2022/ngx-tethys-mention.mjs +12 -12
  98. package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
  99. package/fesm2022/ngx-tethys-menu.mjs +29 -29
  100. package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
  101. package/fesm2022/ngx-tethys-message.mjs +25 -26
  102. package/fesm2022/ngx-tethys-message.mjs.map +1 -1
  103. package/fesm2022/ngx-tethys-nav.mjs +24 -25
  104. package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
  105. package/fesm2022/ngx-tethys-notify.mjs +20 -20
  106. package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
  107. package/fesm2022/ngx-tethys-pagination.mjs +15 -15
  108. package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
  109. package/fesm2022/ngx-tethys-popover.mjs +23 -23
  110. package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
  111. package/fesm2022/ngx-tethys-progress.mjs +17 -17
  112. package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
  113. package/fesm2022/ngx-tethys-property-operation.mjs +12 -12
  114. package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
  115. package/fesm2022/ngx-tethys-property.mjs +12 -12
  116. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  117. package/fesm2022/ngx-tethys-radio.mjs +15 -15
  118. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  119. package/fesm2022/ngx-tethys-rate.mjs +12 -13
  120. package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
  121. package/fesm2022/ngx-tethys-resizable.mjs +17 -19
  122. package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
  123. package/fesm2022/ngx-tethys-result.mjs +9 -9
  124. package/fesm2022/ngx-tethys-result.mjs.map +1 -1
  125. package/fesm2022/ngx-tethys-segment.mjs +13 -13
  126. package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
  127. package/fesm2022/ngx-tethys-select.mjs +16 -16
  128. package/fesm2022/ngx-tethys-select.mjs.map +1 -1
  129. package/fesm2022/ngx-tethys-shared.mjs +70 -70
  130. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  131. package/fesm2022/ngx-tethys-skeleton.mjs +23 -28
  132. package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
  133. package/fesm2022/ngx-tethys-slide.mjs +34 -35
  134. package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
  135. package/fesm2022/ngx-tethys-slider.mjs +9 -9
  136. package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
  137. package/fesm2022/ngx-tethys-space.mjs +12 -12
  138. package/fesm2022/ngx-tethys-space.mjs.map +1 -1
  139. package/fesm2022/ngx-tethys-statistic.mjs +9 -9
  140. package/fesm2022/ngx-tethys-statistic.mjs.map +1 -1
  141. package/fesm2022/ngx-tethys-stepper.mjs +22 -22
  142. package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
  143. package/fesm2022/ngx-tethys-strength.mjs +8 -8
  144. package/fesm2022/ngx-tethys-strength.mjs.map +1 -1
  145. package/fesm2022/ngx-tethys-switch.mjs +9 -9
  146. package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
  147. package/fesm2022/ngx-tethys-table.mjs +23 -23
  148. package/fesm2022/ngx-tethys-table.mjs.map +1 -1
  149. package/fesm2022/ngx-tethys-tabs.mjs +15 -16
  150. package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
  151. package/fesm2022/ngx-tethys-tag.mjs +11 -11
  152. package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
  153. package/fesm2022/ngx-tethys-testing.mjs.map +1 -1
  154. package/fesm2022/ngx-tethys-time-picker.mjs +24 -24
  155. package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
  156. package/fesm2022/ngx-tethys-timeline.mjs +15 -16
  157. package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
  158. package/fesm2022/ngx-tethys-tooltip.mjs +16 -16
  159. package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
  160. package/fesm2022/ngx-tethys-transfer.mjs +13 -13
  161. package/fesm2022/ngx-tethys-transfer.mjs.map +1 -1
  162. package/fesm2022/ngx-tethys-tree-select.mjs +13 -13
  163. package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
  164. package/fesm2022/ngx-tethys-tree.mjs +19 -19
  165. package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
  166. package/fesm2022/ngx-tethys-typography.mjs +15 -15
  167. package/fesm2022/ngx-tethys-typography.mjs.map +1 -1
  168. package/fesm2022/ngx-tethys-upload.mjs +17 -17
  169. package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
  170. package/fesm2022/ngx-tethys-util.mjs +2 -18
  171. package/fesm2022/ngx-tethys-util.mjs.map +1 -1
  172. package/fesm2022/ngx-tethys-vote.mjs +9 -9
  173. package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
  174. package/fesm2022/ngx-tethys-watermark.mjs +8 -8
  175. package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
  176. package/fesm2022/ngx-tethys.mjs +1 -1
  177. package/fesm2022/ngx-tethys.mjs.map +1 -1
  178. package/input/input.component.d.ts +1 -1
  179. package/layout/header.component.d.ts +21 -3
  180. package/menu/group/menu-group.component.d.ts +6 -30
  181. package/message/abstract/abstract-message-container.component.d.ts +1 -1
  182. package/message/abstract/abstract-message.component.d.ts +1 -1
  183. package/nav/nav.component.d.ts +2 -2
  184. package/package.json +1 -169
  185. package/pagination/pagination.component.d.ts +45 -5
  186. package/property/property-item.component.d.ts +4 -2
  187. package/schematics/dependencies.js +3 -3
  188. package/schematics/ng-add/index.js +7 -3
  189. package/schematics/ng-update/core/complete.js +1 -2
  190. package/schematics/ng-update/migration-collection.json +4 -4
  191. package/schematics/ng-update/{update-18 → update-19}/index.js +4 -5
  192. package/schematics/ng-update/{update-18 → update-19}/index.spec.js +4 -4
  193. package/schematics/testing/get-json-content.js +1 -2
  194. package/schematics/testing/test-app.js +1 -2
  195. package/schematics/testing/test-project.js +1 -2
  196. package/schematics/testing/test-workspace.d.ts +0 -2
  197. package/schematics/testing/test-workspace.js +2 -2
  198. package/schematics/utils/create-tree-compiler-host.js +1 -2
  199. package/schematics/utils/create-tree-ts-parse-config-host.js +2 -2
  200. package/schematics/utils/get-angular-json.js +1 -2
  201. package/schematics/utils/get-project.js +1 -2
  202. package/schematics/utils/get-workspace-tsconfig.js +1 -2
  203. package/schematics/utils/package-config.js +2 -3
  204. package/schematics/utils/update-file.service.js +2 -2
  205. package/schematics/version.d.ts +1 -1
  206. package/schematics/version.js +1 -1
  207. package/shared/base-form-check.component.d.ts +1 -1
  208. package/shared/option/list-option/list-option.component.d.ts +1 -4
  209. package/shared/select/styles/select.mixin.scss +2 -1
  210. package/skeleton/skeleton-rectangle.component.d.ts +1 -4
  211. package/skeleton/stylized/bullet-list.component.d.ts +1 -9
  212. package/styles/bootstrap/utilities/_background.scss +2 -1
  213. package/styles/bootstrap/utilities/_text.scss +1 -1
  214. package/table/table.component.d.ts +1 -1
  215. package/upload/file-select-base.d.ts +1 -1
  216. package/esm2022/action/action.component.mjs +0 -174
  217. package/esm2022/action/action.module.mjs +0 -19
  218. package/esm2022/action/actions.component.mjs +0 -57
  219. package/esm2022/action/index.mjs +0 -4
  220. package/esm2022/action/ngx-tethys-action.mjs +0 -5
  221. package/esm2022/affix/affix.component.mjs +0 -243
  222. package/esm2022/affix/affix.module.mjs +0 -18
  223. package/esm2022/affix/index.mjs +0 -3
  224. package/esm2022/affix/ngx-tethys-affix.mjs +0 -5
  225. package/esm2022/affix/respond-events.mjs +0 -11
  226. package/esm2022/alert/alert.component.mjs +0 -98
  227. package/esm2022/alert/alert.directive.mjs +0 -25
  228. package/esm2022/alert/alert.module.mjs +0 -19
  229. package/esm2022/alert/index.mjs +0 -4
  230. package/esm2022/alert/ngx-tethys-alert.mjs +0 -5
  231. package/esm2022/anchor/anchor-link.component.mjs +0 -106
  232. package/esm2022/anchor/anchor.component.mjs +0 -266
  233. package/esm2022/anchor/anchor.module.mjs +0 -20
  234. package/esm2022/anchor/index.mjs +0 -4
  235. package/esm2022/anchor/ngx-tethys-anchor.mjs +0 -5
  236. package/esm2022/arrow-switcher/arrow-switcher.component.mjs +0 -130
  237. package/esm2022/arrow-switcher/index.mjs +0 -3
  238. package/esm2022/arrow-switcher/module.mjs +0 -21
  239. package/esm2022/arrow-switcher/ngx-tethys-arrow-switcher.mjs +0 -5
  240. package/esm2022/autocomplete/autocomplete.component.mjs +0 -182
  241. package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +0 -275
  242. package/esm2022/autocomplete/index.mjs +0 -8
  243. package/esm2022/autocomplete/module.mjs +0 -67
  244. package/esm2022/autocomplete/ngx-tethys-autocomplete.mjs +0 -5
  245. package/esm2022/autocomplete/overlay/autocomplete-animations.mjs +0 -10
  246. package/esm2022/autocomplete/overlay/autocomplete-container.component.mjs +0 -64
  247. package/esm2022/autocomplete/overlay/autocomplete-ref.mjs +0 -18
  248. package/esm2022/autocomplete/overlay/autocomplete.config.mjs +0 -18
  249. package/esm2022/autocomplete/overlay/autocomplete.options.mjs +0 -6
  250. package/esm2022/autocomplete/overlay/autocomplete.service.mjs +0 -127
  251. package/esm2022/avatar/avatar-list/avatar-list.component.mjs +0 -76
  252. package/esm2022/avatar/avatar.component.mjs +0 -179
  253. package/esm2022/avatar/avatar.module.mjs +0 -33
  254. package/esm2022/avatar/avatar.pipe.mjs +0 -91
  255. package/esm2022/avatar/avatar.service.mjs +0 -27
  256. package/esm2022/avatar/index.mjs +0 -6
  257. package/esm2022/avatar/ngx-tethys-avatar.mjs +0 -5
  258. package/esm2022/back-top/back-top.component.mjs +0 -126
  259. package/esm2022/back-top/back-top.module.mjs +0 -18
  260. package/esm2022/back-top/index.mjs +0 -3
  261. package/esm2022/back-top/ngx-tethys-back-top.mjs +0 -5
  262. package/esm2022/badge/badge.component.mjs +0 -238
  263. package/esm2022/badge/badge.module.mjs +0 -18
  264. package/esm2022/badge/index.mjs +0 -3
  265. package/esm2022/badge/ngx-tethys-badge.mjs +0 -5
  266. package/esm2022/breadcrumb/breadcrumb-item.component.mjs +0 -49
  267. package/esm2022/breadcrumb/breadcrumb.component.mjs +0 -115
  268. package/esm2022/breadcrumb/index.mjs +0 -4
  269. package/esm2022/breadcrumb/module.mjs +0 -21
  270. package/esm2022/breadcrumb/ngx-tethys-breadcrumb.mjs +0 -5
  271. package/esm2022/button/button-group.component.mjs +0 -90
  272. package/esm2022/button/button-icon.component.mjs +0 -166
  273. package/esm2022/button/button.component.mjs +0 -216
  274. package/esm2022/button/button.module.mjs +0 -20
  275. package/esm2022/button/index.mjs +0 -5
  276. package/esm2022/button/ngx-tethys-button.mjs +0 -5
  277. package/esm2022/calendar/calendar-cells.mjs +0 -35
  278. package/esm2022/calendar/calendar-header.component.mjs +0 -117
  279. package/esm2022/calendar/calendar.component.mjs +0 -122
  280. package/esm2022/calendar/index.mjs +0 -5
  281. package/esm2022/calendar/module.mjs +0 -63
  282. package/esm2022/calendar/ngx-tethys-calendar.mjs +0 -5
  283. package/esm2022/card/card.component.mjs +0 -48
  284. package/esm2022/card/card.module.mjs +0 -19
  285. package/esm2022/card/content.component.mjs +0 -58
  286. package/esm2022/card/header.component.mjs +0 -42
  287. package/esm2022/card/index.mjs +0 -5
  288. package/esm2022/card/ngx-tethys-card.mjs +0 -5
  289. package/esm2022/carousel/carousel-item.directive.mjs +0 -37
  290. package/esm2022/carousel/carousel.component.mjs +0 -290
  291. package/esm2022/carousel/carousel.service.mjs +0 -74
  292. package/esm2022/carousel/engine/carousel-base.mjs +0 -43
  293. package/esm2022/carousel/engine/carousel-fade.mjs +0 -46
  294. package/esm2022/carousel/engine/carousel-noop.mjs +0 -28
  295. package/esm2022/carousel/engine/carousel-slide.mjs +0 -62
  296. package/esm2022/carousel/engine/index.mjs +0 -5
  297. package/esm2022/carousel/index.mjs +0 -5
  298. package/esm2022/carousel/module.mjs +0 -21
  299. package/esm2022/carousel/ngx-tethys-carousel.mjs +0 -5
  300. package/esm2022/carousel/typings.mjs +0 -2
  301. package/esm2022/cascader/cascader-li.component.mjs +0 -81
  302. package/esm2022/cascader/cascader-search-option.component.mjs +0 -73
  303. package/esm2022/cascader/cascader.component.mjs +0 -768
  304. package/esm2022/cascader/cascader.service.mjs +0 -558
  305. package/esm2022/cascader/index.mjs +0 -5
  306. package/esm2022/cascader/module.mjs +0 -62
  307. package/esm2022/cascader/ngx-tethys-cascader.mjs +0 -5
  308. package/esm2022/cascader/types.mjs +0 -2
  309. package/esm2022/checkbox/checkbox.component.mjs +0 -51
  310. package/esm2022/checkbox/index.mjs +0 -4
  311. package/esm2022/checkbox/module.mjs +0 -18
  312. package/esm2022/checkbox/ngx-tethys-checkbox.mjs +0 -5
  313. package/esm2022/collapse/collapse-item.component.mjs +0 -88
  314. package/esm2022/collapse/collapse.component.mjs +0 -79
  315. package/esm2022/collapse/index.mjs +0 -4
  316. package/esm2022/collapse/module.mjs +0 -22
  317. package/esm2022/collapse/ngx-tethys-collapse.mjs +0 -5
  318. package/esm2022/color-picker/color-picker-custom-panel.component.mjs +0 -38
  319. package/esm2022/color-picker/color-picker-panel.component.mjs +0 -100
  320. package/esm2022/color-picker/color-picker.component.mjs +0 -289
  321. package/esm2022/color-picker/constant.mjs +0 -73
  322. package/esm2022/color-picker/coordinates.directive.mjs +0 -73
  323. package/esm2022/color-picker/helpers/color.class.mjs +0 -281
  324. package/esm2022/color-picker/helpers/colors-table.class.mjs +0 -155
  325. package/esm2022/color-picker/helpers/rgba.class.mjs +0 -34
  326. package/esm2022/color-picker/index.mjs +0 -14
  327. package/esm2022/color-picker/module.mjs +0 -72
  328. package/esm2022/color-picker/ngx-tethys-color-picker.mjs +0 -5
  329. package/esm2022/color-picker/parts/alpha/alpha.component.mjs +0 -64
  330. package/esm2022/color-picker/parts/hue/hue.component.mjs +0 -54
  331. package/esm2022/color-picker/parts/indicator/indicator.component.mjs +0 -26
  332. package/esm2022/color-picker/parts/inputs/inputs.component.mjs +0 -61
  333. package/esm2022/color-picker/parts/saturation/saturation.component.mjs +0 -68
  334. package/esm2022/comment/comment-actions.directive.mjs +0 -19
  335. package/esm2022/comment/comment-content.directive.mjs +0 -19
  336. package/esm2022/comment/comment.component.mjs +0 -30
  337. package/esm2022/comment/comment.module.mjs +0 -41
  338. package/esm2022/comment/index.mjs +0 -5
  339. package/esm2022/comment/ngx-tethys-comment.mjs +0 -5
  340. package/esm2022/copy/copy.directive.mjs +0 -101
  341. package/esm2022/copy/index.mjs +0 -3
  342. package/esm2022/copy/module.mjs +0 -18
  343. package/esm2022/copy/ngx-tethys-copy.mjs +0 -5
  344. package/esm2022/core/animation/animation-consts.mjs +0 -23
  345. package/esm2022/core/animation/collapse.mjs +0 -12
  346. package/esm2022/core/animation/fade.mjs +0 -7
  347. package/esm2022/core/animation/index.mjs +0 -2
  348. package/esm2022/core/animation/public-api.mjs +0 -6
  349. package/esm2022/core/animation/thumb.mjs +0 -12
  350. package/esm2022/core/animation/zoom.mjs +0 -66
  351. package/esm2022/core/behaviors/constructor.mjs +0 -5
  352. package/esm2022/core/behaviors/control-value-accessor.mjs +0 -17
  353. package/esm2022/core/behaviors/decorators.mjs +0 -47
  354. package/esm2022/core/behaviors/disabled.mjs +0 -17
  355. package/esm2022/core/behaviors/focus-control.mjs +0 -31
  356. package/esm2022/core/behaviors/index.mjs +0 -11
  357. package/esm2022/core/behaviors/initialized.mjs +0 -12
  358. package/esm2022/core/behaviors/loading-done.mjs +0 -12
  359. package/esm2022/core/behaviors/mixin.mjs +0 -5
  360. package/esm2022/core/behaviors/tabindex.mjs +0 -21
  361. package/esm2022/core/behaviors/unsubscribe.mjs +0 -23
  362. package/esm2022/core/click-positioner.mjs +0 -36
  363. package/esm2022/core/color/color.mjs +0 -13
  364. package/esm2022/core/color/index.mjs +0 -2
  365. package/esm2022/core/debounce-time.mjs +0 -11
  366. package/esm2022/core/event-dispatchers/index.mjs +0 -2
  367. package/esm2022/core/index.mjs +0 -16
  368. package/esm2022/core/ngx-tethys-core.mjs +0 -5
  369. package/esm2022/core/overlay/abstract-overlay-container.mjs +0 -53
  370. package/esm2022/core/overlay/abstract-overlay-ref.mjs +0 -160
  371. package/esm2022/core/overlay/abstract-overlay.config.mjs +0 -70
  372. package/esm2022/core/overlay/abstract-overlay.service.mjs +0 -158
  373. package/esm2022/core/overlay/index.mjs +0 -10
  374. package/esm2022/core/overlay/interface.mjs +0 -2
  375. package/esm2022/core/overlay/overlay-position-map.mjs +0 -88
  376. package/esm2022/core/overlay/overlay.directive.mjs +0 -175
  377. package/esm2022/core/overlay/portal-directives.mjs +0 -47
  378. package/esm2022/core/overlay/utils.mjs +0 -69
  379. package/esm2022/core/request-animation.mjs +0 -41
  380. package/esm2022/core/scroll-to.service.mjs +0 -33
  381. package/esm2022/core/scroll.mjs +0 -83
  382. package/esm2022/core/spacing/index.mjs +0 -2
  383. package/esm2022/core/spacing/spacing.mjs +0 -17
  384. package/esm2022/core/store/action-state.mjs +0 -11
  385. package/esm2022/core/store/action.mjs +0 -48
  386. package/esm2022/core/store/actions-stream.mjs +0 -2
  387. package/esm2022/core/store/index.mjs +0 -4
  388. package/esm2022/core/store/store.mjs +0 -125
  389. package/esm2022/core/store/types.mjs +0 -6
  390. package/esm2022/core/store/utils.mjs +0 -14
  391. package/esm2022/core/theme/index.mjs +0 -3
  392. package/esm2022/core/theme/store.mjs +0 -42
  393. package/esm2022/core/theme/theme.mjs +0 -9
  394. package/esm2022/core/translate.mjs +0 -22
  395. package/esm2022/core/update-host-class.service.mjs +0 -60
  396. package/esm2022/date-picker/abstract-picker.component.mjs +0 -318
  397. package/esm2022/date-picker/abstract-picker.directive.mjs +0 -218
  398. package/esm2022/date-picker/base-picker.component.mjs +0 -249
  399. package/esm2022/date-picker/date-helper.service.mjs +0 -37
  400. package/esm2022/date-picker/date-picker.component.mjs +0 -41
  401. package/esm2022/date-picker/date-picker.config.mjs +0 -103
  402. package/esm2022/date-picker/date-picker.directive.mjs +0 -39
  403. package/esm2022/date-picker/date-picker.module.mjs +0 -117
  404. package/esm2022/date-picker/date-picker.service.mjs +0 -31
  405. package/esm2022/date-picker/index.mjs +0 -37
  406. package/esm2022/date-picker/inner-types.mjs +0 -2
  407. package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +0 -98
  408. package/esm2022/date-picker/lib/calendar/calendar-header.component.mjs +0 -92
  409. package/esm2022/date-picker/lib/calendar/calendar-table.component.mjs +0 -105
  410. package/esm2022/date-picker/lib/date/date-header.component.mjs +0 -35
  411. package/esm2022/date-picker/lib/date/date-table-cell.component.mjs +0 -24
  412. package/esm2022/date-picker/lib/date/date-table.component.mjs +0 -149
  413. package/esm2022/date-picker/lib/date/types.mjs +0 -2
  414. package/esm2022/date-picker/lib/date-carousel/date-carousel.component.mjs +0 -388
  415. package/esm2022/date-picker/lib/decade/decade-header.component.mjs +0 -42
  416. package/esm2022/date-picker/lib/decade/decade-table.component.mjs +0 -81
  417. package/esm2022/date-picker/lib/lib-packer.module.mjs +0 -123
  418. package/esm2022/date-picker/lib/month/month-header.component.mjs +0 -27
  419. package/esm2022/date-picker/lib/month/month-table.component.mjs +0 -97
  420. package/esm2022/date-picker/lib/popups/date-popup.component.mjs +0 -566
  421. package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +0 -196
  422. package/esm2022/date-picker/lib/quarter/quarter-table.component.mjs +0 -98
  423. package/esm2022/date-picker/lib/year/year-header.component.mjs +0 -39
  424. package/esm2022/date-picker/lib/year/year-table.component.mjs +0 -100
  425. package/esm2022/date-picker/month-picker.component.mjs +0 -45
  426. package/esm2022/date-picker/ngx-tethys-date-picker.mjs +0 -5
  427. package/esm2022/date-picker/picker.component.mjs +0 -273
  428. package/esm2022/date-picker/picker.pipes.mjs +0 -112
  429. package/esm2022/date-picker/picker.util.mjs +0 -220
  430. package/esm2022/date-picker/picker.validators.mjs +0 -79
  431. package/esm2022/date-picker/quarter-picker.component.mjs +0 -48
  432. package/esm2022/date-picker/range-picker.component.mjs +0 -39
  433. package/esm2022/date-picker/range-picker.directive.mjs +0 -39
  434. package/esm2022/date-picker/standard-types.mjs +0 -2
  435. package/esm2022/date-picker/week-picker.component.mjs +0 -40
  436. package/esm2022/date-picker/year-picker.component.mjs +0 -48
  437. package/esm2022/date-range/date-range.class.mjs +0 -6
  438. package/esm2022/date-range/date-range.component.mjs +0 -255
  439. package/esm2022/date-range/index.mjs +0 -5
  440. package/esm2022/date-range/module.mjs +0 -50
  441. package/esm2022/date-range/ngx-tethys-date-range.mjs +0 -5
  442. package/esm2022/date-range/optional-dates/optional-dates.component.mjs +0 -50
  443. package/esm2022/dialog/body/dialog-body.component.mjs +0 -49
  444. package/esm2022/dialog/confirm/confirm.component.mjs +0 -77
  445. package/esm2022/dialog/confirm/token.mjs +0 -3
  446. package/esm2022/dialog/confirm.config.mjs +0 -29
  447. package/esm2022/dialog/dialog-animations.mjs +0 -19
  448. package/esm2022/dialog/dialog-container.component.mjs +0 -169
  449. package/esm2022/dialog/dialog-ref.mjs +0 -35
  450. package/esm2022/dialog/dialog.config.mjs +0 -62
  451. package/esm2022/dialog/dialog.module.mjs +0 -91
  452. package/esm2022/dialog/dialog.options.mjs +0 -6
  453. package/esm2022/dialog/dialog.service.mjs +0 -145
  454. package/esm2022/dialog/footer/dialog-footer.component.mjs +0 -51
  455. package/esm2022/dialog/header/dialog-header.component.mjs +0 -87
  456. package/esm2022/dialog/index.mjs +0 -12
  457. package/esm2022/dialog/ngx-tethys-dialog.mjs +0 -5
  458. package/esm2022/divider/divider.component.mjs +0 -117
  459. package/esm2022/divider/divider.module.mjs +0 -20
  460. package/esm2022/divider/index.mjs +0 -3
  461. package/esm2022/divider/ngx-tethys-divider.mjs +0 -5
  462. package/esm2022/dot/dot.component.mjs +0 -111
  463. package/esm2022/dot/dot.module.mjs +0 -17
  464. package/esm2022/dot/index.mjs +0 -3
  465. package/esm2022/dot/ngx-tethys-dot.mjs +0 -5
  466. package/esm2022/drag-drop/drag-content.directive.mjs +0 -32
  467. package/esm2022/drag-drop/drag-drop.class.mjs +0 -7
  468. package/esm2022/drag-drop/drag-drop.service.mjs +0 -23
  469. package/esm2022/drag-drop/drag-handle.directive.mjs +0 -43
  470. package/esm2022/drag-drop/drag-ref.mjs +0 -225
  471. package/esm2022/drag-drop/drag.directive.mjs +0 -71
  472. package/esm2022/drag-drop/drop-container.class.mjs +0 -6
  473. package/esm2022/drag-drop/drop-container.directive.mjs +0 -129
  474. package/esm2022/drag-drop/index.mjs +0 -10
  475. package/esm2022/drag-drop/module.mjs +0 -27
  476. package/esm2022/drag-drop/ngx-tethys-drag-drop.mjs +0 -5
  477. package/esm2022/dropdown/dropdown-active.directive.mjs +0 -66
  478. package/esm2022/dropdown/dropdown-menu-item.directive.mjs +0 -210
  479. package/esm2022/dropdown/dropdown-menu.component.mjs +0 -156
  480. package/esm2022/dropdown/dropdown-submenu.component.mjs +0 -83
  481. package/esm2022/dropdown/dropdown.directive.mjs +0 -189
  482. package/esm2022/dropdown/index.mjs +0 -7
  483. package/esm2022/dropdown/module.mjs +0 -79
  484. package/esm2022/dropdown/ngx-tethys-dropdown.mjs +0 -5
  485. package/esm2022/empty/empty.component.mjs +0 -183
  486. package/esm2022/empty/empty.config.mjs +0 -17
  487. package/esm2022/empty/empty.module.mjs +0 -21
  488. package/esm2022/empty/index.mjs +0 -4
  489. package/esm2022/empty/ngx-tethys-empty.mjs +0 -5
  490. package/esm2022/empty/svgs.mjs +0 -207
  491. package/esm2022/flexible-text/flexible-text.component.mjs +0 -157
  492. package/esm2022/flexible-text/flexible-text.module.mjs +0 -19
  493. package/esm2022/flexible-text/index.mjs +0 -3
  494. package/esm2022/flexible-text/ngx-tethys-flexible-text.mjs +0 -5
  495. package/esm2022/form/form-group-error/form-group-error.component.mjs +0 -53
  496. package/esm2022/form/form-group-label.directive.mjs +0 -49
  497. package/esm2022/form/form-group.component.mjs +0 -145
  498. package/esm2022/form/form-submit.directive.mjs +0 -40
  499. package/esm2022/form/form-validator-loader.mjs +0 -134
  500. package/esm2022/form/form-validator.service.mjs +0 -252
  501. package/esm2022/form/form.class.mjs +0 -8
  502. package/esm2022/form/form.directive.mjs +0 -158
  503. package/esm2022/form/from-group-footer/form-group-footer.component.mjs +0 -53
  504. package/esm2022/form/index.mjs +0 -12
  505. package/esm2022/form/module.mjs +0 -104
  506. package/esm2022/form/ngx-tethys-form.mjs +0 -5
  507. package/esm2022/form/validator/confirm-validator.directive.mjs +0 -33
  508. package/esm2022/form/validator/index.mjs +0 -5
  509. package/esm2022/form/validator/max-validator.directive.mjs +0 -41
  510. package/esm2022/form/validator/min-validator.directive.mjs +0 -41
  511. package/esm2022/form/validator/unique-validator.directive.mjs +0 -52
  512. package/esm2022/fullscreen/fullscreen-launch.directive.mjs +0 -18
  513. package/esm2022/fullscreen/fullscreen-ref.mjs +0 -151
  514. package/esm2022/fullscreen/fullscreen.component.mjs +0 -78
  515. package/esm2022/fullscreen/fullscreen.config.mjs +0 -6
  516. package/esm2022/fullscreen/fullscreen.module.mjs +0 -17
  517. package/esm2022/fullscreen/fullscreen.service.mjs +0 -47
  518. package/esm2022/fullscreen/index.mjs +0 -7
  519. package/esm2022/fullscreen/ngx-tethys-fullscreen.mjs +0 -5
  520. package/esm2022/grid/flex.mjs +0 -179
  521. package/esm2022/grid/grid.token.mjs +0 -5
  522. package/esm2022/grid/index.mjs +0 -7
  523. package/esm2022/grid/module.mjs +0 -56
  524. package/esm2022/grid/ngx-tethys-grid.mjs +0 -5
  525. package/esm2022/grid/thy-col.directive.mjs +0 -66
  526. package/esm2022/grid/thy-grid-item.component.mjs +0 -60
  527. package/esm2022/grid/thy-grid.component.mjs +0 -256
  528. package/esm2022/grid/thy-row.directive.mjs +0 -59
  529. package/esm2022/guider/guider-hint/guider-hint.component.mjs +0 -52
  530. package/esm2022/guider/guider-manager.mjs +0 -39
  531. package/esm2022/guider/guider-ref.mjs +0 -133
  532. package/esm2022/guider/guider-step-ref.mjs +0 -242
  533. package/esm2022/guider/guider.class.mjs +0 -15
  534. package/esm2022/guider/guider.directive.mjs +0 -50
  535. package/esm2022/guider/guider.module.mjs +0 -24
  536. package/esm2022/guider/guider.service.mjs +0 -76
  537. package/esm2022/guider/index.mjs +0 -9
  538. package/esm2022/guider/ngx-tethys-guider.mjs +0 -5
  539. package/esm2022/guider/utils.mjs +0 -10
  540. package/esm2022/i18n/i18n.mjs +0 -9
  541. package/esm2022/i18n/i18n.service.mjs +0 -45
  542. package/esm2022/i18n/i18n.token.mjs +0 -10
  543. package/esm2022/i18n/index.mjs +0 -10
  544. package/esm2022/i18n/locale.mjs +0 -13
  545. package/esm2022/i18n/locales/de-de.mjs +0 -134
  546. package/esm2022/i18n/locales/en-us.mjs +0 -155
  547. package/esm2022/i18n/locales/ja-jp.mjs +0 -134
  548. package/esm2022/i18n/locales/zh-hans.mjs +0 -134
  549. package/esm2022/i18n/locales/zh-hant.mjs +0 -134
  550. package/esm2022/i18n/ngx-tethys-i18n.mjs +0 -5
  551. package/esm2022/icon/config.mjs +0 -8
  552. package/esm2022/icon/icon-registry.mjs +0 -340
  553. package/esm2022/icon/icon.component.mjs +0 -198
  554. package/esm2022/icon/icon.module.mjs +0 -20
  555. package/esm2022/icon/index.mjs +0 -5
  556. package/esm2022/icon/ngx-tethys-icon.mjs +0 -5
  557. package/esm2022/image/image-group.component.mjs +0 -32
  558. package/esm2022/image/image.class.mjs +0 -2
  559. package/esm2022/image/image.config.mjs +0 -21
  560. package/esm2022/image/image.directive.mjs +0 -130
  561. package/esm2022/image/image.service.mjs +0 -58
  562. package/esm2022/image/index.mjs +0 -9
  563. package/esm2022/image/module.mjs +0 -67
  564. package/esm2022/image/ngx-tethys-image.mjs +0 -5
  565. package/esm2022/image/preview/image-preview-ref.mjs +0 -32
  566. package/esm2022/image/preview/image-preview.component.mjs +0 -413
  567. package/esm2022/image/utils.mjs +0 -13
  568. package/esm2022/input/index.mjs +0 -7
  569. package/esm2022/input/input-count.component.mjs +0 -68
  570. package/esm2022/input/input-group.component.mjs +0 -161
  571. package/esm2022/input/input-search.component.mjs +0 -152
  572. package/esm2022/input/input.component.mjs +0 -142
  573. package/esm2022/input/input.directive.mjs +0 -63
  574. package/esm2022/input/module.mjs +0 -51
  575. package/esm2022/input/ngx-tethys-input.mjs +0 -5
  576. package/esm2022/input-number/index.mjs +0 -3
  577. package/esm2022/input-number/input-number.component.mjs +0 -362
  578. package/esm2022/input-number/module.mjs +0 -22
  579. package/esm2022/input-number/ngx-tethys-input-number.mjs +0 -5
  580. package/esm2022/layout/content-main.component.mjs +0 -42
  581. package/esm2022/layout/content-section.component.mjs +0 -42
  582. package/esm2022/layout/content.component.mjs +0 -42
  583. package/esm2022/layout/header.component.mjs +0 -125
  584. package/esm2022/layout/index.mjs +0 -11
  585. package/esm2022/layout/layout.component.mjs +0 -47
  586. package/esm2022/layout/layout.module.mjs +0 -121
  587. package/esm2022/layout/ngx-tethys-layout.mjs +0 -5
  588. package/esm2022/layout/sidebar-content.component.mjs +0 -41
  589. package/esm2022/layout/sidebar-footer.component.mjs +0 -41
  590. package/esm2022/layout/sidebar-header.component.mjs +0 -54
  591. package/esm2022/layout/sidebar.component.mjs +0 -405
  592. package/esm2022/list/index.mjs +0 -7
  593. package/esm2022/list/list-item-meta.component.mjs +0 -38
  594. package/esm2022/list/list-item.component.mjs +0 -25
  595. package/esm2022/list/list.component.mjs +0 -41
  596. package/esm2022/list/list.module.mjs +0 -22
  597. package/esm2022/list/ngx-tethys-list.mjs +0 -5
  598. package/esm2022/list/selection/selection-list.mjs +0 -393
  599. package/esm2022/list/selection/selection.interface.mjs +0 -2
  600. package/esm2022/loading/index.mjs +0 -3
  601. package/esm2022/loading/loading.component.mjs +0 -54
  602. package/esm2022/loading/loading.module.mjs +0 -17
  603. package/esm2022/loading/ngx-tethys-loading.mjs +0 -5
  604. package/esm2022/mention/adapter/adapter.mjs +0 -20
  605. package/esm2022/mention/adapter/editable.adapter.mjs +0 -48
  606. package/esm2022/mention/adapter/index.mjs +0 -16
  607. package/esm2022/mention/adapter/textarea.adapter.mjs +0 -58
  608. package/esm2022/mention/caret-positioner.mjs +0 -194
  609. package/esm2022/mention/index.mjs +0 -5
  610. package/esm2022/mention/interfaces.mjs +0 -2
  611. package/esm2022/mention/mention.directive.mjs +0 -160
  612. package/esm2022/mention/mention.module.mjs +0 -23
  613. package/esm2022/mention/ngx-tethys-mention.mjs +0 -5
  614. package/esm2022/mention/suggestions/suggestions.component.mjs +0 -80
  615. package/esm2022/menu/divider/menu-divider.component.mjs +0 -21
  616. package/esm2022/menu/group/menu-group.component.mjs +0 -187
  617. package/esm2022/menu/index.mjs +0 -9
  618. package/esm2022/menu/item/action/menu-item-action.component.mjs +0 -75
  619. package/esm2022/menu/item/icon/menu-item-icon.component.mjs +0 -33
  620. package/esm2022/menu/item/menu-item.component.mjs +0 -42
  621. package/esm2022/menu/item/name/menu-item-name.component.mjs +0 -32
  622. package/esm2022/menu/menu.component.mjs +0 -39
  623. package/esm2022/menu/menu.module.mjs +0 -49
  624. package/esm2022/menu/ngx-tethys-menu.mjs +0 -5
  625. package/esm2022/message/abstract/abstract-message-container.component.mjs +0 -26
  626. package/esm2022/message/abstract/abstract-message-queue.service.mjs +0 -34
  627. package/esm2022/message/abstract/abstract-message-ref.mjs +0 -22
  628. package/esm2022/message/abstract/abstract-message.component.mjs +0 -76
  629. package/esm2022/message/abstract/abstract-message.service.mjs +0 -29
  630. package/esm2022/message/abstract/index.mjs +0 -6
  631. package/esm2022/message/index.mjs +0 -9
  632. package/esm2022/message/message-container.component.mjs +0 -45
  633. package/esm2022/message/message-queue.service.mjs +0 -25
  634. package/esm2022/message/message-ref.mjs +0 -4
  635. package/esm2022/message/message.component.mjs +0 -61
  636. package/esm2022/message/message.config.mjs +0 -14
  637. package/esm2022/message/message.service.mjs +0 -92
  638. package/esm2022/message/module.mjs +0 -24
  639. package/esm2022/message/ngx-tethys-message.mjs +0 -5
  640. package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +0 -43
  641. package/esm2022/nav/icon-nav/icon-nav.component.mjs +0 -45
  642. package/esm2022/nav/index.mjs +0 -7
  643. package/esm2022/nav/nav-ink-bar.directive.mjs +0 -79
  644. package/esm2022/nav/nav-item.directive.mjs +0 -98
  645. package/esm2022/nav/nav.component.mjs +0 -410
  646. package/esm2022/nav/nav.module.mjs +0 -54
  647. package/esm2022/nav/nav.pipe.mjs +0 -24
  648. package/esm2022/nav/ngx-tethys-nav.mjs +0 -5
  649. package/esm2022/ngx-tethys.mjs +0 -5
  650. package/esm2022/notify/index.mjs +0 -8
  651. package/esm2022/notify/module.mjs +0 -24
  652. package/esm2022/notify/ngx-tethys-notify.mjs +0 -5
  653. package/esm2022/notify/notify-container.component.mjs +0 -31
  654. package/esm2022/notify/notify-queue.service.mjs +0 -30
  655. package/esm2022/notify/notify-ref.mjs +0 -4
  656. package/esm2022/notify/notify.component.mjs +0 -99
  657. package/esm2022/notify/notify.config.mjs +0 -14
  658. package/esm2022/notify/notify.service.mjs +0 -97
  659. package/esm2022/pagination/index.mjs +0 -6
  660. package/esm2022/pagination/ngx-tethys-pagination.mjs +0 -5
  661. package/esm2022/pagination/pagination.class.mjs +0 -2
  662. package/esm2022/pagination/pagination.component.mjs +0 -366
  663. package/esm2022/pagination/pagination.config.mjs +0 -30
  664. package/esm2022/pagination/pagination.module.mjs +0 -43
  665. package/esm2022/pagination/pagination.pipe.mjs +0 -53
  666. package/esm2022/popover/body/popover-body.component.mjs +0 -25
  667. package/esm2022/popover/header/popover-header.component.mjs +0 -54
  668. package/esm2022/popover/index.mjs +0 -10
  669. package/esm2022/popover/module.mjs +0 -47
  670. package/esm2022/popover/ngx-tethys-popover.mjs +0 -5
  671. package/esm2022/popover/popover-animations.mjs +0 -22
  672. package/esm2022/popover/popover-container.component.mjs +0 -125
  673. package/esm2022/popover/popover-ref.mjs +0 -25
  674. package/esm2022/popover/popover.config.mjs +0 -38
  675. package/esm2022/popover/popover.directive.mjs +0 -157
  676. package/esm2022/popover/popover.options.mjs +0 -6
  677. package/esm2022/popover/popover.service.mjs +0 -201
  678. package/esm2022/progress/index.mjs +0 -6
  679. package/esm2022/progress/interfaces.mjs +0 -2
  680. package/esm2022/progress/ngx-tethys-progress.mjs +0 -5
  681. package/esm2022/progress/progress-circle.component.mjs +0 -136
  682. package/esm2022/progress/progress-strip.component.mjs +0 -54
  683. package/esm2022/progress/progress.component.mjs +0 -142
  684. package/esm2022/progress/progress.module.mjs +0 -20
  685. package/esm2022/property/index.mjs +0 -4
  686. package/esm2022/property/module.mjs +0 -20
  687. package/esm2022/property/ngx-tethys-property.mjs +0 -5
  688. package/esm2022/property/properties.component.mjs +0 -59
  689. package/esm2022/property/property-item.component.mjs +0 -175
  690. package/esm2022/property-operation/group/property-operation-group.component.mjs +0 -20
  691. package/esm2022/property-operation/index.mjs +0 -4
  692. package/esm2022/property-operation/module.mjs +0 -21
  693. package/esm2022/property-operation/ngx-tethys-property-operation.mjs +0 -5
  694. package/esm2022/property-operation/property-operation.component.mjs +0 -183
  695. package/esm2022/public-api.mjs +0 -2
  696. package/esm2022/radio/button/radio-button.component.mjs +0 -56
  697. package/esm2022/radio/group/radio-group.component.mjs +0 -138
  698. package/esm2022/radio/index.mjs +0 -5
  699. package/esm2022/radio/module.mjs +0 -20
  700. package/esm2022/radio/ngx-tethys-radio.mjs +0 -5
  701. package/esm2022/radio/radio.component.mjs +0 -58
  702. package/esm2022/rate/index.mjs +0 -4
  703. package/esm2022/rate/module.mjs +0 -23
  704. package/esm2022/rate/ngx-tethys-rate.mjs +0 -5
  705. package/esm2022/rate/rate-item.component.mjs +0 -76
  706. package/esm2022/rate/rate.component.mjs +0 -244
  707. package/esm2022/resizable/index.mjs +0 -8
  708. package/esm2022/resizable/interface.mjs +0 -2
  709. package/esm2022/resizable/module.mjs +0 -19
  710. package/esm2022/resizable/ngx-tethys-resizable.mjs +0 -5
  711. package/esm2022/resizable/resizable.directive.mjs +0 -363
  712. package/esm2022/resizable/resizable.service.mjs +0 -69
  713. package/esm2022/resizable/resize-handle.component.mjs +0 -104
  714. package/esm2022/resizable/resize-handles.component.mjs +0 -64
  715. package/esm2022/resizable/utils.mjs +0 -14
  716. package/esm2022/result/index.mjs +0 -3
  717. package/esm2022/result/ngx-tethys-result.mjs +0 -5
  718. package/esm2022/result/result.component.mjs +0 -43
  719. package/esm2022/result/result.module.mjs +0 -17
  720. package/esm2022/segment/index.mjs +0 -5
  721. package/esm2022/segment/ngx-tethys-segment.mjs +0 -5
  722. package/esm2022/segment/segment-item.component.mjs +0 -87
  723. package/esm2022/segment/segment.component.mjs +0 -143
  724. package/esm2022/segment/segment.module.mjs +0 -20
  725. package/esm2022/segment/segment.token.mjs +0 -3
  726. package/esm2022/segment/types.mjs +0 -2
  727. package/esm2022/select/custom-select/custom-select.component.mjs +0 -904
  728. package/esm2022/select/index.mjs +0 -5
  729. package/esm2022/select/module.mjs +0 -62
  730. package/esm2022/select/native-select/native-select.component.mjs +0 -98
  731. package/esm2022/select/ngx-tethys-select.mjs +0 -5
  732. package/esm2022/select/select.config.mjs +0 -21
  733. package/esm2022/shared/base-form-check.component.mjs +0 -120
  734. package/esm2022/shared/directives/string-or-template-outlet.directive.mjs +0 -57
  735. package/esm2022/shared/directives/thy-autofocus.directive.mjs +0 -60
  736. package/esm2022/shared/directives/thy-contextmenu.directive.mjs +0 -39
  737. package/esm2022/shared/directives/thy-ctrl-enter.directive.mjs +0 -43
  738. package/esm2022/shared/directives/thy-drag-drop.directive.mjs +0 -51
  739. package/esm2022/shared/directives/thy-enter.directive.mjs +0 -43
  740. package/esm2022/shared/directives/thy-scroll.directive.mjs +0 -84
  741. package/esm2022/shared/directives/thy-show.mjs +0 -59
  742. package/esm2022/shared/directives/thy-stop-propagation.directive.mjs +0 -57
  743. package/esm2022/shared/directives/view-outlet.directive.mjs +0 -85
  744. package/esm2022/shared/index.mjs +0 -16
  745. package/esm2022/shared/ng-transclude.directive.mjs +0 -32
  746. package/esm2022/shared/ngx-tethys-shared.mjs +0 -5
  747. package/esm2022/shared/option/group/option-group.component.mjs +0 -92
  748. package/esm2022/shared/option/index.mjs +0 -9
  749. package/esm2022/shared/option/list-option/list-option.component.mjs +0 -96
  750. package/esm2022/shared/option/module.mjs +0 -29
  751. package/esm2022/shared/option/option-group.component.mjs +0 -25
  752. package/esm2022/shared/option/option.component.mjs +0 -181
  753. package/esm2022/shared/option/option.token.mjs +0 -14
  754. package/esm2022/shared/option/options-container.component.mjs +0 -29
  755. package/esm2022/shared/option/select-option-base.mjs +0 -3
  756. package/esm2022/shared/select/index.mjs +0 -3
  757. package/esm2022/shared/select/module.mjs +0 -27
  758. package/esm2022/shared/select/select-control/select-control.component.mjs +0 -280
  759. package/esm2022/shared/shared.module.mjs +0 -71
  760. package/esm2022/skeleton/index.mjs +0 -9
  761. package/esm2022/skeleton/module.mjs +0 -27
  762. package/esm2022/skeleton/ngx-tethys-skeleton.mjs +0 -5
  763. package/esm2022/skeleton/skeleton-circle.component.mjs +0 -92
  764. package/esm2022/skeleton/skeleton-rectangle.component.mjs +0 -100
  765. package/esm2022/skeleton/skeleton.component.mjs +0 -32
  766. package/esm2022/skeleton/skeleton.config.mjs +0 -8
  767. package/esm2022/skeleton/stylized/bullet-list.component.mjs +0 -124
  768. package/esm2022/skeleton/stylized/list.component.mjs +0 -95
  769. package/esm2022/skeleton/stylized/paragraph.component.mjs +0 -107
  770. package/esm2022/slide/drawer/drawer-container.directive.mjs +0 -21
  771. package/esm2022/slide/index.mjs +0 -13
  772. package/esm2022/slide/ngx-tethys-slide.mjs +0 -5
  773. package/esm2022/slide/slide-animations.mjs +0 -24
  774. package/esm2022/slide/slide-body/slide-body-section.component.mjs +0 -41
  775. package/esm2022/slide/slide-body/slide-body.component.mjs +0 -25
  776. package/esm2022/slide/slide-container.component.mjs +0 -192
  777. package/esm2022/slide/slide-footer/slide-footer.component.mjs +0 -26
  778. package/esm2022/slide/slide-header/slide-header.component.mjs +0 -59
  779. package/esm2022/slide/slide-layout/slide-layout.component.mjs +0 -27
  780. package/esm2022/slide/slide-ref.service.mjs +0 -32
  781. package/esm2022/slide/slide.config.mjs +0 -38
  782. package/esm2022/slide/slide.module.mjs +0 -65
  783. package/esm2022/slide/slide.service.mjs +0 -104
  784. package/esm2022/slider/index.mjs +0 -3
  785. package/esm2022/slider/ngx-tethys-slider.mjs +0 -5
  786. package/esm2022/slider/slider.component.mjs +0 -346
  787. package/esm2022/slider/slider.module.mjs +0 -19
  788. package/esm2022/space/index.mjs +0 -3
  789. package/esm2022/space/ngx-tethys-space.mjs +0 -5
  790. package/esm2022/space/space.component.mjs +0 -88
  791. package/esm2022/space/space.module.mjs +0 -17
  792. package/esm2022/statistic/index.mjs +0 -3
  793. package/esm2022/statistic/ngx-tethys-statistic.mjs +0 -5
  794. package/esm2022/statistic/statistic.component.mjs +0 -184
  795. package/esm2022/statistic/statistic.module.mjs +0 -20
  796. package/esm2022/stepper/index.mjs +0 -6
  797. package/esm2022/stepper/ngx-tethys-stepper.mjs +0 -5
  798. package/esm2022/stepper/step-header.component.mjs +0 -40
  799. package/esm2022/stepper/step.component.mjs +0 -32
  800. package/esm2022/stepper/stepper-button.directive.mjs +0 -56
  801. package/esm2022/stepper/stepper.component.mjs +0 -105
  802. package/esm2022/stepper/stepper.module.mjs +0 -21
  803. package/esm2022/strength/index.mjs +0 -3
  804. package/esm2022/strength/ngx-tethys-strength.mjs +0 -5
  805. package/esm2022/strength/strength.component.mjs +0 -122
  806. package/esm2022/strength/strength.module.mjs +0 -17
  807. package/esm2022/switch/index.mjs +0 -3
  808. package/esm2022/switch/ngx-tethys-switch.mjs +0 -5
  809. package/esm2022/switch/switch.component.mjs +0 -181
  810. package/esm2022/switch/switch.module.mjs +0 -17
  811. package/esm2022/table/enums/column-skeleton-type.mjs +0 -8
  812. package/esm2022/table/enums/index.mjs +0 -2
  813. package/esm2022/table/index.mjs +0 -9
  814. package/esm2022/table/ngx-tethys-table.mjs +0 -5
  815. package/esm2022/table/pipes/drag.pipe.mjs +0 -20
  816. package/esm2022/table/pipes/table.pipe.mjs +0 -20
  817. package/esm2022/table/table-column.component.mjs +0 -200
  818. package/esm2022/table/table-skeleton.component.mjs +0 -165
  819. package/esm2022/table/table.component.mjs +0 -966
  820. package/esm2022/table/table.interface.mjs +0 -7
  821. package/esm2022/table/table.module.mjs +0 -75
  822. package/esm2022/tabs/index.mjs +0 -5
  823. package/esm2022/tabs/ngx-tethys-tabs.mjs +0 -5
  824. package/esm2022/tabs/tab-content.component.mjs +0 -52
  825. package/esm2022/tabs/tab.component.mjs +0 -36
  826. package/esm2022/tabs/tabs.component.mjs +0 -139
  827. package/esm2022/tabs/tabs.module.mjs +0 -21
  828. package/esm2022/tabs/types.mjs +0 -2
  829. package/esm2022/tag/index.mjs +0 -4
  830. package/esm2022/tag/ngx-tethys-tag.mjs +0 -5
  831. package/esm2022/tag/tag.component.mjs +0 -109
  832. package/esm2022/tag/tag.module.mjs +0 -19
  833. package/esm2022/tag/tags.component.mjs +0 -24
  834. package/esm2022/testing/data-transfer.mjs +0 -55
  835. package/esm2022/testing/dispatcher-events.mjs +0 -46
  836. package/esm2022/testing/element-focus.mjs +0 -18
  837. package/esm2022/testing/events.mjs +0 -145
  838. package/esm2022/testing/index.mjs +0 -8
  839. package/esm2022/testing/ngx-tethys-testing.mjs +0 -5
  840. package/esm2022/testing/thy-icon.mjs +0 -50
  841. package/esm2022/testing/type-in-element.mjs +0 -20
  842. package/esm2022/testing/xhr-mock.mjs +0 -100
  843. package/esm2022/time-picker/index.mjs +0 -8
  844. package/esm2022/time-picker/inner/inner-time-picker.class.mjs +0 -2
  845. package/esm2022/time-picker/inner/inner-time-picker.component.mjs +0 -239
  846. package/esm2022/time-picker/inner/inner-time-picker.config.mjs +0 -45
  847. package/esm2022/time-picker/inner/inner-time-picker.store.mjs +0 -134
  848. package/esm2022/time-picker/ngx-tethys-time-picker.mjs +0 -5
  849. package/esm2022/time-picker/time-picker-controls.util.mjs +0 -118
  850. package/esm2022/time-picker/time-picker-panel.component.mjs +0 -265
  851. package/esm2022/time-picker/time-picker.component.mjs +0 -363
  852. package/esm2022/time-picker/time-picker.module.mjs +0 -54
  853. package/esm2022/time-picker/time-picker.utils.mjs +0 -131
  854. package/esm2022/timeline/index.mjs +0 -5
  855. package/esm2022/timeline/ngx-tethys-timeline.mjs +0 -5
  856. package/esm2022/timeline/timeline-item.component.mjs +0 -59
  857. package/esm2022/timeline/timeline.component.mjs +0 -156
  858. package/esm2022/timeline/timeline.module.mjs +0 -21
  859. package/esm2022/timeline/timeline.service.mjs +0 -17
  860. package/esm2022/tooltip/index.mjs +0 -9
  861. package/esm2022/tooltip/interface.mjs +0 -2
  862. package/esm2022/tooltip/ngx-tethys-tooltip.mjs +0 -5
  863. package/esm2022/tooltip/tooltip-animations.mjs +0 -23
  864. package/esm2022/tooltip/tooltip-ref.mjs +0 -147
  865. package/esm2022/tooltip/tooltip.component.mjs +0 -103
  866. package/esm2022/tooltip/tooltip.config.mjs +0 -17
  867. package/esm2022/tooltip/tooltip.directive.mjs +0 -150
  868. package/esm2022/tooltip/tooltip.module.mjs +0 -22
  869. package/esm2022/tooltip/tooltip.service.mjs +0 -28
  870. package/esm2022/transfer/index.mjs +0 -5
  871. package/esm2022/transfer/ngx-tethys-transfer.mjs +0 -5
  872. package/esm2022/transfer/transfer-list.component.mjs +0 -154
  873. package/esm2022/transfer/transfer.component.mjs +0 -180
  874. package/esm2022/transfer/transfer.interface.mjs +0 -6
  875. package/esm2022/transfer/transfer.module.mjs +0 -50
  876. package/esm2022/tree/index.mjs +0 -7
  877. package/esm2022/tree/ngx-tethys-tree.mjs +0 -5
  878. package/esm2022/tree/tree-abstract.mjs +0 -3
  879. package/esm2022/tree/tree-node.class.mjs +0 -93
  880. package/esm2022/tree/tree-node.component.mjs +0 -212
  881. package/esm2022/tree/tree.class.mjs +0 -15
  882. package/esm2022/tree/tree.component.mjs +0 -648
  883. package/esm2022/tree/tree.module.mjs +0 -74
  884. package/esm2022/tree/tree.pipe.mjs +0 -26
  885. package/esm2022/tree/tree.service.mjs +0 -187
  886. package/esm2022/tree-select/index.mjs +0 -4
  887. package/esm2022/tree-select/module.mjs +0 -52
  888. package/esm2022/tree-select/ngx-tethys-tree-select.mjs +0 -5
  889. package/esm2022/tree-select/tree-select.class.mjs +0 -2
  890. package/esm2022/tree-select/tree-select.component.mjs +0 -653
  891. package/esm2022/types/common.mjs +0 -2
  892. package/esm2022/types/dictionary.mjs +0 -2
  893. package/esm2022/types/index.mjs +0 -4
  894. package/esm2022/types/ngx-tethys-types.mjs +0 -5
  895. package/esm2022/types/pagination.mjs +0 -2
  896. package/esm2022/typography/bg-color.directive.mjs +0 -51
  897. package/esm2022/typography/index.mjs +0 -5
  898. package/esm2022/typography/module.mjs +0 -21
  899. package/esm2022/typography/ngx-tethys-typography.mjs +0 -5
  900. package/esm2022/typography/text/text.component.mjs +0 -23
  901. package/esm2022/typography/text-color.directive.mjs +0 -52
  902. package/esm2022/upload/constant.mjs +0 -75
  903. package/esm2022/upload/file-drop.directive.mjs +0 -166
  904. package/esm2022/upload/file-select-base.mjs +0 -75
  905. package/esm2022/upload/file-select.component.mjs +0 -98
  906. package/esm2022/upload/index.mjs +0 -7
  907. package/esm2022/upload/module.mjs +0 -22
  908. package/esm2022/upload/ngx-tethys-upload.mjs +0 -5
  909. package/esm2022/upload/types.mjs +0 -2
  910. package/esm2022/upload/upload.config.mjs +0 -21
  911. package/esm2022/upload/upload.service.mjs +0 -169
  912. package/esm2022/upload/util.mjs +0 -27
  913. package/esm2022/util/date/functions.mjs +0 -84
  914. package/esm2022/util/date/tiny-date.mjs +0 -362
  915. package/esm2022/util/dom.mjs +0 -247
  916. package/esm2022/util/helpers/helpers.mjs +0 -293
  917. package/esm2022/util/helpers/index.mjs +0 -2
  918. package/esm2022/util/immutable.mjs +0 -108
  919. package/esm2022/util/index.mjs +0 -16
  920. package/esm2022/util/keycodes.mjs +0 -2
  921. package/esm2022/util/logger/index.mjs +0 -2
  922. package/esm2022/util/logger/logger.mjs +0 -42
  923. package/esm2022/util/ng.mjs +0 -7
  924. package/esm2022/util/ngx-tethys-util.mjs +0 -5
  925. package/esm2022/util/references.mjs +0 -84
  926. package/esm2022/version.mjs +0 -3
  927. package/esm2022/vote/index.mjs +0 -3
  928. package/esm2022/vote/ngx-tethys-vote.mjs +0 -5
  929. package/esm2022/vote/vote.component.mjs +0 -130
  930. package/esm2022/vote/vote.module.mjs +0 -20
  931. package/esm2022/watermark/config.mjs +0 -20
  932. package/esm2022/watermark/index.mjs +0 -3
  933. package/esm2022/watermark/ngx-tethys-watermark.mjs +0 -5
  934. package/esm2022/watermark/watermark.directive.mjs +0 -178
  935. package/esm2022/watermark/watermark.module.mjs +0 -19
  936. package/schematics/ng-update/update-18/complete.d.ts +0 -3
  937. package/schematics/ng-update/update-18/complete.js +0 -13
  938. /package/schematics/ng-update/{update-18 → update-19}/class-name-migration.d.ts +0 -0
  939. /package/schematics/ng-update/{update-18 → update-19}/class-name-migration.js +0 -0
  940. /package/schematics/ng-update/{update-18 → update-19}/index.d.ts +0 -0
  941. /package/schematics/ng-update/{update-18 → update-19}/index.spec.d.ts +0 -0
  942. /package/schematics/ng-update/{update-18 → update-19}/update-data.d.ts +0 -0
  943. /package/schematics/ng-update/{update-18 → update-19}/update-data.js +0 -0
@@ -1,566 +0,0 @@
1
- import { endOfDay, helpers, isFunction, isUndefinedOrNull, sortRangeValue, startOfDay, TinyDate } from 'ngx-tethys/util';
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output } from '@angular/core';
3
- import { NgTemplateOutlet } from '@angular/common';
4
- import { FormsModule } from '@angular/forms';
5
- import { ThyButtonIcon } from 'ngx-tethys/button';
6
- import { injectLocale } from 'ngx-tethys/i18n';
7
- import { ThyNav, ThyNavItemDirective } from 'ngx-tethys/nav';
8
- import { ThyDatePickerConfigService } from '../../date-picker.service';
9
- import { dateAddAmount, getShortcutValue, hasValue, makeValue, setValueByTimestampPrecision, transformDateValue } from '../../picker.util';
10
- import { CalendarFooter } from '../calendar/calendar-footer.component';
11
- import { DateCarousel } from '../date-carousel/date-carousel.component';
12
- import { InnerPopup } from './inner-popup.component';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@angular/forms";
15
- /**
16
- * @private
17
- */
18
- export class DatePopup {
19
- constructor() {
20
- this.cdr = inject(ChangeDetectorRef);
21
- this.datePickerConfigService = inject(ThyDatePickerConfigService);
22
- this.locale = injectLocale('datePicker');
23
- this.panelModeChange = new EventEmitter();
24
- this.calendarChange = new EventEmitter();
25
- this.valueChange = new EventEmitter();
26
- this.resultOk = new EventEmitter(); // Emitted when done with date selecting
27
- this.showTimePickerChange = new EventEmitter();
28
- this.dateValueChange = new EventEmitter();
29
- this.prefixCls = 'thy-calendar';
30
- this.showTimePicker = false;
31
- this.selectedValue = []; // Range ONLY
32
- this.hoverValue = []; // Range ONLY
33
- this.flexibleActiveTab = 'advanced';
34
- this.partTypeMap = { left: 0, right: 1 };
35
- this.disableTimeConfirm = false;
36
- }
37
- get hasTimePicker() {
38
- return !!this.showTime;
39
- }
40
- setProperty(key, value) {
41
- this[key] = value;
42
- this.cdr.markForCheck();
43
- }
44
- ngOnInit() {
45
- this.initShortcutPresets();
46
- this.initPanelMode();
47
- if (this.flexible && this.flexibleDateGranularity === 'day') {
48
- this.flexibleActiveTab = 'custom';
49
- }
50
- if (this.defaultPickerValue && !hasValue(this.value)) {
51
- const { value } = transformDateValue(this.defaultPickerValue);
52
- this.value = makeValue(value, this.isRange);
53
- }
54
- this.updateActiveDate();
55
- this.initDisabledDate();
56
- if (this.isRange && this.flexible && this.value) {
57
- this.advancedSelectedValue = {
58
- begin: this.value[0],
59
- end: this.value[1],
60
- dateGranularity: this.flexibleDateGranularity
61
- };
62
- }
63
- }
64
- ngOnChanges(changes) {
65
- if (changes.panelMode) {
66
- if (helpers.isArray(this.panelMode)) {
67
- this.endPanelMode = [...this.panelMode];
68
- }
69
- else {
70
- this.endPanelMode = this.panelMode;
71
- }
72
- }
73
- if (changes.defaultPickerValue) {
74
- this.updateActiveDate();
75
- }
76
- if (changes.value && changes.value.currentValue) {
77
- this.updateActiveDate();
78
- }
79
- }
80
- initShortcutPresets() {
81
- const { shortcutRangesPresets, shortcutDatePresets, showShortcut } = this.datePickerConfigService;
82
- this.showShortcut =
83
- ['date', 'date,date'].includes(this.panelMode.toString()) && isUndefinedOrNull(this.showShortcut)
84
- ? showShortcut
85
- : this.showShortcut;
86
- if (this.showShortcut) {
87
- if (!this.shortcutPresets) {
88
- this.shortcutPresets = this.isRange ? shortcutRangesPresets : shortcutDatePresets;
89
- }
90
- this.innerShortcutPresets = isFunction(this.shortcutPresets) ? this.shortcutPresets() : this.shortcutPresets;
91
- if (this.innerShortcutPresets.length) {
92
- const minDate = this.getMinTinyDate();
93
- const maxDate = this.getMaxTinyDate();
94
- const minTime = minDate ? minDate.getTime() : null;
95
- const maxTime = maxDate ? maxDate.getTime() : null;
96
- if (this.isRange) {
97
- this.innerShortcutPresets.forEach((preset) => {
98
- const begin = getShortcutValue(preset.value[0]);
99
- const beginTime = new TinyDate(startOfDay(begin)).getTime();
100
- const end = getShortcutValue(preset.value[1]);
101
- const endTime = new TinyDate(endOfDay(end)).getTime();
102
- if ((minDate && endTime < minTime) || (maxDate && beginTime > maxTime)) {
103
- preset.disabled = true;
104
- }
105
- else {
106
- preset.disabled = false;
107
- }
108
- });
109
- }
110
- else {
111
- this.innerShortcutPresets.forEach((preset) => {
112
- const singleValue = getShortcutValue(preset.value);
113
- const singleTime = new TinyDate(singleValue).getTime();
114
- if ((minDate && singleTime < minTime) || (maxDate && singleTime > maxTime)) {
115
- preset.disabled = true;
116
- }
117
- else {
118
- preset.disabled = false;
119
- }
120
- });
121
- }
122
- }
123
- }
124
- }
125
- updateActiveDate() {
126
- this.clearHoverValue();
127
- if (!this.value) {
128
- const { value } = transformDateValue(this.defaultPickerValue);
129
- this.value = makeValue(value, this.isRange);
130
- }
131
- if (this.isRange) {
132
- if (!this.flexible || this.flexibleDateGranularity === 'day') {
133
- this.selectedValue = this.value;
134
- }
135
- this.activeDate = this.normalizeRangeValue(this.value, this.getPanelMode(this.endPanelMode));
136
- }
137
- else {
138
- this.activeDate = this.value;
139
- }
140
- this.isDisableTimeConfirm();
141
- }
142
- initPanelMode() {
143
- if (!this.endPanelMode) {
144
- if (helpers.isArray(this.panelMode)) {
145
- this.endPanelMode = [...this.panelMode];
146
- }
147
- else {
148
- this.endPanelMode = this.panelMode;
149
- }
150
- }
151
- else {
152
- if (helpers.isArray(this.endPanelMode)) {
153
- this.panelMode = [...this.endPanelMode];
154
- }
155
- else {
156
- this.panelMode = this.endPanelMode;
157
- }
158
- }
159
- }
160
- initDisabledDate() {
161
- let minDate;
162
- let maxDate;
163
- let disabledDateFn;
164
- if (this.minDate) {
165
- const { value } = transformDateValue(this.minDate);
166
- minDate = new TinyDate(value);
167
- }
168
- if (this.maxDate) {
169
- const { value } = transformDateValue(this.maxDate);
170
- maxDate = new TinyDate(value);
171
- }
172
- if (this.disabledDate) {
173
- disabledDateFn = this.disabledDate;
174
- }
175
- this.disabledDate = d => {
176
- let expression = false;
177
- if (minDate) {
178
- expression = d < minDate.startOfDay().nativeDate;
179
- }
180
- if (maxDate && !expression) {
181
- expression = d > maxDate.endOfDay().nativeDate;
182
- }
183
- if (disabledDateFn && typeof disabledDateFn === 'function' && !expression) {
184
- expression = disabledDateFn(d);
185
- }
186
- return expression;
187
- };
188
- }
189
- onShowTimePickerChange(show) {
190
- this.showTimePicker = show;
191
- this.showTimePickerChange.emit(show);
192
- }
193
- onClickOk() {
194
- this.setValue(this.value);
195
- this.valueChange.emit(this.value);
196
- this.resultOk.emit();
197
- }
198
- onClickRemove() {
199
- this.value = this.isRange ? [] : null;
200
- this.valueChange.emit(this.value);
201
- }
202
- onDayHover(value) {
203
- if (this.isRange && this.selectedValue[0] && !this.selectedValue[1]) {
204
- // When right value is selected, don't do hover
205
- const base = this.selectedValue[0]; // Use the left of selected value as the base to decide later hoverValue
206
- if (base.isBeforeDay(value)) {
207
- this.hoverValue = [base, value];
208
- }
209
- else {
210
- this.hoverValue = [value, base];
211
- }
212
- }
213
- }
214
- onPanelModeChange(mode, partType) {
215
- if (this.isRange) {
216
- this.panelMode[this.getPartTypeIndex(partType)] = mode;
217
- }
218
- else {
219
- this.panelMode = mode;
220
- }
221
- this.panelModeChange.emit(this.panelMode);
222
- }
223
- onHeaderChange(value, partType) {
224
- if (this.isRange) {
225
- this.activeDate[this.getPartTypeIndex(partType)] = value;
226
- this.activeDate = this.normalizeRangeValue(this.activeDate, this.getPanelMode(this.endPanelMode, partType));
227
- }
228
- else {
229
- this.activeDate = value;
230
- }
231
- }
232
- onSelectTime(value, partType) {
233
- if (this.isRange) {
234
- // TODO:range picker set time
235
- }
236
- else {
237
- this.setValue(new TinyDate(value.nativeDate));
238
- }
239
- }
240
- selectTab(active) {
241
- this.flexibleActiveTab = active;
242
- }
243
- clearFlexibleValue() {
244
- this.flexibleDateGranularity = null;
245
- if (this.flexibleActiveTab === 'advanced') {
246
- this.advancedSelectedValue = {};
247
- }
248
- else {
249
- this.selectedValue = [];
250
- }
251
- this.valueChange.emit({
252
- begin: null,
253
- end: null,
254
- dateGranularity: this.flexibleDateGranularity
255
- });
256
- }
257
- changeValueFromAdvancedSelect(value) {
258
- this.valueChange.emit(value);
259
- // clear custom date when select a advanced date
260
- this.selectedValue = [];
261
- this.dateValueChange.emit({
262
- value: [value.begin, value.end]
263
- });
264
- }
265
- changeValueFromSelect(value, partType) {
266
- if (this.isRange) {
267
- // clear advanced date when select a custom date
268
- this.advancedSelectedValue = {};
269
- const [left, right] = this.selectedValue;
270
- if ((!left && !right) || (left && right)) {
271
- // If totally full or empty, clean up && re-assign left first
272
- this.hoverValue = this.selectedValue = [value];
273
- this.selectedValue = [this.selectedValue[0].startOfDay()];
274
- this.calendarChange.emit([this.selectedValue[0].clone()]);
275
- }
276
- else if (left && !right) {
277
- // If one of them is empty, assign the other one and sort, then set the final values
278
- this.clearHoverValue(); // Clean up
279
- this.setRangeValue('right', value);
280
- this.selectedValue = sortRangeValue(this.selectedValue); // Sort
281
- this.selectedValue = this.getSelectedRangeValueByMode(this.selectedValue);
282
- this.activeDate = this.normalizeRangeValue(this.selectedValue, this.getPanelMode(this.endPanelMode, partType));
283
- this.setValue(this.cloneRangeDate(this.selectedValue));
284
- this.calendarChange.emit(this.cloneRangeDate(this.selectedValue));
285
- this.dateValueChange.emit({
286
- value: this.cloneRangeDate(this.selectedValue)
287
- });
288
- }
289
- }
290
- else {
291
- const updatedValue = this.updateHourMinute(value);
292
- this.setValue(updatedValue);
293
- this.dateValueChange.emit({
294
- value: updatedValue
295
- });
296
- }
297
- }
298
- getSelectedRangeValueByMode(value) {
299
- const panelMode = this.getPanelMode(this.endPanelMode);
300
- if (panelMode === 'year') {
301
- return [value[0].startOfYear(), value[1].endOfYear()];
302
- }
303
- else if (panelMode === 'quarter') {
304
- return [value[0].startOfQuarter(), value[1].endOfQuarter()];
305
- }
306
- else if (panelMode === 'month') {
307
- return [value[0].startOfMonth(), value[1].endOfMonth()];
308
- }
309
- else if (panelMode === 'week') {
310
- return [value[0].startOfISOWeek(), value[1].endOfISOWeek()];
311
- }
312
- else {
313
- return [value[0].startOfDay(), value[1].endOfDay()];
314
- }
315
- }
316
- updateHourMinute(value) {
317
- if (!this.value) {
318
- return value;
319
- }
320
- const originDate = this.value;
321
- const dateTime = [value.getHours(), value.getMinutes(), value.getSeconds()];
322
- const originDateTime = [originDate.getHours(), originDate.getMinutes(), originDate.getSeconds()];
323
- const isEqualTime = dateTime.toString() === originDateTime.toString();
324
- if (isEqualTime) {
325
- return value;
326
- }
327
- else {
328
- return value.setHms(originDateTime[0], originDateTime[1], originDateTime[2]);
329
- }
330
- }
331
- enablePrevNext(direction, partType) {
332
- if (this.isRange && this.panelMode === this.endPanelMode) {
333
- const [start, end] = this.activeDate;
334
- const showMiddle = !start.addMonths(1).isSame(end, 'month'); // One month diff then don't show middle prev/next
335
- if ((partType === 'left' && direction === 'next') || (partType === 'right' && direction === 'prev')) {
336
- return showMiddle;
337
- }
338
- return true;
339
- }
340
- else {
341
- return true;
342
- }
343
- }
344
- getPanelMode(panelMode, partType) {
345
- if (this.isRange) {
346
- return panelMode[this.getPartTypeIndex(partType)];
347
- }
348
- else {
349
- return panelMode;
350
- }
351
- }
352
- getValueBySelector(partType) {
353
- if (this.isRange) {
354
- const valueShow = this.selectedValue; // Use the real time value that without decorations when timepicker is shown up
355
- return valueShow[this.getPartTypeIndex(partType)];
356
- }
357
- else {
358
- return this.value;
359
- }
360
- }
361
- getActiveDate(partType) {
362
- if (this.isRange) {
363
- return this.activeDate[this.getPartTypeIndex(partType)];
364
- }
365
- else {
366
- return this.activeDate;
367
- }
368
- }
369
- getPartTypeIndex(partType = 'left') {
370
- return this.partTypeMap[partType];
371
- }
372
- getMinTinyDate() {
373
- return this.minDate ? new TinyDate(transformDateValue(this.minDate).value) : null;
374
- }
375
- getMaxTinyDate() {
376
- return this.maxDate ? new TinyDate(transformDateValue(this.maxDate).value) : null;
377
- }
378
- clearHoverValue() {
379
- this.hoverValue = [];
380
- }
381
- setValue(value) {
382
- this.value = value;
383
- if (this.isRange && this.flexible) {
384
- this.flexibleDateGranularity = 'day';
385
- this.valueChange.emit({
386
- begin: value[0],
387
- end: value[1],
388
- dateGranularity: this.flexibleDateGranularity
389
- });
390
- }
391
- else {
392
- if (!this.showTime || !this.showTimePicker) {
393
- this.valueChange.emit(this.value);
394
- }
395
- }
396
- this.isDisableTimeConfirm();
397
- }
398
- normalizeRangeValue(value, mode = 'month') {
399
- const headerModes = {
400
- week: 'month',
401
- date: 'month',
402
- month: 'year',
403
- quarter: 'year',
404
- year: 'decade'
405
- };
406
- const headerMode = headerModes[mode];
407
- const [start, end] = value;
408
- const newStart = start || new TinyDate();
409
- let newEnd = end;
410
- if (!newEnd || newStart.isSame(end, headerMode)) {
411
- newEnd = dateAddAmount(newStart, 1, headerMode);
412
- }
413
- return [newStart, newEnd];
414
- }
415
- setRangeValue(partType, value) {
416
- const ref = (this.selectedValue = this.cloneRangeDate(this.selectedValue));
417
- ref[this.getPartTypeIndex(partType)] = value;
418
- }
419
- cloneRangeDate(value) {
420
- return [value[0] && value[0].clone(), value[1] && value[1].clone()];
421
- }
422
- isDisableTimeConfirm() {
423
- if (this.isRange || !this.showTime) {
424
- return;
425
- }
426
- const date = this.value ? this.value : new TinyDate();
427
- const minDate = this.getMinTinyDate();
428
- const maxDate = this.getMaxTinyDate();
429
- if ((minDate && date.getTime() < minDate.getTime()) || (maxDate && date.getTime() > maxDate.getTime())) {
430
- this.disableTimeConfirm = true;
431
- }
432
- else {
433
- this.disableTimeConfirm = false;
434
- }
435
- }
436
- getSelectedShortcutPreset(date) {
437
- const minDate = this.getMinTinyDate();
438
- const maxDate = this.getMaxTinyDate();
439
- const minTime = (minDate && minDate.getTime()) || null;
440
- const maxTime = (maxDate && maxDate.getTime()) || null;
441
- if (helpers.isArray(date)) {
442
- const startDate = date[0];
443
- const endDate = date[1];
444
- const startTime = startDate.getTime();
445
- const endTime = endDate.getTime();
446
- if ((maxDate && startTime > maxTime) || (minDate && endTime < minTime)) {
447
- return [];
448
- }
449
- if (minDate && startTime < minTime && maxDate && endTime > maxTime) {
450
- return [minDate, maxDate];
451
- }
452
- if (minDate && startTime < minTime) {
453
- return [minDate, endDate];
454
- }
455
- if (maxDate && endTime > maxTime) {
456
- return [startDate, maxDate];
457
- }
458
- return date;
459
- }
460
- else {
461
- const singleTime = date.getTime();
462
- if ((minDate && singleTime < minTime) || (maxDate && singleTime > maxTime)) {
463
- return null;
464
- }
465
- return date;
466
- }
467
- }
468
- shortcutSetValue(shortcutPresets) {
469
- if (shortcutPresets.disabled) {
470
- return;
471
- }
472
- const { value } = shortcutPresets;
473
- if (!value) {
474
- return;
475
- }
476
- let selectedPresetValue;
477
- if (helpers.isArray(value)) {
478
- const begin = getShortcutValue(value[0]);
479
- const end = getShortcutValue(value[1]);
480
- if (begin && end) {
481
- this.selectedValue = this.getSelectedShortcutPreset([
482
- new TinyDate(begin).startOfDay(),
483
- new TinyDate(end).endOfDay()
484
- ]);
485
- selectedPresetValue = this.cloneRangeDate(this.selectedValue);
486
- }
487
- }
488
- else {
489
- const originDate = this.value;
490
- const zonedTime = this.createInZoneTime(new TinyDate(getShortcutValue(value)), originDate?.getHours() ?? 0, originDate?.getMinutes() ?? 0, originDate?.getSeconds() ?? 0);
491
- const singleTinyDate = this.updateHourMinute(new TinyDate(zonedTime));
492
- selectedPresetValue = this.getSelectedShortcutPreset(singleTinyDate);
493
- }
494
- this.setValue(selectedPresetValue);
495
- const shortcutPresetsValue = setValueByTimestampPrecision(shortcutPresets?.value, this.isRange, this.timestampPrecision);
496
- this.dateValueChange.emit({
497
- value: helpers.isArray(value) ? this.selectedValue : selectedPresetValue,
498
- triggerPreset: Object.assign({}, shortcutPresets, { value: shortcutPresetsValue })
499
- });
500
- if (!helpers.isArray(value) && this.showTime && this.showTimePicker) {
501
- this.updateActiveDate();
502
- }
503
- }
504
- createInZoneTime(date, hours, minutes, seconds) {
505
- return TinyDate.createDateInTimeZone(date.getYear(), date.getMonth(), date.getDate(), hours, minutes, seconds);
506
- }
507
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatePopup, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
508
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DatePopup, isStandalone: true, selector: "date-popup", inputs: { isRange: "isRange", showWeek: "showWeek", format: "format", disabledDate: "disabledDate", minDate: "minDate", maxDate: "maxDate", showToday: "showToday", showTime: "showTime", mustShowTime: "mustShowTime", dateRender: "dateRender", className: "className", panelMode: "panelMode", value: "value", defaultPickerValue: "defaultPickerValue", showShortcut: "showShortcut", shortcutPresets: "shortcutPresets", shortcutPosition: "shortcutPosition", flexible: "flexible", flexibleDateGranularity: "flexibleDateGranularity", timestampPrecision: "timestampPrecision" }, outputs: { panelModeChange: "panelModeChange", calendarChange: "calendarChange", valueChange: "valueChange", resultOk: "resultOk", showTimePickerChange: "showTimePickerChange", dateValueChange: "dateValueChange" }, exportAs: ["datePopup"], usesOnChanges: true, ngImport: i0, template: "<div class=\"{{ prefixCls }}-picker-container {{ className }}\">\n <div\n class=\"{{ prefixCls }} {{ showWeek ? prefixCls + '-week-number' : '' }}\n {{ isRange ? prefixCls + '-range' : '' }} {{ prefixCls }}-picker-shortcut-{{ shortcutPosition === 'left' ? 'left' : 'bottom' }}\">\n @if (showShortcut) {\n <div class=\"{{ prefixCls }}-picker-shortcut\">\n @for (item of innerShortcutPresets; track $index) {\n <div class=\"{{ prefixCls }}-picker-shortcut-item\" [class.disabled]=\"item.disabled\" (click)=\"shortcutSetValue(item)\">\n {{ item.title }}\n </div>\n }\n </div>\n }\n <div class=\"{{ prefixCls }}-panel\">\n <div class=\"{{ prefixCls }}-date-panel\">\n @if (flexible) {\n <div class=\"{{ prefixCls }}-date-panel-flexible\">\n <div class=\"{{ prefixCls }}-date-panel-flexible-tab\">\n <thy-nav thyType=\"pulled\" thySize=\"sm\">\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'advanced'\" (click)=\"selectTab('advanced')\">{{\n locale().advance\n }}</a>\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'custom'\" (click)=\"selectTab('custom')\">{{\n locale().custom\n }}</a>\n </thy-nav>\n <button thyButtonIcon=\"sweep\" thySize=\"sm\" class=\"clear-date-button\" (click)=\"clearFlexibleValue()\"></button>\n </div>\n <ng-container>\n <div class=\"{{ prefixCls }}-date-panel-advanced\" [hidden]=\"flexibleActiveTab !== 'advanced'\">\n <date-carousel\n name=\"dateCarousel\"\n (ngModelChange)=\"changeValueFromAdvancedSelect($event)\"\n [(ngModel)]=\"advancedSelectedValue\"\n [activeDate]=\"selectedValue[0]\"></date-carousel>\n </div>\n </ng-container>\n <div [hidden]=\"flexibleActiveTab !== 'custom'\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isRange) {\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'left' }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'right' }\"></ng-container>\n } @else {\n <div>\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n }\n @if (!isRange) {\n <ng-container *ngTemplateOutlet=\"tplFooter\"></ng-container>\n }\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplInnerPopup let-partType=\"partType\">\n <inner-popup\n [showWeek]=\"showWeek\"\n [isRange]=\"isRange\"\n [panelMode]=\"getPanelMode(panelMode, partType)\"\n [endPanelMode]=\"getPanelMode(endPanelMode, partType)\"\n [partType]=\"partType\"\n [showDateRangeInput]=\"flexible && flexibleActiveTab === 'custom'\"\n (panelModeChange)=\"onPanelModeChange($event, partType)\"\n [value]=\"getValueBySelector(partType)\"\n [selectedValue]=\"selectedValue\"\n [activeDate]=\"getActiveDate(partType)\"\n [rangeActiveDate]=\"activeDate\"\n [disabledDate]=\"disabledDate\"\n [dateRender]=\"dateRender\"\n [hoverValue]=\"hoverValue\"\n [enablePrev]=\"enablePrevNext('prev', partType)\"\n [enableNext]=\"enablePrevNext('next', partType)\"\n (dayHover)=\"onDayHover($event)\"\n (selectDate)=\"changeValueFromSelect($event, partType)\"\n (headerChange)=\"onHeaderChange($event, partType)\"></inner-popup>\n</ng-template>\n\n<ng-template #tplFooter>\n <calendar-footer\n [showTime]=\"showTime\"\n [mustShowTime]=\"mustShowTime\"\n [value]=\"value\"\n [disableTimeConfirm]=\"disableTimeConfirm\"\n (showTimePickerChange)=\"onShowTimePickerChange($event)\"\n (selectTime)=\"onSelectTime($event)\"\n (clickOk)=\"onClickOk()\"\n (clickRemove)=\"onClickRemove()\"></calendar-footer>\n</ng-template>\n\n<!-- Single ONLY -->\n\n<!-- Range ONLY -->\n<ng-template #tplRangePart let-partType=\"partType\">\n <div class=\"{{ prefixCls }}-range-part {{ prefixCls }}-range-{{ partType }}\">\n <div style=\"outline: none\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup; context: { partType: partType }\"></ng-container>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: ThyNav, selector: "thy-nav", inputs: ["thyType", "thySize", "thyHorizontal", "thyVertical", "thyFill", "thyResponsive", "thyPauseReCalculate", "thyInsideClosable", "thyPopoverOptions", "thyExtra"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["id", "thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyButtonIcon, selector: "thy-button-icon,[thy-button-icon],[thyButtonIcon]", inputs: ["thySize", "thyIcon", "thyButtonIcon", "thyShape", "thyLight", "thyActive", "thyTheme", "thyColor"] }, { kind: "component", type: DateCarousel, selector: "date-carousel", inputs: ["activeDate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InnerPopup, selector: "inner-popup", inputs: ["showWeek", "isRange", "activeDate", "rangeActiveDate", "enablePrev", "enableNext", "disabledDate", "dateRender", "selectedValue", "hoverValue", "panelMode", "showDateRangeInput", "partType", "endPanelMode", "value"], outputs: ["panelModeChange", "headerChange", "selectDate", "dayHover"], exportAs: ["innerPopup"] }, { kind: "component", type: CalendarFooter, selector: "calendar-footer", inputs: ["showTime", "mustShowTime", "value", "disableTimeConfirm"], outputs: ["selectTime", "clickOk", "clickRemove", "showTimePickerChange"], exportAs: ["calendarFooter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
509
- }
510
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatePopup, decorators: [{
511
- type: Component,
512
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'date-popup', exportAs: 'datePopup', standalone: true, imports: [ThyNav, ThyNavItemDirective, ThyButtonIcon, DateCarousel, FormsModule, NgTemplateOutlet, InnerPopup, CalendarFooter], template: "<div class=\"{{ prefixCls }}-picker-container {{ className }}\">\n <div\n class=\"{{ prefixCls }} {{ showWeek ? prefixCls + '-week-number' : '' }}\n {{ isRange ? prefixCls + '-range' : '' }} {{ prefixCls }}-picker-shortcut-{{ shortcutPosition === 'left' ? 'left' : 'bottom' }}\">\n @if (showShortcut) {\n <div class=\"{{ prefixCls }}-picker-shortcut\">\n @for (item of innerShortcutPresets; track $index) {\n <div class=\"{{ prefixCls }}-picker-shortcut-item\" [class.disabled]=\"item.disabled\" (click)=\"shortcutSetValue(item)\">\n {{ item.title }}\n </div>\n }\n </div>\n }\n <div class=\"{{ prefixCls }}-panel\">\n <div class=\"{{ prefixCls }}-date-panel\">\n @if (flexible) {\n <div class=\"{{ prefixCls }}-date-panel-flexible\">\n <div class=\"{{ prefixCls }}-date-panel-flexible-tab\">\n <thy-nav thyType=\"pulled\" thySize=\"sm\">\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'advanced'\" (click)=\"selectTab('advanced')\">{{\n locale().advance\n }}</a>\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'custom'\" (click)=\"selectTab('custom')\">{{\n locale().custom\n }}</a>\n </thy-nav>\n <button thyButtonIcon=\"sweep\" thySize=\"sm\" class=\"clear-date-button\" (click)=\"clearFlexibleValue()\"></button>\n </div>\n <ng-container>\n <div class=\"{{ prefixCls }}-date-panel-advanced\" [hidden]=\"flexibleActiveTab !== 'advanced'\">\n <date-carousel\n name=\"dateCarousel\"\n (ngModelChange)=\"changeValueFromAdvancedSelect($event)\"\n [(ngModel)]=\"advancedSelectedValue\"\n [activeDate]=\"selectedValue[0]\"></date-carousel>\n </div>\n </ng-container>\n <div [hidden]=\"flexibleActiveTab !== 'custom'\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isRange) {\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'left' }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'right' }\"></ng-container>\n } @else {\n <div>\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n }\n @if (!isRange) {\n <ng-container *ngTemplateOutlet=\"tplFooter\"></ng-container>\n }\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplInnerPopup let-partType=\"partType\">\n <inner-popup\n [showWeek]=\"showWeek\"\n [isRange]=\"isRange\"\n [panelMode]=\"getPanelMode(panelMode, partType)\"\n [endPanelMode]=\"getPanelMode(endPanelMode, partType)\"\n [partType]=\"partType\"\n [showDateRangeInput]=\"flexible && flexibleActiveTab === 'custom'\"\n (panelModeChange)=\"onPanelModeChange($event, partType)\"\n [value]=\"getValueBySelector(partType)\"\n [selectedValue]=\"selectedValue\"\n [activeDate]=\"getActiveDate(partType)\"\n [rangeActiveDate]=\"activeDate\"\n [disabledDate]=\"disabledDate\"\n [dateRender]=\"dateRender\"\n [hoverValue]=\"hoverValue\"\n [enablePrev]=\"enablePrevNext('prev', partType)\"\n [enableNext]=\"enablePrevNext('next', partType)\"\n (dayHover)=\"onDayHover($event)\"\n (selectDate)=\"changeValueFromSelect($event, partType)\"\n (headerChange)=\"onHeaderChange($event, partType)\"></inner-popup>\n</ng-template>\n\n<ng-template #tplFooter>\n <calendar-footer\n [showTime]=\"showTime\"\n [mustShowTime]=\"mustShowTime\"\n [value]=\"value\"\n [disableTimeConfirm]=\"disableTimeConfirm\"\n (showTimePickerChange)=\"onShowTimePickerChange($event)\"\n (selectTime)=\"onSelectTime($event)\"\n (clickOk)=\"onClickOk()\"\n (clickRemove)=\"onClickRemove()\"></calendar-footer>\n</ng-template>\n\n<!-- Single ONLY -->\n\n<!-- Range ONLY -->\n<ng-template #tplRangePart let-partType=\"partType\">\n <div class=\"{{ prefixCls }}-range-part {{ prefixCls }}-range-{{ partType }}\">\n <div style=\"outline: none\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup; context: { partType: partType }\"></ng-container>\n </div>\n </div>\n</ng-template>\n" }]
513
- }], propDecorators: { isRange: [{
514
- type: Input
515
- }], showWeek: [{
516
- type: Input
517
- }], format: [{
518
- type: Input
519
- }], disabledDate: [{
520
- type: Input
521
- }], minDate: [{
522
- type: Input
523
- }], maxDate: [{
524
- type: Input
525
- }], showToday: [{
526
- type: Input
527
- }], showTime: [{
528
- type: Input
529
- }], mustShowTime: [{
530
- type: Input
531
- }], dateRender: [{
532
- type: Input
533
- }], className: [{
534
- type: Input
535
- }], panelMode: [{
536
- type: Input
537
- }], value: [{
538
- type: Input
539
- }], defaultPickerValue: [{
540
- type: Input
541
- }], showShortcut: [{
542
- type: Input
543
- }], shortcutPresets: [{
544
- type: Input
545
- }], shortcutPosition: [{
546
- type: Input
547
- }], flexible: [{
548
- type: Input
549
- }], flexibleDateGranularity: [{
550
- type: Input
551
- }], timestampPrecision: [{
552
- type: Input
553
- }], panelModeChange: [{
554
- type: Output
555
- }], calendarChange: [{
556
- type: Output
557
- }], valueChange: [{
558
- type: Output
559
- }], resultOk: [{
560
- type: Output
561
- }], showTimePickerChange: [{
562
- type: Output
563
- }], dateValueChange: [{
564
- type: Output
565
- }] } });
566
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvZGF0ZS1waWNrZXIvbGliL3BvcHVwcy9kYXRlLXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9kYXRlLXBpY2tlci9saWIvcG9wdXBzL2RhdGUtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFFBQVEsRUFFUixPQUFPLEVBQ1AsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsVUFBVSxFQUNWLFFBQVEsRUFFWCxNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBSVQsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWEzSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBRXJEOztHQUVHO0FBVUgsTUFBTSxPQUFPLFNBQVM7SUFUdEI7UUFVWSxRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDckUsV0FBTSxHQUFnQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUF1QzlDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWlDLENBQUM7UUFDcEUsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUNyRCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUF3QyxDQUFDO1FBQ3ZFLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDLENBQUMsd0NBQXdDO1FBQzdFLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDbkQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQUU1RSxjQUFTLEdBQUcsY0FBYyxDQUFDO1FBQzNCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBR3ZCLGtCQUFhLEdBQWUsRUFBRSxDQUFDLENBQUMsYUFBYTtRQUM3QyxlQUFVLEdBQWUsRUFBRSxDQUFDLENBQUMsYUFBYTtRQUkxQyxzQkFBaUIsR0FBMEIsVUFBVSxDQUFDO1FBSzlDLGdCQUFXLEdBQThCLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFRdkUsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO0tBaWdCOUI7SUE1Z0JHLElBQUksYUFBYTtRQUNiLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQVdELFdBQVcsQ0FBNEIsR0FBTSxFQUFFLEtBQWM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMscUJBQXFCLEdBQUc7Z0JBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixlQUFlLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjthQUNoRCxDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN2QyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsTUFBTSxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztRQUVsRyxJQUFJLENBQUMsWUFBWTtZQUNiLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDN0YsQ0FBQyxDQUFDLFlBQVk7Z0JBQ2QsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFFNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUM7WUFDdEYsQ0FBQztZQUVELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDN0csSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sT0FBTyxHQUFhLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxPQUFPLEdBQWEsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUVoRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNuRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUVuRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBeUIsRUFBRSxFQUFFO3dCQUM1RCxNQUFNLEtBQUssR0FBa0IsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMvRCxNQUFNLFNBQVMsR0FBVyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFFcEUsTUFBTSxHQUFHLEdBQWtCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDN0QsTUFBTSxPQUFPLEdBQVcsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBRTlELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOzRCQUNyRSxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDM0IsQ0FBQzs2QkFBTSxDQUFDOzRCQUNKLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUM1QixDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBeUIsRUFBRSxFQUFFO3dCQUM1RCxNQUFNLFdBQVcsR0FBa0IsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQXlCLENBQUMsQ0FBQzt3QkFDdEYsTUFBTSxVQUFVLEdBQVcsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBRS9ELElBQUksQ0FBQyxPQUFPLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOzRCQUN6RSxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDM0IsQ0FBQzs2QkFBTSxDQUFDOzRCQUNKLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUM1QixDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBbUIsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQW1CLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFpQixDQUFDLENBQUM7UUFDL0gsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFpQixDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN2QyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3ZDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksT0FBaUIsQ0FBQztRQUN0QixJQUFJLE9BQWlCLENBQUM7UUFDdEIsSUFBSSxjQUE4QixDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRCxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBYSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRCxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBYSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNWLFVBQVUsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQztZQUNyRCxDQUFDO1lBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDekIsVUFBVSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxDQUFDO1lBQ25ELENBQUM7WUFDRCxJQUFJLGNBQWMsSUFBSSxPQUFPLGNBQWMsS0FBSyxVQUFVLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDeEUsVUFBVSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBQ0QsT0FBTyxVQUFVLENBQUM7UUFDdEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQWE7UUFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFlO1FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xFLCtDQUErQztZQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsd0VBQXdFO1lBQzVHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQWtCLEVBQUUsUUFBd0I7UUFDMUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsU0FBNEIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDL0UsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBZSxFQUFFLFFBQXdCO1FBQ3BELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDekQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQ3RDLElBQUksQ0FBQyxVQUF3QixFQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFpQixDQUNqRSxDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFlLEVBQUUsUUFBd0I7UUFDbEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZiw2QkFBNkI7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQTZCO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7SUFDcEMsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNsQixLQUFLLEVBQUUsSUFBSTtZQUNYLEdBQUcsRUFBRSxJQUFJO1lBQ1QsZUFBZSxFQUFFLElBQUksQ0FBQyx1QkFBdUI7U0FDaEQsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDZCQUE2QixDQUFDLEtBQXlCO1FBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN0QixLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDbEMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWUsRUFBRSxRQUF3QjtRQUMzRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLGdEQUFnRDtZQUNoRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1lBRWhDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQTJCLENBQUM7WUFFdkQsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsNkRBQTZEO2dCQUM3RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RCxDQUFDO2lCQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hCLG9GQUFvRjtnQkFDcEYsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsV0FBVztnQkFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU87Z0JBQ2hFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQ3RDLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQWlCLENBQ2pFLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztvQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztpQkFDakQsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLEtBQUssRUFBRSxZQUFZO2FBQ3RCLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsS0FBaUI7UUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkQsSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO2FBQU0sSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO2FBQU0sSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDO2FBQU0sSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFlO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQWlCLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sY0FBYyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUVqRyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDZCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQTBCLEVBQUUsUUFBd0I7UUFDL0QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQXdCLENBQUM7WUFDbkQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxrREFBa0Q7WUFDL0csSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbEcsT0FBTyxVQUFVLENBQUM7WUFDdEIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBd0MsRUFBRSxRQUF3QjtRQUMzRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBaUIsQ0FBQztRQUN0RSxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sU0FBeUIsQ0FBQztRQUNyQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLFFBQXdCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLCtFQUErRTtZQUNySCxPQUFRLFNBQXdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxLQUFpQixDQUFDO1FBQ2xDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQXdCO1FBQ2xDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUMsVUFBc0IsQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLFdBQTBCLE1BQU07UUFDN0MsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxjQUFjO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUYsQ0FBQztJQUVPLGNBQWM7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM5RixDQUFDO0lBRU8sZUFBZTtRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sUUFBUSxDQUFDLEtBQXNCO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDbEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsZUFBZSxFQUFFLElBQUksQ0FBQyx1QkFBdUI7YUFDaEQsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQWlCLEVBQUUsT0FBcUIsT0FBTztRQUN2RSxNQUFNLFdBQVcsR0FBNkM7WUFDMUQsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsT0FBTztZQUNiLEtBQUssRUFBRSxNQUFNO1lBQ2IsT0FBTyxFQUFFLE1BQU07WUFDZixJQUFJLEVBQUUsUUFBUTtTQUNqQixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sUUFBUSxHQUFHLEtBQUssSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFVBQWtDLENBQUMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU8sYUFBYSxDQUFDLFFBQXVCLEVBQUUsS0FBZTtRQUMxRCxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBMkIsQ0FBQyxDQUFDLENBQUM7UUFDekYsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNqRCxDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQWlCO1FBQ3BDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQWUsQ0FBQztJQUN0RixDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFhLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxLQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzlFLE1BQU0sT0FBTyxHQUFhLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBYSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFaEQsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDckcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUNuQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxJQUFxQjtRQUNuRCxNQUFNLE9BQU8sR0FBYSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDaEQsTUFBTSxPQUFPLEdBQWEsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRWhELE1BQU0sT0FBTyxHQUFXLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUMvRCxNQUFNLE9BQU8sR0FBVyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7UUFFL0QsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxTQUFTLEdBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sT0FBTyxHQUFhLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVsQyxNQUFNLFNBQVMsR0FBVyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDOUMsTUFBTSxPQUFPLEdBQVcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRTFDLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxPQUFPLEVBQUUsQ0FBQztZQUNkLENBQUM7WUFFRCxJQUFJLE9BQU8sSUFBSSxTQUFTLEdBQUcsT0FBTyxJQUFJLE9BQU8sSUFBSSxPQUFPLEdBQUcsT0FBTyxFQUFFLENBQUM7Z0JBQ2pFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUVELElBQUksT0FBTyxJQUFJLFNBQVMsR0FBRyxPQUFPLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBRUQsSUFBSSxPQUFPLElBQUksT0FBTyxHQUFHLE9BQU8sRUFBRSxDQUFDO2dCQUMvQixPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sVUFBVSxHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUUxQyxJQUFJLENBQUMsT0FBTyxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsZUFBa0M7UUFDL0MsSUFBSSxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0IsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsZUFBZSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNULE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxtQkFBb0MsQ0FBQztRQUN6QyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLEtBQUssR0FBa0IsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsTUFBTSxHQUFHLEdBQWtCLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRELElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO29CQUNoRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUU7b0JBQ2hDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRTtpQkFDL0IsQ0FBZSxDQUFDO2dCQUNqQixtQkFBbUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNsRSxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBaUIsQ0FBQztZQUMxQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQ25DLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3JDLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQzNCLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQzdCLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQ2hDLENBQUM7WUFDRixNQUFNLGNBQWMsR0FBYSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNoRixtQkFBbUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsY0FBYyxDQUFhLENBQUM7UUFDckYsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNuQyxNQUFNLG9CQUFvQixHQUFHLDRCQUE0QixDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQVcsQ0FBQztRQUNuSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN0QixLQUFLLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1lBQ3hFLGFBQWEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztTQUNyRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQWMsRUFBRSxLQUFjLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUN2RixPQUFPLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ILENBQUM7K0dBdmtCUSxTQUFTO21HQUFULFNBQVMscTRCQy9EdEIsKzZJQXdHQSw0Q0QzQ2MsTUFBTSw2TkFBRSxtQkFBbUIsb0pBQUUsYUFBYSw0TUFBRSxZQUFZLGlGQUFFLFdBQVcsK1ZBQUUsZ0JBQWdCLG9KQUFFLFVBQVUsNlhBQUUsY0FBYzs7NEZBRXBILFNBQVM7a0JBVHJCLFNBQVM7c0NBQ1csdUJBQXVCLENBQUMsTUFBTSxZQUVyQyxZQUFZLFlBQ1osV0FBVyxjQUVULElBQUksV0FDUCxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDOzhCQU9ySCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRWEsZUFBZTtzQkFBakMsTUFBTTtnQkFDWSxjQUFjO3NCQUFoQyxNQUFNO2dCQUNZLFdBQVc7c0JBQTdCLE1BQU07Z0JBQ1ksUUFBUTtzQkFBMUIsTUFBTTtnQkFDWSxvQkFBb0I7c0JBQXRDLE1BQU07Z0JBQ1ksZUFBZTtzQkFBakMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgZW5kT2ZEYXksXG4gICAgRnVuY3Rpb25Qcm9wLFxuICAgIGhlbHBlcnMsXG4gICAgaXNGdW5jdGlvbixcbiAgICBpc1VuZGVmaW5lZE9yTnVsbCxcbiAgICBzb3J0UmFuZ2VWYWx1ZSxcbiAgICBzdGFydE9mRGF5LFxuICAgIFRpbnlEYXRlLFxuICAgIFRpbnlEYXRlQ29tcGFyZUdyYWluXG59IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5cbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2lnbmFsLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUaHlCdXR0b25JY29uIH0gZnJvbSAnbmd4LXRldGh5cy9idXR0b24nO1xuaW1wb3J0IHsgaW5qZWN0TG9jYWxlLCBUaHlEYXRlUGlja2VyTG9jYWxlIH0gZnJvbSAnbmd4LXRldGh5cy9pMThuJztcbmltcG9ydCB7IFRoeU5hdiwgVGh5TmF2SXRlbURpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvbmF2JztcbmltcG9ydCB7IFRoeURhdGVQaWNrZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGF0ZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wYXRpYmxlVmFsdWUsIERhdGVQaWNrZXJGbGV4aWJsZVRhYiwgUmFuZ2VBZHZhbmNlZFZhbHVlLCBSYW5nZVBhcnRUeXBlIH0gZnJvbSAnLi4vLi4vaW5uZXItdHlwZXMnO1xuaW1wb3J0IHsgZGF0ZUFkZEFtb3VudCwgZ2V0U2hvcnRjdXRWYWx1ZSwgaGFzVmFsdWUsIG1ha2VWYWx1ZSwgc2V0VmFsdWVCeVRpbWVzdGFtcFByZWNpc2lvbiwgdHJhbnNmb3JtRGF0ZVZhbHVlIH0gZnJvbSAnLi4vLi4vcGlja2VyLnV0aWwnO1xuaW1wb3J0IHtcbiAgICBDb21wYXRpYmxlRGF0ZSxcbiAgICBDb21wYXRpYmxlUHJlc2V0cyxcbiAgICBEaXNhYmxlZERhdGVGbixcbiAgICBTdXBwb3J0VGltZU9wdGlvbnMsXG4gICAgVGh5RGF0ZUNoYW5nZUV2ZW50LFxuICAgIFRoeURhdGVHcmFudWxhcml0eSxcbiAgICBUaHlQYW5lbE1vZGUsXG4gICAgVGh5U2hvcnRjdXRQb3NpdGlvbixcbiAgICBUaHlTaG9ydGN1dFByZXNldCxcbiAgICBUaHlTaG9ydGN1dFZhbHVlXG59IGZyb20gJy4uLy4uL3N0YW5kYXJkLXR5cGVzJztcbmltcG9ydCB7IENhbGVuZGFyRm9vdGVyIH0gZnJvbSAnLi4vY2FsZW5kYXIvY2FsZW5kYXItZm9vdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlQ2Fyb3VzZWwgfSBmcm9tICcuLi9kYXRlLWNhcm91c2VsL2RhdGUtY2Fyb3VzZWwuY29tcG9uZW50JztcbmltcG9ydCB7IElubmVyUG9wdXAgfSBmcm9tICcuL2lubmVyLXBvcHVwLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2RhdGUtcG9wdXAnLFxuICAgIGV4cG9ydEFzOiAnZGF0ZVBvcHVwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1wb3B1cC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbVGh5TmF2LCBUaHlOYXZJdGVtRGlyZWN0aXZlLCBUaHlCdXR0b25JY29uLCBEYXRlQ2Fyb3VzZWwsIEZvcm1zTW9kdWxlLCBOZ1RlbXBsYXRlT3V0bGV0LCBJbm5lclBvcHVwLCBDYWxlbmRhckZvb3Rlcl1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBvcHVwIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIGRhdGVQaWNrZXJDb25maWdTZXJ2aWNlID0gaW5qZWN0KFRoeURhdGVQaWNrZXJDb25maWdTZXJ2aWNlKTtcbiAgICBsb2NhbGU6IFNpZ25hbDxUaHlEYXRlUGlja2VyTG9jYWxlPiA9IGluamVjdExvY2FsZSgnZGF0ZVBpY2tlcicpO1xuXG4gICAgQElucHV0KCkgaXNSYW5nZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzaG93V2VlazogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIGZvcm1hdDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkRGF0ZTogRGlzYWJsZWREYXRlRm47XG4gICAgQElucHV0KCkgbWluRGF0ZTogRGF0ZSB8IG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlIHwgbnVtYmVyO1xuICAgIEBJbnB1dCgpIHNob3dUb2RheTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaUr+aMgeiuvue9ruaXtumXtCjml7bjgIHliIYpXG4gICAgICovXG4gICAgQElucHV0KCkgc2hvd1RpbWU6IFN1cHBvcnRUaW1lT3B0aW9ucyB8IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblsZXnpLrml7bpl7Qo5pe244CB5YiGKVxuICAgICAqL1xuICAgIEBJbnB1dCgpIG11c3RTaG93VGltZTogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIGRhdGVSZW5kZXI6IEZ1bmN0aW9uUHJvcDxUZW1wbGF0ZVJlZjxEYXRlPiB8IHN0cmluZz47XG4gICAgQElucHV0KCkgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcGFuZWxNb2RlOiBUaHlQYW5lbE1vZGUgfCBUaHlQYW5lbE1vZGVbXTtcbiAgICBASW5wdXQoKSB2YWx1ZTogQ29tcGF0aWJsZVZhbHVlO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRQaWNrZXJWYWx1ZTogQ29tcGF0aWJsZURhdGUgfCBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBzaG93U2hvcnRjdXQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBzaG9ydGN1dFByZXNldHM6IENvbXBhdGlibGVQcmVzZXRzO1xuXG4gICAgQElucHV0KCkgc2hvcnRjdXRQb3NpdGlvbjogVGh5U2hvcnRjdXRQb3NpdGlvbjtcblxuICAgIEBJbnB1dCgpIGZsZXhpYmxlOiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgZmxleGlibGVEYXRlR3JhbnVsYXJpdHk6IFRoeURhdGVHcmFudWxhcml0eTtcblxuICAgIEBJbnB1dCgpIHRpbWVzdGFtcFByZWNpc2lvbjogJ3NlY29uZHMnIHwgJ21pbGxpc2Vjb25kcyc7XG5cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFuZWxNb2RlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlQYW5lbE1vZGUgfCBUaHlQYW5lbE1vZGVbXT4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgY2FsZW5kYXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBhdGlibGVWYWx1ZT4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBhdGlibGVWYWx1ZSB8IFJhbmdlQWR2YW5jZWRWYWx1ZT4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVzdWx0T2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7IC8vIEVtaXR0ZWQgd2hlbiBkb25lIHdpdGggZGF0ZSBzZWxlY3RpbmdcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgc2hvd1RpbWVQaWNrZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGRhdGVWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5RGF0ZUNoYW5nZUV2ZW50PigpO1xuXG4gICAgcHJlZml4Q2xzID0gJ3RoeS1jYWxlbmRhcic7XG4gICAgc2hvd1RpbWVQaWNrZXIgPSBmYWxzZTtcbiAgICB0aW1lT3B0aW9uczogU3VwcG9ydFRpbWVPcHRpb25zIHwgU3VwcG9ydFRpbWVPcHRpb25zW10gfCBudWxsO1xuICAgIGFjdGl2ZURhdGU6IFRpbnlEYXRlIHwgVGlueURhdGVbXTtcbiAgICBzZWxlY3RlZFZhbHVlOiBUaW55RGF0ZVtdID0gW107IC8vIFJhbmdlIE9OTFlcbiAgICBob3ZlclZhbHVlOiBUaW55RGF0ZVtdID0gW107IC8vIFJhbmdlIE9OTFlcblxuICAgIGFkdmFuY2VkU2VsZWN0ZWRWYWx1ZTogUmFuZ2VBZHZhbmNlZFZhbHVlOyAvLyBhZHZhbmNlZCBPTkxZXG5cbiAgICBmbGV4aWJsZUFjdGl2ZVRhYjogRGF0ZVBpY2tlckZsZXhpYmxlVGFiID0gJ2FkdmFuY2VkJztcblxuICAgIGdldCBoYXNUaW1lUGlja2VyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnNob3dUaW1lO1xuICAgIH1cbiAgICBwcml2YXRlIHBhcnRUeXBlTWFwOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0geyBsZWZ0OiAwLCByaWdodDogMSB9O1xuXG4gICAgW3Byb3BlcnR5OiBzdHJpbmddOiBhbnk7XG5cbiAgICBlbmRQYW5lbE1vZGU6IFRoeVBhbmVsTW9kZSB8IFRoeVBhbmVsTW9kZVtdO1xuXG4gICAgaW5uZXJTaG9ydGN1dFByZXNldHM6IFRoeVNob3J0Y3V0UHJlc2V0W107XG5cbiAgICBkaXNhYmxlVGltZUNvbmZpcm0gPSBmYWxzZTtcblxuICAgIHNldFByb3BlcnR5PFQgZXh0ZW5kcyBrZXlvZiBEYXRlUG9wdXA+KGtleTogVCwgdmFsdWU6IHRoaXNbVF0pOiB2b2lkIHtcbiAgICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRTaG9ydGN1dFByZXNldHMoKTtcbiAgICAgICAgdGhpcy5pbml0UGFuZWxNb2RlKCk7XG4gICAgICAgIGlmICh0aGlzLmZsZXhpYmxlICYmIHRoaXMuZmxleGlibGVEYXRlR3JhbnVsYXJpdHkgPT09ICdkYXknKSB7XG4gICAgICAgICAgICB0aGlzLmZsZXhpYmxlQWN0aXZlVGFiID0gJ2N1c3RvbSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFBpY2tlclZhbHVlICYmICFoYXNWYWx1ZSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdHJhbnNmb3JtRGF0ZVZhbHVlKHRoaXMuZGVmYXVsdFBpY2tlclZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtYWtlVmFsdWUodmFsdWUsIHRoaXMuaXNSYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVEYXRlKCk7XG4gICAgICAgIHRoaXMuaW5pdERpc2FibGVkRGF0ZSgpO1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlICYmIHRoaXMuZmxleGlibGUgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hZHZhbmNlZFNlbGVjdGVkVmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgYmVnaW46IHRoaXMudmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgZW5kOiB0aGlzLnZhbHVlWzFdLFxuICAgICAgICAgICAgICAgIGRhdGVHcmFudWxhcml0eTogdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMucGFuZWxNb2RlKSB7XG4gICAgICAgICAgICBpZiAoaGVscGVycy5pc0FycmF5KHRoaXMucGFuZWxNb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kUGFuZWxNb2RlID0gWy4uLnRoaXMucGFuZWxNb2RlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRQYW5lbE1vZGUgPSB0aGlzLnBhbmVsTW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5kZWZhdWx0UGlja2VyVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnZhbHVlICYmIGNoYW5nZXMudmFsdWUuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZURhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRTaG9ydGN1dFByZXNldHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc2hvcnRjdXRSYW5nZXNQcmVzZXRzLCBzaG9ydGN1dERhdGVQcmVzZXRzLCBzaG93U2hvcnRjdXQgfSA9IHRoaXMuZGF0ZVBpY2tlckNvbmZpZ1NlcnZpY2U7XG5cbiAgICAgICAgdGhpcy5zaG93U2hvcnRjdXQgPVxuICAgICAgICAgICAgWydkYXRlJywgJ2RhdGUsZGF0ZSddLmluY2x1ZGVzKHRoaXMucGFuZWxNb2RlLnRvU3RyaW5nKCkpICYmIGlzVW5kZWZpbmVkT3JOdWxsKHRoaXMuc2hvd1Nob3J0Y3V0KVxuICAgICAgICAgICAgICAgID8gc2hvd1Nob3J0Y3V0XG4gICAgICAgICAgICAgICAgOiB0aGlzLnNob3dTaG9ydGN1dDtcblxuICAgICAgICBpZiAodGhpcy5zaG93U2hvcnRjdXQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG9ydGN1dFByZXNldHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3J0Y3V0UHJlc2V0cyA9IHRoaXMuaXNSYW5nZSA/IHNob3J0Y3V0UmFuZ2VzUHJlc2V0cyA6IHNob3J0Y3V0RGF0ZVByZXNldHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW5uZXJTaG9ydGN1dFByZXNldHMgPSBpc0Z1bmN0aW9uKHRoaXMuc2hvcnRjdXRQcmVzZXRzKSA/IHRoaXMuc2hvcnRjdXRQcmVzZXRzKCkgOiB0aGlzLnNob3J0Y3V0UHJlc2V0cztcbiAgICAgICAgICAgIGlmICh0aGlzLmlubmVyU2hvcnRjdXRQcmVzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbkRhdGU6IFRpbnlEYXRlID0gdGhpcy5nZXRNaW5UaW55RGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heERhdGU6IFRpbnlEYXRlID0gdGhpcy5nZXRNYXhUaW55RGF0ZSgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbWluVGltZSA9IG1pbkRhdGUgPyBtaW5EYXRlLmdldFRpbWUoKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4VGltZSA9IG1heERhdGUgPyBtYXhEYXRlLmdldFRpbWUoKSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJTaG9ydGN1dFByZXNldHMuZm9yRWFjaCgocHJlc2V0OiBUaHlTaG9ydGN1dFByZXNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVnaW46IG51bWJlciB8IERhdGUgPSBnZXRTaG9ydGN1dFZhbHVlKHByZXNldC52YWx1ZVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWdpblRpbWU6IG51bWJlciA9IG5ldyBUaW55RGF0ZShzdGFydE9mRGF5KGJlZ2luKSkuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQ6IG51bWJlciB8IERhdGUgPSBnZXRTaG9ydGN1dFZhbHVlKHByZXNldC52YWx1ZVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lOiBudW1iZXIgPSBuZXcgVGlueURhdGUoZW5kT2ZEYXkoZW5kKSkuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1pbkRhdGUgJiYgZW5kVGltZSA8IG1pblRpbWUpIHx8IChtYXhEYXRlICYmIGJlZ2luVGltZSA+IG1heFRpbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2V0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2V0LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJTaG9ydGN1dFByZXNldHMuZm9yRWFjaCgocHJlc2V0OiBUaHlTaG9ydGN1dFByZXNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlVmFsdWU6IG51bWJlciB8IERhdGUgPSBnZXRTaG9ydGN1dFZhbHVlKHByZXNldC52YWx1ZSBhcyBUaHlTaG9ydGN1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpbmdsZVRpbWU6IG51bWJlciA9IG5ldyBUaW55RGF0ZShzaW5nbGVWYWx1ZSkuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1pbkRhdGUgJiYgc2luZ2xlVGltZSA8IG1pblRpbWUpIHx8IChtYXhEYXRlICYmIHNpbmdsZVRpbWUgPiBtYXhUaW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNldC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNldC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVBY3RpdmVEYXRlKCkge1xuICAgICAgICB0aGlzLmNsZWFySG92ZXJWYWx1ZSgpO1xuICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRyYW5zZm9ybURhdGVWYWx1ZSh0aGlzLmRlZmF1bHRQaWNrZXJWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbWFrZVZhbHVlKHZhbHVlLCB0aGlzLmlzUmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5mbGV4aWJsZSB8fCB0aGlzLmZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5ID09PSAnZGF5Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMudmFsdWUgYXMgVGlueURhdGVbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMubm9ybWFsaXplUmFuZ2VWYWx1ZSh0aGlzLnZhbHVlIGFzIFRpbnlEYXRlW10sIHRoaXMuZ2V0UGFuZWxNb2RlKHRoaXMuZW5kUGFuZWxNb2RlKSBhcyBUaHlQYW5lbE1vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy52YWx1ZSBhcyBUaW55RGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRGlzYWJsZVRpbWVDb25maXJtKCk7XG4gICAgfVxuXG4gICAgaW5pdFBhbmVsTW9kZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuZFBhbmVsTW9kZSkge1xuICAgICAgICAgICAgaWYgKGhlbHBlcnMuaXNBcnJheSh0aGlzLnBhbmVsTW9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFBhbmVsTW9kZSA9IFsuLi50aGlzLnBhbmVsTW9kZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kUGFuZWxNb2RlID0gdGhpcy5wYW5lbE1vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaGVscGVycy5pc0FycmF5KHRoaXMuZW5kUGFuZWxNb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFuZWxNb2RlID0gWy4uLnRoaXMuZW5kUGFuZWxNb2RlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lbE1vZGUgPSB0aGlzLmVuZFBhbmVsTW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXREaXNhYmxlZERhdGUoKTogdm9pZCB7XG4gICAgICAgIGxldCBtaW5EYXRlOiBUaW55RGF0ZTtcbiAgICAgICAgbGV0IG1heERhdGU6IFRpbnlEYXRlO1xuICAgICAgICBsZXQgZGlzYWJsZWREYXRlRm46IERpc2FibGVkRGF0ZUZuO1xuICAgICAgICBpZiAodGhpcy5taW5EYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0cmFuc2Zvcm1EYXRlVmFsdWUodGhpcy5taW5EYXRlKTtcbiAgICAgICAgICAgIG1pbkRhdGUgPSBuZXcgVGlueURhdGUodmFsdWUgYXMgRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdHJhbnNmb3JtRGF0ZVZhbHVlKHRoaXMubWF4RGF0ZSk7XG4gICAgICAgICAgICBtYXhEYXRlID0gbmV3IFRpbnlEYXRlKHZhbHVlIGFzIERhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZSkge1xuICAgICAgICAgICAgZGlzYWJsZWREYXRlRm4gPSB0aGlzLmRpc2FibGVkRGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZSA9IGQgPT4ge1xuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChtaW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGQgPCBtaW5EYXRlLnN0YXJ0T2ZEYXkoKS5uYXRpdmVEYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1heERhdGUgJiYgIWV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gZCA+IG1heERhdGUuZW5kT2ZEYXkoKS5uYXRpdmVEYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRpc2FibGVkRGF0ZUZuICYmIHR5cGVvZiBkaXNhYmxlZERhdGVGbiA9PT0gJ2Z1bmN0aW9uJyAmJiAhZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBkaXNhYmxlZERhdGVGbihkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBleHByZXNzaW9uO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9uU2hvd1RpbWVQaWNrZXJDaGFuZ2Uoc2hvdzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dUaW1lUGlja2VyID0gc2hvdztcbiAgICAgICAgdGhpcy5zaG93VGltZVBpY2tlckNoYW5nZS5lbWl0KHNob3cpO1xuICAgIH1cblxuICAgIG9uQ2xpY2tPaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLnJlc3VsdE9rLmVtaXQoKTtcbiAgICB9XG5cbiAgICBvbkNsaWNrUmVtb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1JhbmdlID8gW10gOiBudWxsO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgb25EYXlIb3Zlcih2YWx1ZTogVGlueURhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWVbMF0gJiYgIXRoaXMuc2VsZWN0ZWRWYWx1ZVsxXSkge1xuICAgICAgICAgICAgLy8gV2hlbiByaWdodCB2YWx1ZSBpcyBzZWxlY3RlZCwgZG9uJ3QgZG8gaG92ZXJcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLnNlbGVjdGVkVmFsdWVbMF07IC8vIFVzZSB0aGUgbGVmdCBvZiBzZWxlY3RlZCB2YWx1ZSBhcyB0aGUgYmFzZSB0byBkZWNpZGUgbGF0ZXIgaG92ZXJWYWx1ZVxuICAgICAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmVEYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlclZhbHVlID0gW2Jhc2UsIHZhbHVlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlclZhbHVlID0gW3ZhbHVlLCBiYXNlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGFuZWxNb2RlQ2hhbmdlKG1vZGU6IFRoeVBhbmVsTW9kZSwgcGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgICh0aGlzLnBhbmVsTW9kZSBhcyBUaHlQYW5lbE1vZGVbXSlbdGhpcy5nZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlKV0gPSBtb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYW5lbE1vZGUgPSBtb2RlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFuZWxNb2RlQ2hhbmdlLmVtaXQodGhpcy5wYW5lbE1vZGUpO1xuICAgIH1cblxuICAgIG9uSGVhZGVyQ2hhbmdlKHZhbHVlOiBUaW55RGF0ZSwgcGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZVt0aGlzLmdldFBhcnRUeXBlSW5kZXgocGFydFR5cGUpXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5ub3JtYWxpemVSYW5nZVZhbHVlKFxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSBhcyBUaW55RGF0ZVtdLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFuZWxNb2RlKHRoaXMuZW5kUGFuZWxNb2RlLCBwYXJ0VHlwZSkgYXMgVGh5UGFuZWxNb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlbGVjdFRpbWUodmFsdWU6IFRpbnlEYXRlLCBwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgLy8gVE9ETzpyYW5nZSBwaWNrZXIgc2V0IHRpbWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobmV3IFRpbnlEYXRlKHZhbHVlLm5hdGl2ZURhdGUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFRhYihhY3RpdmU6IERhdGVQaWNrZXJGbGV4aWJsZVRhYikge1xuICAgICAgICB0aGlzLmZsZXhpYmxlQWN0aXZlVGFiID0gYWN0aXZlO1xuICAgIH1cblxuICAgIGNsZWFyRmxleGlibGVWYWx1ZSgpIHtcbiAgICAgICAgdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmZsZXhpYmxlQWN0aXZlVGFiID09PSAnYWR2YW5jZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VkU2VsZWN0ZWRWYWx1ZSA9IHt9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGJlZ2luOiBudWxsLFxuICAgICAgICAgICAgZW5kOiBudWxsLFxuICAgICAgICAgICAgZGF0ZUdyYW51bGFyaXR5OiB0aGlzLmZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZVZhbHVlRnJvbUFkdmFuY2VkU2VsZWN0KHZhbHVlOiBSYW5nZUFkdmFuY2VkVmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgLy8gY2xlYXIgY3VzdG9tIGRhdGUgd2hlbiBzZWxlY3QgYSBhZHZhbmNlZCBkYXRlXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLmRhdGVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHZhbHVlOiBbdmFsdWUuYmVnaW4sIHZhbHVlLmVuZF1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlVmFsdWVGcm9tU2VsZWN0KHZhbHVlOiBUaW55RGF0ZSwgcGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyIGFkdmFuY2VkIGRhdGUgd2hlbiBzZWxlY3QgYSBjdXN0b20gZGF0ZVxuICAgICAgICAgICAgdGhpcy5hZHZhbmNlZFNlbGVjdGVkVmFsdWUgPSB7fTtcblxuICAgICAgICAgICAgY29uc3QgW2xlZnQsIHJpZ2h0XSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZSBhcyBUaW55RGF0ZVtdO1xuXG4gICAgICAgICAgICBpZiAoKCFsZWZ0ICYmICFyaWdodCkgfHwgKGxlZnQgJiYgcmlnaHQpKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdG90YWxseSBmdWxsIG9yIGVtcHR5LCBjbGVhbiB1cCAmJiByZS1hc3NpZ24gbGVmdCBmaXJzdFxuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFt2YWx1ZV07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gW3RoaXMuc2VsZWN0ZWRWYWx1ZVswXS5zdGFydE9mRGF5KCldO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJDaGFuZ2UuZW1pdChbdGhpcy5zZWxlY3RlZFZhbHVlWzBdLmNsb25lKCldKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdCAmJiAhcmlnaHQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSwgYXNzaWduIHRoZSBvdGhlciBvbmUgYW5kIHNvcnQsIHRoZW4gc2V0IHRoZSBmaW5hbCB2YWx1ZXNcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFySG92ZXJWYWx1ZSgpOyAvLyBDbGVhbiB1cFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VWYWx1ZSgncmlnaHQnLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gc29ydFJhbmdlVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKTsgLy8gU29ydFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZVZhbHVlQnlNb2RlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5ub3JtYWxpemVSYW5nZVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFuZWxNb2RlKHRoaXMuZW5kUGFuZWxNb2RlLCBwYXJ0VHlwZSkgYXMgVGh5UGFuZWxNb2RlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuY2xvbmVSYW5nZURhdGUodGhpcy5zZWxlY3RlZFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhckNoYW5nZS5lbWl0KHRoaXMuY2xvbmVSYW5nZURhdGUodGhpcy5zZWxlY3RlZFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNsb25lUmFuZ2VEYXRlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHRoaXMudXBkYXRlSG91ck1pbnV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHVwZGF0ZWRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmRhdGVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdXBkYXRlZFZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRSYW5nZVZhbHVlQnlNb2RlKHZhbHVlOiBUaW55RGF0ZVtdKTogVGlueURhdGVbXSB7XG4gICAgICAgIGNvbnN0IHBhbmVsTW9kZSA9IHRoaXMuZ2V0UGFuZWxNb2RlKHRoaXMuZW5kUGFuZWxNb2RlKTtcbiAgICAgICAgaWYgKHBhbmVsTW9kZSA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZhbHVlWzBdLnN0YXJ0T2ZZZWFyKCksIHZhbHVlWzFdLmVuZE9mWWVhcigpXTtcbiAgICAgICAgfSBlbHNlIGlmIChwYW5lbE1vZGUgPT09ICdxdWFydGVyJykge1xuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZVswXS5zdGFydE9mUXVhcnRlcigpLCB2YWx1ZVsxXS5lbmRPZlF1YXJ0ZXIoKV07XG4gICAgICAgIH0gZWxzZSBpZiAocGFuZWxNb2RlID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZhbHVlWzBdLnN0YXJ0T2ZNb250aCgpLCB2YWx1ZVsxXS5lbmRPZk1vbnRoKCldO1xuICAgICAgICB9IGVsc2UgaWYgKHBhbmVsTW9kZSA9PT0gJ3dlZWsnKSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZhbHVlWzBdLnN0YXJ0T2ZJU09XZWVrKCksIHZhbHVlWzFdLmVuZE9mSVNPV2VlaygpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbdmFsdWVbMF0uc3RhcnRPZkRheSgpLCB2YWx1ZVsxXS5lbmRPZkRheSgpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSG91ck1pbnV0ZSh2YWx1ZTogVGlueURhdGUpOiBUaW55RGF0ZSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdpbkRhdGUgPSB0aGlzLnZhbHVlIGFzIFRpbnlEYXRlO1xuICAgICAgICBjb25zdCBkYXRlVGltZSA9IFt2YWx1ZS5nZXRIb3VycygpLCB2YWx1ZS5nZXRNaW51dGVzKCksIHZhbHVlLmdldFNlY29uZHMoKV07XG4gICAgICAgIGNvbnN0IG9yaWdpbkRhdGVUaW1lID0gW29yaWdpbkRhdGUuZ2V0SG91cnMoKSwgb3JpZ2luRGF0ZS5nZXRNaW51dGVzKCksIG9yaWdpbkRhdGUuZ2V0U2Vjb25kcygpXTtcblxuICAgICAgICBjb25zdCBpc0VxdWFsVGltZSA9IGRhdGVUaW1lLnRvU3RyaW5nKCkgPT09IG9yaWdpbkRhdGVUaW1lLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChpc0VxdWFsVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnNldEhtcyhvcmlnaW5EYXRlVGltZVswXSwgb3JpZ2luRGF0ZVRpbWVbMV0sIG9yaWdpbkRhdGVUaW1lWzJdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuYWJsZVByZXZOZXh0KGRpcmVjdGlvbjogJ3ByZXYnIHwgJ25leHQnLCBwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSAmJiB0aGlzLnBhbmVsTW9kZSA9PT0gdGhpcy5lbmRQYW5lbE1vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMuYWN0aXZlRGF0ZSBhcyBUaW55RGF0ZVtdO1xuICAgICAgICAgICAgY29uc3Qgc2hvd01pZGRsZSA9ICFzdGFydC5hZGRNb250aHMoMSkuaXNTYW1lKGVuZCwgJ21vbnRoJyk7IC8vIE9uZSBtb250aCBkaWZmIHRoZW4gZG9uJ3Qgc2hvdyBtaWRkbGUgcHJldi9uZXh0XG4gICAgICAgICAgICBpZiAoKHBhcnRUeXBlID09PSAnbGVmdCcgJiYgZGlyZWN0aW9uID09PSAnbmV4dCcpIHx8IChwYXJ0VHlwZSA9PT0gJ3JpZ2h0JyAmJiBkaXJlY3Rpb24gPT09ICdwcmV2JykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2hvd01pZGRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQYW5lbE1vZGUocGFuZWxNb2RlOiBUaHlQYW5lbE1vZGUgfCBUaHlQYW5lbE1vZGVbXSwgcGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogVGh5UGFuZWxNb2RlIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhbmVsTW9kZVt0aGlzLmdldFBhcnRUeXBlSW5kZXgocGFydFR5cGUpXSBhcyBUaHlQYW5lbE1vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcGFuZWxNb2RlIGFzIFRoeVBhbmVsTW9kZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFZhbHVlQnlTZWxlY3RvcihwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiBUaW55RGF0ZSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlU2hvdyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZTsgLy8gVXNlIHRoZSByZWFsIHRpbWUgdmFsdWUgdGhhdCB3aXRob3V0IGRlY29yYXRpb25zIHdoZW4gdGltZXBpY2tlciBpcyBzaG93biB1cFxuICAgICAgICAgICAgcmV0dXJuICh2YWx1ZVNob3cgYXMgVGlueURhdGVbXSlbdGhpcy5nZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSBhcyBUaW55RGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEFjdGl2ZURhdGUocGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogVGlueURhdGUge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlW3RoaXMuZ2V0UGFydFR5cGVJbmRleChwYXJ0VHlwZSldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZSBhcyBUaW55RGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFBhcnRUeXBlSW5kZXgocGFydFR5cGU6IFJhbmdlUGFydFR5cGUgPSAnbGVmdCcpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJ0VHlwZU1hcFtwYXJ0VHlwZV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNaW5UaW55RGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluRGF0ZSA/IG5ldyBUaW55RGF0ZSh0cmFuc2Zvcm1EYXRlVmFsdWUodGhpcy5taW5EYXRlKS52YWx1ZSBhcyBEYXRlKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNYXhUaW55RGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF4RGF0ZSA/IG5ldyBUaW55RGF0ZSh0cmFuc2Zvcm1EYXRlVmFsdWUodGhpcy5tYXhEYXRlKS52YWx1ZSBhcyBEYXRlKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckhvdmVyVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG92ZXJWYWx1ZSA9IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmFsdWUodmFsdWU6IENvbXBhdGlibGVWYWx1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UgJiYgdGhpcy5mbGV4aWJsZSkge1xuICAgICAgICAgICAgdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eSA9ICdkYXknO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICBiZWdpbjogdmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgZW5kOiB2YWx1ZVsxXSxcbiAgICAgICAgICAgICAgICBkYXRlR3JhbnVsYXJpdHk6IHRoaXMuZmxleGlibGVEYXRlR3JhbnVsYXJpdHlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dUaW1lIHx8ICF0aGlzLnNob3dUaW1lUGlja2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlVGltZUNvbmZpcm0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZVJhbmdlVmFsdWUodmFsdWU6IFRpbnlEYXRlW10sIG1vZGU6IFRoeVBhbmVsTW9kZSA9ICdtb250aCcpOiBUaW55RGF0ZVtdIHtcbiAgICAgICAgY29uc3QgaGVhZGVyTW9kZXM6IHsgW2tleSBpbiBUaHlQYW5lbE1vZGVdPzogVGh5UGFuZWxNb2RlIH0gPSB7XG4gICAgICAgICAgICB3ZWVrOiAnbW9udGgnLFxuICAgICAgICAgICAgZGF0ZTogJ21vbnRoJyxcbiAgICAgICAgICAgIG1vbnRoOiAneWVhcicsXG4gICAgICAgICAgICBxdWFydGVyOiAneWVhcicsXG4gICAgICAgICAgICB5ZWFyOiAnZGVjYWRlJ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBoZWFkZXJNb2RlID0gaGVhZGVyTW9kZXNbbW9kZV07XG4gICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHZhbHVlO1xuICAgICAgICBjb25zdCBuZXdTdGFydCA9IHN0YXJ0IHx8IG5ldyBUaW55RGF0ZSgpO1xuICAgICAgICBsZXQgbmV3RW5kID0gZW5kO1xuICAgICAgICBpZiAoIW5ld0VuZCB8fCBuZXdTdGFydC5pc1NhbWUoZW5kLCBoZWFkZXJNb2RlIGFzIFRpbnlEYXRlQ29tcGFyZUdyYWluKSkge1xuICAgICAgICAgICAgbmV3RW5kID0gZGF0ZUFkZEFtb3VudChuZXdTdGFydCwgMSwgaGVhZGVyTW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtuZXdTdGFydCwgbmV3RW5kXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJhbmdlVmFsdWUocGFydFR5cGU6IFJhbmdlUGFydFR5cGUsIHZhbHVlOiBUaW55RGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWYgPSAodGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5jbG9uZVJhbmdlRGF0ZSh0aGlzLnNlbGVjdGVkVmFsdWUgYXMgVGlueURhdGVbXSkpO1xuICAgICAgICByZWZbdGhpcy5nZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlKV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb25lUmFuZ2VEYXRlKHZhbHVlOiBUaW55RGF0ZVtdKTogVGlueURhdGVbXSB7XG4gICAgICAgIHJldHVybiBbdmFsdWVbMF0gJiYgdmFsdWVbMF0uY2xvbmUoKSwgdmFsdWVbMV0gJiYgdmFsdWVbMV0uY2xvbmUoKV0gYXMgVGlueURhdGVbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRGlzYWJsZVRpbWVDb25maXJtKCkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlIHx8ICF0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRlOiBUaW55RGF0ZSA9IHRoaXMudmFsdWUgPyAodGhpcy52YWx1ZSBhcyBUaW55RGF0ZSkgOiBuZXcgVGlueURhdGUoKTtcbiAgICAgICAgY29uc3QgbWluRGF0ZTogVGlueURhdGUgPSB0aGlzLmdldE1pblRpbnlEYXRlKCk7XG4gICAgICAgIGNvbnN0IG1heERhdGU6IFRpbnlEYXRlID0gdGhpcy5nZXRNYXhUaW55RGF0ZSgpO1xuXG4gICAgICAgIGlmICgobWluRGF0ZSAmJiBkYXRlLmdldFRpbWUoKSA8IG1pbkRhdGUuZ2V0VGltZSgpKSB8fCAobWF4RGF0ZSAmJiBkYXRlLmdldFRpbWUoKSA+IG1heERhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGltZUNvbmZpcm0gPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGltZUNvbmZpcm0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRTaG9ydGN1dFByZXNldChkYXRlOiBDb21wYXRpYmxlVmFsdWUpOiBDb21wYXRpYmxlVmFsdWUge1xuICAgICAgICBjb25zdCBtaW5EYXRlOiBUaW55RGF0ZSA9IHRoaXMuZ2V0TWluVGlueURhdGUoKTtcbiAgICAgICAgY29uc3QgbWF4RGF0ZTogVGlueURhdGUgPSB0aGlzLmdldE1heFRpbnlEYXRlKCk7XG5cbiAgICAgICAgY29uc3QgbWluVGltZTogbnVtYmVyID0gKG1pbkRhdGUgJiYgbWluRGF0ZS5nZXRUaW1lKCkpIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IG1heFRpbWU6IG51bWJlciA9IChtYXhEYXRlICYmIG1heERhdGUuZ2V0VGltZSgpKSB8fCBudWxsO1xuXG4gICAgICAgIGlmIChoZWxwZXJzLmlzQXJyYXkoZGF0ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZTogVGlueURhdGUgPSBkYXRlWzBdO1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZTogVGlueURhdGUgPSBkYXRlWzFdO1xuXG4gICAgICAgICAgICBjb25zdCBzdGFydFRpbWU6IG51bWJlciA9IHN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBjb25zdCBlbmRUaW1lOiBudW1iZXIgPSBlbmREYXRlLmdldFRpbWUoKTtcblxuICAgICAgICAgICAgaWYgKChtYXhEYXRlICYmIHN0YXJ0VGltZSA+IG1heFRpbWUpIHx8IChtaW5EYXRlICYmIGVuZFRpbWUgPCBtaW5UaW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1pbkRhdGUgJiYgc3RhcnRUaW1lIDwgbWluVGltZSAmJiBtYXhEYXRlICYmIGVuZFRpbWUgPiBtYXhUaW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFttaW5EYXRlLCBtYXhEYXRlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1pbkRhdGUgJiYgc3RhcnRUaW1lIDwgbWluVGltZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbWluRGF0ZSwgZW5kRGF0ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtYXhEYXRlICYmIGVuZFRpbWUgPiBtYXhUaW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtzdGFydERhdGUsIG1heERhdGVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZVRpbWU6IG51bWJlciA9IGRhdGUuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgICBpZiAoKG1pbkRhdGUgJiYgc2luZ2xlVGltZSA8IG1pblRpbWUpIHx8IChtYXhEYXRlICYmIHNpbmdsZVRpbWUgPiBtYXhUaW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3J0Y3V0U2V0VmFsdWUoc2hvcnRjdXRQcmVzZXRzOiBUaHlTaG9ydGN1dFByZXNldCkge1xuICAgICAgICBpZiAoc2hvcnRjdXRQcmVzZXRzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBzaG9ydGN1dFByZXNldHM7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWxlY3RlZFByZXNldFZhbHVlOiBDb21wYXRpYmxlVmFsdWU7XG4gICAgICAgIGlmIChoZWxwZXJzLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBiZWdpbjogbnVtYmVyIHwgRGF0ZSA9IGdldFNob3J0Y3V0VmFsdWUodmFsdWVbMF0pO1xuICAgICAgICAgICAgY29uc3QgZW5kOiBudW1iZXIgfCBEYXRlID0gZ2V0U2hvcnRjdXRWYWx1ZSh2YWx1ZVsxXSk7XG5cbiAgICAgICAgICAgIGlmIChiZWdpbiAmJiBlbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLmdldFNlbGVjdGVkU2hvcnRjdXRQcmVzZXQoW1xuICAgICAgICAgICAgICAgICAgICBuZXcgVGlueURhdGUoYmVnaW4pLnN0YXJ0T2ZEYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRpbnlEYXRlKGVuZCkuZW5kT2ZEYXkoKVxuICAgICAgICAgICAgICAgIF0pIGFzIFRpbnlEYXRlW107XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRQcmVzZXRWYWx1ZSA9IHRoaXMuY2xvbmVSYW5nZURhdGUodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbkRhdGUgPSB0aGlzLnZhbHVlIGFzIFRpbnlEYXRlO1xuICAgICAgICAgICAgY29uc3Qgem9uZWRUaW1lID0gdGhpcy5jcmVhdGVJblpvbmVUaW1lKFxuICAgICAgICAgICAgICAgIG5ldyBUaW55RGF0ZShnZXRTaG9ydGN1dFZhbHVlKHZhbHVlKSksXG4gICAgICAgICAgICAgICAgb3JpZ2luRGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICAgICAgICAgICAgICAgIG9yaWdpbkRhdGU/LmdldE1pbnV0ZXMoKSA/PyAwLFxuICAgICAgICAgICAgICAgIG9yaWdpbkRhdGU/LmdldFNlY29uZHMoKSA/PyAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlVGlueURhdGU6IFRpbnlEYXRlID0gdGhpcy51cGRhdGVIb3VyTWludXRlKG5ldyBUaW55RGF0ZSh6b25lZFRpbWUpKTtcbiAgICAgICAgICAgIHNlbGVjdGVkUHJlc2V0VmFsdWUgPSB0aGlzLmdldFNlbGVjdGVkU2hvcnRjdXRQcmVzZXQoc2luZ2xlVGlueURhdGUpIGFzIFRpbnlEYXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoc2VsZWN0ZWRQcmVzZXRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHNob3J0Y3V0UHJlc2V0c1ZhbHVlID0gc2V0VmFsdWVCeVRpbWVzdGFtcFByZWNpc2lvbihzaG9ydGN1dFByZXNldHM/LnZhbHVlLCB0aGlzLmlzUmFuZ2UsIHRoaXMudGltZXN0YW1wUHJlY2lzaW9uKSBhcyBudW1iZXI7XG4gICAgICAgIHRoaXMuZGF0ZVZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgdmFsdWU6IGhlbHBlcnMuaXNBcnJheSh2YWx1ZSkgPyB0aGlzLnNlbGVjdGVkVmFsdWUgOiBzZWxlY3RlZFByZXNldFZhbHVlLFxuICAgICAgICAgICAgdHJpZ2dlclByZXNldDogT2JqZWN0LmFzc2lnbih7fSwgc2hvcnRjdXRQcmVzZXRzLCB7IHZhbHVlOiBzaG9ydGN1dFByZXNldHNWYWx1ZSB9KVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoZWxwZXJzLmlzQXJyYXkodmFsdWUpICYmIHRoaXMuc2hvd1RpbWUgJiYgdGhpcy5zaG93VGltZVBpY2tlcikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVEYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUluWm9uZVRpbWUoZGF0ZTogVGlueURhdGUsIGhvdXJzPzogbnVtYmVyLCBtaW51dGVzPzogbnVtYmVyLCBzZWNvbmRzPzogbnVtYmVyKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiBUaW55RGF0ZS5jcmVhdGVEYXRlSW5UaW1lWm9uZShkYXRlLmdldFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tcGlja2VyLWNvbnRhaW5lciB7eyBjbGFzc05hbWUgfX1cIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwie3sgcHJlZml4Q2xzIH19IHt7IHNob3dXZWVrID8gcHJlZml4Q2xzICsgJy13ZWVrLW51bWJlcicgOiAnJyB9fVxuICAgICB7eyBpc1JhbmdlID8gcHJlZml4Q2xzICsgJy1yYW5nZScgOiAnJyB9fSB7eyBwcmVmaXhDbHMgfX0tcGlja2VyLXNob3J0Y3V0LXt7IHNob3J0Y3V0UG9zaXRpb24gPT09ICdsZWZ0JyA/ICdsZWZ0JyA6ICdib3R0b20nIH19XCI+XG4gICAgQGlmIChzaG93U2hvcnRjdXQpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tcGlja2VyLXNob3J0Y3V0XCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaW5uZXJTaG9ydGN1dFByZXNldHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tcGlja2VyLXNob3J0Y3V0LWl0ZW1cIiBbY2xhc3MuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiIChjbGljayk9XCJzaG9ydGN1dFNldFZhbHVlKGl0ZW0pXCI+XG4gICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LXBhbmVsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWRhdGUtcGFuZWxcIj5cbiAgICAgICAgQGlmIChmbGV4aWJsZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tZGF0ZS1wYW5lbC1mbGV4aWJsZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1kYXRlLXBhbmVsLWZsZXhpYmxlLXRhYlwiPlxuICAgICAgICAgICAgICA8dGh5LW5hdiB0aHlUeXBlPVwicHVsbGVkXCIgdGh5U2l6ZT1cInNtXCI+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHRoeU5hdkxpbmsgW3RoeU5hdkxpbmtBY3RpdmVdPVwiZmxleGlibGVBY3RpdmVUYWIgPT09ICdhZHZhbmNlZCdcIiAoY2xpY2spPVwic2VsZWN0VGFiKCdhZHZhbmNlZCcpXCI+e3tcbiAgICAgICAgICAgICAgICAgIGxvY2FsZSgpLmFkdmFuY2VcbiAgICAgICAgICAgICAgICB9fTwvYT5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGh5TmF2TGluayBbdGh5TmF2TGlua0FjdGl2ZV09XCJmbGV4aWJsZUFjdGl2ZVRhYiA9PT0gJ2N1c3RvbSdcIiAoY2xpY2spPVwic2VsZWN0VGFiKCdjdXN0b20nKVwiPnt7XG4gICAgICAgICAgICAgICAgICBsb2NhbGUoKS5jdXN0b21cbiAgICAgICAgICAgICAgICB9fTwvYT5cbiAgICAgICAgICAgICAgPC90aHktbmF2PlxuICAgICAgICAgICAgICA8YnV0dG9uIHRoeUJ1dHRvbkljb249XCJzd2VlcFwiIHRoeVNpemU9XCJzbVwiIGNsYXNzPVwiY2xlYXItZGF0ZS1idXR0b25cIiAoY2xpY2spPVwiY2xlYXJGbGV4aWJsZVZhbHVlKClcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1kYXRlLXBhbmVsLWFkdmFuY2VkXCIgW2hpZGRlbl09XCJmbGV4aWJsZUFjdGl2ZVRhYiAhPT0gJ2FkdmFuY2VkJ1wiPlxuICAgICAgICAgICAgICAgIDxkYXRlLWNhcm91c2VsXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZGF0ZUNhcm91c2VsXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVZhbHVlRnJvbUFkdmFuY2VkU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhZHZhbmNlZFNlbGVjdGVkVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2FjdGl2ZURhdGVdPVwic2VsZWN0ZWRWYWx1ZVswXVwiPjwvZGF0ZS1jYXJvdXNlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJmbGV4aWJsZUFjdGl2ZVRhYiAhPT0gJ2N1c3RvbSdcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRwbElubmVyUG9wdXBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAaWYgKGlzUmFuZ2UpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxSYW5nZVBhcnQ7IGNvbnRleHQ6IHsgcGFydFR5cGU6ICdsZWZ0JyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHBsUmFuZ2VQYXJ0OyBjb250ZXh0OiB7IHBhcnRUeXBlOiAncmlnaHQnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxJbm5lclBvcHVwXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghaXNSYW5nZSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRwbEZvb3RlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdHBsSW5uZXJQb3B1cCBsZXQtcGFydFR5cGU9XCJwYXJ0VHlwZVwiPlxuICA8aW5uZXItcG9wdXBcbiAgICBbc2hvd1dlZWtdPVwic2hvd1dlZWtcIlxuICAgIFtpc1JhbmdlXT1cImlzUmFuZ2VcIlxuICAgIFtwYW5lbE1vZGVdPVwiZ2V0UGFuZWxNb2RlKHBhbmVsTW9kZSwgcGFydFR5cGUpXCJcbiAgICBbZW5kUGFuZWxNb2RlXT1cImdldFBhbmVsTW9kZShlbmRQYW5lbE1vZGUsIHBhcnRUeXBlKVwiXG4gICAgW3BhcnRUeXBlXT1cInBhcnRUeXBlXCJcbiAgICBbc2hvd0RhdGVSYW5nZUlucHV0XT1cImZsZXhpYmxlICYmIGZsZXhpYmxlQWN0aXZlVGFiID09PSAnY3VzdG9tJ1wiXG4gICAgKHBhbmVsTW9kZUNoYW5nZSk9XCJvblBhbmVsTW9kZUNoYW5nZSgkZXZlbnQsIHBhcnRUeXBlKVwiXG4gICAgW3ZhbHVlXT1cImdldFZhbHVlQnlTZWxlY3RvcihwYXJ0VHlwZSlcIlxuICAgIFtzZWxlY3RlZFZhbHVlXT1cInNlbGVjdGVkVmFsdWVcIlxuICAgIFthY3RpdmVEYXRlXT1cImdldEFjdGl2ZURhdGUocGFydFR5cGUpXCJcbiAgICBbcmFuZ2VBY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIlxuICAgIFtkaXNhYmxlZERhdGVdPVwiZGlzYWJsZWREYXRlXCJcbiAgICBbZGF0ZVJlbmRlcl09XCJkYXRlUmVuZGVyXCJcbiAgICBbaG92ZXJWYWx1ZV09XCJob3ZlclZhbHVlXCJcbiAgICBbZW5hYmxlUHJldl09XCJlbmFibGVQcmV2TmV4dCgncHJldicsIHBhcnRUeXBlKVwiXG4gICAgW2VuYWJsZU5leHRdPVwiZW5hYmxlUHJldk5leHQoJ25leHQnLCBwYXJ0VHlwZSlcIlxuICAgIChkYXlIb3Zlcik9XCJvbkRheUhvdmVyKCRldmVudClcIlxuICAgIChzZWxlY3REYXRlKT1cImNoYW5nZVZhbHVlRnJvbVNlbGVjdCgkZXZlbnQsIHBhcnRUeXBlKVwiXG4gICAgKGhlYWRlckNoYW5nZSk9XCJvbkhlYWRlckNoYW5nZSgkZXZlbnQsIHBhcnRUeXBlKVwiPjwvaW5uZXItcG9wdXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RwbEZvb3Rlcj5cbiAgPGNhbGVuZGFyLWZvb3RlclxuICAgIFtzaG93VGltZV09XCJzaG93VGltZVwiXG4gICAgW211c3RTaG93VGltZV09XCJtdXN0U2hvd1RpbWVcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW2Rpc2FibGVUaW1lQ29uZmlybV09XCJkaXNhYmxlVGltZUNvbmZpcm1cIlxuICAgIChzaG93VGltZVBpY2tlckNoYW5nZSk9XCJvblNob3dUaW1lUGlja2VyQ2hhbmdlKCRldmVudClcIlxuICAgIChzZWxlY3RUaW1lKT1cIm9uU2VsZWN0VGltZSgkZXZlbnQpXCJcbiAgICAoY2xpY2tPayk9XCJvbkNsaWNrT2soKVwiXG4gICAgKGNsaWNrUmVtb3ZlKT1cIm9uQ2xpY2tSZW1vdmUoKVwiPjwvY2FsZW5kYXItZm9vdGVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBTaW5nbGUgT05MWSAtLT5cblxuPCEtLSBSYW5nZSBPTkxZIC0tPlxuPG5nLXRlbXBsYXRlICN0cGxSYW5nZVBhcnQgbGV0LXBhcnRUeXBlPVwicGFydFR5cGVcIj5cbiAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1yYW5nZS1wYXJ0IHt7IHByZWZpeENscyB9fS1yYW5nZS17eyBwYXJ0VHlwZSB9fVwiPlxuICAgIDxkaXYgc3R5bGU9XCJvdXRsaW5lOiBub25lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHBsSW5uZXJQb3B1cDsgY29udGV4dDogeyBwYXJ0VHlwZTogcGFydFR5cGUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=