@ng-nest/ui 18.0.5 → 18.0.7

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 (578) hide show
  1. package/checkbox/checkbox.component.d.ts +1 -1
  2. package/core/config/config.d.ts +6 -0
  3. package/esm2022/affix/affix.component.mjs +4 -4
  4. package/esm2022/affix/affix.module.mjs +4 -4
  5. package/esm2022/affix/affix.property.mjs +3 -3
  6. package/esm2022/alert/alert.component.mjs +5 -5
  7. package/esm2022/alert/alert.module.mjs +4 -4
  8. package/esm2022/alert/alert.property.mjs +3 -3
  9. package/esm2022/anchor/anchor-inner.component.mjs +3 -3
  10. package/esm2022/anchor/anchor.component.mjs +5 -5
  11. package/esm2022/anchor/anchor.module.mjs +4 -4
  12. package/esm2022/anchor/anchor.property.mjs +6 -6
  13. package/esm2022/api/api.component.mjs +4 -4
  14. package/esm2022/api/api.module.mjs +4 -4
  15. package/esm2022/auto-complete/auto-complete-portal.component.mjs +3 -3
  16. package/esm2022/auto-complete/auto-complete.component.mjs +5 -5
  17. package/esm2022/auto-complete/auto-complete.module.mjs +4 -4
  18. package/esm2022/auto-complete/auto-complete.property.mjs +3 -3
  19. package/esm2022/avatar/avatar-group.component.mjs +3 -3
  20. package/esm2022/avatar/avatar.component.mjs +5 -5
  21. package/esm2022/avatar/avatar.module.mjs +4 -4
  22. package/esm2022/avatar/avatar.property.mjs +6 -6
  23. package/esm2022/back-top/back-top.component.mjs +5 -5
  24. package/esm2022/back-top/back-top.module.mjs +4 -4
  25. package/esm2022/back-top/back-top.property.mjs +3 -3
  26. package/esm2022/badge/badge.component.mjs +5 -5
  27. package/esm2022/badge/badge.module.mjs +4 -4
  28. package/esm2022/badge/badge.property.mjs +3 -3
  29. package/esm2022/base-form/base-form.module.mjs +4 -4
  30. package/esm2022/base-form/base-form.property.mjs +6 -6
  31. package/esm2022/button/button.component.mjs +5 -5
  32. package/esm2022/button/button.module.mjs +4 -4
  33. package/esm2022/button/button.property.mjs +6 -6
  34. package/esm2022/button/buttons.component.mjs +4 -4
  35. package/esm2022/calendar/calendar.component.mjs +5 -5
  36. package/esm2022/calendar/calendar.module.mjs +4 -4
  37. package/esm2022/calendar/calendar.property.mjs +3 -3
  38. package/esm2022/card/card.component.mjs +5 -5
  39. package/esm2022/card/card.module.mjs +4 -4
  40. package/esm2022/card/card.property.mjs +3 -3
  41. package/esm2022/carousel/carousel-panel.component.mjs +5 -5
  42. package/esm2022/carousel/carousel.component.mjs +5 -5
  43. package/esm2022/carousel/carousel.module.mjs +4 -4
  44. package/esm2022/carousel/carousel.property.mjs +6 -6
  45. package/esm2022/cascade/cascade-portal.component.mjs +3 -3
  46. package/esm2022/cascade/cascade.component.mjs +5 -5
  47. package/esm2022/cascade/cascade.module.mjs +4 -4
  48. package/esm2022/cascade/cascade.property.mjs +3 -3
  49. package/esm2022/checkbox/checkbox.component.mjs +5 -5
  50. package/esm2022/checkbox/checkbox.module.mjs +4 -4
  51. package/esm2022/checkbox/checkbox.property.mjs +3 -3
  52. package/esm2022/collapse/collapse-panel.component.mjs +5 -5
  53. package/esm2022/collapse/collapse.component.mjs +4 -4
  54. package/esm2022/collapse/collapse.module.mjs +4 -4
  55. package/esm2022/collapse/collapse.property.mjs +6 -6
  56. package/esm2022/color/color.component.mjs +4 -4
  57. package/esm2022/color/color.module.mjs +4 -4
  58. package/esm2022/color/color.property.mjs +3 -3
  59. package/esm2022/color-picker/color-picker-portal.component.mjs +4 -4
  60. package/esm2022/color-picker/color-picker.component.mjs +5 -5
  61. package/esm2022/color-picker/color-picker.module.mjs +4 -4
  62. package/esm2022/color-picker/color-picker.property.mjs +3 -3
  63. package/esm2022/comment/comment-reply.component.mjs +3 -3
  64. package/esm2022/comment/comment.component.mjs +5 -5
  65. package/esm2022/comment/comment.module.mjs +4 -4
  66. package/esm2022/comment/comment.property.mjs +6 -6
  67. package/esm2022/container/aside.component.mjs +4 -4
  68. package/esm2022/container/container.component.mjs +4 -4
  69. package/esm2022/container/container.module.mjs +4 -4
  70. package/esm2022/container/container.property.mjs +12 -12
  71. package/esm2022/container/footer.component.mjs +4 -4
  72. package/esm2022/container/header.component.mjs +4 -4
  73. package/esm2022/container/main.component.mjs +4 -4
  74. package/esm2022/core/config/config.mjs +1 -1
  75. package/esm2022/core/config/config.service.mjs +3 -3
  76. package/esm2022/core/services/http.service.mjs +3 -3
  77. package/esm2022/core/services/preloading-strategy.service.mjs +3 -3
  78. package/esm2022/core/services/storage.service.mjs +3 -3
  79. package/esm2022/core/theme/theme.service.mjs +3 -3
  80. package/esm2022/crumb/crumb.component.mjs +5 -5
  81. package/esm2022/crumb/crumb.module.mjs +4 -4
  82. package/esm2022/crumb/crumb.property.mjs +3 -3
  83. package/esm2022/date-picker/date-picker-portal.component.mjs +3 -3
  84. package/esm2022/date-picker/date-picker.component.mjs +5 -5
  85. package/esm2022/date-picker/date-picker.module.mjs +4 -4
  86. package/esm2022/date-picker/date-picker.property.mjs +18 -18
  87. package/esm2022/date-picker/date-quarter.pipe.mjs +3 -3
  88. package/esm2022/date-picker/date-range-portal.component.mjs +3 -3
  89. package/esm2022/date-picker/date-range.component.mjs +5 -5
  90. package/esm2022/date-picker/picker-date.component.mjs +3 -3
  91. package/esm2022/date-picker/picker-month.component.mjs +3 -3
  92. package/esm2022/date-picker/picker-quarter.component.mjs +3 -3
  93. package/esm2022/date-picker/picker-year.component.mjs +3 -3
  94. package/esm2022/description/description-item.component.mjs +3 -3
  95. package/esm2022/description/description.component.mjs +3 -3
  96. package/esm2022/description/description.module.mjs +4 -4
  97. package/esm2022/description/description.property.mjs +6 -6
  98. package/esm2022/dialog/dialog-container.component.mjs +5 -5
  99. package/esm2022/dialog/dialog-portal.component.mjs +5 -5
  100. package/esm2022/dialog/dialog-portal.directives.mjs +18 -18
  101. package/esm2022/dialog/dialog.component.mjs +5 -5
  102. package/esm2022/dialog/dialog.module.mjs +4 -4
  103. package/esm2022/dialog/dialog.property.mjs +6 -6
  104. package/esm2022/dialog/dialog.service.mjs +3 -3
  105. package/esm2022/doc/doc.component.mjs +4 -4
  106. package/esm2022/doc/doc.module.mjs +4 -4
  107. package/esm2022/drag/drag.directive.mjs +3 -3
  108. package/esm2022/drag/drag.module.mjs +4 -4
  109. package/esm2022/drag/drag.property.mjs +3 -3
  110. package/esm2022/drawer/drawer-container.component.mjs +5 -5
  111. package/esm2022/drawer/drawer-portal.component.mjs +5 -5
  112. package/esm2022/drawer/drawer-portal.directives.mjs +9 -9
  113. package/esm2022/drawer/drawer.component.mjs +5 -5
  114. package/esm2022/drawer/drawer.module.mjs +4 -4
  115. package/esm2022/drawer/drawer.property.mjs +6 -6
  116. package/esm2022/drawer/drawer.service.mjs +3 -3
  117. package/esm2022/dropdown/dropdown-portal.component.mjs +3 -3
  118. package/esm2022/dropdown/dropdown.component.mjs +4 -4
  119. package/esm2022/dropdown/dropdown.module.mjs +4 -4
  120. package/esm2022/dropdown/dropdown.property.mjs +3 -3
  121. package/esm2022/empty/empty.component.mjs +5 -5
  122. package/esm2022/empty/empty.module.mjs +4 -4
  123. package/esm2022/empty/empty.property.mjs +3 -3
  124. package/esm2022/examples/examples.component.mjs +4 -4
  125. package/esm2022/examples/examples.module.mjs +4 -4
  126. package/esm2022/find/find.component.mjs +5 -5
  127. package/esm2022/find/find.module.mjs +4 -4
  128. package/esm2022/find/find.property.mjs +3 -3
  129. package/esm2022/form/control.component.mjs +3 -3
  130. package/esm2022/form/form.component.mjs +5 -5
  131. package/esm2022/form/form.module.mjs +4 -4
  132. package/esm2022/form/form.property.mjs +6 -6
  133. package/esm2022/highlight/highlight.component.mjs +5 -5
  134. package/esm2022/highlight/highlight.module.mjs +4 -4
  135. package/esm2022/highlight/highlight.property.mjs +3 -3
  136. package/esm2022/highlight/highlight.service.mjs +3 -3
  137. package/esm2022/i18n/i18n.directive.mjs +3 -3
  138. package/esm2022/i18n/i18n.module.mjs +4 -4
  139. package/esm2022/i18n/i18n.pipe.mjs +3 -3
  140. package/esm2022/i18n/i18n.property.mjs +1 -1
  141. package/esm2022/i18n/i18n.service.mjs +3 -3
  142. package/esm2022/i18n/languages/ar_EG.mjs +8 -2
  143. package/esm2022/i18n/languages/bg_BG.mjs +8 -2
  144. package/esm2022/i18n/languages/ca_ES.mjs +8 -2
  145. package/esm2022/i18n/languages/cs_CZ.mjs +8 -2
  146. package/esm2022/i18n/languages/da_DK.mjs +8 -2
  147. package/esm2022/i18n/languages/de_DE.mjs +8 -2
  148. package/esm2022/i18n/languages/el_GR.mjs +8 -2
  149. package/esm2022/i18n/languages/en_GB.mjs +8 -2
  150. package/esm2022/i18n/languages/en_US.mjs +8 -2
  151. package/esm2022/i18n/languages/es_ES.mjs +8 -2
  152. package/esm2022/i18n/languages/et_EE.mjs +8 -2
  153. package/esm2022/i18n/languages/fa_IR.mjs +8 -2
  154. package/esm2022/i18n/languages/fi_FI.mjs +8 -2
  155. package/esm2022/i18n/languages/fr_BE.mjs +8 -2
  156. package/esm2022/i18n/languages/fr_FR.mjs +8 -2
  157. package/esm2022/i18n/languages/he_IL.mjs +8 -2
  158. package/esm2022/i18n/languages/hi_IN.mjs +8 -2
  159. package/esm2022/i18n/languages/hr_HR.mjs +8 -2
  160. package/esm2022/i18n/languages/hu_HU.mjs +8 -2
  161. package/esm2022/i18n/languages/hy_AM.mjs +8 -2
  162. package/esm2022/i18n/languages/id_ID.mjs +8 -2
  163. package/esm2022/i18n/languages/is_IS.mjs +8 -2
  164. package/esm2022/i18n/languages/it_IT.mjs +8 -2
  165. package/esm2022/i18n/languages/ja_JP.mjs +8 -2
  166. package/esm2022/i18n/languages/ka_GE.mjs +8 -2
  167. package/esm2022/i18n/languages/kn_IN.mjs +8 -2
  168. package/esm2022/i18n/languages/ko_KR.mjs +8 -2
  169. package/esm2022/i18n/languages/ku_IQ.mjs +8 -2
  170. package/esm2022/i18n/languages/lv_LV.mjs +8 -2
  171. package/esm2022/i18n/languages/mn_MN.mjs +8 -2
  172. package/esm2022/i18n/languages/ms_MY.mjs +8 -2
  173. package/esm2022/i18n/languages/nb_NO.mjs +8 -2
  174. package/esm2022/i18n/languages/ne_NP.mjs +8 -2
  175. package/esm2022/i18n/languages/nl_BE.mjs +8 -2
  176. package/esm2022/i18n/languages/nl_NL.mjs +8 -2
  177. package/esm2022/i18n/languages/pl_PL.mjs +8 -2
  178. package/esm2022/i18n/languages/pt_BR.mjs +8 -2
  179. package/esm2022/i18n/languages/pt_PT.mjs +8 -2
  180. package/esm2022/i18n/languages/ro_RO.mjs +8 -2
  181. package/esm2022/i18n/languages/ru_RU.mjs +8 -2
  182. package/esm2022/i18n/languages/sk_SK.mjs +8 -2
  183. package/esm2022/i18n/languages/sl_SI.mjs +8 -2
  184. package/esm2022/i18n/languages/sr_RS.mjs +8 -2
  185. package/esm2022/i18n/languages/sv_SE.mjs +8 -2
  186. package/esm2022/i18n/languages/ta_IN.mjs +8 -2
  187. package/esm2022/i18n/languages/th_TH.mjs +8 -2
  188. package/esm2022/i18n/languages/tr_TR.mjs +8 -2
  189. package/esm2022/i18n/languages/uk_UA.mjs +8 -2
  190. package/esm2022/i18n/languages/vi_VN.mjs +8 -2
  191. package/esm2022/i18n/languages/zh_CN.mjs +8 -2
  192. package/esm2022/i18n/languages/zh_TW.mjs +8 -2
  193. package/esm2022/icon/icon.component.mjs +4 -4
  194. package/esm2022/icon/icon.module.mjs +4 -4
  195. package/esm2022/icon/icon.property.mjs +3 -3
  196. package/esm2022/icon/icon.service.mjs +3 -3
  197. package/esm2022/image/image-group.component.mjs +3 -3
  198. package/esm2022/image/image-preview.component.mjs +5 -5
  199. package/esm2022/image/image.component.mjs +5 -5
  200. package/esm2022/image/image.module.mjs +4 -4
  201. package/esm2022/image/image.property.mjs +6 -6
  202. package/esm2022/inner/inner.component.mjs +4 -4
  203. package/esm2022/inner/inner.module.mjs +4 -4
  204. package/esm2022/inner/inner.property.mjs +3 -3
  205. package/esm2022/input/input-group.component.mjs +3 -3
  206. package/esm2022/input/input.component.mjs +5 -5
  207. package/esm2022/input/input.module.mjs +4 -4
  208. package/esm2022/input/input.property.mjs +6 -6
  209. package/esm2022/input-number/input-number.component.mjs +5 -5
  210. package/esm2022/input-number/input-number.module.mjs +4 -4
  211. package/esm2022/input-number/input-number.property.mjs +3 -3
  212. package/esm2022/keyword/keyword.directive.mjs +3 -3
  213. package/esm2022/keyword/keyword.module.mjs +4 -4
  214. package/esm2022/keyword/keyword.property.mjs +3 -3
  215. package/esm2022/layout/col.component.mjs +3 -3
  216. package/esm2022/layout/layout.module.mjs +4 -4
  217. package/esm2022/layout/layout.property.mjs +6 -6
  218. package/esm2022/layout/row.component.mjs +3 -3
  219. package/esm2022/link/link.component.mjs +5 -5
  220. package/esm2022/link/link.module.mjs +4 -4
  221. package/esm2022/link/link.property.mjs +3 -3
  222. package/esm2022/list/list-drop-group.directive.mjs +3 -3
  223. package/esm2022/list/list-option.component.mjs +3 -3
  224. package/esm2022/list/list.component.mjs +11 -11
  225. package/esm2022/list/list.module.mjs +4 -4
  226. package/esm2022/list/list.property.mjs +6 -6
  227. package/esm2022/loading/loading.component.mjs +5 -5
  228. package/esm2022/loading/loading.module.mjs +4 -4
  229. package/esm2022/loading/loading.property.mjs +3 -3
  230. package/esm2022/menu/menu-node.component.mjs +3 -3
  231. package/esm2022/menu/menu.component.mjs +3 -3
  232. package/esm2022/menu/menu.module.mjs +4 -4
  233. package/esm2022/menu/menu.property.mjs +6 -6
  234. package/esm2022/message/message.component.mjs +3 -3
  235. package/esm2022/message/message.module.mjs +4 -4
  236. package/esm2022/message/message.service.mjs +3 -3
  237. package/esm2022/message-box/message-box.component.mjs +3 -3
  238. package/esm2022/message-box/message-box.module.mjs +4 -4
  239. package/esm2022/message-box/message-box.service.mjs +3 -3
  240. package/esm2022/notification/notification.component.mjs +3 -3
  241. package/esm2022/notification/notification.module.mjs +4 -4
  242. package/esm2022/notification/notification.service.mjs +3 -3
  243. package/esm2022/outlet/outlet.directive.mjs +3 -3
  244. package/esm2022/outlet/outlet.module.mjs +4 -4
  245. package/esm2022/page-header/page-header.component.mjs +5 -5
  246. package/esm2022/page-header/page-header.module.mjs +4 -4
  247. package/esm2022/page-header/page-header.property.mjs +3 -3
  248. package/esm2022/pagination/pagination.component.mjs +91 -29
  249. package/esm2022/pagination/pagination.module.mjs +4 -4
  250. package/esm2022/pagination/pagination.property.mjs +23 -8
  251. package/esm2022/pattern/pattern.component.mjs +4 -4
  252. package/esm2022/pattern/pattern.module.mjs +4 -4
  253. package/esm2022/popconfirm/popconfirm.component.mjs +5 -5
  254. package/esm2022/popconfirm/popconfirm.module.mjs +4 -4
  255. package/esm2022/popconfirm/popconfirm.property.mjs +3 -3
  256. package/esm2022/popover/popover-portal.component.mjs +5 -5
  257. package/esm2022/popover/popover.directive.mjs +3 -3
  258. package/esm2022/popover/popover.module.mjs +4 -4
  259. package/esm2022/popover/popover.property.mjs +3 -3
  260. package/esm2022/portal/portal.module.mjs +4 -4
  261. package/esm2022/portal/portal.service.mjs +3 -3
  262. package/esm2022/progress/progress.component.mjs +5 -5
  263. package/esm2022/progress/progress.module.mjs +4 -4
  264. package/esm2022/progress/progress.property.mjs +3 -3
  265. package/esm2022/radio/radio.component.mjs +5 -5
  266. package/esm2022/radio/radio.module.mjs +4 -4
  267. package/esm2022/radio/radio.property.mjs +3 -3
  268. package/esm2022/rate/rate.component.mjs +5 -5
  269. package/esm2022/rate/rate.module.mjs +4 -4
  270. package/esm2022/rate/rate.property.mjs +3 -3
  271. package/esm2022/resizable/resizable.directive.mjs +3 -3
  272. package/esm2022/resizable/resizable.module.mjs +4 -4
  273. package/esm2022/resizable/resizable.property.mjs +3 -3
  274. package/esm2022/result/result.component.mjs +5 -5
  275. package/esm2022/result/result.module.mjs +4 -4
  276. package/esm2022/result/result.property.mjs +3 -3
  277. package/esm2022/ripple/ripple.directive.mjs +3 -3
  278. package/esm2022/ripple/ripple.module.mjs +4 -4
  279. package/esm2022/ripple/ripple.property.mjs +3 -3
  280. package/esm2022/select/select-portal.component.mjs +3 -3
  281. package/esm2022/select/select.component.mjs +5 -5
  282. package/esm2022/select/select.module.mjs +4 -4
  283. package/esm2022/select/select.property.mjs +5 -5
  284. package/esm2022/skeleton/skeleton.component.mjs +3 -3
  285. package/esm2022/skeleton/skeleton.module.mjs +4 -4
  286. package/esm2022/skeleton/skeleton.property.mjs +3 -3
  287. package/esm2022/slider/slider.component.mjs +5 -5
  288. package/esm2022/slider/slider.module.mjs +4 -4
  289. package/esm2022/slider/slider.property.mjs +3 -3
  290. package/esm2022/slider-select/slider-select.component.mjs +5 -5
  291. package/esm2022/slider-select/slider-select.module.mjs +4 -4
  292. package/esm2022/slider-select/slider-select.property.mjs +3 -3
  293. package/esm2022/statistic/countdown.component.mjs +3 -3
  294. package/esm2022/statistic/statistic.component.mjs +3 -3
  295. package/esm2022/statistic/statistic.module.mjs +4 -4
  296. package/esm2022/statistic/statistic.property.mjs +6 -6
  297. package/esm2022/steps/steps.component.mjs +5 -5
  298. package/esm2022/steps/steps.module.mjs +4 -4
  299. package/esm2022/steps/steps.property.mjs +3 -3
  300. package/esm2022/switch/switch.component.mjs +5 -5
  301. package/esm2022/switch/switch.module.mjs +4 -4
  302. package/esm2022/switch/switch.property.mjs +3 -3
  303. package/esm2022/table/table-body.component.mjs +3 -3
  304. package/esm2022/table/table-foot.component.mjs +3 -3
  305. package/esm2022/table/table-head.component.mjs +4 -4
  306. package/esm2022/table/table.component.mjs +5 -5
  307. package/esm2022/table/table.module.mjs +4 -4
  308. package/esm2022/table/table.property.mjs +28 -13
  309. package/esm2022/tabs/tab-content.component.mjs +3 -3
  310. package/esm2022/tabs/tab-link.directive.mjs +6 -6
  311. package/esm2022/tabs/tab.component.mjs +3 -3
  312. package/esm2022/tabs/tabs.component.mjs +5 -5
  313. package/esm2022/tabs/tabs.module.mjs +4 -4
  314. package/esm2022/tabs/tabs.property.mjs +6 -6
  315. package/esm2022/tag/tag.component.mjs +5 -5
  316. package/esm2022/tag/tag.module.mjs +4 -4
  317. package/esm2022/tag/tag.property.mjs +3 -3
  318. package/esm2022/text-retract/text-retract.component.mjs +5 -5
  319. package/esm2022/text-retract/text-retract.module.mjs +4 -4
  320. package/esm2022/text-retract/text-retract.property.mjs +3 -3
  321. package/esm2022/textarea/textarea.component.mjs +5 -5
  322. package/esm2022/textarea/textarea.module.mjs +4 -4
  323. package/esm2022/textarea/textarea.property.mjs +3 -3
  324. package/esm2022/theme/theme.component.mjs +5 -5
  325. package/esm2022/theme/theme.module.mjs +4 -4
  326. package/esm2022/theme/theme.property.mjs +3 -3
  327. package/esm2022/time-ago/time-ago.module.mjs +4 -4
  328. package/esm2022/time-ago/time-ago.pipe.mjs +3 -3
  329. package/esm2022/time-picker/time-picker-frame.component.mjs +5 -5
  330. package/esm2022/time-picker/time-picker-portal.component.mjs +3 -3
  331. package/esm2022/time-picker/time-picker.component.mjs +5 -5
  332. package/esm2022/time-picker/time-picker.module.mjs +4 -4
  333. package/esm2022/time-picker/time-picker.property.mjs +3 -3
  334. package/esm2022/time-range/time-range.module.mjs +4 -4
  335. package/esm2022/time-range/time-range.pipe.mjs +3 -3
  336. package/esm2022/timeline/timeline.component.mjs +5 -5
  337. package/esm2022/timeline/timeline.module.mjs +4 -4
  338. package/esm2022/timeline/timeline.property.mjs +3 -3
  339. package/esm2022/tooltip/tooltip-portal.component.mjs +5 -5
  340. package/esm2022/tooltip/tooltip.directive.mjs +3 -3
  341. package/esm2022/tooltip/tooltip.module.mjs +4 -4
  342. package/esm2022/tooltip/tooltip.property.mjs +3 -3
  343. package/esm2022/transfer/transfer.component.mjs +5 -5
  344. package/esm2022/transfer/transfer.module.mjs +4 -4
  345. package/esm2022/transfer/transfer.property.mjs +3 -3
  346. package/esm2022/tree/tree-node.component.mjs +5 -5
  347. package/esm2022/tree/tree.component.mjs +4 -4
  348. package/esm2022/tree/tree.module.mjs +4 -4
  349. package/esm2022/tree/tree.property.mjs +6 -6
  350. package/esm2022/tree/tree.service.mjs +3 -3
  351. package/esm2022/tree-file/tree-file.component.mjs +5 -5
  352. package/esm2022/tree-file/tree-file.module.mjs +4 -4
  353. package/esm2022/tree-file/tree-file.property.mjs +3 -3
  354. package/esm2022/tree-select/tree-select-portal.component.mjs +3 -3
  355. package/esm2022/tree-select/tree-select.component.mjs +5 -5
  356. package/esm2022/tree-select/tree-select.module.mjs +4 -4
  357. package/esm2022/tree-select/tree-select.property.mjs +3 -3
  358. package/esm2022/typography/typography.component.mjs +4 -4
  359. package/esm2022/typography/typography.module.mjs +4 -4
  360. package/esm2022/typography/typography.property.mjs +3 -3
  361. package/esm2022/upload/upload-portal.component.mjs +5 -5
  362. package/esm2022/upload/upload.component.mjs +5 -5
  363. package/esm2022/upload/upload.module.mjs +4 -4
  364. package/esm2022/upload/upload.property.mjs +3 -3
  365. package/fesm2022/ng-nest-ui-affix.mjs +11 -11
  366. package/fesm2022/ng-nest-ui-affix.mjs.map +1 -1
  367. package/fesm2022/ng-nest-ui-alert.mjs +11 -11
  368. package/fesm2022/ng-nest-ui-alert.mjs.map +1 -1
  369. package/fesm2022/ng-nest-ui-anchor.mjs +17 -17
  370. package/fesm2022/ng-nest-ui-anchor.mjs.map +1 -1
  371. package/fesm2022/ng-nest-ui-api.mjs +8 -8
  372. package/fesm2022/ng-nest-ui-api.mjs.map +1 -1
  373. package/fesm2022/ng-nest-ui-auto-complete.mjs +14 -14
  374. package/fesm2022/ng-nest-ui-auto-complete.mjs.map +1 -1
  375. package/fesm2022/ng-nest-ui-avatar.mjs +17 -17
  376. package/fesm2022/ng-nest-ui-avatar.mjs.map +1 -1
  377. package/fesm2022/ng-nest-ui-back-top.mjs +11 -11
  378. package/fesm2022/ng-nest-ui-back-top.mjs.map +1 -1
  379. package/fesm2022/ng-nest-ui-badge.mjs +11 -11
  380. package/fesm2022/ng-nest-ui-badge.mjs.map +1 -1
  381. package/fesm2022/ng-nest-ui-base-form.mjs +10 -10
  382. package/fesm2022/ng-nest-ui-button.mjs +18 -18
  383. package/fesm2022/ng-nest-ui-button.mjs.map +1 -1
  384. package/fesm2022/ng-nest-ui-calendar.mjs +11 -11
  385. package/fesm2022/ng-nest-ui-calendar.mjs.map +1 -1
  386. package/fesm2022/ng-nest-ui-card.mjs +11 -11
  387. package/fesm2022/ng-nest-ui-card.mjs.map +1 -1
  388. package/fesm2022/ng-nest-ui-carousel.mjs +18 -18
  389. package/fesm2022/ng-nest-ui-carousel.mjs.map +1 -1
  390. package/fesm2022/ng-nest-ui-cascade.mjs +14 -14
  391. package/fesm2022/ng-nest-ui-cascade.mjs.map +1 -1
  392. package/fesm2022/ng-nest-ui-checkbox.mjs +11 -11
  393. package/fesm2022/ng-nest-ui-checkbox.mjs.map +1 -1
  394. package/fesm2022/ng-nest-ui-collapse.mjs +18 -18
  395. package/fesm2022/ng-nest-ui-collapse.mjs.map +1 -1
  396. package/fesm2022/ng-nest-ui-color-picker.mjs +14 -14
  397. package/fesm2022/ng-nest-ui-color-picker.mjs.map +1 -1
  398. package/fesm2022/ng-nest-ui-color.mjs +11 -11
  399. package/fesm2022/ng-nest-ui-color.mjs.map +1 -1
  400. package/fesm2022/ng-nest-ui-comment.mjs +17 -17
  401. package/fesm2022/ng-nest-ui-comment.mjs.map +1 -1
  402. package/fesm2022/ng-nest-ui-container.mjs +36 -36
  403. package/fesm2022/ng-nest-ui-container.mjs.map +1 -1
  404. package/fesm2022/ng-nest-ui-core.mjs +15 -15
  405. package/fesm2022/ng-nest-ui-core.mjs.map +1 -1
  406. package/fesm2022/ng-nest-ui-crumb.mjs +11 -11
  407. package/fesm2022/ng-nest-ui-crumb.mjs.map +1 -1
  408. package/fesm2022/ng-nest-ui-date-picker.mjs +51 -51
  409. package/fesm2022/ng-nest-ui-date-picker.mjs.map +1 -1
  410. package/fesm2022/ng-nest-ui-description.mjs +16 -16
  411. package/fesm2022/ng-nest-ui-dialog.mjs +44 -44
  412. package/fesm2022/ng-nest-ui-dialog.mjs.map +1 -1
  413. package/fesm2022/ng-nest-ui-doc.mjs +8 -8
  414. package/fesm2022/ng-nest-ui-doc.mjs.map +1 -1
  415. package/fesm2022/ng-nest-ui-drag.mjs +10 -10
  416. package/fesm2022/ng-nest-ui-drawer.mjs +35 -35
  417. package/fesm2022/ng-nest-ui-drawer.mjs.map +1 -1
  418. package/fesm2022/ng-nest-ui-dropdown.mjs +14 -14
  419. package/fesm2022/ng-nest-ui-dropdown.mjs.map +1 -1
  420. package/fesm2022/ng-nest-ui-empty.mjs +11 -11
  421. package/fesm2022/ng-nest-ui-empty.mjs.map +1 -1
  422. package/fesm2022/ng-nest-ui-examples.mjs +8 -8
  423. package/fesm2022/ng-nest-ui-examples.mjs.map +1 -1
  424. package/fesm2022/ng-nest-ui-find.mjs +11 -11
  425. package/fesm2022/ng-nest-ui-find.mjs.map +1 -1
  426. package/fesm2022/ng-nest-ui-form.mjs +17 -17
  427. package/fesm2022/ng-nest-ui-form.mjs.map +1 -1
  428. package/fesm2022/ng-nest-ui-highlight.mjs +14 -14
  429. package/fesm2022/ng-nest-ui-highlight.mjs.map +1 -1
  430. package/fesm2022/ng-nest-ui-i18n.mjs +370 -64
  431. package/fesm2022/ng-nest-ui-i18n.mjs.map +1 -1
  432. package/fesm2022/ng-nest-ui-icon.mjs +14 -14
  433. package/fesm2022/ng-nest-ui-icon.mjs.map +1 -1
  434. package/fesm2022/ng-nest-ui-image.mjs +21 -21
  435. package/fesm2022/ng-nest-ui-image.mjs.map +1 -1
  436. package/fesm2022/ng-nest-ui-inner.mjs +11 -11
  437. package/fesm2022/ng-nest-ui-inner.mjs.map +1 -1
  438. package/fesm2022/ng-nest-ui-input-number.mjs +11 -11
  439. package/fesm2022/ng-nest-ui-input-number.mjs.map +1 -1
  440. package/fesm2022/ng-nest-ui-input.mjs +17 -17
  441. package/fesm2022/ng-nest-ui-input.mjs.map +1 -1
  442. package/fesm2022/ng-nest-ui-keyword.mjs +10 -10
  443. package/fesm2022/ng-nest-ui-layout.mjs +16 -16
  444. package/fesm2022/ng-nest-ui-link.mjs +11 -11
  445. package/fesm2022/ng-nest-ui-link.mjs.map +1 -1
  446. package/fesm2022/ng-nest-ui-list.mjs +26 -26
  447. package/fesm2022/ng-nest-ui-list.mjs.map +1 -1
  448. package/fesm2022/ng-nest-ui-loading.mjs +11 -11
  449. package/fesm2022/ng-nest-ui-loading.mjs.map +1 -1
  450. package/fesm2022/ng-nest-ui-menu.mjs +16 -16
  451. package/fesm2022/ng-nest-ui-message-box.mjs +10 -10
  452. package/fesm2022/ng-nest-ui-message.mjs +10 -10
  453. package/fesm2022/ng-nest-ui-notification.mjs +10 -10
  454. package/fesm2022/ng-nest-ui-outlet.mjs +7 -7
  455. package/fesm2022/ng-nest-ui-page-header.mjs +11 -11
  456. package/fesm2022/ng-nest-ui-page-header.mjs.map +1 -1
  457. package/fesm2022/ng-nest-ui-pagination.mjs +116 -39
  458. package/fesm2022/ng-nest-ui-pagination.mjs.map +1 -1
  459. package/fesm2022/ng-nest-ui-pattern.mjs +8 -8
  460. package/fesm2022/ng-nest-ui-pattern.mjs.map +1 -1
  461. package/fesm2022/ng-nest-ui-popconfirm.mjs +11 -11
  462. package/fesm2022/ng-nest-ui-popconfirm.mjs.map +1 -1
  463. package/fesm2022/ng-nest-ui-popover.mjs +14 -14
  464. package/fesm2022/ng-nest-ui-popover.mjs.map +1 -1
  465. package/fesm2022/ng-nest-ui-portal.mjs +7 -7
  466. package/fesm2022/ng-nest-ui-progress.mjs +11 -11
  467. package/fesm2022/ng-nest-ui-progress.mjs.map +1 -1
  468. package/fesm2022/ng-nest-ui-radio.mjs +11 -11
  469. package/fesm2022/ng-nest-ui-radio.mjs.map +1 -1
  470. package/fesm2022/ng-nest-ui-rate.mjs +11 -11
  471. package/fesm2022/ng-nest-ui-rate.mjs.map +1 -1
  472. package/fesm2022/ng-nest-ui-resizable.mjs +10 -10
  473. package/fesm2022/ng-nest-ui-result.mjs +11 -11
  474. package/fesm2022/ng-nest-ui-result.mjs.map +1 -1
  475. package/fesm2022/ng-nest-ui-ripple.mjs +10 -10
  476. package/fesm2022/ng-nest-ui-select.mjs +15 -15
  477. package/fesm2022/ng-nest-ui-select.mjs.map +1 -1
  478. package/fesm2022/ng-nest-ui-skeleton.mjs +10 -10
  479. package/fesm2022/ng-nest-ui-slider-select.mjs +11 -11
  480. package/fesm2022/ng-nest-ui-slider-select.mjs.map +1 -1
  481. package/fesm2022/ng-nest-ui-slider.mjs +11 -11
  482. package/fesm2022/ng-nest-ui-slider.mjs.map +1 -1
  483. package/fesm2022/ng-nest-ui-statistic.mjs +16 -16
  484. package/fesm2022/ng-nest-ui-steps.mjs +11 -11
  485. package/fesm2022/ng-nest-ui-steps.mjs.map +1 -1
  486. package/fesm2022/ng-nest-ui-switch.mjs +11 -11
  487. package/fesm2022/ng-nest-ui-switch.mjs.map +1 -1
  488. package/fesm2022/ng-nest-ui-table.mjs +44 -29
  489. package/fesm2022/ng-nest-ui-table.mjs.map +1 -1
  490. package/fesm2022/ng-nest-ui-tabs.mjs +26 -26
  491. package/fesm2022/ng-nest-ui-tabs.mjs.map +1 -1
  492. package/fesm2022/ng-nest-ui-tag.mjs +11 -11
  493. package/fesm2022/ng-nest-ui-tag.mjs.map +1 -1
  494. package/fesm2022/ng-nest-ui-text-retract.mjs +11 -11
  495. package/fesm2022/ng-nest-ui-text-retract.mjs.map +1 -1
  496. package/fesm2022/ng-nest-ui-textarea.mjs +11 -11
  497. package/fesm2022/ng-nest-ui-textarea.mjs.map +1 -1
  498. package/fesm2022/ng-nest-ui-theme.mjs +11 -11
  499. package/fesm2022/ng-nest-ui-theme.mjs.map +1 -1
  500. package/fesm2022/ng-nest-ui-time-ago.mjs +7 -7
  501. package/fesm2022/ng-nest-ui-time-picker.mjs +18 -18
  502. package/fesm2022/ng-nest-ui-time-picker.mjs.map +1 -1
  503. package/fesm2022/ng-nest-ui-time-range.mjs +7 -7
  504. package/fesm2022/ng-nest-ui-timeline.mjs +11 -11
  505. package/fesm2022/ng-nest-ui-timeline.mjs.map +1 -1
  506. package/fesm2022/ng-nest-ui-tooltip.mjs +14 -14
  507. package/fesm2022/ng-nest-ui-tooltip.mjs.map +1 -1
  508. package/fesm2022/ng-nest-ui-transfer.mjs +11 -11
  509. package/fesm2022/ng-nest-ui-transfer.mjs.map +1 -1
  510. package/fesm2022/ng-nest-ui-tree-file.mjs +11 -11
  511. package/fesm2022/ng-nest-ui-tree-file.mjs.map +1 -1
  512. package/fesm2022/ng-nest-ui-tree-select.mjs +14 -14
  513. package/fesm2022/ng-nest-ui-tree-select.mjs.map +1 -1
  514. package/fesm2022/ng-nest-ui-tree.mjs +20 -20
  515. package/fesm2022/ng-nest-ui-tree.mjs.map +1 -1
  516. package/fesm2022/ng-nest-ui-typography.mjs +11 -11
  517. package/fesm2022/ng-nest-ui-typography.mjs.map +1 -1
  518. package/fesm2022/ng-nest-ui-upload.mjs +15 -15
  519. package/fesm2022/ng-nest-ui-upload.mjs.map +1 -1
  520. package/i18n/i18n.property.d.ts +6 -0
  521. package/i18n/languages/ar_EG.d.ts +6 -0
  522. package/i18n/languages/bg_BG.d.ts +6 -0
  523. package/i18n/languages/ca_ES.d.ts +6 -0
  524. package/i18n/languages/cs_CZ.d.ts +6 -0
  525. package/i18n/languages/da_DK.d.ts +6 -0
  526. package/i18n/languages/de_DE.d.ts +6 -0
  527. package/i18n/languages/el_GR.d.ts +6 -0
  528. package/i18n/languages/en_GB.d.ts +6 -0
  529. package/i18n/languages/en_US.d.ts +6 -0
  530. package/i18n/languages/es_ES.d.ts +6 -0
  531. package/i18n/languages/et_EE.d.ts +6 -0
  532. package/i18n/languages/fa_IR.d.ts +6 -0
  533. package/i18n/languages/fi_FI.d.ts +6 -0
  534. package/i18n/languages/fr_BE.d.ts +6 -0
  535. package/i18n/languages/fr_FR.d.ts +6 -0
  536. package/i18n/languages/he_IL.d.ts +6 -0
  537. package/i18n/languages/hi_IN.d.ts +6 -0
  538. package/i18n/languages/hr_HR.d.ts +6 -0
  539. package/i18n/languages/hu_HU.d.ts +6 -0
  540. package/i18n/languages/hy_AM.d.ts +6 -0
  541. package/i18n/languages/id_ID.d.ts +6 -0
  542. package/i18n/languages/is_IS.d.ts +6 -0
  543. package/i18n/languages/it_IT.d.ts +6 -0
  544. package/i18n/languages/ja_JP.d.ts +6 -0
  545. package/i18n/languages/ka_GE.d.ts +6 -0
  546. package/i18n/languages/kn_IN.d.ts +6 -0
  547. package/i18n/languages/ko_KR.d.ts +6 -0
  548. package/i18n/languages/ku_IQ.d.ts +6 -0
  549. package/i18n/languages/lv_LV.d.ts +6 -0
  550. package/i18n/languages/mn_MN.d.ts +6 -0
  551. package/i18n/languages/ms_MY.d.ts +6 -0
  552. package/i18n/languages/nb_NO.d.ts +6 -0
  553. package/i18n/languages/ne_NP.d.ts +6 -0
  554. package/i18n/languages/nl_BE.d.ts +6 -0
  555. package/i18n/languages/nl_NL.d.ts +6 -0
  556. package/i18n/languages/pl_PL.d.ts +6 -0
  557. package/i18n/languages/pt_BR.d.ts +6 -0
  558. package/i18n/languages/pt_PT.d.ts +6 -0
  559. package/i18n/languages/ro_RO.d.ts +6 -0
  560. package/i18n/languages/ru_RU.d.ts +6 -0
  561. package/i18n/languages/sk_SK.d.ts +6 -0
  562. package/i18n/languages/sl_SI.d.ts +6 -0
  563. package/i18n/languages/sr_RS.d.ts +6 -0
  564. package/i18n/languages/sv_SE.d.ts +6 -0
  565. package/i18n/languages/ta_IN.d.ts +6 -0
  566. package/i18n/languages/th_TH.d.ts +6 -0
  567. package/i18n/languages/tr_TR.d.ts +6 -0
  568. package/i18n/languages/uk_UA.d.ts +6 -0
  569. package/i18n/languages/vi_VN.d.ts +6 -0
  570. package/i18n/languages/zh_CN.d.ts +6 -0
  571. package/i18n/languages/zh_TW.d.ts +6 -0
  572. package/package.json +115 -115
  573. package/pagination/pagination.component.d.ts +24 -0
  574. package/pagination/pagination.property.d.ts +31 -5
  575. package/radio/radio.component.d.ts +1 -1
  576. package/select/select.property.d.ts +1 -4
  577. package/style/mixins/reset.scss +4 -2
  578. package/table/table.property.d.ts +17 -1
