ngx-tethys 18.2.7 → 19.0.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (943) hide show
  1. package/CHANGELOG.md +14 -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 +4 -172
  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,558 +0,0 @@
1
- import { SelectionModel } from '@angular/cdk/collections';
2
- import { Injectable } from '@angular/core';
3
- import { helpers, isArray, isEmpty, isUndefinedOrNull, set, get } from 'ngx-tethys/util';
4
- import { Subject } from 'rxjs';
5
- import { debounceTime, map } from 'rxjs/operators';
6
- import * as i0 from "@angular/core";
7
- const defaultDisplayRender = (label) => label.join(' / ');
8
- /**
9
- * @internal
10
- */
11
- export class ThyCascaderService {
12
- constructor() {
13
- this.columns = [];
14
- this.selectedOptions = [];
15
- this.activatedOptions = [];
16
- this.flattenOptions = [];
17
- this.leafNodes = [];
18
- this.isLoading = false;
19
- this.searchResultList = [];
20
- this.prevSelectedOptions = new Set();
21
- this.valueChange$ = new Subject();
22
- }
23
- cascaderValueChange() {
24
- return this.valueChange$.pipe(map(() => {
25
- const valueChangeOptions = {
26
- value: this.getValues(),
27
- isValueEqual: this.arrayEquals(this.value, this.getValues()),
28
- isSelectionModelEmpty: this.selectionModel.isEmpty()
29
- };
30
- this.defaultValue = null;
31
- this.value = this.getValues();
32
- return valueChangeOptions;
33
- }), debounceTime(100));
34
- }
35
- setCascaderOptions(options) {
36
- this.cascaderOptions = { ...this.cascaderOptions, ...options };
37
- if (this.cascaderOptions.hasOwnProperty('isMultiple')) {
38
- this.initSelectionModel(this.cascaderOptions.isMultiple);
39
- }
40
- }
41
- initSelectionModel(isMultiple) {
42
- if (this.selectionModel) {
43
- this.selectionModel.clear();
44
- }
45
- else {
46
- this.selectionModel = new SelectionModel(isMultiple);
47
- }
48
- }
49
- initColumns(columns) {
50
- this.columns = columns;
51
- }
52
- initActivatedOptions(menuVisible) {
53
- if (isEmpty(this.selectedOptions) || !menuVisible) {
54
- return;
55
- }
56
- this.activatedOptions = [...this.selectedOptions];
57
- this.activatedOptions.forEach((item, index) => {
58
- if (!isEmpty(item.children) && !item.isLeaf) {
59
- this.columns[index + 1] = item.children;
60
- }
61
- });
62
- }
63
- initOptions(index) {
64
- const vs = this.defaultValue;
65
- const load = () => {
66
- this.activateOnInit(index, vs[index]);
67
- if (index < vs.length - 1) {
68
- this.initOptions(index + 1);
69
- }
70
- if (index === vs.length - 1) {
71
- this.afterWriteValue();
72
- }
73
- };
74
- if (this.columns[index]?.length || !this.cascaderOptions.loadData) {
75
- load();
76
- }
77
- else {
78
- const node = this.activatedOptions[index - 1] || {};
79
- this.loadChildren(node, index - 1, load, this.afterWriteValue.bind(this));
80
- }
81
- }
82
- clickOption(option, index, event, selectFn) {
83
- if (option?.disabled && !this.cascaderOptions.isMultiple) {
84
- return;
85
- }
86
- const isSelect = event instanceof Event ? !this.cascaderOptions.isMultiple && option.isLeaf : true;
87
- if (this.cascaderOptions.isMultiple && !option.isLeaf && this.cascaderOptions.isOnlySelectLeaf && isSelect) {
88
- this.toggleAllChildren(option, index, event, selectFn);
89
- }
90
- else {
91
- this.setActiveOption(option, index, isSelect, true, selectFn);
92
- }
93
- }
94
- setActiveOption(option, index, select, loadChildren = true, selectFn) {
95
- this.activatedOptions[index] = option;
96
- for (let i = index - 1; i >= 0; i--) {
97
- const originOption = this.activatedOptions[i + 1]?.parent;
98
- if (!this.activatedOptions[i] ||
99
- originOption?.[this.cascaderOptions.valueProperty] !== this.activatedOptions[i]?.[this.cascaderOptions.valueProperty]) {
100
- this.activatedOptions[i] = originOption ?? this.activatedOptions[i];
101
- }
102
- }
103
- if (index < this.activatedOptions.length - 1) {
104
- this.activatedOptions = this.activatedOptions.slice(0, index + 1);
105
- }
106
- if (isArray(option.children) && option.children.length) {
107
- option.isLeaf = false;
108
- option.children.forEach(child => (child.parent = option));
109
- this.setColumnData(option.children, index + 1);
110
- }
111
- else if (!option.isLeaf && loadChildren) {
112
- this.loadChildren(option, index);
113
- }
114
- else if (index < this.columns.length - 1) {
115
- this.columns = this.columns.slice(0, index + 1);
116
- }
117
- if (select) {
118
- selectFn(option, index);
119
- }
120
- }
121
- loadChildren(option, index, success, failure) {
122
- if (!this.cascaderOptions?.loadData) {
123
- this.setColumnData(option.children || [], index + 1);
124
- return;
125
- }
126
- this.isLoading = true;
127
- this.cascaderOptions.loadData(option, index).then(() => this.handleLoadDataSuccess(option, index, success), () => this.handleLoadDataFailure(option, index, failure));
128
- }
129
- handleLoadDataSuccess(option, index, success) {
130
- option.loading = this.isLoading = false;
131
- if (option.children) {
132
- option.children.forEach(child => (child.parent = index < 0 ? undefined : option));
133
- this.setColumnData(option.children, index + 1);
134
- }
135
- if (success) {
136
- success();
137
- }
138
- }
139
- handleLoadDataFailure(option, index, failure) {
140
- option.loading = this.isLoading = false;
141
- option.isLeaf = true;
142
- if (failure) {
143
- failure();
144
- }
145
- }
146
- activateOnInit(index, value) {
147
- let option;
148
- if (isArray(this.customOptions) && this.customOptions.length > 0) {
149
- option = this.customOptions.find(item => get(item, this.cascaderOptions.valueProperty) === value);
150
- }
151
- if (isUndefinedOrNull(option)) {
152
- option = this.findOption(value, index);
153
- }
154
- if (!option) {
155
- option =
156
- typeof value === 'object'
157
- ? value
158
- : {
159
- [`${this.cascaderOptions.valueProperty || 'value'}`]: value,
160
- [`${this.cascaderOptions.labelProperty || 'label'}`]: value
161
- };
162
- }
163
- this.updatePrevSelectedOptions(option, true);
164
- this.setActiveOption(option, index, false, false);
165
- }
166
- isSelectedOption(option, index) {
167
- if (this.cascaderOptions?.isOnlySelectLeaf) {
168
- if (option.isLeaf) {
169
- return option.selected;
170
- }
171
- else {
172
- return this.checkSelectedStatus(option, true);
173
- }
174
- }
175
- else {
176
- const selectedOpts = this.selectionModel.selected;
177
- const appearIndex = selectedOpts.findIndex(item => {
178
- if (item.thyRawValue.value.length - 1 === index) {
179
- const selectedItem = helpers.get(item, `thyRawValue.value.${index}`);
180
- return helpers.shallowEqual(selectedItem, option);
181
- }
182
- else {
183
- return false;
184
- }
185
- });
186
- return appearIndex >= 0;
187
- }
188
- }
189
- toggleAllChildren(option, index, selected, selectFn) {
190
- const allLeafs = this.getAllLeafs(option, index, selected);
191
- option.selected = selected;
192
- while (allLeafs.length) {
193
- const { option, index } = allLeafs.shift();
194
- option.selected = !selected;
195
- this.setActiveOption(option, index, true, null, selectFn);
196
- }
197
- for (let i = 0; i < this.activatedOptions.length; i++) {
198
- const option = this.activatedOptions[i];
199
- if (isArray(option.children) && option.children.length) {
200
- this.setColumnData(option.children, i + 1);
201
- }
202
- }
203
- }
204
- getAllLeafs(option, index, selected) {
205
- let allLeafs = [];
206
- if (option.children.length > 0) {
207
- for (const childOption of option.children) {
208
- childOption.parent = option;
209
- if (childOption.isLeaf && !childOption.selected === selected) {
210
- allLeafs.push({
211
- option: childOption,
212
- index: index + 1
213
- });
214
- }
215
- else if (!childOption.isLeaf) {
216
- allLeafs = allLeafs.concat(this.getAllLeafs(childOption, index + 1, selected));
217
- }
218
- }
219
- }
220
- return allLeafs;
221
- }
222
- searchInLocal(searchText) {
223
- this.forEachColumns();
224
- this.setSearchResultList(this.cascaderOptions.isOnlySelectLeaf ? this.leafNodes : this.flattenOptions, searchText);
225
- }
226
- forEachColumns(currentLabel, currentValue = [], currentRowValue = [], list = this.columns[0]) {
227
- list.forEach(item => {
228
- const curOptionLabel = this.getOptionLabel(item);
229
- const curOptionValue = this.getOptionValue(item);
230
- const label = currentLabel ? [...currentLabel, curOptionLabel] : [curOptionLabel];
231
- const valueList = [...currentValue, curOptionValue];
232
- const rowValueList = [...currentRowValue, item];
233
- const isSelected = this.isSelectedOption(item, valueList.length - 1);
234
- const node = {
235
- labelList: label,
236
- valueList,
237
- selected: isSelected,
238
- thyRowValue: rowValueList,
239
- isLeaf: item.isLeaf,
240
- disabled: item.disabled
241
- };
242
- this.flattenOptions.push(node);
243
- if (item?.children?.length) {
244
- this.forEachColumns(label, valueList, rowValueList, item.children);
245
- }
246
- else {
247
- this.leafNodes.push(node);
248
- }
249
- });
250
- }
251
- setSearchResultList(listOfOption, searchText) {
252
- this.searchResultList = [];
253
- listOfOption.forEach(item => {
254
- if (!item.disabled && item.isLeaf && item.labelList.join().toLowerCase().indexOf(searchText.toLowerCase()) !== -1) {
255
- this.searchResultList.push(item);
256
- }
257
- });
258
- }
259
- /**
260
- * 检查所有所有子项的选择状态, 有一个不符合预期,就直接返回 false
261
- * @param option
262
- * @param trueOrFalse
263
- * @private
264
- */
265
- checkSelectedStatus(option, isSelected) {
266
- if (option.isLeaf) {
267
- return option.selected === isSelected;
268
- }
269
- if (helpers.isEmpty(option.children) && this.cascaderOptions?.isOnlySelectLeaf) {
270
- return false;
271
- }
272
- for (const childOption of option.children) {
273
- if (isArray(childOption.children) && childOption.children.length && !this.checkSelectedStatus(childOption, isSelected)) {
274
- return false;
275
- }
276
- if (!childOption.selected === isSelected) {
277
- return false;
278
- }
279
- }
280
- return true;
281
- }
282
- findOption(option, index) {
283
- const options = this.columns[index];
284
- if (options) {
285
- const value = typeof option === 'object' ? this.getOptionValue(option) : option;
286
- return options.find(o => value === this.getOptionValue(o));
287
- }
288
- return null;
289
- }
290
- setColumnData(options, index) {
291
- if (!this.arrayEquals(this.columns[index], options)) {
292
- this.columns[index] = options;
293
- if (index < this.columns.length - 1) {
294
- this.columns = this.columns.slice(0, index + 1);
295
- }
296
- }
297
- }
298
- getSubmitValue(originOptions) {
299
- const values = [];
300
- (originOptions || []).forEach(option => {
301
- values.push(this.getOptionValue(option));
302
- });
303
- return values;
304
- }
305
- removeSelectedItem(item) {
306
- const selectedItems = this.selectionModel.selected;
307
- const currentItem = selectedItems.find(i => {
308
- return helpers.shallowEqual(i.thyValue, item.thyValue);
309
- });
310
- this.deselectOption(currentItem);
311
- this.selectionModel.deselect(currentItem);
312
- // update selectedOptions
313
- const updatedSelectedItems = this.selectionModel.selected;
314
- if (isArray(updatedSelectedItems) && updatedSelectedItems.length) {
315
- this.selectedOptions = updatedSelectedItems[updatedSelectedItems.length - 1].thyRawValue.value;
316
- }
317
- this.valueChange$.next();
318
- }
319
- resetSearch() {
320
- this.searchResultList = [];
321
- this.leafNodes = [];
322
- this.flattenOptions = [];
323
- }
324
- clearSelection() {
325
- this.labelRenderText = '';
326
- this.selectedOptions = [];
327
- this.activatedOptions = [];
328
- this.deselectAllSelected();
329
- }
330
- deselectAllSelected() {
331
- const selectedOptions = this.selectionModel.selected;
332
- selectedOptions.forEach(item => this.deselectOption(item));
333
- this.selectionModel.clear();
334
- this.valueChange$.next();
335
- }
336
- deselectOption(option) {
337
- const value = option.thyRawValue.value;
338
- value.forEach(item => {
339
- if (item.isLeaf && item.selected) {
340
- set(item, 'selected', false);
341
- }
342
- });
343
- }
344
- selectOption(option, index) {
345
- this.selectedOptions = this.activatedOptions;
346
- this.updatePrevSelectedOptions(option, false, index);
347
- if (option.selected) {
348
- this.buildDisplayLabel();
349
- }
350
- else {
351
- const selectedItems = this.selectionModel.selected;
352
- const currentItem = selectedItems.find(item => {
353
- if (item.thyRawValue.value.length - 1 === index) {
354
- const selectedItem = helpers.get(item, `thyRawValue.value.${index}`);
355
- return helpers.shallowEqual(selectedItem, option);
356
- }
357
- else {
358
- return false;
359
- }
360
- });
361
- this.selectionModel.deselect(currentItem);
362
- }
363
- this.valueChange$.next();
364
- }
365
- addSelectedState(selectOptions) {
366
- if (this.cascaderOptions.isMultiple && this.cascaderOptions.isOnlySelectLeaf) {
367
- selectOptions.forEach(opt => {
368
- if (opt.isLeaf) {
369
- opt.selected = true;
370
- set(opt, 'selected', true);
371
- }
372
- });
373
- this.addParentSelectedState(selectOptions);
374
- }
375
- }
376
- addParentSelectedState(selectOptions) {
377
- selectOptions.forEach(opt => {
378
- if (opt?.children?.length && opt.children.every(i => i.selected)) {
379
- opt.selected = true;
380
- set(opt, 'selected', true);
381
- if (opt.parent) {
382
- this.addParentSelectedState([opt.parent]);
383
- }
384
- }
385
- });
386
- }
387
- buildDisplayLabel() {
388
- const selectedOptions = [...this.selectedOptions];
389
- const labels = selectedOptions.map(o => this.getOptionLabel(o));
390
- if (labels.length === 0) {
391
- return;
392
- }
393
- let labelRenderContext;
394
- let labelRenderText;
395
- if (this.cascaderOptions.isLabelRenderTemplate) {
396
- labelRenderContext = { labels, selectedOptions };
397
- }
398
- else {
399
- labelRenderText = defaultDisplayRender.call(this, labels, selectedOptions);
400
- this.labelRenderText = labelRenderText;
401
- }
402
- if (this.labelRenderText || this.cascaderOptions.isLabelRenderTemplate) {
403
- const selectedData = {
404
- thyRawValue: {
405
- value: selectedOptions,
406
- labelText: labelRenderText,
407
- labelRenderContext: labelRenderContext
408
- },
409
- thyValue: labels,
410
- thyLabelText: labelRenderText
411
- };
412
- this.selectionModel.select(selectedData);
413
- }
414
- }
415
- writeCascaderValue(value) {
416
- if (!this.selectionModel) {
417
- this.initSelectionModel(this.cascaderOptions.isMultiple);
418
- }
419
- if (!this.cascaderOptions.isMultiple) {
420
- const vs = (this.defaultValue = this.toArray(value));
421
- if (vs.length) {
422
- this.initOptions(0);
423
- }
424
- else {
425
- this.value = vs;
426
- this.activatedOptions = [];
427
- this.afterWriteValue();
428
- }
429
- }
430
- else {
431
- const values = this.toArray(value);
432
- this.selectionModel.clear();
433
- values.forEach(item => {
434
- const vs = (this.defaultValue = this.toArray(item));
435
- if (vs.length) {
436
- this.initOptions(0);
437
- }
438
- else {
439
- this.value = vs;
440
- this.activatedOptions = [];
441
- this.afterWriteValue();
442
- }
443
- });
444
- }
445
- }
446
- afterWriteValue() {
447
- this.selectedOptions = this.activatedOptions;
448
- this.value = this.getSubmitValue(this.selectedOptions);
449
- this.addSelectedState(this.selectedOptions);
450
- this.buildDisplayLabel();
451
- }
452
- isActivatedOption(option, index) {
453
- const activeOpt = this.activatedOptions[index];
454
- return activeOpt === option;
455
- }
456
- isHalfSelectedOption(option, index) {
457
- if (this.cascaderOptions.isMultiple &&
458
- !option.selected &&
459
- this.cascaderOptions.isOnlySelectLeaf &&
460
- !option.isLeaf &&
461
- !this.checkSelectedStatus(option, false) &&
462
- !helpers.isEmpty(option.children)) {
463
- return true;
464
- }
465
- return false;
466
- }
467
- getValues() {
468
- let selectedItems;
469
- const selected = this.selectionModel.selected;
470
- selectedItems = selected.map(item => this.getSubmitValue(item.thyRawValue.value));
471
- return this.cascaderOptions?.isMultiple ? selectedItems : (selectedItems[0] ?? selectedItems);
472
- }
473
- updatePrevSelectedOptions(option, isActivateInit, index) {
474
- if (isActivateInit) {
475
- this.handleActivateInit(option);
476
- }
477
- else {
478
- if (!this.cascaderOptions.isMultiple) {
479
- this.clearPrevSelectedOptions();
480
- }
481
- set(option, 'selected', this.isSelected(option, index));
482
- if (this.cascaderOptions.isOnlySelectLeaf && this.cascaderOptions.isMultiple && option.parent) {
483
- this.updatePrevSelectedOptions(option.parent, false, index - 1);
484
- }
485
- }
486
- this.prevSelectedOptions.add(option);
487
- }
488
- handleActivateInit(option) {
489
- if (isArray(this.customOptions) && this.customOptions.length > 0) {
490
- const valueKey = this.cascaderOptions.valueProperty;
491
- this.customOptions.some(item => get(item, valueKey) == get(option, valueKey)) && set(option, 'selected', true);
492
- }
493
- if (this.cascaderOptions.isOnlySelectLeaf && option.isLeaf) {
494
- set(option, 'selected', true);
495
- }
496
- }
497
- isSelected(option, index) {
498
- return this.cascaderOptions.isOnlySelectLeaf && !option.isLeaf && this.cascaderOptions.isMultiple
499
- ? this.isSelectedOption(option, index)
500
- : !this.isSelectedOption(option, index);
501
- }
502
- clearPrevSelectedOptions() {
503
- const prevSelectedOptions = Array.from(this.prevSelectedOptions);
504
- while (prevSelectedOptions.length) {
505
- set(prevSelectedOptions.pop(), 'selected', false);
506
- }
507
- this.prevSelectedOptions = new Set([]);
508
- }
509
- getOptionLabel(option) {
510
- return option[this.cascaderOptions.labelProperty || 'label'];
511
- }
512
- getOptionValue(option) {
513
- return option[this.cascaderOptions.valueProperty || 'value'];
514
- }
515
- removeCustomOption() {
516
- if (!isArray(this.customOptions) || this.customOptions.length === 0) {
517
- return;
518
- }
519
- let selectedCustomOptions = this.getSelectedCustomOptions();
520
- selectedCustomOptions.forEach(item => {
521
- this.removeSelectedItem(item);
522
- });
523
- }
524
- getSelectedCustomOptions() {
525
- const selected = this.cascaderOptions.isMultiple ? this.selectionModel.selected : this.selectionModel.selected[0];
526
- if (!isArray(selected)) {
527
- return [];
528
- }
529
- const valueKey = this.cascaderOptions.valueProperty;
530
- return selected.filter(item => {
531
- const selectedId = get(item, `thyRawValue.value.0.${valueKey}`);
532
- return this.customOptions.some(option => get(option, valueKey) === selectedId);
533
- });
534
- }
535
- toArray(value) {
536
- if (value == null) {
537
- return [];
538
- }
539
- else if (!Array.isArray(value)) {
540
- return [value];
541
- }
542
- else {
543
- return value;
544
- }
545
- }
546
- arrayEquals(array1, array2) {
547
- if (!Array.isArray(array1) || !Array.isArray(array2) || array1.length !== array2.length) {
548
- return false;
549
- }
550
- return array1.every((element, index) => element === array2[index]);
551
- }
552
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThyCascaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
553
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThyCascaderService }); }
554
- }
555
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThyCascaderService, decorators: [{
556
- type: Injectable
557
- }] });
558
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jYXNjYWRlci9jYXNjYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUVuRCxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRS9EOztHQUVHO0FBRUgsTUFBTSxPQUFPLGtCQUFrQjtJQUQvQjtRQUlXLFlBQU8sR0FBMEIsRUFBRSxDQUFDO1FBYXBDLG9CQUFlLEdBQXdCLEVBQUUsQ0FBQztRQUUxQyxxQkFBZ0IsR0FBd0IsRUFBRSxDQUFDO1FBSTNDLG1CQUFjLEdBQThCLEVBQUUsQ0FBQztRQUUvQyxjQUFTLEdBQThCLEVBQUUsQ0FBQztRQUUxQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLHFCQUFnQixHQUE4QixFQUFFLENBQUM7UUFNaEQsd0JBQW1CLEdBQTJCLElBQUksR0FBRyxFQUFxQixDQUFDO1FBRTVFLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztLQXduQjdDO0lBdG5CVSxtQkFBbUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDekIsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNMLE1BQU0sa0JBQWtCLEdBQUc7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDNUQscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUU7YUFDdkQsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sa0JBQWtCLENBQUM7UUFDOUIsQ0FBQyxDQUFDLEVBQ0YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUNwQixDQUFDO0lBQ04sQ0FBQztJQUVNLGtCQUFrQixDQUFDLE9BT3pCO1FBQ0csSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQy9ELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0wsQ0FBQztJQUVNLGtCQUFrQixDQUFDLFVBQW9CO1FBQzFDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQThCO1FBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxXQUFvQjtRQUM1QyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoRCxPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDNUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFhO1FBQzVCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEUsSUFBSSxFQUFFLENBQUM7UUFDWCxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXLENBQ2QsTUFBeUIsRUFDekIsS0FBYSxFQUNiLEtBQXNCLEVBQ3RCLFFBQTZEO1FBRTdELElBQUksTUFBTSxFQUFFLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkQsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVuRyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3pHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEUsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0wsQ0FBQztJQUVNLGVBQWUsQ0FDbEIsTUFBeUIsRUFDekIsS0FBYSxFQUNiLE1BQWUsRUFDZixlQUF3QixJQUFJLEVBQzVCLFFBQTZEO1FBRTdELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztZQUMxRCxJQUNJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFDekIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxFQUN2SCxDQUFDO2dCQUNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyRCxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN0QixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkQsQ0FBQzthQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELElBQUksTUFBTSxFQUFFLENBQUM7WUFDVCxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUFDLE1BQXlCLEVBQUUsS0FBYSxFQUFFLE9BQW9CLEVBQUUsT0FBb0I7UUFDckcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckQsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUV0QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUM3QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsRUFDeEQsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQzNELENBQUM7SUFDTixDQUFDO0lBRU8scUJBQXFCLENBQUMsTUFBeUIsRUFBRSxLQUFhLEVBQUUsT0FBb0I7UUFDeEYsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV4QyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztJQUNMLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUF5QixFQUFFLEtBQWEsRUFBRSxPQUFvQjtRQUN4RixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBRXJCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQWEsRUFBRSxLQUFVO1FBQzVDLElBQUksTUFBeUIsQ0FBQztRQUM5QixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ3RHLENBQUM7UUFDRCxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDVixNQUFNO2dCQUNGLE9BQU8sS0FBSyxLQUFLLFFBQVE7b0JBQ3JCLENBQUMsQ0FBQyxLQUFLO29CQUNQLENBQUMsQ0FBQzt3QkFDSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLO3dCQUMzRCxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLElBQUksT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLO3FCQUM5RCxDQUFDO1FBQ2hCLENBQUM7UUFDRCxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVNLGdCQUFnQixDQUFDLE1BQXlCLEVBQUUsS0FBYTtRQUM1RCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEQsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7WUFDbEQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO29CQUM5QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxxQkFBcUIsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDckUsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE9BQU8sS0FBSyxDQUFDO2dCQUNqQixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FDckIsTUFBeUIsRUFDekIsS0FBYSxFQUNiLFFBQWlCLEVBQ2pCLFFBQTZEO1FBRTdELE1BQU0sUUFBUSxHQUdSLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUUzQixPQUFPLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQyxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvQyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXLENBQ2YsTUFBeUIsRUFDekIsS0FBYSxFQUNiLFFBQWlCO1FBS2pCLElBQUksUUFBUSxHQUdOLEVBQUUsQ0FBQztRQUNULElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0IsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUM1QixJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUMzRCxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNWLE1BQU0sRUFBRSxXQUFXO3dCQUNuQixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUM7cUJBQ25CLENBQUMsQ0FBQztnQkFDUCxDQUFDO3FCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzdCLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDbkYsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxVQUFrQjtRQUNuQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVPLGNBQWMsQ0FDbEIsWUFBdUIsRUFDdkIsZUFBcUIsRUFBRSxFQUN2QixrQkFBdUMsRUFBRSxFQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakQsTUFBTSxLQUFLLEdBQWEsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzVGLE1BQU0sU0FBUyxHQUFTLENBQUMsR0FBRyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDMUQsTUFBTSxZQUFZLEdBQXdCLENBQUMsR0FBRyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXJFLE1BQU0sSUFBSSxHQUFHO2dCQUNULFNBQVMsRUFBRSxLQUFLO2dCQUNoQixTQUFTO2dCQUNULFFBQVEsRUFBRSxVQUFVO2dCQUNwQixXQUFXLEVBQUUsWUFBWTtnQkFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDMUIsQ0FBQztZQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUF1QyxFQUFFLFVBQWtCO1FBQ25GLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssbUJBQW1CLENBQUMsTUFBeUIsRUFBRSxVQUFtQjtRQUN0RSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUM3RSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBQ0QsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNySCxPQUFPLEtBQUssQ0FBQztZQUNqQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sS0FBSyxDQUFDO1lBQ2pCLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLFVBQVUsQ0FBQyxNQUFXLEVBQUUsS0FBYTtRQUN6QyxNQUFNLE9BQU8sR0FBd0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxLQUFLLEdBQUcsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDaEYsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxPQUE0QixFQUFFLEtBQWE7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQzlCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLGFBQWtDO1FBQ3JELE1BQU0sTUFBTSxHQUFVLEVBQUUsQ0FBQztRQUN6QixDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sa0JBQWtCLENBQUMsSUFBc0I7UUFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7UUFDbkQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QyxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLHlCQUF5QjtRQUN6QixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQzFELElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUNuRyxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLGNBQWM7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQ3JELGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBd0I7UUFDM0MsTUFBTSxLQUFLLEdBQXdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQzVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFlBQVksQ0FBQyxNQUF5QixFQUFFLEtBQWE7UUFDeEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDN0MsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckQsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztZQUNuRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMxQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQzlDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLHFCQUFxQixLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUNyRSxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osT0FBTyxLQUFLLENBQUM7Z0JBQ2pCLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxhQUFrQztRQUN2RCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzRSxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDYixHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDcEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQixDQUFDLGFBQWtDO1FBQzdELGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUMvRCxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDcEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFhLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxrQkFBa0IsQ0FBQztRQUN2QixJQUFJLGVBQWUsQ0FBQztRQUVwQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QyxrQkFBa0IsR0FBRyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNKLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNyRSxNQUFNLFlBQVksR0FBcUI7Z0JBQ25DLFdBQVcsRUFBRTtvQkFDVCxLQUFLLEVBQUUsZUFBZTtvQkFDdEIsU0FBUyxFQUFFLGVBQWU7b0JBQzFCLGtCQUFrQixFQUFFLGtCQUFrQjtpQkFDekM7Z0JBQ0QsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLFlBQVksRUFBRSxlQUFlO2FBQ2hDLENBQUM7WUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQVU7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNyRCxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNsQixNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzdDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0saUJBQWlCLENBQUMsTUFBeUIsRUFBRSxLQUFhO1FBQzdELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxPQUFPLFNBQVMsS0FBSyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVNLG9CQUFvQixDQUFDLE1BQXlCLEVBQUUsS0FBYTtRQUNoRSxJQUNJLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVTtZQUMvQixDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCO1lBQ3JDLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDZCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBQ3hDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ25DLENBQUM7WUFDQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVNLFNBQVM7UUFDWixJQUFJLGFBQW9CLENBQUM7UUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7UUFDOUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxNQUF5QixFQUFFLGNBQXVCLEVBQUUsS0FBYztRQUNoRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNwQyxDQUFDO1lBRUQsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUV4RCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM1RixJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBeUI7UUFDaEQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO1lBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkgsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekQsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUM7SUFFTyxVQUFVLENBQUMsTUFBeUIsRUFBRSxLQUFjO1FBQ3hELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVO1lBQzdGLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTyx3QkFBd0I7UUFDNUIsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBeUI7UUFDNUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUF5QjtRQUM1QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU0sa0JBQWtCO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xFLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUM1RCxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHdCQUF3QjtRQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xILElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNyQixPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQztRQUNwRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSx1QkFBdUIsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNoRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPLENBQUksS0FBYztRQUNyQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFJLE1BQVcsRUFBRSxNQUFXO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0RixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7K0dBM3BCUSxrQkFBa0I7bUhBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElkIH0gZnJvbSAnQHRldGh5cy9jZGsvaW1tdXRhYmxlJztcbmltcG9ydCB7IFNlbGVjdE9wdGlvbkJhc2UgfSBmcm9tICduZ3gtdGV0aHlzL3NoYXJlZCc7XG5pbXBvcnQgeyBoZWxwZXJzLCBpc0FycmF5LCBpc0VtcHR5LCBpc1VuZGVmaW5lZE9yTnVsbCwgc2V0LCBnZXQgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUaHlDYXNjYWRlck9wdGlvbiwgVGh5Q2FzY2FkZXJTZWFyY2hPcHRpb24gfSBmcm9tICcuL3R5cGVzJztcbmNvbnN0IGRlZmF1bHREaXNwbGF5UmVuZGVyID0gKGxhYmVsOiBhbnkpID0+IGxhYmVsLmpvaW4oJyAvICcpO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGh5Q2FzY2FkZXJTZXJ2aWNlIHtcbiAgICBwdWJsaWMgc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPFNlbGVjdE9wdGlvbkJhc2U+O1xuXG4gICAgcHVibGljIGNvbHVtbnM6IFRoeUNhc2NhZGVyT3B0aW9uW11bXSA9IFtdO1xuXG4gICAgcHVibGljIGN1c3RvbU9wdGlvbnM6IFRoeUNhc2NhZGVyT3B0aW9uW107XG5cbiAgICBwdWJsaWMgY2FzY2FkZXJPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgICAgIHZhbHVlUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgICAgIGlzTXVsdGlwbGU/OiBib29sZWFuO1xuICAgICAgICBpc09ubHlTZWxlY3RMZWFmPzogYm9vbGVhbjtcbiAgICAgICAgaXNMYWJlbFJlbmRlclRlbXBsYXRlPzogYm9vbGVhbjtcbiAgICAgICAgbG9hZERhdGE/OiAobm9kZTogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4PzogbnVtYmVyKSA9PiBQcm9taXNlTGlrZTxhbnk+O1xuICAgIH07XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRPcHRpb25zOiBUaHlDYXNjYWRlck9wdGlvbltdID0gW107XG5cbiAgICBwdWJsaWMgYWN0aXZhdGVkT3B0aW9uczogVGh5Q2FzY2FkZXJPcHRpb25bXSA9IFtdO1xuXG4gICAgcHVibGljIGxhYmVsUmVuZGVyVGV4dDogc3RyaW5nO1xuXG4gICAgcHVibGljIGZsYXR0ZW5PcHRpb25zOiBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbltdID0gW107XG5cbiAgICBwdWJsaWMgbGVhZk5vZGVzOiBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbltdID0gW107XG5cbiAgICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc2VhcmNoUmVzdWx0TGlzdDogVGh5Q2FzY2FkZXJTZWFyY2hPcHRpb25bXSA9IFtdO1xuXG4gICAgcHVibGljIGRlZmF1bHRWYWx1ZTogYW55W107XG5cbiAgICBwdWJsaWMgdmFsdWU6IGFueVtdO1xuXG4gICAgcHJpdmF0ZSBwcmV2U2VsZWN0ZWRPcHRpb25zOiBTZXQ8VGh5Q2FzY2FkZXJPcHRpb24+ID0gbmV3IFNldDxUaHlDYXNjYWRlck9wdGlvbj4oKTtcblxuICAgIHB1YmxpYyB2YWx1ZUNoYW5nZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHVibGljIGNhc2NhZGVyVmFsdWVDaGFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQ2hhbmdlJC5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlcygpLFxuICAgICAgICAgICAgICAgICAgICBpc1ZhbHVlRXF1YWw6IHRoaXMuYXJyYXlFcXVhbHModGhpcy52YWx1ZSwgdGhpcy5nZXRWYWx1ZXMoKSksXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0aW9uTW9kZWxFbXB0eTogdGhpcy5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVDaGFuZ2VPcHRpb25zO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDYXNjYWRlck9wdGlvbnMob3B0aW9uczoge1xuICAgICAgICBsYWJlbFByb3BlcnR5Pzogc3RyaW5nO1xuICAgICAgICB2YWx1ZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgICAgICBpc011bHRpcGxlPzogYm9vbGVhbjtcbiAgICAgICAgaXNPbmx5U2VsZWN0TGVhZj86IGJvb2xlYW47XG4gICAgICAgIGlzTGFiZWxSZW5kZXJUZW1wbGF0ZT86IGJvb2xlYW47XG4gICAgICAgIGxvYWREYXRhPzogKG5vZGU6IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleD86IG51bWJlcikgPT4gUHJvbWlzZUxpa2U8YW55PjtcbiAgICB9KSB7XG4gICAgICAgIHRoaXMuY2FzY2FkZXJPcHRpb25zID0geyAuLi50aGlzLmNhc2NhZGVyT3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgICAgICBpZiAodGhpcy5jYXNjYWRlck9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzTXVsdGlwbGUnKSkge1xuICAgICAgICAgICAgdGhpcy5pbml0U2VsZWN0aW9uTW9kZWwodGhpcy5jYXNjYWRlck9wdGlvbnMuaXNNdWx0aXBsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdFNlbGVjdGlvbk1vZGVsKGlzTXVsdGlwbGU/OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsKGlzTXVsdGlwbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRDb2x1bW5zKGNvbHVtbnM6IFRoeUNhc2NhZGVyT3B0aW9uW11bXSkge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0QWN0aXZhdGVkT3B0aW9ucyhtZW51VmlzaWJsZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoaXNFbXB0eSh0aGlzLnNlbGVjdGVkT3B0aW9ucykgfHwgIW1lbnVWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRPcHRpb25zID0gWy4uLnRoaXMuc2VsZWN0ZWRPcHRpb25zXTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRPcHRpb25zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkoaXRlbS5jaGlsZHJlbikgJiYgIWl0ZW0uaXNMZWFmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2luZGV4ICsgMV0gPSBpdGVtLmNoaWxkcmVuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdE9wdGlvbnMoaW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCB2cyA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICBjb25zdCBsb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU9uSW5pdChpbmRleCwgdnNbaW5kZXhdKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IHZzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRPcHRpb25zKGluZGV4ICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHZzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyV3JpdGVWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnNbaW5kZXhdPy5sZW5ndGggfHwgIXRoaXMuY2FzY2FkZXJPcHRpb25zLmxvYWREYXRhKSB7XG4gICAgICAgICAgICBsb2FkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5hY3RpdmF0ZWRPcHRpb25zW2luZGV4IC0gMV0gfHwge307XG4gICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbihub2RlLCBpbmRleCAtIDEsIGxvYWQsIHRoaXMuYWZ0ZXJXcml0ZVZhbHVlLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrT3B0aW9uKFxuICAgICAgICBvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLFxuICAgICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgICBldmVudDogRXZlbnQgfCBib29sZWFuLFxuICAgICAgICBzZWxlY3RGbj86IChvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICAgIGlmIChvcHRpb24/LmRpc2FibGVkICYmICF0aGlzLmNhc2NhZGVyT3B0aW9ucy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1NlbGVjdCA9IGV2ZW50IGluc3RhbmNlb2YgRXZlbnQgPyAhdGhpcy5jYXNjYWRlck9wdGlvbnMuaXNNdWx0aXBsZSAmJiBvcHRpb24uaXNMZWFmIDogdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5jYXNjYWRlck9wdGlvbnMuaXNNdWx0aXBsZSAmJiAhb3B0aW9uLmlzTGVhZiAmJiB0aGlzLmNhc2NhZGVyT3B0aW9ucy5pc09ubHlTZWxlY3RMZWFmICYmIGlzU2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUFsbENoaWxkcmVuKG9wdGlvbiwgaW5kZXgsIGV2ZW50IGFzIGJvb2xlYW4sIHNlbGVjdEZuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlT3B0aW9uKG9wdGlvbiwgaW5kZXgsIGlzU2VsZWN0LCB0cnVlLCBzZWxlY3RGbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWN0aXZlT3B0aW9uKFxuICAgICAgICBvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLFxuICAgICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgICBzZWxlY3Q6IGJvb2xlYW4sXG4gICAgICAgIGxvYWRDaGlsZHJlbjogYm9vbGVhbiA9IHRydWUsXG4gICAgICAgIHNlbGVjdEZuPzogKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRPcHRpb25zW2luZGV4XSA9IG9wdGlvbjtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbk9wdGlvbiA9IHRoaXMuYWN0aXZhdGVkT3B0aW9uc1tpICsgMV0/LnBhcmVudDtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5hY3RpdmF0ZWRPcHRpb25zW2ldIHx8XG4gICAgICAgICAgICAgICAgb3JpZ2luT3B0aW9uPy5bdGhpcy5jYXNjYWRlck9wdGlvbnMudmFsdWVQcm9wZXJ0eV0gIT09IHRoaXMuYWN0aXZhdGVkT3B0aW9uc1tpXT8uW3RoaXMuY2FzY2FkZXJPcHRpb25zLnZhbHVlUHJvcGVydHldXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlZE9wdGlvbnNbaV0gPSBvcmlnaW5PcHRpb24gPz8gdGhpcy5hY3RpdmF0ZWRPcHRpb25zW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA8IHRoaXMuYWN0aXZhdGVkT3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlZE9wdGlvbnMgPSB0aGlzLmFjdGl2YXRlZE9wdGlvbnMuc2xpY2UoMCwgaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheShvcHRpb24uY2hpbGRyZW4pICYmIG9wdGlvbi5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIG9wdGlvbi5pc0xlYWYgPSBmYWxzZTtcbiAgICAgICAgICAgIG9wdGlvbi5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IChjaGlsZC5wYXJlbnQgPSBvcHRpb24pKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29sdW1uRGF0YShvcHRpb24uY2hpbGRyZW4sIGluZGV4ICsgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbi5pc0xlYWYgJiYgbG9hZENoaWxkcmVuKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbihvcHRpb24sIGluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA8IHRoaXMuY29sdW1ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuc2xpY2UoMCwgaW5kZXggKyAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWxlY3QpIHtcbiAgICAgICAgICAgIHNlbGVjdEZuKG9wdGlvbiwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkQ2hpbGRyZW4ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlciwgc3VjY2Vzcz86ICgpID0+IHZvaWQsIGZhaWx1cmU/OiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYXNjYWRlck9wdGlvbnM/LmxvYWREYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnNldENvbHVtbkRhdGEob3B0aW9uLmNoaWxkcmVuIHx8IFtdLCBpbmRleCArIDEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuY2FzY2FkZXJPcHRpb25zLmxvYWREYXRhKG9wdGlvbiwgaW5kZXgpLnRoZW4oXG4gICAgICAgICAgICAoKSA9PiB0aGlzLmhhbmRsZUxvYWREYXRhU3VjY2VzcyhvcHRpb24sIGluZGV4LCBzdWNjZXNzKSxcbiAgICAgICAgICAgICgpID0+IHRoaXMuaGFuZGxlTG9hZERhdGFGYWlsdXJlKG9wdGlvbiwgaW5kZXgsIGZhaWx1cmUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVMb2FkRGF0YVN1Y2Nlc3Mob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlciwgc3VjY2Vzcz86ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgb3B0aW9uLmxvYWRpbmcgPSB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIG9wdGlvbi5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IChjaGlsZC5wYXJlbnQgPSBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBvcHRpb24pKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29sdW1uRGF0YShvcHRpb24uY2hpbGRyZW4sIGluZGV4ICsgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgc3VjY2VzcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVMb2FkRGF0YUZhaWx1cmUob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlciwgZmFpbHVyZT86ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgb3B0aW9uLmxvYWRpbmcgPSB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBvcHRpb24uaXNMZWFmID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZmFpbHVyZSkge1xuICAgICAgICAgICAgZmFpbHVyZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZU9uSW5pdChpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGxldCBvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uO1xuICAgICAgICBpZiAoaXNBcnJheSh0aGlzLmN1c3RvbU9wdGlvbnMpICYmIHRoaXMuY3VzdG9tT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvcHRpb24gPSB0aGlzLmN1c3RvbU9wdGlvbnMuZmluZChpdGVtID0+IGdldChpdGVtLCB0aGlzLmNhc2NhZGVyT3B0aW9ucy52YWx1ZVByb3BlcnR5KSA9PT0gdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZE9yTnVsbChvcHRpb24pKSB7XG4gICAgICAgICAgICBvcHRpb24gPSB0aGlzLmZpbmRPcHRpb24odmFsdWUsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbikge1xuICAgICAgICAgICAgb3B0aW9uID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtgJHt0aGlzLmNhc2NhZGVyT3B0aW9ucy52YWx1ZVByb3BlcnR5IHx8ICd2YWx1ZSd9YF06IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYCR7dGhpcy5jYXNjYWRlck9wdGlvbnMubGFiZWxQcm9wZXJ0eSB8fCAnbGFiZWwnfWBdOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVQcmV2U2VsZWN0ZWRPcHRpb25zKG9wdGlvbiwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlT3B0aW9uKG9wdGlvbiwgaW5kZXgsIGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzU2VsZWN0ZWRPcHRpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5jYXNjYWRlck9wdGlvbnM/LmlzT25seVNlbGVjdExlYWYpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb24uaXNMZWFmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tTZWxlY3RlZFN0YXR1cyhvcHRpb24sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRzID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDtcbiAgICAgICAgICAgIGNvbnN0IGFwcGVhckluZGV4ID0gc2VsZWN0ZWRPcHRzLmZpbmRJbmRleChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50aHlSYXdWYWx1ZS52YWx1ZS5sZW5ndGggLSAxID09PSBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBoZWxwZXJzLmdldChpdGVtLCBgdGh5UmF3VmFsdWUudmFsdWUuJHtpbmRleH1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlcnMuc2hhbGxvd0VxdWFsKHNlbGVjdGVkSXRlbSwgb3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gYXBwZWFySW5kZXggPj0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlQWxsQ2hpbGRyZW4oXG4gICAgICAgIG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sXG4gICAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICAgIHNlbGVjdGVkOiBib29sZWFuLFxuICAgICAgICBzZWxlY3RGbj86IChvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbExlYWZzOiB7XG4gICAgICAgICAgICBvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uO1xuICAgICAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgfVtdID0gdGhpcy5nZXRBbGxMZWFmcyhvcHRpb24sIGluZGV4LCBzZWxlY3RlZCk7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuXG4gICAgICAgIHdoaWxlIChhbGxMZWFmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3B0aW9uLCBpbmRleCB9ID0gYWxsTGVhZnMuc2hpZnQoKTtcbiAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9ICFzZWxlY3RlZDtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlT3B0aW9uKG9wdGlvbiwgaW5kZXgsIHRydWUsIG51bGwsIHNlbGVjdEZuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hY3RpdmF0ZWRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFjdGl2YXRlZE9wdGlvbnNbaV07XG4gICAgICAgICAgICBpZiAoaXNBcnJheShvcHRpb24uY2hpbGRyZW4pICYmIG9wdGlvbi5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbHVtbkRhdGEob3B0aW9uLmNoaWxkcmVuLCBpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbExlYWZzKFxuICAgICAgICBvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLFxuICAgICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgICBzZWxlY3RlZDogYm9vbGVhblxuICAgICk6IHtcbiAgICAgICAgb3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbjtcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICB9W10ge1xuICAgICAgICBsZXQgYWxsTGVhZnM6IHtcbiAgICAgICAgICAgIG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb247XG4gICAgICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICB9W10gPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkT3B0aW9uIG9mIG9wdGlvbi5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNoaWxkT3B0aW9uLnBhcmVudCA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRPcHRpb24uaXNMZWFmICYmICFjaGlsZE9wdGlvbi5zZWxlY3RlZCA9PT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsTGVhZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb246IGNoaWxkT3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4ICsgMVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFjaGlsZE9wdGlvbi5pc0xlYWYpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsTGVhZnMgPSBhbGxMZWFmcy5jb25jYXQodGhpcy5nZXRBbGxMZWFmcyhjaGlsZE9wdGlvbiwgaW5kZXggKyAxLCBzZWxlY3RlZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxsTGVhZnM7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaEluTG9jYWwoc2VhcmNoVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9yRWFjaENvbHVtbnMoKTtcblxuICAgICAgICB0aGlzLnNldFNlYXJjaFJlc3VsdExpc3QodGhpcy5jYXNjYWRlck9wdGlvbnMuaXNPbmx5U2VsZWN0TGVhZiA/IHRoaXMubGVhZk5vZGVzIDogdGhpcy5mbGF0dGVuT3B0aW9ucywgc2VhcmNoVGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JFYWNoQ29sdW1ucyhcbiAgICAgICAgY3VycmVudExhYmVsPzogc3RyaW5nW10sXG4gICAgICAgIGN1cnJlbnRWYWx1ZTogSWRbXSA9IFtdLFxuICAgICAgICBjdXJyZW50Um93VmFsdWU6IFRoeUNhc2NhZGVyT3B0aW9uW10gPSBbXSxcbiAgICAgICAgbGlzdCA9IHRoaXMuY29sdW1uc1swXVxuICAgICkge1xuICAgICAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJPcHRpb25MYWJlbCA9IHRoaXMuZ2V0T3B0aW9uTGFiZWwoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBjdXJPcHRpb25WYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbDogc3RyaW5nW10gPSBjdXJyZW50TGFiZWwgPyBbLi4uY3VycmVudExhYmVsLCBjdXJPcHRpb25MYWJlbF0gOiBbY3VyT3B0aW9uTGFiZWxdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVMaXN0OiBJZFtdID0gWy4uLmN1cnJlbnRWYWx1ZSwgY3VyT3B0aW9uVmFsdWVdO1xuICAgICAgICAgICAgY29uc3Qgcm93VmFsdWVMaXN0OiBUaHlDYXNjYWRlck9wdGlvbltdID0gWy4uLmN1cnJlbnRSb3dWYWx1ZSwgaXRlbV07XG4gICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkT3B0aW9uKGl0ZW0sIHZhbHVlTGlzdC5sZW5ndGggLSAxKTtcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgICAgICAgICBsYWJlbExpc3Q6IGxhYmVsLFxuICAgICAgICAgICAgICAgIHZhbHVlTGlzdCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICB0aHlSb3dWYWx1ZTogcm93VmFsdWVMaXN0LFxuICAgICAgICAgICAgICAgIGlzTGVhZjogaXRlbS5pc0xlYWYsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWRcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdHRlbk9wdGlvbnMucHVzaChub2RlKTtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoQ29sdW1ucyhsYWJlbCwgdmFsdWVMaXN0LCByb3dWYWx1ZUxpc3QsIGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlYWZOb2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNlYXJjaFJlc3VsdExpc3QobGlzdE9mT3B0aW9uOiBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbltdLCBzZWFyY2hUZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRMaXN0ID0gW107XG4gICAgICAgIGxpc3RPZk9wdGlvbi5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKCFpdGVtLmRpc2FibGVkICYmIGl0ZW0uaXNMZWFmICYmIGl0ZW0ubGFiZWxMaXN0LmpvaW4oKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdExpc3QucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qOA5p+l5omA5pyJ5omA5pyJ5a2Q6aG555qE6YCJ5oup54q25oCBLCDmnInkuIDkuKrkuI3nrKblkIjpooTmnJ/vvIzlsLHnm7TmjqXov5Tlm54gZmFsc2VcbiAgICAgKiBAcGFyYW0gb3B0aW9uXG4gICAgICogQHBhcmFtIHRydWVPckZhbHNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNoZWNrU2VsZWN0ZWRTdGF0dXMob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaXNTZWxlY3RlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAob3B0aW9uLmlzTGVhZikge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9PT0gaXNTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGVscGVycy5pc0VtcHR5KG9wdGlvbi5jaGlsZHJlbikgJiYgdGhpcy5jYXNjYWRlck9wdGlvbnM/LmlzT25seVNlbGVjdExlYWYpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkT3B0aW9uIG9mIG9wdGlvbi5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2hpbGRPcHRpb24uY2hpbGRyZW4pICYmIGNoaWxkT3B0aW9uLmNoaWxkcmVuLmxlbmd0aCAmJiAhdGhpcy5jaGVja1NlbGVjdGVkU3RhdHVzKGNoaWxkT3B0aW9uLCBpc1NlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2hpbGRPcHRpb24uc2VsZWN0ZWQgPT09IGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kT3B0aW9uKG9wdGlvbjogYW55LCBpbmRleDogbnVtYmVyKTogVGh5Q2FzY2FkZXJPcHRpb24ge1xuICAgICAgICBjb25zdCBvcHRpb25zOiBUaHlDYXNjYWRlck9wdGlvbltdID0gdGhpcy5jb2x1bW5zW2luZGV4XTtcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgPyB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbikgOiBvcHRpb247XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5maW5kKG8gPT4gdmFsdWUgPT09IHRoaXMuZ2V0T3B0aW9uVmFsdWUobykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29sdW1uRGF0YShvcHRpb25zOiBUaHlDYXNjYWRlck9wdGlvbltdLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hcnJheUVxdWFscyh0aGlzLmNvbHVtbnNbaW5kZXhdLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2luZGV4XSA9IG9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmNvbHVtbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5zbGljZSgwLCBpbmRleCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWJtaXRWYWx1ZShvcmlnaW5PcHRpb25zOiBUaHlDYXNjYWRlck9wdGlvbltdKTogYW55W10ge1xuICAgICAgICBjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XG4gICAgICAgIChvcmlnaW5PcHRpb25zIHx8IFtdKS5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtKGl0ZW06IFNlbGVjdE9wdGlvbkJhc2UpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gc2VsZWN0ZWRJdGVtcy5maW5kKGkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGhlbHBlcnMuc2hhbGxvd0VxdWFsKGkudGh5VmFsdWUsIGl0ZW0udGh5VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZXNlbGVjdE9wdGlvbihjdXJyZW50SXRlbSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoY3VycmVudEl0ZW0pO1xuICAgICAgICAvLyB1cGRhdGUgc2VsZWN0ZWRPcHRpb25zXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRTZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDtcbiAgICAgICAgaWYgKGlzQXJyYXkodXBkYXRlZFNlbGVjdGVkSXRlbXMpICYmIHVwZGF0ZWRTZWxlY3RlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSB1cGRhdGVkU2VsZWN0ZWRJdGVtc1t1cGRhdGVkU2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXS50aHlSYXdWYWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRTZWFyY2goKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0TGlzdCA9IFtdO1xuICAgICAgICB0aGlzLmxlYWZOb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLmZsYXR0ZW5PcHRpb25zID0gW107XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgICB0aGlzLmxhYmVsUmVuZGVyVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmFjdGl2YXRlZE9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5kZXNlbGVjdEFsbFNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXNlbGVjdEFsbFNlbGVjdGVkKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkO1xuICAgICAgICBzZWxlY3RlZE9wdGlvbnMuZm9yRWFjaChpdGVtID0+IHRoaXMuZGVzZWxlY3RPcHRpb24oaXRlbSkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc2VsZWN0T3B0aW9uKG9wdGlvbjogU2VsZWN0T3B0aW9uQmFzZSkge1xuICAgICAgICBjb25zdCB2YWx1ZTogVGh5Q2FzY2FkZXJPcHRpb25bXSA9IG9wdGlvbi50aHlSYXdWYWx1ZS52YWx1ZTtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlzTGVhZiAmJiBpdGVtLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgc2V0KGl0ZW0sICdzZWxlY3RlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdE9wdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5hY3RpdmF0ZWRPcHRpb25zO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZTZWxlY3RlZE9wdGlvbnMob3B0aW9uLCBmYWxzZSwgaW5kZXgpO1xuICAgICAgICBpZiAob3B0aW9uLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkRGlzcGxheUxhYmVsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gc2VsZWN0ZWRJdGVtcy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnRoeVJhd1ZhbHVlLnZhbHVlLmxlbmd0aCAtIDEgPT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IGhlbHBlcnMuZ2V0KGl0ZW0sIGB0aHlSYXdWYWx1ZS52YWx1ZS4ke2luZGV4fWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVycy5zaGFsbG93RXF1YWwoc2VsZWN0ZWRJdGVtLCBvcHRpb24pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoY3VycmVudEl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFNlbGVjdGVkU3RhdGUoc2VsZWN0T3B0aW9uczogVGh5Q2FzY2FkZXJPcHRpb25bXSkge1xuICAgICAgICBpZiAodGhpcy5jYXNjYWRlck9wdGlvbnMuaXNNdWx0aXBsZSAmJiB0aGlzLmNhc2NhZGVyT3B0aW9ucy5pc09ubHlTZWxlY3RMZWFmKSB7XG4gICAgICAgICAgICBzZWxlY3RPcHRpb25zLmZvckVhY2gob3B0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmlzTGVhZikge1xuICAgICAgICAgICAgICAgICAgICBvcHQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZXQob3B0LCAnc2VsZWN0ZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuYWRkUGFyZW50U2VsZWN0ZWRTdGF0ZShzZWxlY3RPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkUGFyZW50U2VsZWN0ZWRTdGF0ZShzZWxlY3RPcHRpb25zOiBUaHlDYXNjYWRlck9wdGlvbltdKSB7XG4gICAgICAgIHNlbGVjdE9wdGlvbnMuZm9yRWFjaChvcHQgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdD8uY2hpbGRyZW4/Lmxlbmd0aCAmJiBvcHQuY2hpbGRyZW4uZXZlcnkoaSA9PiBpLnNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIG9wdC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2V0KG9wdCwgJ3NlbGVjdGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRQYXJlbnRTZWxlY3RlZFN0YXRlKFtvcHQucGFyZW50XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRGlzcGxheUxhYmVsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSBbLi4udGhpcy5zZWxlY3RlZE9wdGlvbnNdO1xuICAgICAgICBjb25zdCBsYWJlbHM6IHN0cmluZ1tdID0gc2VsZWN0ZWRPcHRpb25zLm1hcChvID0+IHRoaXMuZ2V0T3B0aW9uTGFiZWwobykpO1xuXG4gICAgICAgIGlmIChsYWJlbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGFiZWxSZW5kZXJDb250ZXh0O1xuICAgICAgICBsZXQgbGFiZWxSZW5kZXJUZXh0O1xuXG4gICAgICAgIGlmICh0aGlzLmNhc2NhZGVyT3B0aW9ucy5pc0xhYmVsUmVuZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGxhYmVsUmVuZGVyQ29udGV4dCA9IHsgbGFiZWxzLCBzZWxlY3RlZE9wdGlvbnMgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhYmVsUmVuZGVyVGV4dCA9IGRlZmF1bHREaXNwbGF5UmVuZGVyLmNhbGwodGhpcywgbGFiZWxzLCBzZWxlY3RlZE9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5sYWJlbFJlbmRlclRleHQgPSBsYWJlbFJlbmRlclRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYWJlbFJlbmRlclRleHQgfHwgdGhpcy5jYXNjYWRlck9wdGlvbnMuaXNMYWJlbFJlbmRlclRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGE6IFNlbGVjdE9wdGlvbkJhc2UgPSB7XG4gICAgICAgICAgICAgICAgdGh5UmF3VmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0OiBsYWJlbFJlbmRlclRleHQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsUmVuZGVyQ29udGV4dDogbGFiZWxSZW5kZXJDb250ZXh0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aHlWYWx1ZTogbGFiZWxzLFxuICAgICAgICAgICAgICAgIHRoeUxhYmVsVGV4dDogbGFiZWxSZW5kZXJUZXh0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3Qoc2VsZWN0ZWREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZUNhc2NhZGVyVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFNlbGVjdGlvbk1vZGVsKHRoaXMuY2FzY2FkZXJPcHRpb25zLmlzTXVsdGlwbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jYXNjYWRlck9wdGlvbnMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgY29uc3QgdnMgPSAodGhpcy5kZWZhdWx0VmFsdWUgPSB0aGlzLnRvQXJyYXkodmFsdWUpKTtcbiAgICAgICAgICAgIGlmICh2cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRPcHRpb25zKDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdnM7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZWRPcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlcldyaXRlVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMudG9BcnJheSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2cyA9ICh0aGlzLmRlZmF1bHRWYWx1ZSA9IHRoaXMudG9BcnJheShpdGVtKSk7XG4gICAgICAgICAgICAgICAgaWYgKHZzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRPcHRpb25zKDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2cztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZWRPcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJXcml0ZVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFmdGVyV3JpdGVWYWx1ZSgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSB0aGlzLmFjdGl2YXRlZE9wdGlvbnM7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFN1Ym1pdFZhbHVlKHRoaXMuc2VsZWN0ZWRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRTZWxlY3RlZFN0YXRlKHRoaXMuc2VsZWN0ZWRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5idWlsZERpc3BsYXlMYWJlbCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0FjdGl2YXRlZE9wdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU9wdCA9IHRoaXMuYWN0aXZhdGVkT3B0aW9uc1tpbmRleF07XG4gICAgICAgIHJldHVybiBhY3RpdmVPcHQgPT09IG9wdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNIYWxmU2VsZWN0ZWRPcHRpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmNhc2NhZGVyT3B0aW9ucy5pc011bHRpcGxlICYmXG4gICAgICAgICAgICAhb3B0aW9uLnNlbGVjdGVkICYmXG4gICAgICAgICAgICB0aGlzLmNhc2NhZGVyT3B0aW9ucy5pc09ubHlTZWxlY3RMZWFmICYmXG4gICAgICAgICAgICAhb3B0aW9uLmlzTGVhZiAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tTZWxlY3RlZFN0YXR1cyhvcHRpb24sIGZhbHNlKSAmJlxuICAgICAgICAgICAgIWhlbHBlcnMuaXNFbXB0eShvcHRpb24uY2hpbGRyZW4pXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZXMoKSB7XG4gICAgICAgIGxldCBzZWxlY3RlZEl0ZW1zOiBhbnlbXTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkO1xuICAgICAgICBzZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWQubWFwKGl0ZW0gPT4gdGhpcy5nZXRTdWJtaXRWYWx1ZShpdGVtLnRoeVJhd1ZhbHVlLnZhbHVlKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhc2NhZGVyT3B0aW9ucz8uaXNNdWx0aXBsZSA/IHNlbGVjdGVkSXRlbXMgOiAoc2VsZWN0ZWRJdGVtc1swXSA/PyBzZWxlY3RlZEl0ZW1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByZXZTZWxlY3RlZE9wdGlvbnMob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaXNBY3RpdmF0ZUluaXQ6IGJvb2xlYW4sIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmIChpc0FjdGl2YXRlSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3RpdmF0ZUluaXQob3B0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jYXNjYWRlck9wdGlvbnMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJQcmV2U2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldChvcHRpb24sICdzZWxlY3RlZCcsIHRoaXMuaXNTZWxlY3RlZChvcHRpb24sIGluZGV4KSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhc2NhZGVyT3B0aW9ucy5pc09ubHlTZWxlY3RMZWFmICYmIHRoaXMuY2FzY2FkZXJPcHRpb25zLmlzTXVsdGlwbGUgJiYgb3B0aW9uLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldlNlbGVjdGVkT3B0aW9ucyhvcHRpb24ucGFyZW50LCBmYWxzZSwgaW5kZXggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJldlNlbGVjdGVkT3B0aW9ucy5hZGQob3B0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUFjdGl2YXRlSW5pdChvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChpc0FycmF5KHRoaXMuY3VzdG9tT3B0aW9ucykgJiYgdGhpcy5jdXN0b21PcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gdGhpcy5jYXNjYWRlck9wdGlvbnMudmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucy5zb21lKGl0ZW0gPT4gZ2V0KGl0ZW0sIHZhbHVlS2V5KSA9PSBnZXQob3B0aW9uLCB2YWx1ZUtleSkpICYmIHNldChvcHRpb24sICdzZWxlY3RlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNhc2NhZGVyT3B0aW9ucy5pc09ubHlTZWxlY3RMZWFmICYmIG9wdGlvbi5pc0xlYWYpIHtcbiAgICAgICAgICAgIHNldChvcHRpb24sICdzZWxlY3RlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NlbGVjdGVkKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhc2NhZGVyT3B0aW9ucy5pc09ubHlTZWxlY3RMZWFmICYmICFvcHRpb24uaXNMZWFmICYmIHRoaXMuY2FzY2FkZXJPcHRpb25zLmlzTXVsdGlwbGVcbiAgICAgICAgICAgID8gdGhpcy5pc1NlbGVjdGVkT3B0aW9uKG9wdGlvbiwgaW5kZXgpXG4gICAgICAgICAgICA6ICF0aGlzLmlzU2VsZWN0ZWRPcHRpb24ob3B0aW9uLCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhclByZXZTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHByZXZTZWxlY3RlZE9wdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMucHJldlNlbGVjdGVkT3B0aW9ucyk7XG4gICAgICAgIHdoaWxlIChwcmV2U2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0KHByZXZTZWxlY3RlZE9wdGlvbnMucG9wKCksICdzZWxlY3RlZCcsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXZTZWxlY3RlZE9wdGlvbnMgPSBuZXcgU2V0KFtdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9wdGlvbkxhYmVsKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gb3B0aW9uW3RoaXMuY2FzY2FkZXJPcHRpb25zLmxhYmVsUHJvcGVydHkgfHwgJ2xhYmVsJ107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcHRpb25WYWx1ZShvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uKTogYW55IHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblt0aGlzLmNhc2NhZGVyT3B0aW9ucy52YWx1ZVByb3BlcnR5IHx8ICd2YWx1ZSddO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVDdXN0b21PcHRpb24oKSB7XG4gICAgICAgIGlmICghaXNBcnJheSh0aGlzLmN1c3RvbU9wdGlvbnMpIHx8IHRoaXMuY3VzdG9tT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWxlY3RlZEN1c3RvbU9wdGlvbnMgPSB0aGlzLmdldFNlbGVjdGVkQ3VzdG9tT3B0aW9ucygpO1xuICAgICAgICBzZWxlY3RlZEN1c3RvbU9wdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRJdGVtKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkQ3VzdG9tT3B0aW9ucygpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmNhc2NhZGVyT3B0aW9ucy5pc011bHRpcGxlID8gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZCA6IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF07XG4gICAgICAgIGlmICghaXNBcnJheShzZWxlY3RlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZUtleSA9IHRoaXMuY2FzY2FkZXJPcHRpb25zLnZhbHVlUHJvcGVydHk7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZElkID0gZ2V0KGl0ZW0sIGB0aHlSYXdWYWx1ZS52YWx1ZS4wLiR7dmFsdWVLZXl9YCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21PcHRpb25zLnNvbWUob3B0aW9uID0+IGdldChvcHRpb24sIHZhbHVlS2V5KSA9PT0gc2VsZWN0ZWRJZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRvQXJyYXk8VD4odmFsdWU6IFQgfCBUW10pOiBUW10ge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcnJheUVxdWFsczxUPihhcnJheTE6IFRbXSwgYXJyYXkyOiBUW10pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5MSkgfHwgIUFycmF5LmlzQXJyYXkoYXJyYXkyKSB8fCBhcnJheTEubGVuZ3RoICE9PSBhcnJheTIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyYXkxLmV2ZXJ5KChlbGVtZW50LCBpbmRleCkgPT4gZWxlbWVudCA9PT0gYXJyYXkyW2luZGV4XSk7XG4gICAgfVxufVxuIl19