@@ -634,10 +634,10 @@ export class XTransferComponent extends XTransferProperty {
634
634
  });
635
635
  }
636
636
  }
637
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: XTransferComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
638
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: XTransferComponent, isStandalone: true, selector: "x-transfer", providers: [XValueAccessor(XTransferComponent)], viewQueries: [{ propertyName: "leftTableCom", first: true, predicate: XTableComponent, descendants: true, isSignal: true }, { propertyName: "rightTableCom", first: true, predicate: XTableComponent, descendants: true, isSignal: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #transfer class=\"x-transfer\" cdkDropListGroup>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left().footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left() }\"></ng-container>\r\n <div [ngStyle]=\"left().listStyle!\" class=\"x-transfer-list x-transfer-{{ type() }}\">\r\n @switch (type()) {\r\n @case ('list') {\r\n <ul\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left().list\"\r\n [cdkDropListDisabled]=\"!drag() && type() === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n @for (node of left().list; track node.id) {\r\n <li class=\"x-transfer-item\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left() }\"></ng-container>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n @case ('tree') {\r\n <x-tree\r\n [data]=\"left().list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left().searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n }\r\n @case ('table') {\r\n <x-table\r\n #leftTableCom\r\n [data]=\"tableData()\"\r\n [columns]=\"tableColumns()!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery()\"\r\n [total]=\"tableTotal()\"\r\n (activatedRowChange)=\"onTableCheckedRow($event!, left())\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left())\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left().tableHeadSearchTpl\"\r\n ></x-table>\r\n }\r\n }\r\n </div>\r\n @if (left().footerTpl) {\r\n <div class=\"x-transfer-footer\">\r\n <ng-container *ngTemplateOutlet=\"left().footerTpl!; context: { $source: left() }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button\r\n type=\"primary\"\r\n icon=\"fto-chevron-right\"\r\n [disabled]=\"left().disabledButton!\"\r\n (click)=\"move(left(), right())\"\r\n flat\r\n ></x-button>\r\n <x-button\r\n type=\"primary\"\r\n icon=\"fto-chevron-left\"\r\n [disabled]=\"right().disabledButton!\"\r\n (click)=\"move(right(), left())\"\r\n flat\r\n ></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right().footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right() }\"></ng-container>\r\n\r\n <div [ngStyle]=\"right().listStyle!\" class=\"x-transfer-list\">\r\n @switch (type()) {\r\n @case ('table') {\r\n <x-table\r\n #rightTableCom\r\n [data]=\"right().list!\"\r\n [columns]=\"tableColumns()!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event!, right())\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right())\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right().tableHeadSearchTpl\"\r\n ></x-table>\r\n }\r\n @default {\r\n <ul\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right().list\"\r\n [cdkDropListDisabled]=\"!drag() || (drag() && type() !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n @for (node of right().list; track node.id) {\r\n <li class=\"x-transfer-item\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right() }\"\r\n ></ng-container>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n }\r\n </div>\r\n @if (right().footerTpl) {\r\n <div class=\"x-transfer-footer\">\r\n <ng-container *ngTemplateOutlet=\"right().footerTpl!; context: { $source: right() }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n @if (source.title && !source.hiddenCheckAll) {\r\n <x-checkbox\r\n [data]=\"[titleTpl() ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n single\r\n ></x-checkbox>\r\n }\r\n @if (source.title && source.hiddenCheckAll) {\r\n <span>{{ source.title }}</span>\r\n }\r\n @if (inverse() && type() === 'list') {\r\n <x-link class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n }\r\n </div>\r\n <ng-container\r\n *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n @if (search() && type() !== 'table') {\r\n <div class=\"x-transfer-search\">\r\n <x-input\r\n icon=\"fto-search\"\r\n [(ngModel)]=\"source.searchInput\"\r\n (ngModelChange)=\"onSearchInputChange(source)\"\r\n clearable\r\n ></x-input>\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl() ? nodeTpl() : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n single\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0;display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-tree{padding:0 .125rem}.x-transfer-item{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{margin:0;height:100%;padding:.25rem;list-style:none}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: XCheckboxComponent, selector: "x-checkbox" }, { kind: "component", type: XButtonComponent, selector: "x-button" }, { kind: "component", type: XInputComponent, selector: "x-input" }, { kind: "component", type: XTreeComponent, selector: "x-tree" }, { kind: "component", type: XTableComponent, selector: "x-table" }, { kind: "directive", type: XKeywordDirective, selector: "[x-keyword]" }, { kind: "component", type: XLinkComponent, selector: "x-link" }, { kind: "pipe", type: XI18nPipe, name: "xI18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
637
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XTransferComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
638
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: XTransferComponent, isStandalone: true, selector: "x-transfer", providers: [XValueAccessor(XTransferComponent)], viewQueries: [{ propertyName: "leftTableCom", first: true, predicate: XTableComponent, descendants: true, isSignal: true }, { propertyName: "rightTableCom", first: true, predicate: XTableComponent, descendants: true, isSignal: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #transfer class=\"x-transfer\" cdkDropListGroup>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left().footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left() }\"></ng-container>\r\n <div [ngStyle]=\"left().listStyle!\" class=\"x-transfer-list x-transfer-{{ type() }}\">\r\n @switch (type()) {\r\n @case ('list') {\r\n <ul\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left().list\"\r\n [cdkDropListDisabled]=\"!drag() && type() === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n @for (node of left().list; track node.id) {\r\n <li class=\"x-transfer-item\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left() }\"></ng-container>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n @case ('tree') {\r\n <x-tree\r\n [data]=\"left().list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left().searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n }\r\n @case ('table') {\r\n <x-table\r\n #leftTableCom\r\n [data]=\"tableData()\"\r\n [columns]=\"tableColumns()!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery()\"\r\n [total]=\"tableTotal()\"\r\n (activatedRowChange)=\"onTableCheckedRow($event!, left())\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left())\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left().tableHeadSearchTpl\"\r\n ></x-table>\r\n }\r\n }\r\n </div>\r\n @if (left().footerTpl) {\r\n <div class=\"x-transfer-footer\">\r\n <ng-container *ngTemplateOutlet=\"left().footerTpl!; context: { $source: left() }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button\r\n type=\"primary\"\r\n icon=\"fto-chevron-right\"\r\n [disabled]=\"left().disabledButton!\"\r\n (click)=\"move(left(), right())\"\r\n flat\r\n ></x-button>\r\n <x-button\r\n type=\"primary\"\r\n icon=\"fto-chevron-left\"\r\n [disabled]=\"right().disabledButton!\"\r\n (click)=\"move(right(), left())\"\r\n flat\r\n ></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right().footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right() }\"></ng-container>\r\n\r\n <div [ngStyle]=\"right().listStyle!\" class=\"x-transfer-list\">\r\n @switch (type()) {\r\n @case ('table') {\r\n <x-table\r\n #rightTableCom\r\n [data]=\"right().list!\"\r\n [columns]=\"tableColumns()!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event!, right())\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right())\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right().tableHeadSearchTpl\"\r\n ></x-table>\r\n }\r\n @default {\r\n <ul\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right().list\"\r\n [cdkDropListDisabled]=\"!drag() || (drag() && type() !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n @for (node of right().list; track node.id) {\r\n <li class=\"x-transfer-item\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right() }\"\r\n ></ng-container>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n }\r\n </div>\r\n @if (right().footerTpl) {\r\n <div class=\"x-transfer-footer\">\r\n <ng-container *ngTemplateOutlet=\"right().footerTpl!; context: { $source: right() }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n @if (source.title && !source.hiddenCheckAll) {\r\n <x-checkbox\r\n [data]=\"[titleTpl() ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n single\r\n ></x-checkbox>\r\n }\r\n @if (source.title && source.hiddenCheckAll) {\r\n <span>{{ source.title }}</span>\r\n }\r\n @if (inverse() && type() === 'list') {\r\n <x-link class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n }\r\n </div>\r\n <ng-container\r\n *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n @if (search() && type() !== 'table') {\r\n <div class=\"x-transfer-search\">\r\n <x-input\r\n icon=\"fto-search\"\r\n [(ngModel)]=\"source.searchInput\"\r\n (ngModelChange)=\"onSearchInputChange(source)\"\r\n clearable\r\n ></x-input>\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl() ? nodeTpl() : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n single\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0}.x-transfer{display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-tree{padding:0 .125rem}.x-transfer-item{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{margin:0;height:100%;padding:.25rem;list-style:none}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: XCheckboxComponent, selector: "x-checkbox" }, { kind: "component", type: XButtonComponent, selector: "x-button" }, { kind: "component", type: XInputComponent, selector: "x-input" }, { kind: "component", type: XTreeComponent, selector: "x-tree" }, { kind: "component", type: XTableComponent, selector: "x-table" }, { kind: "directive", type: XKeywordDirective, selector: "[x-keyword]" }, { kind: "component", type: XLinkComponent, selector: "x-link" }, { kind: "pipe", type: XI18nPipe, name: "xI18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
639
639
  }
640
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: XTransferComponent, decorators: [{
640
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XTransferComponent, decorators: [{
641
641
  type: Component,
642
642
  args: [{ selector: `${XTransferPrefix}`, standalone: true, imports: [
643
643
  NgClass,
@@ -654,6 +654,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
654
654
  XKeywordDirective,
655
655
  XLinkComponent,
656
656
  XI18nPipe
657
- ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XTransferComponent)], template: "<div #transfer class=\"x-transfer\" cdkDropListGroup>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left().footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left() }\"></ng-container>\r\n <div [ngStyle]=\"left().listStyle!\" class=\"x-transfer-list x-transfer-{{ type() }}\">\r\n @switch (type()) {\r\n @case ('list') {\r\n <ul\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left().list\"\r\n [cdkDropListDisabled]=\"!drag() && type() === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n @for (node of left().list; track node.id) {\r\n <li class=\"x-transfer-item\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left() }\"></ng-container>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n @case ('tree') {\r\n <x-tree\r\n [data]=\"left().list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left().searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n }\r\n @case ('table') {\r\n <x-table\r\n #leftTableCom\r\n [data]=\"tableData()\"\r\n [columns]=\"tableColumns()!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery()\"\r\n [total]=\"tableTotal()\"\r\n (activatedRowChange)=\"onTableCheckedRow($event!, left())\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left())\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left().tableHeadSearchTpl\"\r\n ></x-table>\r\n }\r\n }\r\n </div>\r\n @if (left().footerTpl) {\r\n <div class=\"x-transfer-footer\">\r\n <ng-container *ngTemplateOutlet=\"left().footerTpl!; context: { $source: left() }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button\r\n type=\"primary\"\r\n icon=\"fto-chevron-right\"\r\n [disabled]=\"left().disabledButton!\"\r\n (click)=\"move(left(), right())\"\r\n flat\r\n ></x-button>\r\n <x-button\r\n type=\"primary\"\r\n icon=\"fto-chevron-left\"\r\n [disabled]=\"right().disabledButton!\"\r\n (click)=\"move(right(), left())\"\r\n flat\r\n ></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right().footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right() }\"></ng-container>\r\n\r\n <div [ngStyle]=\"right().listStyle!\" class=\"x-transfer-list\">\r\n @switch (type()) {\r\n @case ('table') {\r\n <x-table\r\n #rightTableCom\r\n [data]=\"right().list!\"\r\n [columns]=\"tableColumns()!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event!, right())\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right())\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right().tableHeadSearchTpl\"\r\n ></x-table>\r\n }\r\n @default {\r\n <ul\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right().list\"\r\n [cdkDropListDisabled]=\"!drag() || (drag() && type() !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n @for (node of right().list; track node.id) {\r\n <li class=\"x-transfer-item\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right() }\"\r\n ></ng-container>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n }\r\n </div>\r\n @if (right().footerTpl) {\r\n <div class=\"x-transfer-footer\">\r\n <ng-container *ngTemplateOutlet=\"right().footerTpl!; context: { $source: right() }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n @if (source.title && !source.hiddenCheckAll) {\r\n <x-checkbox\r\n [data]=\"[titleTpl() ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n single\r\n ></x-checkbox>\r\n }\r\n @if (source.title && source.hiddenCheckAll) {\r\n <span>{{ source.title }}</span>\r\n }\r\n @if (inverse() && type() === 'list') {\r\n <x-link class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n }\r\n </div>\r\n <ng-container\r\n *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n @if (search() && type() !== 'table') {\r\n <div class=\"x-transfer-search\">\r\n <x-input\r\n icon=\"fto-search\"\r\n [(ngModel)]=\"source.searchInput\"\r\n (ngModelChange)=\"onSearchInputChange(source)\"\r\n clearable\r\n ></x-input>\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl() ? nodeTpl() : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n single\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0;display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-tree{padding:0 .125rem}.x-transfer-item{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{margin:0;height:100%;padding:.25rem;list-style:none}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"] }]
657
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XTransferComponent)], template: "<div #transfer class=\"x-transfer\" cdkDropListGroup>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left().footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left() }\"></ng-container>\r\n <div [ngStyle]=\"left().listStyle!\" class=\"x-transfer-list x-transfer-{{ type() }}\">\r\n @switch (type()) {\r\n @case ('list') {\r\n <ul\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left().list\"\r\n [cdkDropListDisabled]=\"!drag() && type() === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n @for (node of left().list; track node.id) {\r\n <li class=\"x-transfer-item\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left() }\"></ng-container>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n @case ('tree') {\r\n <x-tree\r\n [data]=\"left().list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left().searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n }\r\n @case ('table') {\r\n <x-table\r\n #leftTableCom\r\n [data]=\"tableData()\"\r\n [columns]=\"tableColumns()!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery()\"\r\n [total]=\"tableTotal()\"\r\n (activatedRowChange)=\"onTableCheckedRow($event!, left())\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left())\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left().tableHeadSearchTpl\"\r\n ></x-table>\r\n }\r\n }\r\n </div>\r\n @if (left().footerTpl) {\r\n <div class=\"x-transfer-footer\">\r\n <ng-container *ngTemplateOutlet=\"left().footerTpl!; context: { $source: left() }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button\r\n type=\"primary\"\r\n icon=\"fto-chevron-right\"\r\n [disabled]=\"left().disabledButton!\"\r\n (click)=\"move(left(), right())\"\r\n flat\r\n ></x-button>\r\n <x-button\r\n type=\"primary\"\r\n icon=\"fto-chevron-left\"\r\n [disabled]=\"right().disabledButton!\"\r\n (click)=\"move(right(), left())\"\r\n flat\r\n ></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right().footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right() }\"></ng-container>\r\n\r\n <div [ngStyle]=\"right().listStyle!\" class=\"x-transfer-list\">\r\n @switch (type()) {\r\n @case ('table') {\r\n <x-table\r\n #rightTableCom\r\n [data]=\"right().list!\"\r\n [columns]=\"tableColumns()!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event!, right())\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right())\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right().tableHeadSearchTpl\"\r\n ></x-table>\r\n }\r\n @default {\r\n <ul\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right().list\"\r\n [cdkDropListDisabled]=\"!drag() || (drag() && type() !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n @for (node of right().list; track node.id) {\r\n <li class=\"x-transfer-item\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right() }\"\r\n ></ng-container>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n }\r\n </div>\r\n @if (right().footerTpl) {\r\n <div class=\"x-transfer-footer\">\r\n <ng-container *ngTemplateOutlet=\"right().footerTpl!; context: { $source: right() }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n @if (source.title && !source.hiddenCheckAll) {\r\n <x-checkbox\r\n [data]=\"[titleTpl() ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n single\r\n ></x-checkbox>\r\n }\r\n @if (source.title && source.hiddenCheckAll) {\r\n <span>{{ source.title }}</span>\r\n }\r\n @if (inverse() && type() === 'list') {\r\n <x-link class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n }\r\n </div>\r\n <ng-container\r\n *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n @if (search() && type() !== 'table') {\r\n <div class=\"x-transfer-search\">\r\n <x-input\r\n icon=\"fto-search\"\r\n [(ngModel)]=\"source.searchInput\"\r\n (ngModelChange)=\"onSearchInputChange(source)\"\r\n clearable\r\n ></x-input>\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl() ? nodeTpl() : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n single\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0}.x-transfer{display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-tree{padding:0 .125rem}.x-transfer-item{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{margin:0;height:100%;padding:.25rem;list-style:none}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"] }]
658
658
  }] });
659
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBSXZCLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFrQyxpQkFBaUIsRUFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN4SCxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsY0FBYyxFQUNkLFVBQVUsRUFDVixXQUFXLEVBRVgsWUFBWSxFQUNiLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUF3QixjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQWlCLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxjQUFjLEVBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQWdCLGVBQWUsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUN0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LGNBQWMsOENBQ2QsU0FBUzs7MkZBUUEsa0JBQWtCO2tCQXpCOUIsU0FBUzsrQkFDRSxHQUFHLGVBQWUsRUFBRSxjQUNsQixJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLGdCQUFnQjt3QkFDaEIsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxTQUFTO3FCQUNWLGlCQUdjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBpbmplY3QsXHJcbiAgdmlld0NoaWxkLFxyXG4gIHNpZ25hbCxcclxuICBjb21wdXRlZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYVHJhbnNmZXJQcmVmaXgsIFhUcmFuc2Zlck5vZGUsIFhUcmFuc2ZlclNvdXJjZSwgWFRyYW5zZmVyUHJvcGVydHksIFhUcmFuc2ZlclR5cGUgfSBmcm9tICcuL3RyYW5zZmVyLnByb3BlcnR5JztcclxuaW1wb3J0IHtcclxuICBYSXNDaGFuZ2UsXHJcbiAgWElzRW1wdHksXHJcbiAgWFNldERhdGEsXHJcbiAgWFJlbW92ZSxcclxuICBYSXNBcnJheSxcclxuICBYSXNPYmplY3QsXHJcbiAgWElzT2JqZWN0QXJyYXksXHJcbiAgWElzQm9vbGVhbixcclxuICBYSXNGdW5jdGlvbixcclxuICBYUmVzdWx0TGlzdCxcclxuICBYSXNVbmRlZmluZWRcclxufSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgdHJhbnNmZXJBcnJheUl0ZW0sIG1vdmVJdGVtSW5BcnJheSwgQ2RrRHJhZ0Ryb3AsIENka0RyYWcsIERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IFhWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQG5nLW5lc3QvdWkvYmFzZS1mb3JtJztcclxuaW1wb3J0IHsgWEkxOG5QaXBlLCBYSTE4blNlcnZpY2UsIFhJMThuVHJhbnNmZXIsIHpoX0NOIH0gZnJvbSAnQG5nLW5lc3QvdWkvaTE4bic7XHJcbmltcG9ydCB7IFhUcmVlQ29tcG9uZW50LCBYVHJlZU5vZGUgfSBmcm9tICdAbmctbmVzdC91aS90cmVlJztcclxuaW1wb3J0IHsgWFRhYmxlQ29sdW1uLCBYVGFibGVDb21wb25lbnQsIFhUYWJsZUhlYWRDaGVja2JveCB9IGZyb20gJ0BuZy1uZXN0L3VpL3RhYmxlJztcclxuaW1wb3J0IHsgTmdDbGFzcywgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBYT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnQG5nLW5lc3QvdWkvb3V0bGV0JztcclxuaW1wb3J0IHsgWENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvYnV0dG9uJztcclxuaW1wb3J0IHsgWElucHV0Q29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvaW5wdXQnO1xyXG5pbXBvcnQgeyBYS2V5d29yZERpcmVjdGl2ZSB9IGZyb20gJ0BuZy1uZXN0L3VpL2tleXdvcmQnO1xyXG5pbXBvcnQgeyBYTGlua0NvbXBvbmVudCB9IGZyb20gJ0BuZy1uZXN0L3VpL2xpbmsnO1xyXG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYVHJhbnNmZXJQcmVmaXh9YCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE5nQ2xhc3MsXHJcbiAgICBOZ1N0eWxlLFxyXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXHJcbiAgICBYT3V0bGV0RGlyZWN0aXZlLFxyXG4gICAgWENoZWNrYm94Q29tcG9uZW50LFxyXG4gICAgWEJ1dHRvbkNvbXBvbmVudCxcclxuICAgIFhJbnB1dENvbXBvbmVudCxcclxuICAgIFhUcmVlQ29tcG9uZW50LFxyXG4gICAgWFRhYmxlQ29tcG9uZW50LFxyXG4gICAgWEtleXdvcmREaXJlY3RpdmUsXHJcbiAgICBYTGlua0NvbXBvbmVudCxcclxuICAgIFhJMThuUGlwZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyYW5zZmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmFuc2Zlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbWFZhbHVlQWNjZXNzb3IoWFRyYW5zZmVyQ29tcG9uZW50KV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFhUcmFuc2ZlckNvbXBvbmVudCBleHRlbmRzIFhUcmFuc2ZlclByb3BlcnR5IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KFhJMThuU2VydmljZSk7XHJcblxyXG4gIGxlZnRUYWJsZUNvbSA9IHZpZXdDaGlsZChYVGFibGVDb21wb25lbnQpO1xyXG4gIHJpZ2h0VGFibGVDb20gPSB2aWV3Q2hpbGQoWFRhYmxlQ29tcG9uZW50KTtcclxuICBub2RlcyA9IHNpZ25hbDxYVHJhbnNmZXJOb2RlW10+KFtdKTtcclxuXHJcbiAgbGVmdCA9IHNpZ25hbDxYVHJhbnNmZXJTb3VyY2U+KHtcclxuICAgIGxpc3Q6IFtdLFxyXG4gICAgc2VhcmNoTGlzdDogW10sXHJcbiAgICBjaGVja2VkQ291bnQ6IDAsXHJcbiAgICBkaXJlY3Rpb246ICdsZWZ0JyxcclxuICAgIGRpc2FibGVkQnV0dG9uOiB0cnVlXHJcbiAgfSk7XHJcblxyXG4gIHJpZ2h0ID0gc2lnbmFsPFhUcmFuc2ZlclNvdXJjZT4oe1xyXG4gICAgbGlzdDogW10sXHJcbiAgICBzZWFyY2hMaXN0OiBbXSxcclxuICAgIGNoZWNrZWRDb3VudDogMCxcclxuICAgIGRpcmVjdGlvbjogJ3JpZ2h0JyxcclxuICAgIGRpc2FibGVkQnV0dG9uOiB0cnVlXHJcbiAgfSk7XHJcblxyXG4gIHNlYXJjaElucHV0ID0gc2lnbmFsKCcnKTtcclxuICBzZWFyY2hJbnB1dExlZnRDaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgc2VhcmNoSW5wdXRSaWdodENoYW5nZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBzZWFyY2hEZWJvdW5jZVRpbWUgPSBzaWduYWwoMjAwKTtcclxuICBsb2NhbGUgPSB0b1NpZ25hbCh0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlLnBpcGUobWFwKCh4KSA9PiB4LnRyYW5zZmVyIGFzIFhJMThuVHJhbnNmZXIpKSwge1xyXG4gICAgaW5pdGlhbFZhbHVlOiB6aF9DTi50cmFuc2ZlclxyXG4gIH0pO1xyXG4gIGxvY2FsVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAodGhpcy50eXBlKCkgPT09ICd0cmVlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGUoKS50cmVlVGl0bGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGUoKS5saXN0VGl0bGU7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgcHJpdmF0ZSB1blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHRyZWVBY3RpdmF0ZWRJZCA9IHNpZ25hbDxhbnlbXT4oW10pO1xyXG4gIHRhYmxlRGF0YSA9IHNpZ25hbDxYVHJhbnNmZXJOb2RlW10+KFtdKTtcclxuICB0YWJsZUNoZWNrYm94Q29sdW1uID0gc2lnbmFsPFhUYWJsZUNvbHVtbiB8IG51bGw+KG51bGwpO1xyXG4gIGlzT2JqZWN0QXJyYXkgPSBzaWduYWwoZmFsc2UpO1xyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICBpZiAoWElzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMudHJlZUFjdGl2YXRlZElkLnNldChbLi4udmFsdWVdKTtcclxuICAgICAgaWYgKFhJc09iamVjdEFycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMuaXNPYmplY3RBcnJheS5zZXQodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2V0TGlzdCh0aGlzLm5vZGVzKCkpO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuaXNPYmplY3RBcnJheSgpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlKCkubWFwKCh4OiBhbnkpID0+IHguaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMudmFsdWUoKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldFRpdGxlcygpO1xyXG4gICAgdGhpcy5zZXRMaXN0U3R5bGUoKTtcclxuICAgIHRoaXMuc2V0SGlkZGVuQ2hlY2tBbGwoKTtcclxuICAgIHRoaXMuZ2V0VGFibGVDaGVja0NvbHVtbigpO1xyXG4gICAgdGhpcy5zZXRGb290ZXJUcGwoKTtcclxuICAgIHRoaXMuc2V0VGFibGVIZWFkU2VhcmNoVHBsKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hJbnB1dExlZnRDaGFuZ2VcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKCkpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy51blN1YmplY3QpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNldFNlYXJjaElucHV0Q2hhbmdlKHRoaXMubGVmdCgpKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaElucHV0UmlnaHRDaGFuZ2VcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKCkpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy51blN1YmplY3QpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNldFNlYXJjaElucHV0Q2hhbmdlKHRoaXMucmlnaHQoKSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgeyBkYXRhIH0gPSBjaGFuZ2VzO1xyXG4gICAgWElzQ2hhbmdlKGRhdGEpICYmIHRoaXMuc2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuU3ViamVjdC5uZXh0KCk7XHJcbiAgICB0aGlzLnVuU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hJbnB1dENoYW5nZShzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKHNvdXJjZS5kaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICB0aGlzLnNlYXJjaElucHV0TGVmdENoYW5nZS5uZXh0KHNvdXJjZS5zZWFyY2hJbnB1dCEpO1xyXG4gICAgfSBlbHNlIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXRSaWdodENoYW5nZS5uZXh0KHNvdXJjZS5zZWFyY2hJbnB1dCEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VhcmNoSW5wdXRDaGFuZ2Uoc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmIChYSXNVbmRlZmluZWQoc291cmNlLnNlYXJjaElucHV0KSkgcmV0dXJuO1xyXG4gICAgaWYgKFhJc0VtcHR5KHNvdXJjZS5zZWFyY2hJbnB1dCkpIHtcclxuICAgICAgc291cmNlLmxpc3QgPSBbLi4uc291cmNlLnNlYXJjaExpc3QhXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy50eXBlKCkpIHtcclxuICAgICAgICBjYXNlICdsaXN0JzpcclxuICAgICAgICAgIHNvdXJjZS5saXN0ID0gc291cmNlLnNlYXJjaExpc3Q/LmZpbHRlcigoeCkgPT4geC5sYWJlbC5pbmRleE9mKHNvdXJjZS5zZWFyY2hJbnB1dCkgPj0gMCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICd0cmVlJzpcclxuICAgICAgICAgIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgIHNvdXJjZS5saXN0ID0gc291cmNlLnNlYXJjaExpc3Q/LmZpbHRlcigoeCkgPT4geC5sYWJlbC5pbmRleE9mKHNvdXJjZS5zZWFyY2hJbnB1dCkgPj0gMCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5kaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICAgICAgICBsZXQgc2VhcmNoTGlzdCA9IHNvdXJjZS5zZWFyY2hMaXN0Py5maWx0ZXIoKHgpID0+IHgubGFiZWwuaW5kZXhPZihzb3VyY2Uuc2VhcmNoSW5wdXQpID49IDApITtcclxuICAgICAgICAgICAgbGV0IHBhcmVudHM6IFhUcmFuc2Zlck5vZGVbXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kUGFyZW50ID0gKGl0ZW06IFhUcmFuc2Zlck5vZGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWl0ZW0ucGlkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IHNvdXJjZS5zZWFyY2hMaXN0Py5maW5kKCh4KSA9PiB4LmlkID09PSBpdGVtLnBpZCk7XHJcbiAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiAhcGFyZW50cy5zb21lKCh4KSA9PiB4LmlkID09PSBwYXJlbnQhLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICBmaW5kUGFyZW50KHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHNlYXJjaExpc3QpIHtcclxuICAgICAgICAgICAgICBmaW5kUGFyZW50KGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNvdXJjZS5saXN0ID0gWy4uLnNlYXJjaExpc3QsIC4uLnBhcmVudHNdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAndGFibGUnOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSgpLCBzb3VyY2UpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja2VkQWxsQ2hhbmdlKCRldmVudDogYm9vbGVhbiwgc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGxldCBsaXN0OiBYVHJhbnNmZXJOb2RlW10gPSAoc291cmNlLmxpc3Q/LmZpbHRlcigoeCkgPT4gIXguZGlzYWJsZWQpIGFzIFhUcmFuc2Zlck5vZGVbXSkubWFwKCh4KSA9PiB7XHJcbiAgICAgIHguY2hlY2tlZCA9ICRldmVudDtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLnR5cGUoKSA9PT0gJ3RyZWUnICYmIHNvdXJjZS5kaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICB0aGlzLnRyZWVBY3RpdmF0ZWRJZC5zZXQoXHJcbiAgICAgICAgJGV2ZW50ID8gc291cmNlLmxpc3QhLm1hcCgoeCkgPT4geC5pZCkhIDogc291cmNlLmxpc3QhLmZpbHRlcigoeCkgPT4geC5kaXNhYmxlZCkubWFwKCh4KSA9PiB4LmlkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgc291cmNlLmNoZWNrZWRDb3VudCA9ICRldmVudCA/IGxpc3QubGVuZ3RoIDogMDtcclxuICAgIHNvdXJjZS5pbmRldGVybWluYXRlID0gJGV2ZW50O1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChzb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tlZENoYW5nZSgkZXZlbnQ6IGJvb2xlYW4sIHNvdXJjZTogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBpZiAoISRldmVudCkgKHNvdXJjZS5jaGVja2VkQ291bnQgYXMgbnVtYmVyKS0tO1xyXG4gICAgZWxzZSAoc291cmNlLmNoZWNrZWRDb3VudCBhcyBudW1iZXIpKys7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoc291cmNlKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoc291cmNlKTtcclxuICB9XHJcblxyXG4gIG1vdmUoZnJvbTogWFRyYW5zZmVyU291cmNlLCB0bzogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBpZiAoZnJvbS5kaXNhYmxlZEJ1dHRvbikgcmV0dXJuO1xyXG4gICAgc3dpdGNoICh0aGlzLnR5cGUoKSkge1xyXG4gICAgICBjYXNlICdsaXN0JzpcclxuICAgICAgICB0aGlzLm1vdmVMaXN0KGZyb20sIHRvKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndHJlZSc6XHJcbiAgICAgICAgdGhpcy5tb3ZlVHJlZShmcm9tLCB0byk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RhYmxlJzpcclxuICAgICAgICB0aGlzLm1vdmVUYWJsZShmcm9tLCB0byk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVMaXN0KGZyb206IFhUcmFuc2ZlclNvdXJjZSwgdG86IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgbGV0IGNoZWNrZWRJdGVtcyA9IGZyb20ubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCAmJiB4LmNoZWNrZWQpITtcclxuICAgIGxldCBqID0gMDtcclxuICAgIGNoZWNrZWRJdGVtcy5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgIGxldCBpbmRleCA9IGZyb20ubGlzdD8uaW5kZXhPZih4KSBhcyBudW1iZXI7XHJcbiAgICAgIHguY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShmcm9tLmxpc3QhLCB0by5saXN0ISwgaW5kZXgsIGopO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2goKSkge1xyXG4gICAgICAgIGluZGV4ID0gZnJvbS5zZWFyY2hMaXN0Py5pbmRleE9mKHgpIGFzIG51bWJlcjtcclxuICAgICAgICB0cmFuc2ZlckFycmF5SXRlbShmcm9tLnNlYXJjaExpc3QhLCB0by5zZWFyY2hMaXN0ISwgaW5kZXgsIGopO1xyXG4gICAgICB9XHJcbiAgICAgIGorKztcclxuICAgIH0pO1xyXG4gICAgZnJvbS5saXN0ID0gWy4uLmZyb20ubGlzdCFdO1xyXG4gICAgdG8ubGlzdCA9IFsuLi50by5saXN0IV07XHJcbiAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0TGlzdENvdW50KCdsaXN0JywgZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRTZWFyY2hMaXN0KGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbW92ZVRyZWUoZnJvbTogWFRyYW5zZmVyU291cmNlLCB0bzogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBsZXQgY2hlY2tlZEl0ZW1zOiBYVHJhbnNmZXJOb2RlW10gPSBbXTtcclxuICAgIGlmICh0by5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gZnJvbS5saXN0Py5maWx0ZXIoXHJcbiAgICAgICAgKHgpID0+ICF4LmRpc2FibGVkICYmICFYSXNFbXB0eSh0aGlzLnRyZWVBY3RpdmF0ZWRJZCgpKSAmJiB0aGlzLnRyZWVBY3RpdmF0ZWRJZCgpLmluY2x1ZGVzKHguaWQpXHJcbiAgICAgICkhO1xyXG4gICAgICBjaGVja2VkSXRlbXMuZm9yRWFjaCgoeDogWFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgICAgeC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgeC5jaGFuZ2UgJiYgeC5jaGFuZ2UoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRvLmxpc3Q/LnVuc2hpZnQoXHJcbiAgICAgICAgLi4uY2hlY2tlZEl0ZW1zLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgbGV0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgcmVzLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJlcy5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndHJlZScsIGZyb20pO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIHRvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrZWRJdGVtcyA9IFhSZW1vdmUoZnJvbS5saXN0ISwgKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCEpO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2goKSkge1xyXG4gICAgICAgIFhSZW1vdmUoZnJvbS5zZWFyY2hMaXN0ISwgKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCEpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgY2hlY2tlZEl0ZW1zKSB7XHJcbiAgICAgICAgbGV0IG5vZGU6IFhUcmVlTm9kZSA9IHRvLmxpc3Q/LmZpbmQoKHgpID0+IHguaWQgPT09IGl0ZW0uaWQpITtcclxuICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgbm9kZS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBub2RlLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLnRyZWVBY3RpdmF0ZWRJZCgpLmZpbmRJbmRleCgoeCkgPT4geCA9PT0gbm9kZS5pZCk7XHJcbiAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy50cmVlQWN0aXZhdGVkSWQudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgeC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgICByZXR1cm4gWy4uLnhdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG5vZGUuY2hhbmdlICYmIG5vZGUuY2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0cmVlJywgdG8pO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIGZyb20pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0TGlzdENvdW50KCdsaXN0JywgZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFNlYXJjaExpc3QoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlVGFibGUoZnJvbTogWFRyYW5zZmVyU291cmNlLCB0bzogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBsZXQgY2hlY2tlZEl0ZW1zOiBYVHJhbnNmZXJOb2RlW10gPSBbXTtcclxuICAgIGlmICh0by5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gZnJvbS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCkhO1xyXG4gICAgICB0by5saXN0ID0gW1xyXG4gICAgICAgIC4uLmNoZWNrZWRJdGVtcy5tYXAoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgeC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB4LmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXMuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KSxcclxuICAgICAgICAuLi50by5saXN0IVxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YS5zZXQoWy4uLmZyb20ubGlzdCFdKTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ3RhYmxlJywgZnJvbSk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgdG8pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gWFJlbW92ZShmcm9tLmxpc3QhLCAoeCkgPT4gIXguZGlzYWJsZWQgJiYgeC5jaGVja2VkISk7XHJcbiAgICAgIGNvbnN0IGlkcyA9IGNoZWNrZWRJdGVtcy5tYXAoKHgpID0+IHguaWQpO1xyXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIHRvLmxpc3QhKSB7XHJcbiAgICAgICAgaWYgKGlkcy5pbmNsdWRlcyhpdGVtLmlkKSkge1xyXG4gICAgICAgICAgaXRlbS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBpdGVtLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZyb20ubGlzdCA9IFsuLi5mcm9tLmxpc3QhXTtcclxuICAgICAgdGhpcy50YWJsZURhdGEuc2V0KFsuLi50by5saXN0IV0pO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndGFibGUnLCB0byk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgZnJvbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldExpc3RDb3VudCgndGFibGUnLCBmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFNlYXJjaExpc3QoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgZHJvcENkayhldmVudDogQ2RrRHJhZ0Ryb3A8WFRyYW5zZmVyTm9kZVtdIHwgdW5kZWZpbmVkLCBhbnk+KSB7XHJcbiAgICBjb25zdCBldiA9IGV2ZW50IGFzIENka0RyYWdEcm9wPFhUcmFuc2Zlck5vZGVbXT47XHJcbiAgICBpZiAoZXYucHJldmlvdXNDb250YWluZXIgPT09IGV2LmNvbnRhaW5lcikge1xyXG4gICAgICBtb3ZlSXRlbUluQXJyYXkoZXYuY29udGFpbmVyLmRhdGEsIGV2LnByZXZpb3VzSW5kZXgsIGV2LmN1cnJlbnRJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShldi5wcmV2aW91c0NvbnRhaW5lci5kYXRhLCBldi5jb250YWluZXIuZGF0YSwgZXYucHJldmlvdXNJbmRleCwgZXYuY3VycmVudEluZGV4KTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ2xpc3QnLCB0aGlzLmxlZnQoKSwgdGhpcy5yaWdodCgpKTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQWxsKHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgICB0aGlzLnNldExpc3RDb3VudCgnbGlzdCcsIHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJlZGljYXRlKGl0ZW06IENka0RyYWc8WFRyYW5zZmVyTm9kZT4pIHtcclxuICAgIHJldHVybiAhaXRlbS5kYXRhLmRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeU5vZGUoX2luZGV4OiBudW1iZXIsIGl0ZW06IFhUcmFuc2Zlck5vZGUpIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxuXHJcbiAgc2V0TGlzdENvdW50KHR5cGU6IFhUcmFuc2ZlclR5cGUgPSAnbGlzdCcsIC4uLnNvdXJjZXM6IFhUcmFuc2ZlclNvdXJjZVtdKSB7XHJcbiAgICBpZiAoWydsaXN0JywgJ3RyZWUnXS5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIHNvdXJjZS5jb3VudCA9IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RhYmxlJykge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcclxuICAgICAgICAgIHNvdXJjZS5jb3VudCA9IHRoaXMudGFibGVUb3RhbCgpIC0gdGhpcy5yaWdodCgpLmxpc3QhLmxlbmd0aCB8fCAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzb3VyY2UuY291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCkubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UcmVlTm9kZUNsaWNrKF9ub2RlOiBYVHJlZU5vZGUpIHtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0cmVlJywgdGhpcy5sZWZ0KCkpO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKHRoaXMubGVmdCgpKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQodGhpcy5sZWZ0KCkpO1xyXG4gIH1cclxuXHJcbiAgb25UYWJsZUNoZWNrZWRSb3cocm93OiBYVHJhbnNmZXJOb2RlLCBzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4oKSkgcmV0dXJuO1xyXG4gICAgbGV0IGNoZWNrZWQgPSByb3dbdGhpcy50YWJsZUNoZWNrYm94Q29sdW1uKCkhLmlkXTtcclxuICAgIHJvdy5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0YWJsZScsIHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoc291cmNlKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoc291cmNlKTtcclxuICB9XHJcblxyXG4gIG9uVGFibGVDaGVja2VkQWxsKHJvdzogWFRhYmxlSGVhZENoZWNrYm94LCBzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4oKSkgcmV0dXJuO1xyXG4gICAgbGV0IGNoZWNrZWQgPSByb3cuY2hlY2tib3hbdGhpcy50YWJsZUNoZWNrYm94Q29sdW1uKCkhLmlkXTtcclxuICAgIGZvciAobGV0IGl0ZW0gb2Ygc291cmNlLmxpc3QhKSB7XHJcbiAgICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0YWJsZScsIHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHNvdXJjZSk7XHJcbiAgfVxyXG5cclxuICBvbkludmVyc2Uoc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGZvciAobGV0IGl0ZW0gb2Ygc291cmNlLmxpc3QhKSB7XHJcbiAgICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9ICFpdGVtLmNoZWNrZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCB0eXBlID0gYCR7dGhpcy50eXBlfWAgYXMgWFRyYW5zZmVyVHlwZTtcclxuICAgIGlmICh0eXBlID09PSAndHJlZScgJiYgc291cmNlLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICB0eXBlID0gJ2xpc3QnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDaGVja2VkQ291bnQodHlwZSwgc291cmNlKTtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbChzb3VyY2UpO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChzb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUYWJsZUNoZWNrQ29sdW1uKCkge1xyXG4gICAgaWYgKHRoaXMudHlwZSgpICE9PSAndGFibGUnIHx8IFhJc0VtcHR5KHRoaXMudGFibGVDb2x1bW5zKCkpKSByZXR1cm47XHJcbiAgICB0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4uc2V0KHRoaXMudGFibGVDb2x1bW5zKCkhLmZpbmQoKHgpID0+IHgucm93Q2hlY2tlZCkhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2hlY2tlZEFsbCguLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgaWYgKChzb3VyY2UuY2hlY2tlZENvdW50IGFzIG51bWJlcikgPiAwKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5jaGVja2VkQ291bnQgPT09IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKS5sZW5ndGgpIHtcclxuICAgICAgICAgIHNvdXJjZS5jaGVja2VkQWxsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc291cmNlLmNoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgICAgIHNvdXJjZS5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc291cmNlLmNoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgICBzb3VyY2UuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENoZWNrZWRDb3VudCh0eXBlOiBYVHJhbnNmZXJUeXBlID0gJ2xpc3QnLCAuLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgaWYgKFsndGFibGUnLCAnbGlzdCddLmluY2x1ZGVzKHR5cGUpKSB7XHJcbiAgICAgICAgc291cmNlLmNoZWNrZWRDb3VudCA9IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCkubGVuZ3RoO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0cmVlJykge1xyXG4gICAgICAgIHNvdXJjZS5jaGVja2VkQ291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+ICF4LmRpc2FibGVkICYmICFYSXNFbXB0eSh0aGlzLnRyZWVBY3RpdmF0ZWRJZCgpKSAmJiB0aGlzLnRyZWVBY3RpdmF0ZWRJZCgpLmluY2x1ZGVzKHguaWQpXHJcbiAgICAgICAgKS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QnV0dG9uRGlzYWJsZWQoLi4uc291cmNlczogWFRyYW5zZmVyU291cmNlW10pIHtcclxuICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSBzb3VyY2UuZGlzYWJsZWRCdXR0b24gPSBzb3VyY2UuY2hlY2tlZENvdW50ID09PSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWx1ZSgpIHtcclxuICAgIGlmICh0aGlzLmlzT2JqZWN0QXJyYXkoKSkge1xyXG4gICAgICB0aGlzLnZhbHVlLnNldCh0aGlzLnJpZ2h0KCkubGlzdCEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52YWx1ZS5zZXQodGhpcy5yaWdodCgpLmxpc3Q/Lm1hcCgoeCkgPT4geC5pZCkhKTtcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2UgJiYgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWFyY2hMaXN0KC4uLnNvdXJjZXM6IFhUcmFuc2ZlclNvdXJjZVtdKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2goKSkge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIGlmIChYSXNFbXB0eShzb3VyY2Uuc2VhcmNoSW5wdXQpKSB7XHJcbiAgICAgICAgICBzb3VyY2Uuc2VhcmNoTGlzdCA9IFsuLi4oc291cmNlLmxpc3QgYXMgWFRyYW5zZmVyTm9kZVtdKV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy50eXBlKCkgPT09ICd0YWJsZScpIHtcclxuICAgICAgdGhpcy5nZXRUYWJsZURhdGEoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgWFNldERhdGE8WFRyYW5zZmVyTm9kZT4odGhpcy5kYXRhKCksIHRoaXMudW5TdWJqZWN0KS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgdGhpcy5zZXRMaXN0KHgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldExpc3QoZGF0YTogWFRyYW5zZmVyTm9kZVtdKSB7XHJcbiAgICBpZiAoWElzRW1wdHkoZGF0YSkpIHJldHVybjtcclxuICAgIHN3aXRjaCAodGhpcy50eXBlKCkpIHtcclxuICAgICAgY2FzZSAnbGlzdCc6XHJcbiAgICAgICAgdGhpcy5ub2Rlcy5zZXQoZGF0YSk7XHJcbiAgICAgICAgaWYgKCFYSXNFbXB0eSh0aGlzLnZhbHVlcygpKSkge1xyXG4gICAgICAgICAgdGhpcy5sZWZ0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICB4Lmxpc3QgPSB0aGlzLm5vZGVzKCkuZmlsdGVyKCh4KSA9PiB0aGlzLnZhbHVlcygpLmluZGV4T2YoeC5pZCkgPCAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnJpZ2h0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICB4Lmxpc3QgPSB0aGlzLm5vZGVzKCkuZmlsdGVyKCh4KSA9PiB0aGlzLnZhbHVlcygpLmluZGV4T2YoeC5pZCkgPj0gMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxlZnQudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgIHgubGlzdCA9IFsuLi50aGlzLm5vZGVzKCldO1xyXG4gICAgICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSgpLCB0aGlzLmxlZnQoKSwgdGhpcy5yaWdodCgpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndHJlZSc6XHJcbiAgICAgICAgdGhpcy5ub2Rlcy5zZXQoZGF0YSk7XHJcbiAgICAgICAgdGhpcy5zZXRUcmVlTm9kZURpc2FibGVkKCk7XHJcbiAgICAgICAgdGhpcy5sZWZ0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgeC5saXN0ID0gWy4uLnRoaXMubm9kZXMoKV07XHJcbiAgICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFYSXNFbXB0eSh0aGlzLnZhbHVlcygpKSkge1xyXG4gICAgICAgICAgdGhpcy5yaWdodC51cGRhdGUoKHopID0+IHtcclxuICAgICAgICAgICAgei5saXN0ID0gdGhpcy5ub2RlcygpXHJcbiAgICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4gdGhpcy52YWx1ZXMoKS5pbmRleE9mKHguaWQpID49IDApXHJcbiAgICAgICAgICAgICAgLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgICAgICAgcmVzLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJlcy5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4ueiB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U2VhcmNoTGlzdCh0aGlzLmxlZnQoKSwgdGhpcy5yaWdodCgpKTtcclxuICAgICAgICB0aGlzLnNldExpc3RDb3VudCh0aGlzLnR5cGUoKSwgdGhpcy5sZWZ0KCksIHRoaXMucmlnaHQoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RhYmxlJzpcclxuICAgICAgICB0aGlzLm5vZGVzLnNldChkYXRhKTtcclxuICAgICAgICB0aGlzLnNldFRhYmxlRGF0YURpc2FibGVkKCk7XHJcbiAgICAgICAgdGhpcy5sZWZ0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgeC5saXN0ID0gWy4uLnRoaXMubm9kZXMoKV07XHJcbiAgICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFYSXNFbXB0eSh0aGlzLnZhbHVlcygpKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RBcnJheSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmlnaHQudXBkYXRlKCh6KSA9PiB7XHJcbiAgICAgICAgICAgICAgei5saXN0ID0gW1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy52YWx1ZSgpLm1hcCgoeDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCByZXMgPSB7IC4uLnggfTtcclxuICAgICAgICAgICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHJlcy5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ueiB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmlnaHQudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgeC5saXN0ID0gWy4uLnRoaXMudmFsdWUoKV07XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSgpLCB0aGlzLmxlZnQoKSwgdGhpcy5yaWdodCgpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRhYmxlRGF0YSgpIHtcclxuICAgIGlmIChYSXNGdW5jdGlvbih0aGlzLmRhdGEoKSkpIHtcclxuICAgICAgKHRoaXMuZGF0YSgpIGFzIEZ1bmN0aW9uKSh0aGlzLnRhYmxlSW5kZXgoKSwgdGhpcy50YWJsZVNpemUoKSwgdGhpcy50YWJsZVF1ZXJ5KCkpLnN1YnNjcmliZShcclxuICAgICAgICAoeDogWFJlc3VsdExpc3Q8WFRyYW5zZmVyTm9kZT4pID0+IHtcclxuICAgICAgICAgIHRoaXMudGFibGVUb3RhbC5zZXQoeC50b3RhbCEpO1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEuc2V0KHgubGlzdCEpO1xyXG4gICAgICAgICAgdGhpcy5zZXRMaXN0KHgubGlzdCEpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGl0bGVzKCkge1xyXG4gICAgbGV0IHRpdGxlczogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmIChYSXNFbXB0eSh0aGlzLnRpdGxlcygpKSkge1xyXG4gICAgICB0aXRsZXMgPSBbdGhpcy5sb2NhbFRpdGxlKCkhLCB0aGlzLmxvY2FsZSgpLnNlbGVjdGVkVGl0bGUhXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRpdGxlcyA9IHRoaXMudGl0bGVzKCkhO1xyXG4gICAgfVxyXG4gICAgaWYgKHRpdGxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGVmdC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4LnRpdGxlID0gdGl0bGVzWzBdO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGl0bGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5yaWdodC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4LnRpdGxlID0gdGl0bGVzWzFdO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldExpc3RTdHlsZSgpIHtcclxuICAgIGlmIChYSXNFbXB0eSh0aGlzLmxpc3RTdHlsZSgpKSkgcmV0dXJuO1xyXG4gICAgbGV0IHN0eWxlczogb2JqZWN0W10gPSBbXTtcclxuICAgIGlmIChYSXNPYmplY3QodGhpcy5saXN0U3R5bGUoKSkpIHtcclxuICAgICAgc3R5bGVzID0gW3RoaXMubGlzdFN0eWxlKCkhLCB0aGlzLmxpc3RTdHlsZSgpIV07XHJcbiAgICB9IGVsc2UgaWYgKFhJc09iamVjdEFycmF5KHRoaXMubGlzdFN0eWxlKCkpKSB7XHJcbiAgICAgIHN0eWxlcyA9IHRoaXMubGlzdFN0eWxlKCkgYXMgb2JqZWN0W107XHJcbiAgICB9XHJcbiAgICBpZiAoc3R5bGVzLmxlbmd0aCA+IDApXHJcbiAgICAgIHRoaXMubGVmdC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4Lmxpc3RTdHlsZSA9IHN0eWxlc1swXTtcclxuICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHN0eWxlcy5sZW5ndGggPiAxKVxyXG4gICAgICB0aGlzLnJpZ2h0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgIHgubGlzdFN0eWxlID0gc3R5bGVzWzFdO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRyZWVOb2RlRGlzYWJsZWQoKSB7XHJcbiAgICBpZiAoIVhJc0VtcHR5KHRoaXMudmFsdWVzKCkpICYmIHRoaXMubm9kZXMoKSkge1xyXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMubm9kZXMoKSkge1xyXG4gICAgICAgIGxldCBoYXNJbiA9IHRoaXMudmFsdWVzKCkuaW5kZXhPZihpdGVtLmlkKSA+PSAwO1xyXG4gICAgICAgIGl0ZW0uZGlzYWJsZWQgPSBoYXNJbjtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSBoYXNJbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUYWJsZURhdGFEaXNhYmxlZCgpIHtcclxuICAgIGlmICghWElzRW1wdHkodGhpcy52YWx1ZXMoKSkgJiYgdGhpcy5ub2RlcygpKSB7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5ub2RlcygpKSB7XHJcbiAgICAgICAgbGV0IGhhc0luID0gdGhpcy52YWx1ZXMoKS5pbmRleE9mKGl0ZW0uaWQpID49IDA7XHJcbiAgICAgICAgaXRlbS5kaXNhYmxlZCA9IGhhc0luO1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IGhhc0luO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEhpZGRlbkNoZWNrQWxsKCkge1xyXG4gICAgaWYgKFhJc0VtcHR5KHRoaXMuaGlkZGVuQ2hlY2tBbGwoKSkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmhpZGRlbkNoZWNrQWxsKCkhLmxlbmd0aCA+IDAgJiYgWElzQm9vbGVhbih0aGlzLmhpZGRlbkNoZWNrQWxsKCkhWzBdKSkge1xyXG4gICAgICB0aGlzLmxlZnQudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgeC5oaWRkZW5DaGVja0FsbCA9IHRoaXMuaGlkZGVuQ2hlY2tBbGwoKSFbMF07XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmhpZGRlbkNoZWNrQWxsKCkhLmxlbmd0aCA+IDEgJiYgWElzQm9vbGVhbih0aGlzLmhpZGRlbkNoZWNrQWxsKCkhWzFdKSkge1xyXG4gICAgICB0aGlzLnJpZ2h0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgIHguaGlkZGVuQ2hlY2tBbGwgPSB0aGlzLmhpZGRlbkNoZWNrQWxsKCkhWzFdO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZvb3RlclRwbCgpIHtcclxuICAgIGlmIChYSXNVbmRlZmluZWQodGhpcy5mb290ZXJUcGwoKSkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmZvb3RlclRwbCgpIS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGVmdC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4LmZvb3RlclRwbCA9IHRoaXMuZm9vdGVyVHBsKCkhWzBdO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mb290ZXJUcGwoKSEubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLnJpZ2h0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgIHguZm9vdGVyVHBsID0gdGhpcy5mb290ZXJUcGwoKSFbMV07XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGFibGVIZWFkU2VhcmNoVHBsKCkge1xyXG4gICAgaWYgKFhJc1VuZGVmaW5lZCh0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCgpKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMudGFibGVIZWFkU2VhcmNoVHBsKCkhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5sZWZ0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgIHgudGFibGVIZWFkU2VhcmNoVHBsID0gdGhpcy50YWJsZUhlYWRTZWFyY2hUcGwoKSFbMF07XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCgpIS5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMucmlnaHQudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgeC50YWJsZUhlYWRTZWFyY2hUcGwgPSB0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCgpIVsxXTtcclxuICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICN0cmFuc2ZlciBjbGFzcz1cIngtdHJhbnNmZXJcIiBjZGtEcm9wTGlzdEdyb3VwPlxyXG4gIDxkaXYgY2xhc3M9XCJ4LXRyYW5zZmVyLWJveFwiIFtjbGFzcy54LXRyYW5zZmVyLWhhcy1mb290ZXJdPVwibGVmdCgpLmZvb3RlclRwbFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNvdXJjZVRpdGxlVHBsOyBjb250ZXh0OiB7IHNvdXJjZTogbGVmdCgpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW25nU3R5bGVdPVwibGVmdCgpLmxpc3RTdHlsZSFcIiBjbGFzcz1cIngtdHJhbnNmZXItbGlzdCB4LXRyYW5zZmVyLXt7IHR5cGUoKSB9fVwiPlxyXG4gICAgICBAc3dpdGNoICh0eXBlKCkpIHtcclxuICAgICAgICBAY2FzZSAoJ2xpc3QnKSB7XHJcbiAgICAgICAgICA8dWxcclxuICAgICAgICAgICAgY2RrRHJvcExpc3RcclxuICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wQ2RrKCRldmVudClcIlxyXG4gICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImxlZnQoKS5saXN0XCJcclxuICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWcoKSAmJiB0eXBlKCkgPT09ICdsaXN0J1wiXHJcbiAgICAgICAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cInByZWRpY2F0ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwieC10cmFuc2Zlci1kcm9wbGlzdFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEBmb3IgKG5vZGUgb2YgbGVmdCgpLmxpc3Q7IHRyYWNrIG5vZGUuaWQpIHtcclxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ4LXRyYW5zZmVyLWl0ZW1cIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJub2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlTm9kZVRwbDsgY29udGV4dDogeyBub2RlOiBub2RlLCBzb3VyY2U6IGxlZnQoKSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGNhc2UgKCd0cmVlJykge1xyXG4gICAgICAgICAgPHgtdHJlZVxyXG4gICAgICAgICAgICBbZGF0YV09XCJsZWZ0KCkubGlzdCFcIlxyXG4gICAgICAgICAgICBtdWx0aXBsZVxyXG4gICAgICAgICAgICBhbGxvd01hbnlBY3RpdmF0ZWRcclxuICAgICAgICAgICAgWyhhY3RpdmF0ZWRJZCldPVwidHJlZUFjdGl2YXRlZElkXCJcclxuICAgICAgICAgICAgKG5vZGVDbGljayk9XCJvblRyZWVOb2RlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtsYWJlbFRwbF09XCJ0cmVlTGFiZWxUcGxcIlxyXG4gICAgICAgICAgPjwveC10cmVlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0cmVlTGFiZWxUcGwgbGV0LW5vZGU9XCIkbm9kZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIngtdHJhbnNmZXItdHJlZS1sYWJlbFwiIHgta2V5d29yZCBbdGV4dF09XCJsZWZ0KCkuc2VhcmNoSW5wdXQhXCI+e3sgbm9kZS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBjYXNlICgndGFibGUnKSB7XHJcbiAgICAgICAgICA8eC10YWJsZVxyXG4gICAgICAgICAgICAjbGVmdFRhYmxlQ29tXHJcbiAgICAgICAgICAgIFtkYXRhXT1cInRhYmxlRGF0YSgpXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwidGFibGVDb2x1bW5zKCkhXCJcclxuICAgICAgICAgICAgWyhzaXplKV09XCJ0YWJsZVNpemVcIlxyXG4gICAgICAgICAgICBbKGluZGV4KV09XCJ0YWJsZUluZGV4XCJcclxuICAgICAgICAgICAgKGluZGV4Q2hhbmdlKT1cImdldFRhYmxlRGF0YSgpXCJcclxuICAgICAgICAgICAgW3F1ZXJ5XT1cInRhYmxlUXVlcnkoKVwiXHJcbiAgICAgICAgICAgIFt0b3RhbF09XCJ0YWJsZVRvdGFsKClcIlxyXG4gICAgICAgICAgICAoYWN0aXZhdGVkUm93Q2hhbmdlKT1cIm9uVGFibGVDaGVja2VkUm93KCRldmVudCEsIGxlZnQoKSlcIlxyXG4gICAgICAgICAgICAoaGVhZENoZWNrYm94Q2hhbmdlKT1cIm9uVGFibGVDaGVja2VkQWxsKCRldmVudCwgbGVmdCgpKVwiXHJcbiAgICAgICAgICAgIGhpZGRlbldyYXBCb3JkZXJcclxuICAgICAgICAgICAgaGlkZGVuUGFnaW5hdGlvbkJvcmRlclxyXG4gICAgICAgICAgICBzaG93RWxsaXBzaXM9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIHNob3dUb3RhbD1cImZhbHNlXCJcclxuICAgICAgICAgICAgcGFnaW5hdGlvblBvc2l0aW9uPVwiYm90dG9tLWNlbnRlclwiXHJcbiAgICAgICAgICAgIGFsbG93U2VsZWN0Um93PVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbaGVhZFNlYXJjaFRwbF09XCJsZWZ0KCkudGFibGVIZWFkU2VhcmNoVHBsXCJcclxuICAgICAgICAgID48L3gtdGFibGU+XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAobGVmdCgpLmZvb3RlclRwbCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1mb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGVmdCgpLmZvb3RlclRwbCE7IGNvbnRleHQ6IHsgJHNvdXJjZTogbGVmdCgpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItYnV0dG9uc1wiPlxyXG4gICAgPHgtYnV0dG9uXHJcbiAgICAgIHR5cGU9XCJwcmltYXJ5XCJcclxuICAgICAgaWNvbj1cImZ0by1jaGV2cm9uLXJpZ2h0XCJcclxuICAgICAgW2Rpc2FibGVkXT1cImxlZnQoKS5kaXNhYmxlZEJ1dHRvbiFcIlxyXG4gICAgICAoY2xpY2spPVwibW92ZShsZWZ0KCksIHJpZ2h0KCkpXCJcclxuICAgICAgZmxhdFxyXG4gICAgPjwveC1idXR0b24+XHJcbiAgICA8eC1idXR0b25cclxuICAgICAgdHlwZT1cInByaW1hcnlcIlxyXG4gICAgICBpY29uPVwiZnRvLWNoZXZyb24tbGVmdFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJyaWdodCgpLmRpc2FibGVkQnV0dG9uIVwiXHJcbiAgICAgIChjbGljayk9XCJtb3ZlKHJpZ2h0KCksIGxlZnQoKSlcIlxyXG4gICAgICBmbGF0XHJcbiAgICA+PC94LWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1ib3hcIiBbY2xhc3MueC10cmFuc2Zlci1oYXMtZm9vdGVyXT1cInJpZ2h0KCkuZm9vdGVyVHBsXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlVGl0bGVUcGw7IGNvbnRleHQ6IHsgc291cmNlOiByaWdodCgpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8ZGl2IFtuZ1N0eWxlXT1cInJpZ2h0KCkubGlzdFN0eWxlIVwiIGNsYXNzPVwieC10cmFuc2Zlci1saXN0XCI+XHJcbiAgICAgIEBzd2l0Y2ggKHR5cGUoKSkge1xyXG4gICAgICAgIEBjYXNlICgndGFibGUnKSB7XHJcbiAgICAgICAgICA8eC10YWJsZVxyXG4gICAgICAgICAgICAjcmlnaHRUYWJsZUNvbVxyXG4gICAgICAgICAgICBbZGF0YV09XCJyaWdodCgpLmxpc3QhXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwidGFibGVDb2x1bW5zKCkhXCJcclxuICAgICAgICAgICAgKGFjdGl2YXRlZFJvd0NoYW5nZSk9XCJvblRhYmxlQ2hlY2tlZFJvdygkZXZlbnQhLCByaWdodCgpKVwiXHJcbiAgICAgICAgICAgIChoZWFkQ2hlY2tib3hDaGFuZ2UpPVwib25UYWJsZUNoZWNrZWRBbGwoJGV2ZW50LCByaWdodCgpKVwiXHJcbiAgICAgICAgICAgIGhpZGRlbldyYXBCb3JkZXJcclxuICAgICAgICAgICAgaGlkZGVuUGFnaW5hdGlvbkJvcmRlclxyXG4gICAgICAgICAgICBzaG93UGFnaW5hdGlvbj1cImZhbHNlXCJcclxuICAgICAgICAgICAgc2hvd0VsbGlwc2lzPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBzaG93VG90YWw9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qb3NpdGlvbj1cImJvdHRvbS1jZW50ZXJcIlxyXG4gICAgICAgICAgICBhbGxvd1NlbGVjdFJvdz1cImZhbHNlXCJcclxuICAgICAgICAgICAgW2hlYWRTZWFyY2hUcGxdPVwicmlnaHQoKS50YWJsZUhlYWRTZWFyY2hUcGxcIlxyXG4gICAgICAgICAgPjwveC10YWJsZT5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGRlZmF1bHQge1xyXG4gICAgICAgICAgPHVsXHJcbiAgICAgICAgICAgIGNka0Ryb3BMaXN0XHJcbiAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcENkaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJyaWdodCgpLmxpc3RcIlxyXG4gICAgICAgICAgICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCIhZHJhZygpIHx8IChkcmFnKCkgJiYgdHlwZSgpICE9PSAnbGlzdCcpXCJcclxuICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwicHJlZGljYXRlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ4LXRyYW5zZmVyLWRyb3BsaXN0XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgQGZvciAobm9kZSBvZiByaWdodCgpLmxpc3Q7IHRyYWNrIG5vZGUuaWQpIHtcclxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ4LXRyYW5zZmVyLWl0ZW1cIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJub2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlTm9kZVRwbDsgY29udGV4dDogeyBub2RlOiBub2RlLCBzb3VyY2U6IHJpZ2h0KCkgfVwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChyaWdodCgpLmZvb3RlclRwbCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1mb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmlnaHQoKS5mb290ZXJUcGwhOyBjb250ZXh0OiB7ICRzb3VyY2U6IHJpZ2h0KCkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3NvdXJjZVRpdGxlVHBsIGxldC1zb3VyY2U9XCJzb3VyY2VcIj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci10aXRsZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItdGl0bGUtbGVmdFwiPlxyXG4gICAgICBAaWYgKHNvdXJjZS50aXRsZSAmJiAhc291cmNlLmhpZGRlbkNoZWNrQWxsKSB7XHJcbiAgICAgICAgPHgtY2hlY2tib3hcclxuICAgICAgICAgIFtkYXRhXT1cIlt0aXRsZVRwbCgpID8gJycgOiBzb3VyY2UudGl0bGVdXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwic291cmNlLmNoZWNrZWRBbGxcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tlZEFsbENoYW5nZSgkZXZlbnQsIHNvdXJjZSlcIlxyXG4gICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic291cmNlLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgc2luZ2xlXHJcbiAgICAgICAgPjwveC1jaGVja2JveD5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKHNvdXJjZS50aXRsZSAmJiBzb3VyY2UuaGlkZGVuQ2hlY2tBbGwpIHtcclxuICAgICAgICA8c3Bhbj57eyBzb3VyY2UudGl0bGUgfX08L3NwYW4+XHJcbiAgICAgIH1cclxuICAgICAgQGlmIChpbnZlcnNlKCkgJiYgdHlwZSgpID09PSAnbGlzdCcpIHtcclxuICAgICAgICA8eC1saW5rIGNsYXNzPVwieC10cmFuc2Zlci1pbnZlcnNlXCIgdHlwZT1cInByaW1hcnlcIiAoY2xpY2spPVwib25JbnZlcnNlKHNvdXJjZSlcIj57e1xyXG4gICAgICAgICAgJ3RyYW5zZmVyLmludmVyc2UnIHwgeEkxOG5cclxuICAgICAgICB9fTwveC1saW5rPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKnhPdXRsZXQ9XCJ0aXRsZVRwbDsgY29udGV4dDogeyAkdGl0bGU6IHNvdXJjZS50aXRsZSwgJGNoZWNrZWRDb3VudDogc291cmNlLmNoZWNrZWRDb3VudCwgJGNvdW50OiBzb3VyY2UuY291bnQgfVwiXHJcbiAgICAgID48c3BhbiBjbGFzcz1cIngtdHJhbnNmZXItdG90YWxcIj57eyBzb3VyY2UuY2hlY2tlZENvdW50IH19IC8ge3sgc291cmNlLmNvdW50IH19PC9zcGFuPjwvbmctY29udGFpbmVyXHJcbiAgICA+XHJcbiAgPC9kaXY+XHJcbiAgQGlmIChzZWFyY2goKSAmJiB0eXBlKCkgIT09ICd0YWJsZScpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJ4LXRyYW5zZmVyLXNlYXJjaFwiPlxyXG4gICAgICA8eC1pbnB1dFxyXG4gICAgICAgIGljb249XCJmdG8tc2VhcmNoXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInNvdXJjZS5zZWFyY2hJbnB1dFwiXHJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hJbnB1dENoYW5nZShzb3VyY2UpXCJcclxuICAgICAgICBjbGVhcmFibGVcclxuICAgICAgPjwveC1pbnB1dD5cclxuICAgIDwvZGl2PlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc291cmNlTm9kZVRwbCBsZXQtbm9kZT1cIm5vZGVcIiBsZXQtc291cmNlPVwic291cmNlXCI+XHJcbiAgPHgtY2hlY2tib3hcclxuICAgIFtkYXRhXT1cIlt7IGlkOiBub2RlLmlkLCBsYWJlbDogbm9kZVRwbCgpID8gbm9kZVRwbCgpIDogbGFiZWxUcGwsIG5vZGU6IG5vZGUgfV1cIlxyXG4gICAgW2Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJub2RlLmNoZWNrZWRcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tlZENoYW5nZSgkZXZlbnQsIHNvdXJjZSlcIlxyXG4gICAgc2luZ2xlXHJcbiAgPjwveC1jaGVja2JveD5cclxuICA8bmctdGVtcGxhdGUgI2xhYmVsVHBsPlxyXG4gICAgPHNwYW4geC1rZXl3b3JkIFt0ZXh0XT1cInNvdXJjZS5zZWFyY2hJbnB1dCFcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
659
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBSXZCLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFrQyxpQkFBaUIsRUFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN4SCxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsY0FBYyxFQUNkLFVBQVUsRUFDVixXQUFXLEVBRVgsWUFBWSxFQUNiLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUF3QixjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQWlCLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxjQUFjLEVBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQWdCLGVBQWUsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUN0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LGNBQWMsOENBQ2QsU0FBUzs7MkZBUUEsa0JBQWtCO2tCQXpCOUIsU0FBUzsrQkFDRSxHQUFHLGVBQWUsRUFBRSxjQUNsQixJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLGdCQUFnQjt3QkFDaEIsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxTQUFTO3FCQUNWLGlCQUdjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBpbmplY3QsXHJcbiAgdmlld0NoaWxkLFxyXG4gIHNpZ25hbCxcclxuICBjb21wdXRlZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYVHJhbnNmZXJQcmVmaXgsIFhUcmFuc2Zlck5vZGUsIFhUcmFuc2ZlclNvdXJjZSwgWFRyYW5zZmVyUHJvcGVydHksIFhUcmFuc2ZlclR5cGUgfSBmcm9tICcuL3RyYW5zZmVyLnByb3BlcnR5JztcclxuaW1wb3J0IHtcclxuICBYSXNDaGFuZ2UsXHJcbiAgWElzRW1wdHksXHJcbiAgWFNldERhdGEsXHJcbiAgWFJlbW92ZSxcclxuICBYSXNBcnJheSxcclxuICBYSXNPYmplY3QsXHJcbiAgWElzT2JqZWN0QXJyYXksXHJcbiAgWElzQm9vbGVhbixcclxuICBYSXNGdW5jdGlvbixcclxuICBYUmVzdWx0TGlzdCxcclxuICBYSXNVbmRlZmluZWRcclxufSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgdHJhbnNmZXJBcnJheUl0ZW0sIG1vdmVJdGVtSW5BcnJheSwgQ2RrRHJhZ0Ryb3AsIENka0RyYWcsIERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IFhWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQG5nLW5lc3QvdWkvYmFzZS1mb3JtJztcclxuaW1wb3J0IHsgWEkxOG5QaXBlLCBYSTE4blNlcnZpY2UsIFhJMThuVHJhbnNmZXIsIHpoX0NOIH0gZnJvbSAnQG5nLW5lc3QvdWkvaTE4bic7XHJcbmltcG9ydCB7IFhUcmVlQ29tcG9uZW50LCBYVHJlZU5vZGUgfSBmcm9tICdAbmctbmVzdC91aS90cmVlJztcclxuaW1wb3J0IHsgWFRhYmxlQ29sdW1uLCBYVGFibGVDb21wb25lbnQsIFhUYWJsZUhlYWRDaGVja2JveCB9IGZyb20gJ0BuZy1uZXN0L3VpL3RhYmxlJztcclxuaW1wb3J0IHsgTmdDbGFzcywgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBYT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnQG5nLW5lc3QvdWkvb3V0bGV0JztcclxuaW1wb3J0IHsgWENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvYnV0dG9uJztcclxuaW1wb3J0IHsgWElucHV0Q29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvaW5wdXQnO1xyXG5pbXBvcnQgeyBYS2V5d29yZERpcmVjdGl2ZSB9IGZyb20gJ0BuZy1uZXN0L3VpL2tleXdvcmQnO1xyXG5pbXBvcnQgeyBYTGlua0NvbXBvbmVudCB9IGZyb20gJ0BuZy1uZXN0L3VpL2xpbmsnO1xyXG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYVHJhbnNmZXJQcmVmaXh9YCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE5nQ2xhc3MsXHJcbiAgICBOZ1N0eWxlLFxyXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXHJcbiAgICBYT3V0bGV0RGlyZWN0aXZlLFxyXG4gICAgWENoZWNrYm94Q29tcG9uZW50LFxyXG4gICAgWEJ1dHRvbkNvbXBvbmVudCxcclxuICAgIFhJbnB1dENvbXBvbmVudCxcclxuICAgIFhUcmVlQ29tcG9uZW50LFxyXG4gICAgWFRhYmxlQ29tcG9uZW50LFxyXG4gICAgWEtleXdvcmREaXJlY3RpdmUsXHJcbiAgICBYTGlua0NvbXBvbmVudCxcclxuICAgIFhJMThuUGlwZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyYW5zZmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmFuc2Zlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbWFZhbHVlQWNjZXNzb3IoWFRyYW5zZmVyQ29tcG9uZW50KV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFhUcmFuc2ZlckNvbXBvbmVudCBleHRlbmRzIFhUcmFuc2ZlclByb3BlcnR5IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KFhJMThuU2VydmljZSk7XHJcblxyXG4gIGxlZnRUYWJsZUNvbSA9IHZpZXdDaGlsZChYVGFibGVDb21wb25lbnQpO1xyXG4gIHJpZ2h0VGFibGVDb20gPSB2aWV3Q2hpbGQoWFRhYmxlQ29tcG9uZW50KTtcclxuICBub2RlcyA9IHNpZ25hbDxYVHJhbnNmZXJOb2RlW10+KFtdKTtcclxuXHJcbiAgbGVmdCA9IHNpZ25hbDxYVHJhbnNmZXJTb3VyY2U+KHtcclxuICAgIGxpc3Q6IFtdLFxyXG4gICAgc2VhcmNoTGlzdDogW10sXHJcbiAgICBjaGVja2VkQ291bnQ6IDAsXHJcbiAgICBkaXJlY3Rpb246ICdsZWZ0JyxcclxuICAgIGRpc2FibGVkQnV0dG9uOiB0cnVlXHJcbiAgfSk7XHJcblxyXG4gIHJpZ2h0ID0gc2lnbmFsPFhUcmFuc2ZlclNvdXJjZT4oe1xyXG4gICAgbGlzdDogW10sXHJcbiAgICBzZWFyY2hMaXN0OiBbXSxcclxuICAgIGNoZWNrZWRDb3VudDogMCxcclxuICAgIGRpcmVjdGlvbjogJ3JpZ2h0JyxcclxuICAgIGRpc2FibGVkQnV0dG9uOiB0cnVlXHJcbiAgfSk7XHJcblxyXG4gIHNlYXJjaElucHV0ID0gc2lnbmFsKCcnKTtcclxuICBzZWFyY2hJbnB1dExlZnRDaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgc2VhcmNoSW5wdXRSaWdodENoYW5nZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBzZWFyY2hEZWJvdW5jZVRpbWUgPSBzaWduYWwoMjAwKTtcclxuICBsb2NhbGUgPSB0b1NpZ25hbCh0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlLnBpcGUobWFwKCh4KSA9PiB4LnRyYW5zZmVyIGFzIFhJMThuVHJhbnNmZXIpKSwge1xyXG4gICAgaW5pdGlhbFZhbHVlOiB6aF9DTi50cmFuc2ZlclxyXG4gIH0pO1xyXG4gIGxvY2FsVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAodGhpcy50eXBlKCkgPT09ICd0cmVlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGUoKS50cmVlVGl0bGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGUoKS5saXN0VGl0bGU7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgcHJpdmF0ZSB1blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHRyZWVBY3RpdmF0ZWRJZCA9IHNpZ25hbDxhbnlbXT4oW10pO1xyXG4gIHRhYmxlRGF0YSA9IHNpZ25hbDxYVHJhbnNmZXJOb2RlW10+KFtdKTtcclxuICB0YWJsZUNoZWNrYm94Q29sdW1uID0gc2lnbmFsPFhUYWJsZUNvbHVtbiB8IG51bGw+KG51bGwpO1xyXG4gIGlzT2JqZWN0QXJyYXkgPSBzaWduYWwoZmFsc2UpO1xyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICBpZiAoWElzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMudHJlZUFjdGl2YXRlZElkLnNldChbLi4udmFsdWVdKTtcclxuICAgICAgaWYgKFhJc09iamVjdEFycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMuaXNPYmplY3RBcnJheS5zZXQodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2V0TGlzdCh0aGlzLm5vZGVzKCkpO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuaXNPYmplY3RBcnJheSgpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlKCkubWFwKCh4OiBhbnkpID0+IHguaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMudmFsdWUoKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldFRpdGxlcygpO1xyXG4gICAgdGhpcy5zZXRMaXN0U3R5bGUoKTtcclxuICAgIHRoaXMuc2V0SGlkZGVuQ2hlY2tBbGwoKTtcclxuICAgIHRoaXMuZ2V0VGFibGVDaGVja0NvbHVtbigpO1xyXG4gICAgdGhpcy5zZXRGb290ZXJUcGwoKTtcclxuICAgIHRoaXMuc2V0VGFibGVIZWFkU2VhcmNoVHBsKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hJbnB1dExlZnRDaGFuZ2VcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKCkpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy51blN1YmplY3QpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNldFNlYXJjaElucHV0Q2hhbmdlKHRoaXMubGVmdCgpKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaElucHV0UmlnaHRDaGFuZ2VcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKCkpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy51blN1YmplY3QpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNldFNlYXJjaElucHV0Q2hhbmdlKHRoaXMucmlnaHQoKSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgeyBkYXRhIH0gPSBjaGFuZ2VzO1xyXG4gICAgWElzQ2hhbmdlKGRhdGEpICYmIHRoaXMuc2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuU3ViamVjdC5uZXh0KCk7XHJcbiAgICB0aGlzLnVuU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hJbnB1dENoYW5nZShzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKHNvdXJjZS5kaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICB0aGlzLnNlYXJjaElucHV0TGVmdENoYW5nZS5uZXh0KHNvdXJjZS5zZWFyY2hJbnB1dCEpO1xyXG4gICAgfSBlbHNlIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXRSaWdodENoYW5nZS5uZXh0KHNvdXJjZS5zZWFyY2hJbnB1dCEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VhcmNoSW5wdXRDaGFuZ2Uoc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmIChYSXNVbmRlZmluZWQoc291cmNlLnNlYXJjaElucHV0KSkgcmV0dXJuO1xyXG4gICAgaWYgKFhJc0VtcHR5KHNvdXJjZS5zZWFyY2hJbnB1dCkpIHtcclxuICAgICAgc291cmNlLmxpc3QgPSBbLi4uc291cmNlLnNlYXJjaExpc3QhXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy50eXBlKCkpIHtcclxuICAgICAgICBjYXNlICdsaXN0JzpcclxuICAgICAgICAgIHNvdXJjZS5saXN0ID0gc291cmNlLnNlYXJjaExpc3Q/LmZpbHRlcigoeCkgPT4geC5sYWJlbC5pbmRleE9mKHNvdXJjZS5zZWFyY2hJbnB1dCkgPj0gMCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICd0cmVlJzpcclxuICAgICAgICAgIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgIHNvdXJjZS5saXN0ID0gc291cmNlLnNlYXJjaExpc3Q/LmZpbHRlcigoeCkgPT4geC5sYWJlbC5pbmRleE9mKHNvdXJjZS5zZWFyY2hJbnB1dCkgPj0gMCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5kaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICAgICAgICBsZXQgc2VhcmNoTGlzdCA9IHNvdXJjZS5zZWFyY2hMaXN0Py5maWx0ZXIoKHgpID0+IHgubGFiZWwuaW5kZXhPZihzb3VyY2Uuc2VhcmNoSW5wdXQpID49IDApITtcclxuICAgICAgICAgICAgbGV0IHBhcmVudHM6IFhUcmFuc2Zlck5vZGVbXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kUGFyZW50ID0gKGl0ZW06IFhUcmFuc2Zlck5vZGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWl0ZW0ucGlkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IHNvdXJjZS5zZWFyY2hMaXN0Py5maW5kKCh4KSA9PiB4LmlkID09PSBpdGVtLnBpZCk7XHJcbiAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiAhcGFyZW50cy5zb21lKCh4KSA9PiB4LmlkID09PSBwYXJlbnQhLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICBmaW5kUGFyZW50KHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHNlYXJjaExpc3QpIHtcclxuICAgICAgICAgICAgICBmaW5kUGFyZW50KGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNvdXJjZS5saXN0ID0gWy4uLnNlYXJjaExpc3QsIC4uLnBhcmVudHNdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAndGFibGUnOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSgpLCBzb3VyY2UpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja2VkQWxsQ2hhbmdlKCRldmVudDogYm9vbGVhbiwgc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGxldCBsaXN0OiBYVHJhbnNmZXJOb2RlW10gPSAoc291cmNlLmxpc3Q/LmZpbHRlcigoeCkgPT4gIXguZGlzYWJsZWQpIGFzIFhUcmFuc2Zlck5vZGVbXSkubWFwKCh4KSA9PiB7XHJcbiAgICAgIHguY2hlY2tlZCA9ICRldmVudDtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLnR5cGUoKSA9PT0gJ3RyZWUnICYmIHNvdXJjZS5kaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICB0aGlzLnRyZWVBY3RpdmF0ZWRJZC5zZXQoXHJcbiAgICAgICAgJGV2ZW50ID8gc291cmNlLmxpc3QhLm1hcCgoeCkgPT4geC5pZCkhIDogc291cmNlLmxpc3QhLmZpbHRlcigoeCkgPT4geC5kaXNhYmxlZCkubWFwKCh4KSA9PiB4LmlkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgc291cmNlLmNoZWNrZWRDb3VudCA9ICRldmVudCA/IGxpc3QubGVuZ3RoIDogMDtcclxuICAgIHNvdXJjZS5pbmRldGVybWluYXRlID0gJGV2ZW50O1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChzb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tlZENoYW5nZSgkZXZlbnQ6IGJvb2xlYW4sIHNvdXJjZTogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBpZiAoISRldmVudCkgKHNvdXJjZS5jaGVja2VkQ291bnQgYXMgbnVtYmVyKS0tO1xyXG4gICAgZWxzZSAoc291cmNlLmNoZWNrZWRDb3VudCBhcyBudW1iZXIpKys7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoc291cmNlKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoc291cmNlKTtcclxuICB9XHJcblxyXG4gIG1vdmUoZnJvbTogWFRyYW5zZmVyU291cmNlLCB0bzogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBpZiAoZnJvbS5kaXNhYmxlZEJ1dHRvbikgcmV0dXJuO1xyXG4gICAgc3dpdGNoICh0aGlzLnR5cGUoKSkge1xyXG4gICAgICBjYXNlICdsaXN0JzpcclxuICAgICAgICB0aGlzLm1vdmVMaXN0KGZyb20sIHRvKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndHJlZSc6XHJcbiAgICAgICAgdGhpcy5tb3ZlVHJlZShmcm9tLCB0byk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RhYmxlJzpcclxuICAgICAgICB0aGlzLm1vdmVUYWJsZShmcm9tLCB0byk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVMaXN0KGZyb206IFhUcmFuc2ZlclNvdXJjZSwgdG86IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgbGV0IGNoZWNrZWRJdGVtcyA9IGZyb20ubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCAmJiB4LmNoZWNrZWQpITtcclxuICAgIGxldCBqID0gMDtcclxuICAgIGNoZWNrZWRJdGVtcy5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgIGxldCBpbmRleCA9IGZyb20ubGlzdD8uaW5kZXhPZih4KSBhcyBudW1iZXI7XHJcbiAgICAgIHguY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShmcm9tLmxpc3QhLCB0by5saXN0ISwgaW5kZXgsIGopO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2goKSkge1xyXG4gICAgICAgIGluZGV4ID0gZnJvbS5zZWFyY2hMaXN0Py5pbmRleE9mKHgpIGFzIG51bWJlcjtcclxuICAgICAgICB0cmFuc2ZlckFycmF5SXRlbShmcm9tLnNlYXJjaExpc3QhLCB0by5zZWFyY2hMaXN0ISwgaW5kZXgsIGopO1xyXG4gICAgICB9XHJcbiAgICAgIGorKztcclxuICAgIH0pO1xyXG4gICAgZnJvbS5saXN0ID0gWy4uLmZyb20ubGlzdCFdO1xyXG4gICAgdG8ubGlzdCA9IFsuLi50by5saXN0IV07XHJcbiAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0TGlzdENvdW50KCdsaXN0JywgZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRTZWFyY2hMaXN0KGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbW92ZVRyZWUoZnJvbTogWFRyYW5zZmVyU291cmNlLCB0bzogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBsZXQgY2hlY2tlZEl0ZW1zOiBYVHJhbnNmZXJOb2RlW10gPSBbXTtcclxuICAgIGlmICh0by5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gZnJvbS5saXN0Py5maWx0ZXIoXHJcbiAgICAgICAgKHgpID0+ICF4LmRpc2FibGVkICYmICFYSXNFbXB0eSh0aGlzLnRyZWVBY3RpdmF0ZWRJZCgpKSAmJiB0aGlzLnRyZWVBY3RpdmF0ZWRJZCgpLmluY2x1ZGVzKHguaWQpXHJcbiAgICAgICkhO1xyXG4gICAgICBjaGVja2VkSXRlbXMuZm9yRWFjaCgoeDogWFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgICAgeC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgeC5jaGFuZ2UgJiYgeC5jaGFuZ2UoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRvLmxpc3Q/LnVuc2hpZnQoXHJcbiAgICAgICAgLi4uY2hlY2tlZEl0ZW1zLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgbGV0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgcmVzLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJlcy5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndHJlZScsIGZyb20pO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIHRvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrZWRJdGVtcyA9IFhSZW1vdmUoZnJvbS5saXN0ISwgKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCEpO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2goKSkge1xyXG4gICAgICAgIFhSZW1vdmUoZnJvbS5zZWFyY2hMaXN0ISwgKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCEpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgY2hlY2tlZEl0ZW1zKSB7XHJcbiAgICAgICAgbGV0IG5vZGU6IFhUcmVlTm9kZSA9IHRvLmxpc3Q/LmZpbmQoKHgpID0+IHguaWQgPT09IGl0ZW0uaWQpITtcclxuICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgbm9kZS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBub2RlLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLnRyZWVBY3RpdmF0ZWRJZCgpLmZpbmRJbmRleCgoeCkgPT4geCA9PT0gbm9kZS5pZCk7XHJcbiAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy50cmVlQWN0aXZhdGVkSWQudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgeC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgICByZXR1cm4gWy4uLnhdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG5vZGUuY2hhbmdlICYmIG5vZGUuY2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0cmVlJywgdG8pO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIGZyb20pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0TGlzdENvdW50KCdsaXN0JywgZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFNlYXJjaExpc3QoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlVGFibGUoZnJvbTogWFRyYW5zZmVyU291cmNlLCB0bzogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBsZXQgY2hlY2tlZEl0ZW1zOiBYVHJhbnNmZXJOb2RlW10gPSBbXTtcclxuICAgIGlmICh0by5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gZnJvbS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCkhO1xyXG4gICAgICB0by5saXN0ID0gW1xyXG4gICAgICAgIC4uLmNoZWNrZWRJdGVtcy5tYXAoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgeC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB4LmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXMuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KSxcclxuICAgICAgICAuLi50by5saXN0IVxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YS5zZXQoWy4uLmZyb20ubGlzdCFdKTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ3RhYmxlJywgZnJvbSk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgdG8pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gWFJlbW92ZShmcm9tLmxpc3QhLCAoeCkgPT4gIXguZGlzYWJsZWQgJiYgeC5jaGVja2VkISk7XHJcbiAgICAgIGNvbnN0IGlkcyA9IGNoZWNrZWRJdGVtcy5tYXAoKHgpID0+IHguaWQpO1xyXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIHRvLmxpc3QhKSB7XHJcbiAgICAgICAgaWYgKGlkcy5pbmNsdWRlcyhpdGVtLmlkKSkge1xyXG4gICAgICAgICAgaXRlbS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBpdGVtLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZyb20ubGlzdCA9IFsuLi5mcm9tLmxpc3QhXTtcclxuICAgICAgdGhpcy50YWJsZURhdGEuc2V0KFsuLi50by5saXN0IV0pO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndGFibGUnLCB0byk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgZnJvbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldExpc3RDb3VudCgndGFibGUnLCBmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFNlYXJjaExpc3QoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgZHJvcENkayhldmVudDogQ2RrRHJhZ0Ryb3A8WFRyYW5zZmVyTm9kZVtdIHwgdW5kZWZpbmVkLCBhbnk+KSB7XHJcbiAgICBjb25zdCBldiA9IGV2ZW50IGFzIENka0RyYWdEcm9wPFhUcmFuc2Zlck5vZGVbXT47XHJcbiAgICBpZiAoZXYucHJldmlvdXNDb250YWluZXIgPT09IGV2LmNvbnRhaW5lcikge1xyXG4gICAgICBtb3ZlSXRlbUluQXJyYXkoZXYuY29udGFpbmVyLmRhdGEsIGV2LnByZXZpb3VzSW5kZXgsIGV2LmN1cnJlbnRJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShldi5wcmV2aW91c0NvbnRhaW5lci5kYXRhLCBldi5jb250YWluZXIuZGF0YSwgZXYucHJldmlvdXNJbmRleCwgZXYuY3VycmVudEluZGV4KTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ2xpc3QnLCB0aGlzLmxlZnQoKSwgdGhpcy5yaWdodCgpKTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQWxsKHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgICB0aGlzLnNldExpc3RDb3VudCgnbGlzdCcsIHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJlZGljYXRlKGl0ZW06IENka0RyYWc8WFRyYW5zZmVyTm9kZT4pIHtcclxuICAgIHJldHVybiAhaXRlbS5kYXRhLmRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeU5vZGUoX2luZGV4OiBudW1iZXIsIGl0ZW06IFhUcmFuc2Zlck5vZGUpIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxuXHJcbiAgc2V0TGlzdENvdW50KHR5cGU6IFhUcmFuc2ZlclR5cGUgPSAnbGlzdCcsIC4uLnNvdXJjZXM6IFhUcmFuc2ZlclNvdXJjZVtdKSB7XHJcbiAgICBpZiAoWydsaXN0JywgJ3RyZWUnXS5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIHNvdXJjZS5jb3VudCA9IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RhYmxlJykge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcclxuICAgICAgICAgIHNvdXJjZS5jb3VudCA9IHRoaXMudGFibGVUb3RhbCgpIC0gdGhpcy5yaWdodCgpLmxpc3QhLmxlbmd0aCB8fCAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzb3VyY2UuY291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCkubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UcmVlTm9kZUNsaWNrKF9ub2RlOiBYVHJlZU5vZGUpIHtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0cmVlJywgdGhpcy5sZWZ0KCkpO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKHRoaXMubGVmdCgpKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQodGhpcy5sZWZ0KCkpO1xyXG4gIH1cclxuXHJcbiAgb25UYWJsZUNoZWNrZWRSb3cocm93OiBYVHJhbnNmZXJOb2RlLCBzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4oKSkgcmV0dXJuO1xyXG4gICAgbGV0IGNoZWNrZWQgPSByb3dbdGhpcy50YWJsZUNoZWNrYm94Q29sdW1uKCkhLmlkXTtcclxuICAgIHJvdy5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0YWJsZScsIHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoc291cmNlKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoc291cmNlKTtcclxuICB9XHJcblxyXG4gIG9uVGFibGVDaGVja2VkQWxsKHJvdzogWFRhYmxlSGVhZENoZWNrYm94LCBzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4oKSkgcmV0dXJuO1xyXG4gICAgbGV0IGNoZWNrZWQgPSByb3cuY2hlY2tib3hbdGhpcy50YWJsZUNoZWNrYm94Q29sdW1uKCkhLmlkXTtcclxuICAgIGZvciAobGV0IGl0ZW0gb2Ygc291cmNlLmxpc3QhKSB7XHJcbiAgICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0YWJsZScsIHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHNvdXJjZSk7XHJcbiAgfVxyXG5cclxuICBvbkludmVyc2Uoc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGZvciAobGV0IGl0ZW0gb2Ygc291cmNlLmxpc3QhKSB7XHJcbiAgICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9ICFpdGVtLmNoZWNrZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCB0eXBlID0gYCR7dGhpcy50eXBlfWAgYXMgWFRyYW5zZmVyVHlwZTtcclxuICAgIGlmICh0eXBlID09PSAndHJlZScgJiYgc291cmNlLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICB0eXBlID0gJ2xpc3QnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDaGVja2VkQ291bnQodHlwZSwgc291cmNlKTtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbChzb3VyY2UpO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChzb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUYWJsZUNoZWNrQ29sdW1uKCkge1xyXG4gICAgaWYgKHRoaXMudHlwZSgpICE9PSAndGFibGUnIHx8IFhJc0VtcHR5KHRoaXMudGFibGVDb2x1bW5zKCkpKSByZXR1cm47XHJcbiAgICB0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4uc2V0KHRoaXMudGFibGVDb2x1bW5zKCkhLmZpbmQoKHgpID0+IHgucm93Q2hlY2tlZCkhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2hlY2tlZEFsbCguLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgaWYgKChzb3VyY2UuY2hlY2tlZENvdW50IGFzIG51bWJlcikgPiAwKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5jaGVja2VkQ291bnQgPT09IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKS5sZW5ndGgpIHtcclxuICAgICAgICAgIHNvdXJjZS5jaGVja2VkQWxsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc291cmNlLmNoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgICAgIHNvdXJjZS5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc291cmNlLmNoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgICBzb3VyY2UuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENoZWNrZWRDb3VudCh0eXBlOiBYVHJhbnNmZXJUeXBlID0gJ2xpc3QnLCAuLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgaWYgKFsndGFibGUnLCAnbGlzdCddLmluY2x1ZGVzKHR5cGUpKSB7XHJcbiAgICAgICAgc291cmNlLmNoZWNrZWRDb3VudCA9IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCkubGVuZ3RoO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0cmVlJykge1xyXG4gICAgICAgIHNvdXJjZS5jaGVja2VkQ291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+ICF4LmRpc2FibGVkICYmICFYSXNFbXB0eSh0aGlzLnRyZWVBY3RpdmF0ZWRJZCgpKSAmJiB0aGlzLnRyZWVBY3RpdmF0ZWRJZCgpLmluY2x1ZGVzKHguaWQpXHJcbiAgICAgICAgKS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QnV0dG9uRGlzYWJsZWQoLi4uc291cmNlczogWFRyYW5zZmVyU291cmNlW10pIHtcclxuICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSBzb3VyY2UuZGlzYWJsZWRCdXR0b24gPSBzb3VyY2UuY2hlY2tlZENvdW50ID09PSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWx1ZSgpIHtcclxuICAgIGlmICh0aGlzLmlzT2JqZWN0QXJyYXkoKSkge1xyXG4gICAgICB0aGlzLnZhbHVlLnNldCh0aGlzLnJpZ2h0KCkubGlzdCEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52YWx1ZS5zZXQodGhpcy5yaWdodCgpLmxpc3Q/Lm1hcCgoeCkgPT4geC5pZCkhKTtcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2UgJiYgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWFyY2hMaXN0KC4uLnNvdXJjZXM6IFhUcmFuc2ZlclNvdXJjZVtdKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2goKSkge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIGlmIChYSXNFbXB0eShzb3VyY2Uuc2VhcmNoSW5wdXQpKSB7XHJcbiAgICAgICAgICBzb3VyY2Uuc2VhcmNoTGlzdCA9IFsuLi4oc291cmNlLmxpc3QgYXMgWFRyYW5zZmVyTm9kZVtdKV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy50eXBlKCkgPT09ICd0YWJsZScpIHtcclxuICAgICAgdGhpcy5nZXRUYWJsZURhdGEoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgWFNldERhdGE8WFRyYW5zZmVyTm9kZT4odGhpcy5kYXRhKCksIHRoaXMudW5TdWJqZWN0KS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgdGhpcy5zZXRMaXN0KHgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldExpc3QoZGF0YTogWFRyYW5zZmVyTm9kZVtdKSB7XHJcbiAgICBpZiAoWElzRW1wdHkoZGF0YSkpIHJldHVybjtcclxuICAgIHN3aXRjaCAodGhpcy50eXBlKCkpIHtcclxuICAgICAgY2FzZSAnbGlzdCc6XHJcbiAgICAgICAgdGhpcy5ub2Rlcy5zZXQoZGF0YSk7XHJcbiAgICAgICAgaWYgKCFYSXNFbXB0eSh0aGlzLnZhbHVlcygpKSkge1xyXG4gICAgICAgICAgdGhpcy5sZWZ0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICB4Lmxpc3QgPSB0aGlzLm5vZGVzKCkuZmlsdGVyKCh4KSA9PiB0aGlzLnZhbHVlcygpLmluZGV4T2YoeC5pZCkgPCAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnJpZ2h0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICB4Lmxpc3QgPSB0aGlzLm5vZGVzKCkuZmlsdGVyKCh4KSA9PiB0aGlzLnZhbHVlcygpLmluZGV4T2YoeC5pZCkgPj0gMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxlZnQudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgIHgubGlzdCA9IFsuLi50aGlzLm5vZGVzKCldO1xyXG4gICAgICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSgpLCB0aGlzLmxlZnQoKSwgdGhpcy5yaWdodCgpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndHJlZSc6XHJcbiAgICAgICAgdGhpcy5ub2Rlcy5zZXQoZGF0YSk7XHJcbiAgICAgICAgdGhpcy5zZXRUcmVlTm9kZURpc2FibGVkKCk7XHJcbiAgICAgICAgdGhpcy5sZWZ0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgeC5saXN0ID0gWy4uLnRoaXMubm9kZXMoKV07XHJcbiAgICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFYSXNFbXB0eSh0aGlzLnZhbHVlcygpKSkge1xyXG4gICAgICAgICAgdGhpcy5yaWdodC51cGRhdGUoKHopID0+IHtcclxuICAgICAgICAgICAgei5saXN0ID0gdGhpcy5ub2RlcygpXHJcbiAgICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4gdGhpcy52YWx1ZXMoKS5pbmRleE9mKHguaWQpID49IDApXHJcbiAgICAgICAgICAgICAgLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgICAgICAgcmVzLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJlcy5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4ueiB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U2VhcmNoTGlzdCh0aGlzLmxlZnQoKSwgdGhpcy5yaWdodCgpKTtcclxuICAgICAgICB0aGlzLnNldExpc3RDb3VudCh0aGlzLnR5cGUoKSwgdGhpcy5sZWZ0KCksIHRoaXMucmlnaHQoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RhYmxlJzpcclxuICAgICAgICB0aGlzLm5vZGVzLnNldChkYXRhKTtcclxuICAgICAgICB0aGlzLnNldFRhYmxlRGF0YURpc2FibGVkKCk7XHJcbiAgICAgICAgdGhpcy5sZWZ0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgeC5saXN0ID0gWy4uLnRoaXMubm9kZXMoKV07XHJcbiAgICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFYSXNFbXB0eSh0aGlzLnZhbHVlcygpKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RBcnJheSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmlnaHQudXBkYXRlKCh6KSA9PiB7XHJcbiAgICAgICAgICAgICAgei5saXN0ID0gW1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy52YWx1ZSgpLm1hcCgoeDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCByZXMgPSB7IC4uLnggfTtcclxuICAgICAgICAgICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHJlcy5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ueiB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmlnaHQudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgeC5saXN0ID0gWy4uLnRoaXMudmFsdWUoKV07XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCgpLCB0aGlzLnJpZ2h0KCkpO1xyXG4gICAgICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSgpLCB0aGlzLmxlZnQoKSwgdGhpcy5yaWdodCgpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRhYmxlRGF0YSgpIHtcclxuICAgIGlmIChYSXNGdW5jdGlvbih0aGlzLmRhdGEoKSkpIHtcclxuICAgICAgKHRoaXMuZGF0YSgpIGFzIEZ1bmN0aW9uKSh0aGlzLnRhYmxlSW5kZXgoKSwgdGhpcy50YWJsZVNpemUoKSwgdGhpcy50YWJsZVF1ZXJ5KCkpLnN1YnNjcmliZShcclxuICAgICAgICAoeDogWFJlc3VsdExpc3Q8WFRyYW5zZmVyTm9kZT4pID0+IHtcclxuICAgICAgICAgIHRoaXMudGFibGVUb3RhbC5zZXQoeC50b3RhbCEpO1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEuc2V0KHgubGlzdCEpO1xyXG4gICAgICAgICAgdGhpcy5zZXRMaXN0KHgubGlzdCEpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGl0bGVzKCkge1xyXG4gICAgbGV0IHRpdGxlczogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmIChYSXNFbXB0eSh0aGlzLnRpdGxlcygpKSkge1xyXG4gICAgICB0aXRsZXMgPSBbdGhpcy5sb2NhbFRpdGxlKCkhLCB0aGlzLmxvY2FsZSgpLnNlbGVjdGVkVGl0bGUhXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRpdGxlcyA9IHRoaXMudGl0bGVzKCkhO1xyXG4gICAgfVxyXG4gICAgaWYgKHRpdGxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGVmdC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4LnRpdGxlID0gdGl0bGVzWzBdO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGl0bGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5yaWdodC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4LnRpdGxlID0gdGl0bGVzWzFdO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldExpc3RTdHlsZSgpIHtcclxuICAgIGlmIChYSXNFbXB0eSh0aGlzLmxpc3RTdHlsZSgpKSkgcmV0dXJuO1xyXG4gICAgbGV0IHN0eWxlczogb2JqZWN0W10gPSBbXTtcclxuICAgIGlmIChYSXNPYmplY3QodGhpcy5saXN0U3R5bGUoKSkpIHtcclxuICAgICAgc3R5bGVzID0gW3RoaXMubGlzdFN0eWxlKCkhLCB0aGlzLmxpc3RTdHlsZSgpIV07XHJcbiAgICB9IGVsc2UgaWYgKFhJc09iamVjdEFycmF5KHRoaXMubGlzdFN0eWxlKCkpKSB7XHJcbiAgICAgIHN0eWxlcyA9IHRoaXMubGlzdFN0eWxlKCkgYXMgb2JqZWN0W107XHJcbiAgICB9XHJcbiAgICBpZiAoc3R5bGVzLmxlbmd0aCA+IDApXHJcbiAgICAgIHRoaXMubGVmdC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4Lmxpc3RTdHlsZSA9IHN0eWxlc1swXTtcclxuICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHN0eWxlcy5sZW5ndGggPiAxKVxyXG4gICAgICB0aGlzLnJpZ2h0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgIHgubGlzdFN0eWxlID0gc3R5bGVzWzFdO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRyZWVOb2RlRGlzYWJsZWQoKSB7XHJcbiAgICBpZiAoIVhJc0VtcHR5KHRoaXMudmFsdWVzKCkpICYmIHRoaXMubm9kZXMoKSkge1xyXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMubm9kZXMoKSkge1xyXG4gICAgICAgIGxldCBoYXNJbiA9IHRoaXMudmFsdWVzKCkuaW5kZXhPZihpdGVtLmlkKSA+PSAwO1xyXG4gICAgICAgIGl0ZW0uZGlzYWJsZWQgPSBoYXNJbjtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSBoYXNJbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUYWJsZURhdGFEaXNhYmxlZCgpIHtcclxuICAgIGlmICghWElzRW1wdHkodGhpcy52YWx1ZXMoKSkgJiYgdGhpcy5ub2RlcygpKSB7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5ub2RlcygpKSB7XHJcbiAgICAgICAgbGV0IGhhc0luID0gdGhpcy52YWx1ZXMoKS5pbmRleE9mKGl0ZW0uaWQpID49IDA7XHJcbiAgICAgICAgaXRlbS5kaXNhYmxlZCA9IGhhc0luO1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IGhhc0luO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEhpZGRlbkNoZWNrQWxsKCkge1xyXG4gICAgaWYgKFhJc0VtcHR5KHRoaXMuaGlkZGVuQ2hlY2tBbGwoKSkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmhpZGRlbkNoZWNrQWxsKCkhLmxlbmd0aCA+IDAgJiYgWElzQm9vbGVhbih0aGlzLmhpZGRlbkNoZWNrQWxsKCkhWzBdKSkge1xyXG4gICAgICB0aGlzLmxlZnQudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgeC5oaWRkZW5DaGVja0FsbCA9IHRoaXMuaGlkZGVuQ2hlY2tBbGwoKSFbMF07XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmhpZGRlbkNoZWNrQWxsKCkhLmxlbmd0aCA+IDEgJiYgWElzQm9vbGVhbih0aGlzLmhpZGRlbkNoZWNrQWxsKCkhWzFdKSkge1xyXG4gICAgICB0aGlzLnJpZ2h0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgIHguaGlkZGVuQ2hlY2tBbGwgPSB0aGlzLmhpZGRlbkNoZWNrQWxsKCkhWzFdO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZvb3RlclRwbCgpIHtcclxuICAgIGlmIChYSXNVbmRlZmluZWQodGhpcy5mb290ZXJUcGwoKSkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmZvb3RlclRwbCgpIS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGVmdC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4LmZvb3RlclRwbCA9IHRoaXMuZm9vdGVyVHBsKCkhWzBdO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mb290ZXJUcGwoKSEubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLnJpZ2h0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgIHguZm9vdGVyVHBsID0gdGhpcy5mb290ZXJUcGwoKSFbMV07XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGFibGVIZWFkU2VhcmNoVHBsKCkge1xyXG4gICAgaWYgKFhJc1VuZGVmaW5lZCh0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCgpKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMudGFibGVIZWFkU2VhcmNoVHBsKCkhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5sZWZ0LnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgIHgudGFibGVIZWFkU2VhcmNoVHBsID0gdGhpcy50YWJsZUhlYWRTZWFyY2hUcGwoKSFbMF07XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCgpIS5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMucmlnaHQudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgeC50YWJsZUhlYWRTZWFyY2hUcGwgPSB0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCgpIVsxXTtcclxuICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICN0cmFuc2ZlciBjbGFzcz1cIngtdHJhbnNmZXJcIiBjZGtEcm9wTGlzdEdyb3VwPlxyXG4gIDxkaXYgY2xhc3M9XCJ4LXRyYW5zZmVyLWJveFwiIFtjbGFzcy54LXRyYW5zZmVyLWhhcy1mb290ZXJdPVwibGVmdCgpLmZvb3RlclRwbFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNvdXJjZVRpdGxlVHBsOyBjb250ZXh0OiB7IHNvdXJjZTogbGVmdCgpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW25nU3R5bGVdPVwibGVmdCgpLmxpc3RTdHlsZSFcIiBjbGFzcz1cIngtdHJhbnNmZXItbGlzdCB4LXRyYW5zZmVyLXt7IHR5cGUoKSB9fVwiPlxyXG4gICAgICBAc3dpdGNoICh0eXBlKCkpIHtcclxuICAgICAgICBAY2FzZSAoJ2xpc3QnKSB7XHJcbiAgICAgICAgICA8dWxcclxuICAgICAgICAgICAgY2RrRHJvcExpc3RcclxuICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wQ2RrKCRldmVudClcIlxyXG4gICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImxlZnQoKS5saXN0XCJcclxuICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWcoKSAmJiB0eXBlKCkgPT09ICdsaXN0J1wiXHJcbiAgICAgICAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cInByZWRpY2F0ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwieC10cmFuc2Zlci1kcm9wbGlzdFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEBmb3IgKG5vZGUgb2YgbGVmdCgpLmxpc3Q7IHRyYWNrIG5vZGUuaWQpIHtcclxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ4LXRyYW5zZmVyLWl0ZW1cIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJub2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlTm9kZVRwbDsgY29udGV4dDogeyBub2RlOiBub2RlLCBzb3VyY2U6IGxlZnQoKSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGNhc2UgKCd0cmVlJykge1xyXG4gICAgICAgICAgPHgtdHJlZVxyXG4gICAgICAgICAgICBbZGF0YV09XCJsZWZ0KCkubGlzdCFcIlxyXG4gICAgICAgICAgICBtdWx0aXBsZVxyXG4gICAgICAgICAgICBhbGxvd01hbnlBY3RpdmF0ZWRcclxuICAgICAgICAgICAgWyhhY3RpdmF0ZWRJZCldPVwidHJlZUFjdGl2YXRlZElkXCJcclxuICAgICAgICAgICAgKG5vZGVDbGljayk9XCJvblRyZWVOb2RlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtsYWJlbFRwbF09XCJ0cmVlTGFiZWxUcGxcIlxyXG4gICAgICAgICAgPjwveC10cmVlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0cmVlTGFiZWxUcGwgbGV0LW5vZGU9XCIkbm9kZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIngtdHJhbnNmZXItdHJlZS1sYWJlbFwiIHgta2V5d29yZCBbdGV4dF09XCJsZWZ0KCkuc2VhcmNoSW5wdXQhXCI+e3sgbm9kZS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBjYXNlICgndGFibGUnKSB7XHJcbiAgICAgICAgICA8eC10YWJsZVxyXG4gICAgICAgICAgICAjbGVmdFRhYmxlQ29tXHJcbiAgICAgICAgICAgIFtkYXRhXT1cInRhYmxlRGF0YSgpXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwidGFibGVDb2x1bW5zKCkhXCJcclxuICAgICAgICAgICAgWyhzaXplKV09XCJ0YWJsZVNpemVcIlxyXG4gICAgICAgICAgICBbKGluZGV4KV09XCJ0YWJsZUluZGV4XCJcclxuICAgICAgICAgICAgKGluZGV4Q2hhbmdlKT1cImdldFRhYmxlRGF0YSgpXCJcclxuICAgICAgICAgICAgW3F1ZXJ5XT1cInRhYmxlUXVlcnkoKVwiXHJcbiAgICAgICAgICAgIFt0b3RhbF09XCJ0YWJsZVRvdGFsKClcIlxyXG4gICAgICAgICAgICAoYWN0aXZhdGVkUm93Q2hhbmdlKT1cIm9uVGFibGVDaGVja2VkUm93KCRldmVudCEsIGxlZnQoKSlcIlxyXG4gICAgICAgICAgICAoaGVhZENoZWNrYm94Q2hhbmdlKT1cIm9uVGFibGVDaGVja2VkQWxsKCRldmVudCwgbGVmdCgpKVwiXHJcbiAgICAgICAgICAgIGhpZGRlbldyYXBCb3JkZXJcclxuICAgICAgICAgICAgaGlkZGVuUGFnaW5hdGlvbkJvcmRlclxyXG4gICAgICAgICAgICBzaG93RWxsaXBzaXM9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIHNob3dUb3RhbD1cImZhbHNlXCJcclxuICAgICAgICAgICAgcGFnaW5hdGlvblBvc2l0aW9uPVwiYm90dG9tLWNlbnRlclwiXHJcbiAgICAgICAgICAgIGFsbG93U2VsZWN0Um93PVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbaGVhZFNlYXJjaFRwbF09XCJsZWZ0KCkudGFibGVIZWFkU2VhcmNoVHBsXCJcclxuICAgICAgICAgID48L3gtdGFibGU+XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAobGVmdCgpLmZvb3RlclRwbCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1mb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGVmdCgpLmZvb3RlclRwbCE7IGNvbnRleHQ6IHsgJHNvdXJjZTogbGVmdCgpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItYnV0dG9uc1wiPlxyXG4gICAgPHgtYnV0dG9uXHJcbiAgICAgIHR5cGU9XCJwcmltYXJ5XCJcclxuICAgICAgaWNvbj1cImZ0by1jaGV2cm9uLXJpZ2h0XCJcclxuICAgICAgW2Rpc2FibGVkXT1cImxlZnQoKS5kaXNhYmxlZEJ1dHRvbiFcIlxyXG4gICAgICAoY2xpY2spPVwibW92ZShsZWZ0KCksIHJpZ2h0KCkpXCJcclxuICAgICAgZmxhdFxyXG4gICAgPjwveC1idXR0b24+XHJcbiAgICA8eC1idXR0b25cclxuICAgICAgdHlwZT1cInByaW1hcnlcIlxyXG4gICAgICBpY29uPVwiZnRvLWNoZXZyb24tbGVmdFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJyaWdodCgpLmRpc2FibGVkQnV0dG9uIVwiXHJcbiAgICAgIChjbGljayk9XCJtb3ZlKHJpZ2h0KCksIGxlZnQoKSlcIlxyXG4gICAgICBmbGF0XHJcbiAgICA+PC94LWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1ib3hcIiBbY2xhc3MueC10cmFuc2Zlci1oYXMtZm9vdGVyXT1cInJpZ2h0KCkuZm9vdGVyVHBsXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlVGl0bGVUcGw7IGNvbnRleHQ6IHsgc291cmNlOiByaWdodCgpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8ZGl2IFtuZ1N0eWxlXT1cInJpZ2h0KCkubGlzdFN0eWxlIVwiIGNsYXNzPVwieC10cmFuc2Zlci1saXN0XCI+XHJcbiAgICAgIEBzd2l0Y2ggKHR5cGUoKSkge1xyXG4gICAgICAgIEBjYXNlICgndGFibGUnKSB7XHJcbiAgICAgICAgICA8eC10YWJsZVxyXG4gICAgICAgICAgICAjcmlnaHRUYWJsZUNvbVxyXG4gICAgICAgICAgICBbZGF0YV09XCJyaWdodCgpLmxpc3QhXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwidGFibGVDb2x1bW5zKCkhXCJcclxuICAgICAgICAgICAgKGFjdGl2YXRlZFJvd0NoYW5nZSk9XCJvblRhYmxlQ2hlY2tlZFJvdygkZXZlbnQhLCByaWdodCgpKVwiXHJcbiAgICAgICAgICAgIChoZWFkQ2hlY2tib3hDaGFuZ2UpPVwib25UYWJsZUNoZWNrZWRBbGwoJGV2ZW50LCByaWdodCgpKVwiXHJcbiAgICAgICAgICAgIGhpZGRlbldyYXBCb3JkZXJcclxuICAgICAgICAgICAgaGlkZGVuUGFnaW5hdGlvbkJvcmRlclxyXG4gICAgICAgICAgICBzaG93UGFnaW5hdGlvbj1cImZhbHNlXCJcclxuICAgICAgICAgICAgc2hvd0VsbGlwc2lzPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBzaG93VG90YWw9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qb3NpdGlvbj1cImJvdHRvbS1jZW50ZXJcIlxyXG4gICAgICAgICAgICBhbGxvd1NlbGVjdFJvdz1cImZhbHNlXCJcclxuICAgICAgICAgICAgW2hlYWRTZWFyY2hUcGxdPVwicmlnaHQoKS50YWJsZUhlYWRTZWFyY2hUcGxcIlxyXG4gICAgICAgICAgPjwveC10YWJsZT5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGRlZmF1bHQge1xyXG4gICAgICAgICAgPHVsXHJcbiAgICAgICAgICAgIGNka0Ryb3BMaXN0XHJcbiAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcENkaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJyaWdodCgpLmxpc3RcIlxyXG4gICAgICAgICAgICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCIhZHJhZygpIHx8IChkcmFnKCkgJiYgdHlwZSgpICE9PSAnbGlzdCcpXCJcclxuICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwicHJlZGljYXRlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ4LXRyYW5zZmVyLWRyb3BsaXN0XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgQGZvciAobm9kZSBvZiByaWdodCgpLmxpc3Q7IHRyYWNrIG5vZGUuaWQpIHtcclxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ4LXRyYW5zZmVyLWl0ZW1cIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJub2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlTm9kZVRwbDsgY29udGV4dDogeyBub2RlOiBub2RlLCBzb3VyY2U6IHJpZ2h0KCkgfVwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChyaWdodCgpLmZvb3RlclRwbCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1mb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmlnaHQoKS5mb290ZXJUcGwhOyBjb250ZXh0OiB7ICRzb3VyY2U6IHJpZ2h0KCkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3NvdXJjZVRpdGxlVHBsIGxldC1zb3VyY2U9XCJzb3VyY2VcIj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci10aXRsZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItdGl0bGUtbGVmdFwiPlxyXG4gICAgICBAaWYgKHNvdXJjZS50aXRsZSAmJiAhc291cmNlLmhpZGRlbkNoZWNrQWxsKSB7XHJcbiAgICAgICAgPHgtY2hlY2tib3hcclxuICAgICAgICAgIFtkYXRhXT1cIlt0aXRsZVRwbCgpID8gJycgOiBzb3VyY2UudGl0bGVdXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwic291cmNlLmNoZWNrZWRBbGxcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tlZEFsbENoYW5nZSgkZXZlbnQsIHNvdXJjZSlcIlxyXG4gICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic291cmNlLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgc2luZ2xlXHJcbiAgICAgICAgPjwveC1jaGVja2JveD5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKHNvdXJjZS50aXRsZSAmJiBzb3VyY2UuaGlkZGVuQ2hlY2tBbGwpIHtcclxuICAgICAgICA8c3Bhbj57eyBzb3VyY2UudGl0bGUgfX08L3NwYW4+XHJcbiAgICAgIH1cclxuICAgICAgQGlmIChpbnZlcnNlKCkgJiYgdHlwZSgpID09PSAnbGlzdCcpIHtcclxuICAgICAgICA8eC1saW5rIGNsYXNzPVwieC10cmFuc2Zlci1pbnZlcnNlXCIgdHlwZT1cInByaW1hcnlcIiAoY2xpY2spPVwib25JbnZlcnNlKHNvdXJjZSlcIj57e1xyXG4gICAgICAgICAgJ3RyYW5zZmVyLmludmVyc2UnIHwgeEkxOG5cclxuICAgICAgICB9fTwveC1saW5rPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKnhPdXRsZXQ9XCJ0aXRsZVRwbDsgY29udGV4dDogeyAkdGl0bGU6IHNvdXJjZS50aXRsZSwgJGNoZWNrZWRDb3VudDogc291cmNlLmNoZWNrZWRDb3VudCwgJGNvdW50OiBzb3VyY2UuY291bnQgfVwiXHJcbiAgICAgID48c3BhbiBjbGFzcz1cIngtdHJhbnNmZXItdG90YWxcIj57eyBzb3VyY2UuY2hlY2tlZENvdW50IH19IC8ge3sgc291cmNlLmNvdW50IH19PC9zcGFuPjwvbmctY29udGFpbmVyXHJcbiAgICA+XHJcbiAgPC9kaXY+XHJcbiAgQGlmIChzZWFyY2goKSAmJiB0eXBlKCkgIT09ICd0YWJsZScpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJ4LXRyYW5zZmVyLXNlYXJjaFwiPlxyXG4gICAgICA8eC1pbnB1dFxyXG4gICAgICAgIGljb249XCJmdG8tc2VhcmNoXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInNvdXJjZS5zZWFyY2hJbnB1dFwiXHJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hJbnB1dENoYW5nZShzb3VyY2UpXCJcclxuICAgICAgICBjbGVhcmFibGVcclxuICAgICAgPjwveC1pbnB1dD5cclxuICAgIDwvZGl2PlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc291cmNlTm9kZVRwbCBsZXQtbm9kZT1cIm5vZGVcIiBsZXQtc291cmNlPVwic291cmNlXCI+XHJcbiAgPHgtY2hlY2tib3hcclxuICAgIFtkYXRhXT1cIlt7IGlkOiBub2RlLmlkLCBsYWJlbDogbm9kZVRwbCgpID8gbm9kZVRwbCgpIDogbGFiZWxUcGwsIG5vZGU6IG5vZGUgfV1cIlxyXG4gICAgW2Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJub2RlLmNoZWNrZWRcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tlZENoYW5nZSgkZXZlbnQsIHNvdXJjZSlcIlxyXG4gICAgc2luZ2xlXHJcbiAgPjwveC1jaGVja2JveD5cclxuICA8bmctdGVtcGxhdGUgI2xhYmVsVHBsPlxyXG4gICAgPHNwYW4geC1rZXl3b3JkIFt0ZXh0XT1cInNvdXJjZS5zZWFyY2hJbnB1dCFcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -2,11 +2,11 @@ import { NgModule } from '@angular/core';
2
2
  import { XTransferComponent } from './transfer.component';
3
3
  import * as i0 from "@angular/core";
4
4
  export class XTransferModule {
5
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: XTransferModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: XTransferModule, imports: [XTransferComponent], exports: [XTransferComponent] }); }
7
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: XTransferModule, imports: [XTransferComponent] }); }
5
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XTransferModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.2", ngImport: i0, type: XTransferModule, imports: [XTransferComponent], exports: [XTransferComponent] }); }
7
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XTransferModule, imports: [XTransferComponent] }); }
8
8
  }
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: XTransferModule, decorators: [{
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XTransferModule, decorators: [{
10
10
  type: NgModule,
11
11
  args: [{
12
12
  exports: [XTransferComponent],
@@ -102,10 +102,10 @@ export class XTransferProperty extends XFormControlFunction(X_TRANSFER_CONFIG_NA
102
102
  */
103
103
  this.inverse = input(false, { transform: XToBoolean });
104
104
  }
105
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: XTransferProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
106
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: XTransferProperty, selector: "x-transfer-property", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, titles: { classPropertyName: "titles", publicName: "titles", isSignal: true, isRequired: false, transformFunction: null }, listStyle: { classPropertyName: "listStyle", publicName: "listStyle", isSignal: true, isRequired: false, transformFunction: null }, hiddenCheckAll: { classPropertyName: "hiddenCheckAll", publicName: "hiddenCheckAll", isSignal: true, isRequired: false, transformFunction: null }, drag: { classPropertyName: "drag", publicName: "drag", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, tableHeadSearchTpl: { classPropertyName: "tableHeadSearchTpl", publicName: "tableHeadSearchTpl", isSignal: true, isRequired: false, transformFunction: null }, nodeTpl: { classPropertyName: "nodeTpl", publicName: "nodeTpl", isSignal: true, isRequired: false, transformFunction: null }, titleTpl: { classPropertyName: "titleTpl", publicName: "titleTpl", isSignal: true, isRequired: false, transformFunction: null }, footerTpl: { classPropertyName: "footerTpl", publicName: "footerTpl", isSignal: true, isRequired: false, transformFunction: null }, tableColumns: { classPropertyName: "tableColumns", publicName: "tableColumns", isSignal: true, isRequired: false, transformFunction: null }, tableIndex: { classPropertyName: "tableIndex", publicName: "tableIndex", isSignal: true, isRequired: false, transformFunction: null }, tableSize: { classPropertyName: "tableSize", publicName: "tableSize", isSignal: true, isRequired: false, transformFunction: null }, tableQuery: { classPropertyName: "tableQuery", publicName: "tableQuery", isSignal: true, isRequired: false, transformFunction: null }, tableTotal: { classPropertyName: "tableTotal", publicName: "tableTotal", isSignal: true, isRequired: false, transformFunction: null }, inverse: { classPropertyName: "inverse", publicName: "inverse", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tableIndex: "tableIndexChange", tableSize: "tableSizeChange", tableTotal: "tableTotalChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
105
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XTransferProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
106
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.2", type: XTransferProperty, selector: "x-transfer-property", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, titles: { classPropertyName: "titles", publicName: "titles", isSignal: true, isRequired: false, transformFunction: null }, listStyle: { classPropertyName: "listStyle", publicName: "listStyle", isSignal: true, isRequired: false, transformFunction: null }, hiddenCheckAll: { classPropertyName: "hiddenCheckAll", publicName: "hiddenCheckAll", isSignal: true, isRequired: false, transformFunction: null }, drag: { classPropertyName: "drag", publicName: "drag", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, tableHeadSearchTpl: { classPropertyName: "tableHeadSearchTpl", publicName: "tableHeadSearchTpl", isSignal: true, isRequired: false, transformFunction: null }, nodeTpl: { classPropertyName: "nodeTpl", publicName: "nodeTpl", isSignal: true, isRequired: false, transformFunction: null }, titleTpl: { classPropertyName: "titleTpl", publicName: "titleTpl", isSignal: true, isRequired: false, transformFunction: null }, footerTpl: { classPropertyName: "footerTpl", publicName: "footerTpl", isSignal: true, isRequired: false, transformFunction: null }, tableColumns: { classPropertyName: "tableColumns", publicName: "tableColumns", isSignal: true, isRequired: false, transformFunction: null }, tableIndex: { classPropertyName: "tableIndex", publicName: "tableIndex", isSignal: true, isRequired: false, transformFunction: null }, tableSize: { classPropertyName: "tableSize", publicName: "tableSize", isSignal: true, isRequired: false, transformFunction: null }, tableQuery: { classPropertyName: "tableQuery", publicName: "tableQuery", isSignal: true, isRequired: false, transformFunction: null }, tableTotal: { classPropertyName: "tableTotal", publicName: "tableTotal", isSignal: true, isRequired: false, transformFunction: null }, inverse: { classPropertyName: "inverse", publicName: "inverse", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tableIndex: "tableIndexChange", tableSize: "tableSizeChange", tableTotal: "tableTotalChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
107
107
  }
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: XTransferProperty, decorators: [{
108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XTransferProperty, decorators: [{
109
109
  type: Component,
110
110
  args: [{ selector: `${XTransferPrefix}-property`, template: '' }]
111
111
  }] });