@delon/abc 12.4.1 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (758) hide show
  1. package/abc.d.ts +1 -0
  2. package/auto-focus/{autoFocus.d.ts → auto-focus.d.ts} +1 -0
  3. package/auto-focus/auto-focus.directive.d.ts +7 -2
  4. package/auto-focus/auto-focus.module.d.ts +5 -0
  5. package/auto-focus/package.json +6 -7
  6. package/avatar-list/avatar-list-item.component.d.ts +7 -4
  7. package/avatar-list/avatar-list.component.d.ts +4 -1
  8. package/avatar-list/avatar-list.d.ts +5 -0
  9. package/avatar-list/avatar-list.module.d.ts +9 -0
  10. package/avatar-list/package.json +6 -7
  11. package/avatar-list/style/index.less +6 -0
  12. package/count-down/count-down.component.d.ts +4 -1
  13. package/count-down/count-down.d.ts +1 -0
  14. package/count-down/count-down.module.d.ts +7 -0
  15. package/count-down/package.json +5 -6
  16. package/date-picker/date-picker.d.ts +5 -0
  17. package/date-picker/date-picker.module.d.ts +9 -0
  18. package/date-picker/package.json +6 -7
  19. package/date-picker/public_api.d.ts +1 -0
  20. package/date-picker/range-shortcut.component.d.ts +3 -0
  21. package/date-picker/range.directive.d.ts +3 -0
  22. package/down-file/down-file.d.ts +5 -0
  23. package/down-file/down-file.directive.d.ts +5 -2
  24. package/down-file/down-file.module.d.ts +7 -0
  25. package/down-file/package.json +6 -7
  26. package/ellipsis/ellipsis.component.d.ts +5 -2
  27. package/ellipsis/ellipsis.d.ts +1 -0
  28. package/ellipsis/ellipsis.module.d.ts +8 -0
  29. package/ellipsis/package.json +5 -6
  30. package/ellipsis/style/index.less +4 -0
  31. package/error-collect/error-collect.component.d.ts +3 -0
  32. package/error-collect/error-collect.d.ts +5 -0
  33. package/error-collect/error-collect.module.d.ts +7 -0
  34. package/error-collect/package.json +6 -7
  35. package/error-collect/style/index.less +1 -0
  36. package/{esm2015/abc.js → esm2020/abc.mjs} +0 -0
  37. package/esm2020/auto-focus/auto-focus.directive.mjs +48 -0
  38. package/esm2020/auto-focus/auto-focus.mjs +5 -0
  39. package/esm2020/auto-focus/auto-focus.module.mjs +17 -0
  40. package/{esm2015/auto-focus/index.js → esm2020/auto-focus/index.mjs} +0 -0
  41. package/esm2020/avatar-list/avatar-list-item.component.mjs +26 -0
  42. package/esm2020/avatar-list/avatar-list.component.mjs +89 -0
  43. package/esm2020/avatar-list/avatar-list.mjs +5 -0
  44. package/esm2020/avatar-list/avatar-list.module.mjs +22 -0
  45. package/{esm2015/avatar-list/public_api.js → esm2020/avatar-list/public_api.mjs} +0 -0
  46. package/esm2020/count-down/count-down.component.mjs +45 -0
  47. package/{esm2015/count-down/count-down.js → esm2020/count-down/count-down.mjs} +0 -0
  48. package/esm2020/count-down/count-down.module.mjs +20 -0
  49. package/{esm2015/count-down/public_api.js → esm2020/count-down/public_api.mjs} +0 -0
  50. package/esm2020/date-picker/date-picker.mjs +5 -0
  51. package/esm2020/date-picker/date-picker.module.mjs +22 -0
  52. package/{esm2015/date-picker/public_api.js → esm2020/date-picker/public_api.mjs} +2 -1
  53. package/esm2020/date-picker/range-shortcut.component.mjs +40 -0
  54. package/esm2020/date-picker/range.directive.mjs +174 -0
  55. package/esm2020/down-file/down-file.directive.mjs +114 -0
  56. package/esm2020/down-file/down-file.mjs +5 -0
  57. package/esm2020/down-file/down-file.module.mjs +20 -0
  58. package/{esm2015/down-file/public_api.js → esm2020/down-file/public_api.mjs} +0 -0
  59. package/esm2020/ellipsis/ellipsis.component.mjs +229 -0
  60. package/{esm2015/ellipsis/ellipsis.js → esm2020/ellipsis/ellipsis.mjs} +0 -0
  61. package/esm2020/ellipsis/ellipsis.module.mjs +21 -0
  62. package/{esm2015/ellipsis/public_api.js → esm2020/ellipsis/public_api.mjs} +0 -0
  63. package/esm2020/error-collect/error-collect.component.mjs +118 -0
  64. package/esm2020/error-collect/error-collect.mjs +5 -0
  65. package/esm2020/error-collect/error-collect.module.mjs +20 -0
  66. package/{esm2015/error-collect/public_api.js → esm2020/error-collect/public_api.mjs} +0 -0
  67. package/esm2020/exception/exception.component.mjs +105 -0
  68. package/{esm2015/exception/exception.js → esm2020/exception/exception.mjs} +0 -0
  69. package/esm2020/exception/exception.module.mjs +23 -0
  70. package/{esm2015/exception/public_api.js → esm2020/exception/public_api.mjs} +0 -0
  71. package/esm2020/footer-toolbar/footer-toolbar.component.mjs +44 -0
  72. package/esm2020/footer-toolbar/footer-toolbar.mjs +5 -0
  73. package/esm2020/footer-toolbar/footer-toolbar.module.mjs +21 -0
  74. package/{esm2015/footer-toolbar/public_api.js → esm2020/footer-toolbar/public_api.mjs} +0 -0
  75. package/esm2020/full-content/full-content-toggle.directive.mjs +24 -0
  76. package/esm2020/full-content/full-content.component.mjs +138 -0
  77. package/esm2020/full-content/full-content.mjs +5 -0
  78. package/esm2020/full-content/full-content.module.mjs +20 -0
  79. package/esm2020/full-content/full-content.service.mjs +23 -0
  80. package/{esm2015/full-content/public_api.js → esm2020/full-content/public_api.mjs} +0 -0
  81. package/esm2020/global-footer/global-footer-item.component.mjs +30 -0
  82. package/esm2020/global-footer/global-footer.component.mjs +73 -0
  83. package/esm2020/global-footer/global-footer.mjs +5 -0
  84. package/esm2020/global-footer/global-footer.module.mjs +21 -0
  85. package/{esm2015/global-footer/global-footer.types.js → esm2020/global-footer/global-footer.types.mjs} +0 -0
  86. package/{esm2015/global-footer/public_api.js → esm2020/global-footer/public_api.mjs} +0 -0
  87. package/esm2020/image/image.directive.mjs +146 -0
  88. package/{esm2015/image/image.js → esm2020/image/image.mjs} +0 -0
  89. package/esm2020/image/image.module.mjs +20 -0
  90. package/{esm2015/image/public_api.js → esm2020/image/public_api.mjs} +0 -0
  91. package/{esm2015/let/index.js → esm2020/let/index.mjs} +0 -0
  92. package/esm2020/let/let.directive.mjs +36 -0
  93. package/{esm2015/let/let.js → esm2020/let/let.mjs} +0 -0
  94. package/esm2020/let/let.module.mjs +17 -0
  95. package/esm2020/loading/loading.component.mjs +26 -0
  96. package/{esm2015/loading/loading.js → esm2020/loading/loading.mjs} +0 -0
  97. package/esm2020/loading/loading.module.mjs +24 -0
  98. package/esm2020/loading/loading.service.mjs +88 -0
  99. package/{esm2015/loading/loading.types.js → esm2020/loading/loading.types.mjs} +0 -0
  100. package/{esm2015/loading/public_api.js → esm2020/loading/public_api.mjs} +0 -0
  101. package/{esm2015/lodop/lodop.js → esm2020/lodop/lodop.mjs} +0 -0
  102. package/esm2020/lodop/lodop.module.mjs +12 -0
  103. package/esm2020/lodop/lodop.service.mjs +222 -0
  104. package/esm2020/lodop/lodop.types.mjs +2 -0
  105. package/{esm2015/lodop/public_api.js → esm2020/lodop/public_api.mjs} +0 -0
  106. package/esm2020/media/media.component.mjs +106 -0
  107. package/{esm2015/media/media.js → esm2020/media/media.mjs} +0 -0
  108. package/esm2020/media/media.module.mjs +19 -0
  109. package/esm2020/media/media.service.mjs +46 -0
  110. package/{esm2015/media/plyr.types.js → esm2020/media/plyr.types.mjs} +0 -0
  111. package/{esm2015/media/public_api.js → esm2020/media/public_api.mjs} +0 -0
  112. package/esm2020/notice-icon/notice-icon-tab.component.mjs +34 -0
  113. package/esm2020/notice-icon/notice-icon.component.mjs +80 -0
  114. package/esm2020/notice-icon/notice-icon.mjs +5 -0
  115. package/esm2020/notice-icon/notice-icon.module.mjs +60 -0
  116. package/{esm2015/notice-icon/notice-icon.types.js → esm2020/notice-icon/notice-icon.types.mjs} +0 -0
  117. package/{esm2015/notice-icon/public_api.js → esm2020/notice-icon/public_api.mjs} +0 -0
  118. package/esm2020/onboarding/onboarding.component.mjs +134 -0
  119. package/{esm2015/onboarding/onboarding.js → esm2020/onboarding/onboarding.mjs} +0 -0
  120. package/esm2020/onboarding/onboarding.module.mjs +25 -0
  121. package/esm2020/onboarding/onboarding.service.mjs +185 -0
  122. package/{esm2015/onboarding/onboarding.types.js → esm2020/onboarding/onboarding.types.mjs} +0 -0
  123. package/{esm2015/onboarding/public_api.js → esm2020/onboarding/public_api.mjs} +0 -0
  124. package/esm2020/page-header/page-header.component.mjs +247 -0
  125. package/esm2020/page-header/page-header.mjs +5 -0
  126. package/esm2020/page-header/page-header.module.mjs +24 -0
  127. package/{esm2015/page-header/public_api.js → esm2020/page-header/public_api.mjs} +0 -0
  128. package/esm2020/pdf/pdf.component.mjs +460 -0
  129. package/{esm2015/pdf/pdf.config.js → esm2020/pdf/pdf.config.mjs} +2 -2
  130. package/{esm2015/pdf/pdf.js → esm2020/pdf/pdf.mjs} +0 -0
  131. package/esm2020/pdf/pdf.module.mjs +20 -0
  132. package/{esm2015/pdf/pdf.types.js → esm2020/pdf/pdf.types.mjs} +0 -0
  133. package/{esm2015/pdf/public_api.js → esm2020/pdf/public_api.mjs} +0 -0
  134. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  135. package/{esm2015/qr/public_api.js → esm2020/qr/public_api.mjs} +0 -0
  136. package/esm2020/qr/qr.component.mjs +136 -0
  137. package/{esm2015/qr/qr.config.js → esm2020/qr/qr.config.mjs} +2 -2
  138. package/{esm2015/qr/qr.js → esm2020/qr/qr.mjs} +0 -0
  139. package/esm2020/qr/qr.module.mjs +19 -0
  140. package/{esm2015/qr/qr.types.js → esm2020/qr/qr.types.mjs} +0 -0
  141. package/{esm2015/quick-menu/public_api.js → esm2020/quick-menu/public_api.mjs} +0 -0
  142. package/esm2020/quick-menu/quick-menu.component.mjs +89 -0
  143. package/esm2020/quick-menu/quick-menu.mjs +5 -0
  144. package/esm2020/quick-menu/quick-menu.module.mjs +21 -0
  145. package/{esm2015/result/public_api.js → esm2020/result/public_api.mjs} +0 -0
  146. package/esm2020/result/result.component.mjs +61 -0
  147. package/{esm2015/result/result.js → esm2020/result/result.mjs} +0 -0
  148. package/esm2020/result/result.module.mjs +21 -0
  149. package/{esm2015/reuse-tab/lifecycle_hooks.js → esm2020/reuse-tab/lifecycle_hooks.mjs} +0 -0
  150. package/{esm2015/reuse-tab/public_api.js → esm2020/reuse-tab/public_api.mjs} +0 -0
  151. package/esm2020/reuse-tab/reuse-tab-context-menu.component.mjs +76 -0
  152. package/esm2020/reuse-tab/reuse-tab-context.component.mjs +33 -0
  153. package/esm2020/reuse-tab/reuse-tab-context.directive.mjs +35 -0
  154. package/esm2020/reuse-tab/reuse-tab-context.service.mjs +55 -0
  155. package/esm2020/reuse-tab/reuse-tab.component.mjs +318 -0
  156. package/{esm2015/reuse-tab/reuse-tab.interfaces.js → esm2020/reuse-tab/reuse-tab.interfaces.mjs} +0 -0
  157. package/esm2020/reuse-tab/reuse-tab.mjs +5 -0
  158. package/esm2020/reuse-tab/reuse-tab.module.mjs +29 -0
  159. package/esm2020/reuse-tab/reuse-tab.service.mjs +533 -0
  160. package/{esm2015/reuse-tab/reuse-tab.strategy.js → esm2020/reuse-tab/reuse-tab.strategy.mjs} +0 -0
  161. package/esm2020/se/public_api.mjs +5 -0
  162. package/esm2020/se/se-container.component.mjs +173 -0
  163. package/esm2020/se/se.component.mjs +233 -0
  164. package/esm2020/se/se.mjs +5 -0
  165. package/esm2020/se/se.module.mjs +23 -0
  166. package/{esm2015/se/se.types.js → esm2020/se/se.types.mjs} +0 -0
  167. package/{esm2015/sg/public_api.js → esm2020/sg/public_api.mjs} +0 -0
  168. package/esm2020/sg/sg-container.component.mjs +52 -0
  169. package/esm2020/sg/sg.component.mjs +67 -0
  170. package/esm2020/sg/sg.mjs +5 -0
  171. package/esm2020/sg/sg.module.mjs +20 -0
  172. package/{esm2015/st/public_api.js → esm2020/st/public_api.mjs} +0 -0
  173. package/esm2020/st/st-column-source.mjs +470 -0
  174. package/esm2020/st/st-data-source.mjs +448 -0
  175. package/esm2020/st/st-export.mjs +89 -0
  176. package/esm2020/st/st-filter.component.mjs +262 -0
  177. package/esm2020/st/st-row.directive.mjs +45 -0
  178. package/esm2020/st/st-widget-host.directive.mjs +31 -0
  179. package/esm2020/st/st-widget.mjs +26 -0
  180. package/esm2020/st/st.component.mjs +969 -0
  181. package/{esm2015/st/st.config.js → esm2020/st/st.config.mjs} +0 -0
  182. package/esm2020/st/st.interfaces.mjs +2 -0
  183. package/esm2020/st/st.mjs +5 -0
  184. package/esm2020/st/st.module.mjs +98 -0
  185. package/{esm2015/st/st.types.js → esm2020/st/st.types.mjs} +0 -0
  186. package/esm2020/sv/public_api.mjs +5 -0
  187. package/esm2020/sv/sv-container.component.mjs +125 -0
  188. package/esm2020/sv/sv-value.component.mjs +44 -0
  189. package/esm2020/sv/sv.component.mjs +113 -0
  190. package/esm2020/sv/sv.mjs +5 -0
  191. package/esm2020/sv/sv.module.mjs +25 -0
  192. package/{esm2015/tag-select/public_api.js → esm2020/tag-select/public_api.mjs} +0 -0
  193. package/esm2020/tag-select/tag-select.component.mjs +64 -0
  194. package/esm2020/tag-select/tag-select.mjs +5 -0
  195. package/esm2020/tag-select/tag-select.module.mjs +21 -0
  196. package/{esm2015/xlsx/public_api.js → esm2020/xlsx/public_api.mjs} +0 -0
  197. package/esm2020/xlsx/xlsx.directive.mjs +27 -0
  198. package/{esm2015/xlsx/xlsx.js → esm2020/xlsx/xlsx.mjs} +0 -0
  199. package/esm2020/xlsx/xlsx.module.mjs +19 -0
  200. package/esm2020/xlsx/xlsx.service.mjs +128 -0
  201. package/{esm2015/xlsx/xlsx.types.js → esm2020/xlsx/xlsx.types.mjs} +0 -0
  202. package/{esm2015/zip/public_api.js → esm2020/zip/public_api.mjs} +0 -0
  203. package/{esm2015/zip/zip.js → esm2020/zip/zip.mjs} +0 -0
  204. package/esm2020/zip/zip.module.mjs +15 -0
  205. package/esm2020/zip/zip.service.mjs +114 -0
  206. package/{esm2015/zip/zip.types.js → esm2020/zip/zip.types.mjs} +0 -0
  207. package/exception/exception.component.d.ts +3 -0
  208. package/exception/exception.d.ts +1 -0
  209. package/exception/exception.module.d.ts +10 -0
  210. package/exception/package.json +5 -6
  211. package/exception/style/index.less +9 -0
  212. package/fesm2015/{abc.js → abc.mjs} +1 -1
  213. package/fesm2015/abc.mjs.map +1 -0
  214. package/fesm2015/auto-focus.mjs +69 -0
  215. package/fesm2015/auto-focus.mjs.map +1 -0
  216. package/fesm2015/avatar-list.mjs +140 -0
  217. package/fesm2015/avatar-list.mjs.map +1 -0
  218. package/fesm2015/count-down.mjs +69 -0
  219. package/fesm2015/count-down.mjs.map +1 -0
  220. package/fesm2015/{datePicker.js → date-picker.mjs} +63 -40
  221. package/fesm2015/date-picker.mjs.map +1 -0
  222. package/fesm2015/down-file.mjs +141 -0
  223. package/fesm2015/down-file.mjs.map +1 -0
  224. package/fesm2015/ellipsis.mjs +255 -0
  225. package/fesm2015/ellipsis.mjs.map +1 -0
  226. package/fesm2015/error-collect.mjs +144 -0
  227. package/fesm2015/error-collect.mjs.map +1 -0
  228. package/fesm2015/exception.mjs +135 -0
  229. package/fesm2015/exception.mjs.map +1 -0
  230. package/fesm2015/footer-toolbar.mjs +70 -0
  231. package/fesm2015/footer-toolbar.mjs.map +1 -0
  232. package/fesm2015/full-content.mjs +202 -0
  233. package/fesm2015/full-content.mjs.map +1 -0
  234. package/fesm2015/global-footer.mjs +127 -0
  235. package/fesm2015/global-footer.mjs.map +1 -0
  236. package/fesm2015/image.mjs +165 -0
  237. package/fesm2015/image.mjs.map +1 -0
  238. package/fesm2015/let.mjs +59 -0
  239. package/fesm2015/let.mjs.map +1 -0
  240. package/fesm2015/loading.mjs +140 -0
  241. package/fesm2015/loading.mjs.map +1 -0
  242. package/fesm2015/{lodop.js → lodop.mjs} +15 -15
  243. package/fesm2015/lodop.mjs.map +1 -0
  244. package/fesm2015/media.mjs +170 -0
  245. package/fesm2015/media.mjs.map +1 -0
  246. package/fesm2015/notice-icon.mjs +173 -0
  247. package/fesm2015/notice-icon.mjs.map +1 -0
  248. package/fesm2015/onboarding.mjs +335 -0
  249. package/fesm2015/onboarding.mjs.map +1 -0
  250. package/fesm2015/page-header.mjs +277 -0
  251. package/fesm2015/page-header.mjs.map +1 -0
  252. package/fesm2015/{pdf.js → pdf.mjs} +81 -54
  253. package/fesm2015/pdf.mjs.map +1 -0
  254. package/fesm2015/qr.mjs +171 -0
  255. package/fesm2015/qr.mjs.map +1 -0
  256. package/fesm2015/quick-menu.mjs +114 -0
  257. package/fesm2015/quick-menu.mjs.map +1 -0
  258. package/fesm2015/result.mjs +89 -0
  259. package/fesm2015/result.mjs.map +1 -0
  260. package/fesm2015/{reuseTab.js → reuse-tab.mjs} +183 -160
  261. package/fesm2015/reuse-tab.mjs.map +1 -0
  262. package/fesm2015/se.mjs +443 -0
  263. package/fesm2015/se.mjs.map +1 -0
  264. package/fesm2015/sg.mjs +139 -0
  265. package/fesm2015/sg.mjs.map +1 -0
  266. package/fesm2015/{table.js → st.mjs} +610 -492
  267. package/fesm2015/st.mjs.map +1 -0
  268. package/fesm2015/sv.mjs +302 -0
  269. package/fesm2015/sv.mjs.map +1 -0
  270. package/fesm2015/tag-select.mjs +92 -0
  271. package/fesm2015/tag-select.mjs.map +1 -0
  272. package/fesm2015/{xlsx.js → xlsx.mjs} +42 -42
  273. package/fesm2015/xlsx.mjs.map +1 -0
  274. package/fesm2015/{zip.js → zip.mjs} +35 -32
  275. package/fesm2015/zip.mjs.map +1 -0
  276. package/fesm2020/abc.mjs +7 -0
  277. package/fesm2020/abc.mjs.map +1 -0
  278. package/fesm2020/auto-focus.mjs +69 -0
  279. package/fesm2020/auto-focus.mjs.map +1 -0
  280. package/fesm2020/avatar-list.mjs +137 -0
  281. package/fesm2020/avatar-list.mjs.map +1 -0
  282. package/fesm2020/count-down.mjs +69 -0
  283. package/fesm2020/count-down.mjs.map +1 -0
  284. package/fesm2020/date-picker.mjs +236 -0
  285. package/fesm2020/date-picker.mjs.map +1 -0
  286. package/fesm2020/down-file.mjs +138 -0
  287. package/fesm2020/down-file.mjs.map +1 -0
  288. package/fesm2020/ellipsis.mjs +253 -0
  289. package/fesm2020/ellipsis.mjs.map +1 -0
  290. package/fesm2020/error-collect.mjs +141 -0
  291. package/fesm2020/error-collect.mjs.map +1 -0
  292. package/fesm2020/exception.mjs +132 -0
  293. package/fesm2020/exception.mjs.map +1 -0
  294. package/fesm2020/footer-toolbar.mjs +68 -0
  295. package/fesm2020/footer-toolbar.mjs.map +1 -0
  296. package/fesm2020/full-content.mjs +199 -0
  297. package/fesm2020/full-content.mjs.map +1 -0
  298. package/fesm2020/global-footer.mjs +124 -0
  299. package/fesm2020/global-footer.mjs.map +1 -0
  300. package/fesm2020/image.mjs +170 -0
  301. package/fesm2020/image.mjs.map +1 -0
  302. package/fesm2020/let.mjs +57 -0
  303. package/fesm2020/let.mjs.map +1 -0
  304. package/fesm2020/loading.mjs +138 -0
  305. package/fesm2020/loading.mjs.map +1 -0
  306. package/fesm2020/lodop.mjs +239 -0
  307. package/fesm2020/lodop.mjs.map +1 -0
  308. package/fesm2020/media.mjs +172 -0
  309. package/fesm2020/media.mjs.map +1 -0
  310. package/fesm2020/notice-icon.mjs +173 -0
  311. package/fesm2020/notice-icon.mjs.map +1 -0
  312. package/fesm2020/onboarding.mjs +343 -0
  313. package/fesm2020/onboarding.mjs.map +1 -0
  314. package/fesm2020/page-header.mjs +274 -0
  315. package/fesm2020/page-header.mjs.map +1 -0
  316. package/fesm2020/pdf.mjs +506 -0
  317. package/fesm2020/pdf.mjs.map +1 -0
  318. package/fesm2020/qr.mjs +171 -0
  319. package/fesm2020/qr.mjs.map +1 -0
  320. package/fesm2020/quick-menu.mjs +114 -0
  321. package/fesm2020/quick-menu.mjs.map +1 -0
  322. package/fesm2020/result.mjs +86 -0
  323. package/fesm2020/result.mjs.map +1 -0
  324. package/fesm2020/reuse-tab.mjs +1106 -0
  325. package/fesm2020/reuse-tab.mjs.map +1 -0
  326. package/fesm2020/se.mjs +436 -0
  327. package/fesm2020/se.mjs.map +1 -0
  328. package/fesm2020/sg.mjs +137 -0
  329. package/fesm2020/sg.mjs.map +1 -0
  330. package/fesm2020/st.mjs +2469 -0
  331. package/fesm2020/st.mjs.map +1 -0
  332. package/fesm2020/sv.mjs +298 -0
  333. package/fesm2020/sv.mjs.map +1 -0
  334. package/fesm2020/tag-select.mjs +89 -0
  335. package/fesm2020/tag-select.mjs.map +1 -0
  336. package/fesm2020/xlsx.mjs +175 -0
  337. package/fesm2020/xlsx.mjs.map +1 -0
  338. package/fesm2020/zip.mjs +134 -0
  339. package/fesm2020/zip.mjs.map +1 -0
  340. package/footer-toolbar/footer-toolbar.component.d.ts +4 -1
  341. package/footer-toolbar/footer-toolbar.d.ts +5 -0
  342. package/footer-toolbar/footer-toolbar.module.d.ts +8 -0
  343. package/footer-toolbar/package.json +6 -7
  344. package/footer-toolbar/style/index.less +1 -0
  345. package/full-content/full-content-toggle.directive.d.ts +3 -0
  346. package/full-content/full-content.component.d.ts +6 -3
  347. package/full-content/full-content.d.ts +5 -0
  348. package/full-content/full-content.module.d.ts +7 -0
  349. package/full-content/full-content.service.d.ts +3 -0
  350. package/full-content/package.json +6 -7
  351. package/full-content/style/index.less +1 -0
  352. package/global-footer/global-footer-item.component.d.ts +5 -2
  353. package/global-footer/global-footer.component.d.ts +3 -0
  354. package/global-footer/global-footer.d.ts +5 -0
  355. package/global-footer/global-footer.module.d.ts +8 -0
  356. package/global-footer/package.json +6 -7
  357. package/global-footer/style/index.less +5 -0
  358. package/image/image.d.ts +1 -0
  359. package/image/image.directive.d.ts +4 -1
  360. package/image/image.module.d.ts +7 -0
  361. package/image/package.json +5 -6
  362. package/let/let.d.ts +1 -0
  363. package/let/let.directive.d.ts +3 -0
  364. package/let/let.module.d.ts +5 -0
  365. package/let/package.json +5 -6
  366. package/loading/loading.component.d.ts +3 -0
  367. package/loading/loading.d.ts +1 -0
  368. package/loading/loading.module.d.ts +10 -0
  369. package/loading/loading.service.d.ts +4 -1
  370. package/loading/package.json +5 -6
  371. package/loading/style/index.less +3 -0
  372. package/lodop/lodop.d.ts +1 -0
  373. package/lodop/lodop.module.d.ts +4 -0
  374. package/lodop/lodop.service.d.ts +3 -0
  375. package/lodop/lodop.types.d.ts +4 -0
  376. package/lodop/package.json +5 -6
  377. package/media/media.component.d.ts +4 -1
  378. package/media/media.d.ts +1 -0
  379. package/media/media.module.d.ts +6 -0
  380. package/media/media.service.d.ts +3 -0
  381. package/media/package.json +5 -6
  382. package/notice-icon/notice-icon-tab.component.d.ts +3 -0
  383. package/notice-icon/notice-icon.component.d.ts +4 -1
  384. package/notice-icon/notice-icon.d.ts +5 -0
  385. package/notice-icon/notice-icon.module.d.ts +16 -0
  386. package/notice-icon/package.json +6 -7
  387. package/notice-icon/style/index.less +17 -0
  388. package/onboarding/onboarding.component.d.ts +4 -1
  389. package/onboarding/onboarding.d.ts +1 -0
  390. package/onboarding/onboarding.module.d.ts +11 -0
  391. package/onboarding/onboarding.service.d.ts +3 -0
  392. package/onboarding/package.json +5 -6
  393. package/onboarding/schema.json +1 -1
  394. package/onboarding/style/index.less +6 -0
  395. package/package.json +274 -14
  396. package/page-header/package.json +6 -7
  397. package/page-header/page-header.component.d.ts +4 -1
  398. package/page-header/page-header.d.ts +5 -0
  399. package/page-header/page-header.module.d.ts +11 -0
  400. package/page-header/style/index.less +10 -0
  401. package/page-header/style/rtl.less +3 -0
  402. package/pdf/package.json +5 -6
  403. package/pdf/pdf.component.d.ts +5 -2
  404. package/pdf/pdf.d.ts +1 -0
  405. package/pdf/pdf.module.d.ts +7 -0
  406. package/qr/package.json +5 -6
  407. package/qr/qr.component.d.ts +13 -10
  408. package/qr/qr.d.ts +1 -0
  409. package/qr/qr.module.d.ts +6 -0
  410. package/quick-menu/package.json +6 -7
  411. package/quick-menu/quick-menu.component.d.ts +6 -3
  412. package/quick-menu/quick-menu.d.ts +5 -0
  413. package/quick-menu/quick-menu.module.d.ts +8 -0
  414. package/quick-menu/style/index.less +2 -0
  415. package/result/package.json +5 -6
  416. package/result/result.component.d.ts +6 -3
  417. package/result/result.d.ts +1 -0
  418. package/result/result.module.d.ts +8 -0
  419. package/result/style/index.less +7 -0
  420. package/reuse-tab/package.json +6 -7
  421. package/reuse-tab/reuse-tab-context-menu.component.d.ts +3 -0
  422. package/reuse-tab/reuse-tab-context.component.d.ts +4 -1
  423. package/reuse-tab/reuse-tab-context.directive.d.ts +3 -0
  424. package/reuse-tab/reuse-tab-context.service.d.ts +4 -1
  425. package/reuse-tab/reuse-tab.component.d.ts +13 -10
  426. package/reuse-tab/reuse-tab.d.ts +5 -0
  427. package/reuse-tab/reuse-tab.module.d.ts +15 -0
  428. package/reuse-tab/reuse-tab.service.d.ts +7 -4
  429. package/reuse-tab/style/index.less +4 -0
  430. package/se/package.json +6 -7
  431. package/se/public_api.d.ts +0 -1
  432. package/se/se-container.component.d.ts +18 -4
  433. package/se/se.component.d.ts +13 -8
  434. package/{footer-toolbar/footerToolbar.d.ts → se/se.d.ts} +1 -0
  435. package/se/se.module.d.ts +10 -0
  436. package/se/style/index.less +2 -0
  437. package/sg/package.json +6 -7
  438. package/sg/sg-container.component.d.ts +4 -1
  439. package/sg/sg.component.d.ts +4 -1
  440. package/{error-collect/errorCollect.d.ts → sg/sg.d.ts} +1 -0
  441. package/sg/sg.module.d.ts +7 -0
  442. package/st/package.json +6 -7
  443. package/st/st-column-source.d.ts +4 -1
  444. package/st/st-data-source.d.ts +3 -0
  445. package/st/st-export.d.ts +3 -0
  446. package/st/st-filter.component.d.ts +3 -0
  447. package/st/st-row.directive.d.ts +7 -2
  448. package/st/st-widget-host.directive.d.ts +5 -3
  449. package/st/st-widget.d.ts +3 -0
  450. package/st/st.component.d.ts +40 -12
  451. package/{down-file/downFile.d.ts → st/st.d.ts} +1 -0
  452. package/st/st.interfaces.d.ts +2 -2
  453. package/st/st.module.d.ts +27 -0
  454. package/st/style/index.less +8 -0
  455. package/sv/package.json +6 -7
  456. package/sv/public_api.d.ts +0 -1
  457. package/sv/style/index.less +8 -0
  458. package/sv/sv-container.component.d.ts +16 -3
  459. package/sv/sv-value.component.d.ts +3 -0
  460. package/sv/sv.component.d.ts +13 -10
  461. package/{avatar-list/avatarList.d.ts → sv/sv.d.ts} +1 -0
  462. package/sv/sv.module.d.ts +12 -0
  463. package/tag-select/package.json +6 -7
  464. package/tag-select/style/index.less +4 -0
  465. package/tag-select/style/rtl.less +3 -0
  466. package/tag-select/tag-select.component.d.ts +3 -0
  467. package/tag-select/tag-select.d.ts +5 -0
  468. package/tag-select/tag-select.module.d.ts +8 -0
  469. package/xlsx/package.json +5 -6
  470. package/xlsx/xlsx.d.ts +1 -0
  471. package/xlsx/xlsx.directive.d.ts +3 -0
  472. package/xlsx/xlsx.module.d.ts +6 -0
  473. package/xlsx/xlsx.service.d.ts +3 -0
  474. package/zip/package.json +5 -6
  475. package/zip/zip.d.ts +1 -0
  476. package/zip/zip.module.d.ts +5 -0
  477. package/zip/zip.service.d.ts +3 -0
  478. package/abc.metadata.json +0 -1
  479. package/auto-focus/autoFocus.metadata.json +0 -1
  480. package/avatar-list/avatarList.metadata.json +0 -1
  481. package/bundles/abc.umd.js +0 -19
  482. package/bundles/abc.umd.js.map +0 -1
  483. package/bundles/autoFocus.umd.js +0 -394
  484. package/bundles/autoFocus.umd.js.map +0 -1
  485. package/bundles/avatarList.umd.js +0 -465
  486. package/bundles/avatarList.umd.js.map +0 -1
  487. package/bundles/count-down.umd.js +0 -75
  488. package/bundles/count-down.umd.js.map +0 -1
  489. package/bundles/datePicker.umd.js +0 -552
  490. package/bundles/datePicker.umd.js.map +0 -1
  491. package/bundles/downFile.umd.js +0 -474
  492. package/bundles/downFile.umd.js.map +0 -1
  493. package/bundles/edit.umd.js +0 -776
  494. package/bundles/edit.umd.js.map +0 -1
  495. package/bundles/ellipsis.umd.js +0 -578
  496. package/bundles/ellipsis.umd.js.map +0 -1
  497. package/bundles/errorCollect.umd.js +0 -461
  498. package/bundles/errorCollect.umd.js.map +0 -1
  499. package/bundles/exception.umd.js +0 -150
  500. package/bundles/exception.umd.js.map +0 -1
  501. package/bundles/footerToolbar.umd.js +0 -401
  502. package/bundles/footerToolbar.umd.js.map +0 -1
  503. package/bundles/fullContent.umd.js +0 -550
  504. package/bundles/fullContent.umd.js.map +0 -1
  505. package/bundles/globalFooter.umd.js +0 -455
  506. package/bundles/globalFooter.umd.js.map +0 -1
  507. package/bundles/grid.umd.js +0 -470
  508. package/bundles/grid.umd.js.map +0 -1
  509. package/bundles/image.umd.js +0 -482
  510. package/bundles/image.umd.js.map +0 -1
  511. package/bundles/let.umd.js +0 -76
  512. package/bundles/let.umd.js.map +0 -1
  513. package/bundles/loading.umd.js +0 -181
  514. package/bundles/loading.umd.js.map +0 -1
  515. package/bundles/lodop.umd.js +0 -605
  516. package/bundles/lodop.umd.js.map +0 -1
  517. package/bundles/media.umd.js +0 -536
  518. package/bundles/media.umd.js.map +0 -1
  519. package/bundles/noticeIcon.umd.js +0 -468
  520. package/bundles/noticeIcon.umd.js.map +0 -1
  521. package/bundles/onboarding.umd.js +0 -370
  522. package/bundles/onboarding.umd.js.map +0 -1
  523. package/bundles/pageHeader.umd.js +0 -570
  524. package/bundles/pageHeader.umd.js.map +0 -1
  525. package/bundles/pdf.umd.js +0 -863
  526. package/bundles/pdf.umd.js.map +0 -1
  527. package/bundles/qr.umd.js +0 -491
  528. package/bundles/qr.umd.js.map +0 -1
  529. package/bundles/quickMenu.umd.js +0 -442
  530. package/bundles/quickMenu.umd.js.map +0 -1
  531. package/bundles/result.umd.js +0 -100
  532. package/bundles/result.umd.js.map +0 -1
  533. package/bundles/reuseTab.umd.js +0 -1522
  534. package/bundles/reuseTab.umd.js.map +0 -1
  535. package/bundles/table.umd.js +0 -2586
  536. package/bundles/table.umd.js.map +0 -1
  537. package/bundles/tagSelect.umd.js +0 -419
  538. package/bundles/tagSelect.umd.js.map +0 -1
  539. package/bundles/view.umd.js +0 -592
  540. package/bundles/view.umd.js.map +0 -1
  541. package/bundles/xlsx.umd.js +0 -529
  542. package/bundles/xlsx.umd.js.map +0 -1
  543. package/bundles/zip.umd.js +0 -482
  544. package/bundles/zip.umd.js.map +0 -1
  545. package/count-down/count-down.metadata.json +0 -1
  546. package/date-picker/datePicker.d.ts +0 -5
  547. package/date-picker/datePicker.metadata.json +0 -1
  548. package/down-file/downFile.metadata.json +0 -1
  549. package/ellipsis/ellipsis.metadata.json +0 -1
  550. package/error-collect/errorCollect.metadata.json +0 -1
  551. package/esm2015/auto-focus/auto-focus.directive.js +0 -42
  552. package/esm2015/auto-focus/auto-focus.module.js +0 -12
  553. package/esm2015/auto-focus/autoFocus.js +0 -5
  554. package/esm2015/avatar-list/avatar-list-item.component.js +0 -20
  555. package/esm2015/avatar-list/avatar-list.component.js +0 -89
  556. package/esm2015/avatar-list/avatar-list.module.js +0 -17
  557. package/esm2015/avatar-list/avatarList.js +0 -5
  558. package/esm2015/count-down/count-down.component.js +0 -36
  559. package/esm2015/count-down/count-down.module.js +0 -15
  560. package/esm2015/date-picker/date-picker.module.js +0 -17
  561. package/esm2015/date-picker/datePicker.js +0 -6
  562. package/esm2015/date-picker/range-shortcut.component.js +0 -26
  563. package/esm2015/date-picker/range.directive.js +0 -171
  564. package/esm2015/down-file/down-file.directive.js +0 -103
  565. package/esm2015/down-file/down-file.module.js +0 -15
  566. package/esm2015/down-file/downFile.js +0 -5
  567. package/esm2015/ellipsis/ellipsis.component.js +0 -224
  568. package/esm2015/ellipsis/ellipsis.module.js +0 -16
  569. package/esm2015/error-collect/error-collect.component.js +0 -112
  570. package/esm2015/error-collect/error-collect.module.js +0 -15
  571. package/esm2015/error-collect/errorCollect.js +0 -5
  572. package/esm2015/exception/exception.component.js +0 -103
  573. package/esm2015/exception/exception.module.js +0 -18
  574. package/esm2015/footer-toolbar/footer-toolbar.component.js +0 -46
  575. package/esm2015/footer-toolbar/footer-toolbar.module.js +0 -16
  576. package/esm2015/footer-toolbar/footerToolbar.js +0 -5
  577. package/esm2015/full-content/full-content-toggle.directive.js +0 -23
  578. package/esm2015/full-content/full-content.component.js +0 -135
  579. package/esm2015/full-content/full-content.module.js +0 -15
  580. package/esm2015/full-content/full-content.service.js +0 -21
  581. package/esm2015/full-content/fullContent.js +0 -5
  582. package/esm2015/global-footer/global-footer-item.component.js +0 -24
  583. package/esm2015/global-footer/global-footer.component.js +0 -77
  584. package/esm2015/global-footer/global-footer.module.js +0 -16
  585. package/esm2015/global-footer/globalFooter.js +0 -5
  586. package/esm2015/image/image.directive.js +0 -133
  587. package/esm2015/image/image.module.js +0 -15
  588. package/esm2015/let/let.directive.js +0 -31
  589. package/esm2015/let/let.module.js +0 -12
  590. package/esm2015/loading/loading.component.js +0 -26
  591. package/esm2015/loading/loading.module.js +0 -19
  592. package/esm2015/loading/loading.service.js +0 -92
  593. package/esm2015/lodop/lodop.module.js +0 -7
  594. package/esm2015/lodop/lodop.service.js +0 -219
  595. package/esm2015/lodop/lodop.types.js +0 -2
  596. package/esm2015/media/media.component.js +0 -104
  597. package/esm2015/media/media.module.js +0 -14
  598. package/esm2015/media/media.service.js +0 -53
  599. package/esm2015/notice-icon/notice-icon-tab.component.js +0 -30
  600. package/esm2015/notice-icon/notice-icon.component.js +0 -74
  601. package/esm2015/notice-icon/notice-icon.module.js +0 -35
  602. package/esm2015/notice-icon/noticeIcon.js +0 -5
  603. package/esm2015/onboarding/onboarding.component.js +0 -130
  604. package/esm2015/onboarding/onboarding.module.js +0 -20
  605. package/esm2015/onboarding/onboarding.service.js +0 -178
  606. package/esm2015/page-header/page-header.component.js +0 -216
  607. package/esm2015/page-header/page-header.module.js +0 -19
  608. package/esm2015/page-header/pageHeader.js +0 -5
  609. package/esm2015/pdf/pdf.component.js +0 -433
  610. package/esm2015/pdf/pdf.module.js +0 -15
  611. package/esm2015/qr/qr.component.js +0 -128
  612. package/esm2015/qr/qr.module.js +0 -14
  613. package/esm2015/quick-menu/quick-menu.component.js +0 -90
  614. package/esm2015/quick-menu/quick-menu.module.js +0 -16
  615. package/esm2015/quick-menu/quickMenu.js +0 -5
  616. package/esm2015/result/result.component.js +0 -62
  617. package/esm2015/result/result.module.js +0 -16
  618. package/esm2015/reuse-tab/reuse-tab-context-menu.component.js +0 -74
  619. package/esm2015/reuse-tab/reuse-tab-context.component.js +0 -32
  620. package/esm2015/reuse-tab/reuse-tab-context.directive.js +0 -33
  621. package/esm2015/reuse-tab/reuse-tab-context.service.js +0 -53
  622. package/esm2015/reuse-tab/reuse-tab.component.js +0 -300
  623. package/esm2015/reuse-tab/reuse-tab.module.js +0 -24
  624. package/esm2015/reuse-tab/reuse-tab.service.js +0 -534
  625. package/esm2015/reuse-tab/reuseTab.js +0 -5
  626. package/esm2015/se/edit.js +0 -5
  627. package/esm2015/se/public_api.js +0 -6
  628. package/esm2015/se/se-container.component.js +0 -115
  629. package/esm2015/se/se-title.component.js +0 -40
  630. package/esm2015/se/se.component.js +0 -214
  631. package/esm2015/se/se.module.js +0 -19
  632. package/esm2015/sg/grid.js +0 -5
  633. package/esm2015/sg/sg-container.component.js +0 -49
  634. package/esm2015/sg/sg.component.js +0 -65
  635. package/esm2015/sg/sg.module.js +0 -15
  636. package/esm2015/st/index.js +0 -2
  637. package/esm2015/st/st-column-source.js +0 -428
  638. package/esm2015/st/st-data-source.js +0 -429
  639. package/esm2015/st/st-export.js +0 -90
  640. package/esm2015/st/st-filter.component.js +0 -149
  641. package/esm2015/st/st-row.directive.js +0 -40
  642. package/esm2015/st/st-td.component.js +0 -232
  643. package/esm2015/st/st-widget-host.directive.js +0 -34
  644. package/esm2015/st/st-widget.js +0 -24
  645. package/esm2015/st/st.component.js +0 -784
  646. package/esm2015/st/st.interfaces.js +0 -2
  647. package/esm2015/st/st.module.js +0 -56
  648. package/esm2015/st/table.js +0 -8
  649. package/esm2015/sv/public_api.js +0 -6
  650. package/esm2015/sv/sv-container.component.js +0 -63
  651. package/esm2015/sv/sv-title.component.js +0 -40
  652. package/esm2015/sv/sv-value.component.js +0 -32
  653. package/esm2015/sv/sv.component.js +0 -105
  654. package/esm2015/sv/sv.module.js +0 -21
  655. package/esm2015/sv/view.js +0 -5
  656. package/esm2015/tag-select/tag-select.component.js +0 -70
  657. package/esm2015/tag-select/tag-select.module.js +0 -16
  658. package/esm2015/tag-select/tagSelect.js +0 -5
  659. package/esm2015/xlsx/xlsx.directive.js +0 -26
  660. package/esm2015/xlsx/xlsx.module.js +0 -14
  661. package/esm2015/xlsx/xlsx.service.js +0 -129
  662. package/esm2015/zip/zip.module.js +0 -10
  663. package/esm2015/zip/zip.service.js +0 -115
  664. package/exception/exception.metadata.json +0 -1
  665. package/fesm2015/abc.js.map +0 -1
  666. package/fesm2015/autoFocus.js +0 -59
  667. package/fesm2015/autoFocus.js.map +0 -1
  668. package/fesm2015/avatarList.js +0 -128
  669. package/fesm2015/avatarList.js.map +0 -1
  670. package/fesm2015/count-down.js +0 -56
  671. package/fesm2015/count-down.js.map +0 -1
  672. package/fesm2015/datePicker.js.map +0 -1
  673. package/fesm2015/downFile.js +0 -122
  674. package/fesm2015/downFile.js.map +0 -1
  675. package/fesm2015/edit.js +0 -396
  676. package/fesm2015/edit.js.map +0 -1
  677. package/fesm2015/ellipsis.js +0 -244
  678. package/fesm2015/ellipsis.js.map +0 -1
  679. package/fesm2015/errorCollect.js +0 -131
  680. package/fesm2015/errorCollect.js.map +0 -1
  681. package/fesm2015/exception.js +0 -125
  682. package/fesm2015/exception.js.map +0 -1
  683. package/fesm2015/footerToolbar.js +0 -66
  684. package/fesm2015/footerToolbar.js.map +0 -1
  685. package/fesm2015/fullContent.js +0 -191
  686. package/fesm2015/fullContent.js.map +0 -1
  687. package/fesm2015/globalFooter.js +0 -118
  688. package/fesm2015/globalFooter.js.map +0 -1
  689. package/fesm2015/grid.js +0 -129
  690. package/fesm2015/grid.js.map +0 -1
  691. package/fesm2015/image.js +0 -152
  692. package/fesm2015/image.js.map +0 -1
  693. package/fesm2015/let.js +0 -48
  694. package/fesm2015/let.js.map +0 -1
  695. package/fesm2015/loading.js +0 -138
  696. package/fesm2015/loading.js.map +0 -1
  697. package/fesm2015/lodop.js.map +0 -1
  698. package/fesm2015/media.js +0 -174
  699. package/fesm2015/media.js.map +0 -1
  700. package/fesm2015/noticeIcon.js +0 -141
  701. package/fesm2015/noticeIcon.js.map +0 -1
  702. package/fesm2015/onboarding.js +0 -328
  703. package/fesm2015/onboarding.js.map +0 -1
  704. package/fesm2015/pageHeader.js +0 -239
  705. package/fesm2015/pageHeader.js.map +0 -1
  706. package/fesm2015/pdf.js.map +0 -1
  707. package/fesm2015/qr.js +0 -159
  708. package/fesm2015/qr.js.map +0 -1
  709. package/fesm2015/quickMenu.js +0 -111
  710. package/fesm2015/quickMenu.js.map +0 -1
  711. package/fesm2015/result.js +0 -83
  712. package/fesm2015/result.js.map +0 -1
  713. package/fesm2015/reuseTab.js.map +0 -1
  714. package/fesm2015/table.js.map +0 -1
  715. package/fesm2015/tagSelect.js +0 -90
  716. package/fesm2015/tagSelect.js.map +0 -1
  717. package/fesm2015/view.js +0 -256
  718. package/fesm2015/view.js.map +0 -1
  719. package/fesm2015/xlsx.js.map +0 -1
  720. package/fesm2015/zip.js.map +0 -1
  721. package/footer-toolbar/footerToolbar.metadata.json +0 -1
  722. package/full-content/fullContent.d.ts +0 -4
  723. package/full-content/fullContent.metadata.json +0 -1
  724. package/global-footer/globalFooter.d.ts +0 -4
  725. package/global-footer/globalFooter.metadata.json +0 -1
  726. package/image/image.metadata.json +0 -1
  727. package/let/let.metadata.json +0 -1
  728. package/loading/loading.metadata.json +0 -1
  729. package/lodop/lodop.metadata.json +0 -1
  730. package/media/media.metadata.json +0 -1
  731. package/notice-icon/noticeIcon.d.ts +0 -4
  732. package/notice-icon/noticeIcon.metadata.json +0 -1
  733. package/onboarding/onboarding.metadata.json +0 -1
  734. package/page-header/pageHeader.d.ts +0 -4
  735. package/page-header/pageHeader.metadata.json +0 -1
  736. package/pdf/pdf.metadata.json +0 -1
  737. package/qr/qr.metadata.json +0 -1
  738. package/quick-menu/quickMenu.d.ts +0 -4
  739. package/quick-menu/quickMenu.metadata.json +0 -1
  740. package/result/result.metadata.json +0 -1
  741. package/reuse-tab/reuseTab.d.ts +0 -4
  742. package/reuse-tab/reuseTab.metadata.json +0 -1
  743. package/se/edit.d.ts +0 -4
  744. package/se/edit.metadata.json +0 -1
  745. package/se/se-title.component.d.ts +0 -10
  746. package/sg/grid.d.ts +0 -4
  747. package/sg/grid.metadata.json +0 -1
  748. package/st/index.d.ts +0 -1
  749. package/st/st-td.component.d.ts +0 -27
  750. package/st/table.d.ts +0 -7
  751. package/st/table.metadata.json +0 -1
  752. package/sv/sv-title.component.d.ts +0 -10
  753. package/sv/view.d.ts +0 -4
  754. package/sv/view.metadata.json +0 -1
  755. package/tag-select/tagSelect.d.ts +0 -4
  756. package/tag-select/tagSelect.metadata.json +0 -1
  757. package/xlsx/xlsx.metadata.json +0 -1
  758. package/zip/zip.metadata.json +0 -1
@@ -1,784 +0,0 @@
1
- import { __awaiter, __decorate } from "tslib";
2
- import { DecimalPipe, DOCUMENT } from '@angular/common';
3
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Inject, Input, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';
4
- import { from, isObservable, of, Subject } from 'rxjs';
5
- import { filter, takeUntil } from 'rxjs/operators';
6
- import { ALAIN_I18N_TOKEN, DatePipe, DelonLocaleService, YNPipe } from '@delon/theme';
7
- import { AlainConfigService } from '@delon/util/config';
8
- import { InputBoolean, InputNumber, toBoolean } from '@delon/util/decorator';
9
- import { deepCopy, deepMergeKey } from '@delon/util/other';
10
- import { NzContextMenuService } from 'ng-zorro-antd/dropdown';
11
- import { STColumnSource } from './st-column-source';
12
- import { STDataSource } from './st-data-source';
13
- import { STExport } from './st-export';
14
- import { STRowSource } from './st-row.directive';
15
- import { ST_DEFAULT_CONFIG } from './st.config';
16
- export class STComponent {
17
- constructor(i18nSrv, cdr, el, exportSrv, doc, columnSource, dataSource, delonI18n, configSrv, cms) {
18
- this.cdr = cdr;
19
- this.el = el;
20
- this.exportSrv = exportSrv;
21
- this.doc = doc;
22
- this.columnSource = columnSource;
23
- this.dataSource = dataSource;
24
- this.delonI18n = delonI18n;
25
- this.cms = cms;
26
- this.destroy$ = new Subject();
27
- this.totalTpl = ``;
28
- this.customWidthConfig = false;
29
- this._widthConfig = [];
30
- this.locale = {};
31
- this._loading = false;
32
- this._data = [];
33
- this._statistical = {};
34
- this._isPagination = true;
35
- this._allChecked = false;
36
- this._allCheckedDisabled = false;
37
- this._indeterminate = false;
38
- this._headers = [];
39
- this._columns = [];
40
- this.contextmenuList = [];
41
- this.columns = [];
42
- this.ps = 10;
43
- this.pi = 1;
44
- this.total = 0;
45
- this.loading = null;
46
- this.loadingDelay = 0;
47
- this.bordered = false;
48
- this.showHeader = true;
49
- this.expandRowByClick = false;
50
- this.expandAccordion = false;
51
- this.responsive = true;
52
- this.error = new EventEmitter();
53
- this.change = new EventEmitter();
54
- this.virtualScroll = false;
55
- this.virtualItemSize = 54;
56
- this.virtualMaxBufferPx = 200;
57
- this.virtualMinBufferPx = 100;
58
- this.virtualForTrackBy = index => index;
59
- this.setCog(configSrv.merge('st', ST_DEFAULT_CONFIG));
60
- this.delonI18n.change.pipe(takeUntil(this.destroy$)).subscribe(() => {
61
- this.locale = this.delonI18n.getData('st');
62
- if (this._columns.length > 0) {
63
- this.updateTotalTpl();
64
- this.cd();
65
- }
66
- });
67
- i18nSrv.change
68
- .pipe(takeUntil(this.destroy$), filter(() => this._columns.length > 0))
69
- .subscribe(() => this.refreshColumns());
70
- }
71
- get req() {
72
- return this._req;
73
- }
74
- set req(value) {
75
- this._req = deepMergeKey({}, true, this.cog.req, value);
76
- }
77
- /** 返回体配置 */
78
- get res() {
79
- return this._res;
80
- }
81
- set res(value) {
82
- const item = (this._res = deepMergeKey({}, true, this.cog.res, value));
83
- const reName = item.reName;
84
- if (!Array.isArray(reName.list))
85
- reName.list = reName.list.split('.');
86
- if (!Array.isArray(reName.total))
87
- reName.total = reName.total.split('.');
88
- this._res = item;
89
- }
90
- get page() {
91
- return this._page;
92
- }
93
- set page(value) {
94
- this._page = Object.assign(Object.assign({}, this.cog.page), value);
95
- this.updateTotalTpl();
96
- }
97
- get multiSort() {
98
- return this._multiSort;
99
- }
100
- set multiSort(value) {
101
- if ((typeof value === 'boolean' && !toBoolean(value)) ||
102
- (typeof value === 'object' && Object.keys(value).length === 0)) {
103
- this._multiSort = undefined;
104
- return;
105
- }
106
- this._multiSort = Object.assign({}, (typeof value === 'object' ? value : {}));
107
- }
108
- set widthMode(value) {
109
- this._widthMode = Object.assign(Object.assign({}, this.cog.widthMode), value);
110
- }
111
- get widthMode() {
112
- return this._widthMode;
113
- }
114
- set widthConfig(val) {
115
- this._widthConfig = val;
116
- this.customWidthConfig = val && val.length > 0;
117
- }
118
- set resizable(val) {
119
- this._resizable = typeof val === 'object' ? val : { disabled: !toBoolean(val) };
120
- }
121
- /**
122
- * Get the number of the current page
123
- */
124
- get count() {
125
- return this._data.length;
126
- }
127
- /**
128
- * Get the data of the current page
129
- */
130
- get list() {
131
- return this._data;
132
- }
133
- setCog(cog) {
134
- const copyMultiSort = Object.assign({}, cog.multiSort);
135
- // Because multiSort.global will affect the result, it should be removed first, and multiSort will be operated again after processing.
136
- delete cog.multiSort;
137
- this.cog = cog;
138
- Object.assign(this, cog);
139
- if (copyMultiSort.global !== false) {
140
- this.multiSort = copyMultiSort;
141
- }
142
- this.columnSource.setCog(cog);
143
- }
144
- cd() {
145
- this.cdr.detectChanges();
146
- return this;
147
- }
148
- renderTotal(total, range) {
149
- return this.totalTpl
150
- ? this.totalTpl.replace('{{total}}', total).replace('{{range[0]}}', range[0]).replace('{{range[1]}}', range[1])
151
- : '';
152
- }
153
- changeEmit(type, data) {
154
- const res = {
155
- type,
156
- pi: this.pi,
157
- ps: this.ps,
158
- total: this.total
159
- };
160
- if (data != null) {
161
- res[type] = data;
162
- }
163
- this.change.emit(res);
164
- }
165
- // #region data
166
- /**
167
- * 获取过滤后所有数据
168
- * - 本地数据:包含排序、过滤后不分页数据
169
- * - 远程数据:不传递 `pi`、`ps` 两个参数
170
- */
171
- get filteredData() {
172
- return this.loadData({ paginator: false }).then(res => res.list);
173
- }
174
- updateTotalTpl() {
175
- const { total } = this.page;
176
- if (typeof total === 'string' && total.length) {
177
- this.totalTpl = total;
178
- }
179
- else if (toBoolean(total)) {
180
- this.totalTpl = this.locale.total;
181
- }
182
- else {
183
- this.totalTpl = '';
184
- }
185
- }
186
- setLoading(val) {
187
- if (this.loading == null) {
188
- this._loading = val;
189
- this.cdr.detectChanges();
190
- }
191
- }
192
- loadData(options) {
193
- const { pi, ps, data, req, res, page, total, singleSort, multiSort, rowClassName } = this;
194
- return new Promise((resolvePromise, rejectPromise) => {
195
- if (this.data$) {
196
- this.data$.unsubscribe();
197
- }
198
- this.data$ = this.dataSource
199
- .process(Object.assign({ pi,
200
- ps,
201
- total,
202
- data,
203
- req,
204
- res,
205
- page, columns: this._columns, singleSort,
206
- multiSort,
207
- rowClassName, paginator: true, customRequest: this.customRequest || this.cog.customRequest }, options))
208
- .pipe(takeUntil(this.destroy$))
209
- .subscribe(result => resolvePromise(result), error => {
210
- console.warn('st.loadDate', error);
211
- rejectPromise(error);
212
- });
213
- });
214
- }
215
- loadPageData() {
216
- return __awaiter(this, void 0, void 0, function* () {
217
- this.setLoading(true);
218
- try {
219
- const result = yield this.loadData();
220
- this.setLoading(false);
221
- if (typeof result.pi !== 'undefined') {
222
- this.pi = result.pi;
223
- }
224
- if (typeof result.ps !== 'undefined') {
225
- this.ps = result.ps;
226
- }
227
- if (typeof result.total !== 'undefined') {
228
- this.total = result.total;
229
- }
230
- if (typeof result.pageShow !== 'undefined') {
231
- this._isPagination = result.pageShow;
232
- }
233
- this._data = result.list;
234
- this._statistical = result.statistical;
235
- this.changeEmit('loaded', result.list);
236
- // Should be re-render in next tike when using virtual scroll
237
- // https://github.com/ng-alain/ng-alain/issues/1836
238
- if (this.cdkVirtualScrollViewport) {
239
- Promise.resolve().then(() => this.cdkVirtualScrollViewport.checkViewportSize());
240
- }
241
- return this._refCheck();
242
- }
243
- catch (error) {
244
- this.setLoading(false);
245
- if (!this.destroy$.isStopped) {
246
- this.cdr.detectChanges();
247
- this.error.emit({ type: 'req', error });
248
- }
249
- return this;
250
- }
251
- });
252
- }
253
- /** 清空所有数据 */
254
- clear(cleanStatus = true) {
255
- if (cleanStatus) {
256
- this.clearStatus();
257
- }
258
- this._data = [];
259
- return this.cd();
260
- }
261
- /** 清空所有状态 */
262
- clearStatus() {
263
- return this.clearCheck().clearRadio().clearFilter().clearSort();
264
- }
265
- /**
266
- * 根据页码重新加载数据
267
- *
268
- * @param pi 指定当前页码,默认:`1`
269
- * @param extraParams 重新指定 `extraParams` 值
270
- * @param options 选项
271
- */
272
- load(pi = 1, extraParams, options) {
273
- if (pi !== -1)
274
- this.pi = pi;
275
- if (typeof extraParams !== 'undefined') {
276
- this.req.params = options && options.merge ? Object.assign(Object.assign({}, this.req.params), extraParams) : extraParams;
277
- }
278
- this._change('pi', options);
279
- return this;
280
- }
281
- /**
282
- * 重新刷新当前页
283
- *
284
- * @param extraParams 重新指定 `extraParams` 值
285
- */
286
- reload(extraParams, options) {
287
- return this.load(-1, extraParams, options);
288
- }
289
- /**
290
- * 重置且重新设置 `pi` 为 `1`,包含以下值:
291
- * - `check` 数据
292
- * - `radio` 数据
293
- * - `sort` 数据
294
- * - `fileter` 数据
295
- *
296
- * @param extraParams 重新指定 `extraParams` 值
297
- */
298
- reset(extraParams, options) {
299
- this.clearStatus().load(1, extraParams, options);
300
- return this;
301
- }
302
- _toTop(enforce) {
303
- var _a;
304
- if (!(enforce == null ? this.page.toTop : enforce))
305
- return;
306
- const el = this.el.nativeElement;
307
- el.scrollIntoView();
308
- // fix header height
309
- this.doc.documentElement.scrollTop -= this.page.toTopOffset;
310
- if (this.scroll) {
311
- if (this.cdkVirtualScrollViewport) {
312
- this.cdkVirtualScrollViewport.scrollTo({
313
- top: 0,
314
- left: 0
315
- });
316
- }
317
- else {
318
- (_a = el.querySelector('.ant-table-body, .ant-table-content')) === null || _a === void 0 ? void 0 : _a.scrollTo(0, 0);
319
- }
320
- }
321
- }
322
- _change(type, options) {
323
- if (type === 'pi' || (type === 'ps' && this.pi <= Math.ceil(this.total / this.ps))) {
324
- this.loadPageData().then(() => this._toTop(options === null || options === void 0 ? void 0 : options.toTop));
325
- }
326
- this.changeEmit(type);
327
- }
328
- closeOtherExpand(item) {
329
- if (this.expandAccordion === false)
330
- return;
331
- this._data.filter(i => i !== item).forEach(i => (i.expand = false));
332
- }
333
- _rowClick(e, item, index, dbl) {
334
- const el = e.target;
335
- if (el.nodeName === 'INPUT')
336
- return;
337
- const { expand, expandRowByClick } = this;
338
- if (!!expand && item.showExpand !== false && expandRowByClick) {
339
- item.expand = !item.expand;
340
- this.closeOtherExpand(item);
341
- this.changeEmit('expand', item);
342
- return;
343
- }
344
- const data = { e, item, index };
345
- if (dbl) {
346
- this.changeEmit('dblClick', data);
347
- }
348
- else {
349
- this._clickRowClassName(el, item, index);
350
- this.changeEmit('click', data);
351
- }
352
- }
353
- _clickRowClassName(el, item, index) {
354
- const cr = this.clickRowClassName;
355
- if (cr == null)
356
- return;
357
- const config = Object.assign({ exclusive: false }, (typeof cr === 'string' ? { fn: () => cr } : cr));
358
- const className = config.fn(item, index);
359
- const trEl = el.closest('tr');
360
- if (config.exclusive) {
361
- trEl.parentElement.querySelectorAll('tr').forEach((a) => a.classList.remove(className));
362
- }
363
- if (trEl.classList.contains(className)) {
364
- trEl.classList.remove(className);
365
- }
366
- else {
367
- trEl.classList.add(className);
368
- }
369
- }
370
- _expandChange(item, expand) {
371
- item.expand = expand;
372
- this.closeOtherExpand(item);
373
- this.changeEmit('expand', item);
374
- }
375
- _stopPropagation(ev) {
376
- ev.stopPropagation();
377
- }
378
- /**
379
- * Remove a row in the table, like this:
380
- *
381
- * ```
382
- * this.st.removeRow(0)
383
- * this.st.removeRow(stDataItem)
384
- * ```
385
- */
386
- removeRow(data) {
387
- if (typeof data === 'number') {
388
- this._data.splice(data, 1);
389
- }
390
- else {
391
- if (!Array.isArray(data)) {
392
- data = [data];
393
- }
394
- data
395
- .map(item => this._data.indexOf(item))
396
- .filter(pos => pos !== -1)
397
- .forEach(pos => this._data.splice(pos, 1));
398
- }
399
- // recalculate no
400
- this._columns
401
- .filter(w => w.type === 'no')
402
- .forEach(c => this._data.forEach((i, idx) => {
403
- const text = `${this.dataSource.getNoIndex(i, c, idx)}`;
404
- i._values[c.__point] = { text, _text: text, org: idx, safeType: 'text' };
405
- }));
406
- return this.cd();
407
- }
408
- /**
409
- * Sets the row value for the `index` in the table, like this:
410
- *
411
- * - `optinos.refreshSchema` Whether to refresh of st schemas
412
- * - `optinos.emitReload` Whether to trigger a reload http request when data is url
413
- *
414
- * ```
415
- * this.st.setRow(0, { price: 100 })
416
- * this.st.setRow(0, { price: 100, name: 'asdf' })
417
- * this.st.setRow(item, { price: 100 })
418
- * ```
419
- */
420
- setRow(index, item, options) {
421
- options = Object.assign({ refreshSchema: false, emitReload: false }, options);
422
- if (typeof index !== 'number') {
423
- index = this._data.indexOf(index);
424
- }
425
- this._data[index] = deepMergeKey(this._data[index], false, item);
426
- this.optimizeData();
427
- if (options.refreshSchema) {
428
- this.resetColumns({ emitReload: options.emitReload });
429
- return this;
430
- }
431
- this.cdr.detectChanges();
432
- return this;
433
- }
434
- // #endregion
435
- // #region sort
436
- sort(col, idx, value) {
437
- if (this.multiSort) {
438
- col._sort.default = value;
439
- col._sort.tick = this.dataSource.nextSortTick;
440
- }
441
- else {
442
- this._columns.forEach((item, index) => (item._sort.default = index === idx ? value : null));
443
- }
444
- this.cdr.detectChanges();
445
- this.loadPageData();
446
- const res = {
447
- value,
448
- map: this.dataSource.getReqSortMap(this.singleSort, this.multiSort, this._columns),
449
- column: col
450
- };
451
- this.changeEmit('sort', res);
452
- }
453
- clearSort() {
454
- this._columns.forEach(item => (item._sort.default = null));
455
- return this;
456
- }
457
- // #endregion
458
- // #region filter
459
- _handleFilter(col, confirm) {
460
- if (!confirm) {
461
- this.columnSource.cleanFilter(col);
462
- }
463
- // 过滤表示一种数据的变化应重置页码为 `1`
464
- this.pi = 1;
465
- this.columnSource.updateDefault(col.filter);
466
- this.loadPageData();
467
- this.changeEmit('filter', col);
468
- }
469
- handleFilterNotify(value) {
470
- this.changeEmit('filterChange', value);
471
- }
472
- clearFilter() {
473
- this._columns.filter(w => w.filter && w.filter.default === true).forEach(col => this.columnSource.cleanFilter(col));
474
- return this;
475
- }
476
- // #endregion
477
- // #region checkbox
478
- /** 清除所有 `checkbox` */
479
- clearCheck() {
480
- return this._checkAll(false);
481
- }
482
- _refCheck() {
483
- const validData = this._data.filter(w => !w.disabled);
484
- const checkedList = validData.filter(w => w.checked === true);
485
- this._allChecked = checkedList.length > 0 && checkedList.length === validData.length;
486
- const allUnChecked = validData.every(value => !value.checked);
487
- this._indeterminate = !this._allChecked && !allUnChecked;
488
- this._allCheckedDisabled = this._data.length === this._data.filter(w => w.disabled).length;
489
- return this.cd();
490
- }
491
- _checkAll(checked) {
492
- checked = typeof checked === 'undefined' ? this._allChecked : checked;
493
- this._data.filter(w => !w.disabled).forEach(i => (i.checked = checked));
494
- return this._refCheck()._checkNotify();
495
- }
496
- _rowSelection(row) {
497
- row.select(this._data);
498
- return this._refCheck()._checkNotify();
499
- }
500
- _checkNotify() {
501
- const res = this._data.filter(w => !w.disabled && w.checked === true);
502
- this.changeEmit('checkbox', res);
503
- return this;
504
- }
505
- // #endregion
506
- // #region radio
507
- /** 清除所有 `radio` */
508
- clearRadio() {
509
- this._data.filter(w => w.checked).forEach(item => (item.checked = false));
510
- this.changeEmit('radio', null);
511
- return this;
512
- }
513
- // #endregion
514
- _handleTd(ev) {
515
- switch (ev.type) {
516
- case 'checkbox':
517
- this._refCheck()._checkNotify();
518
- break;
519
- case 'radio':
520
- this.changeEmit('radio', ev.item);
521
- break;
522
- }
523
- }
524
- // #region export
525
- /**
526
- * 导出当前页,确保已经注册 `XlsxModule`
527
- *
528
- * @param newData 重新指定数据;若为 `true` 表示使用 `filteredData` 数据
529
- * @param opt 额外参数
530
- */
531
- export(newData, opt) {
532
- const data = Array.isArray(newData)
533
- ? this.dataSource.optimizeData({ columns: this._columns, result: newData })
534
- : this._data;
535
- (newData === true ? from(this.filteredData) : of(data)).subscribe((res) => this.exportSrv.export(Object.assign(Object.assign({ columens: this._columns }, opt), { data: res })));
536
- }
537
- // #endregion
538
- // #region resizable
539
- colResize({ width }, column) {
540
- column.width = `${width}px`;
541
- this.changeEmit('resize', column);
542
- }
543
- // #endregion
544
- // #region contextmenu
545
- onContextmenu(event) {
546
- if (!this.contextmenu) {
547
- return;
548
- }
549
- event.preventDefault();
550
- event.stopPropagation();
551
- const colEl = event.target.closest('[data-col-index]');
552
- if (!colEl) {
553
- return;
554
- }
555
- const colIndex = Number(colEl.dataset.colIndex);
556
- const rowIndex = Number(colEl.closest('tr').dataset.index);
557
- const isTitle = isNaN(rowIndex);
558
- const obs$ = this.contextmenu({
559
- event,
560
- type: isTitle ? 'head' : 'body',
561
- rowIndex: isTitle ? null : rowIndex,
562
- colIndex,
563
- data: isTitle ? null : this.list[rowIndex],
564
- column: this._columns[colIndex]
565
- });
566
- (isObservable(obs$) ? obs$ : of(obs$))
567
- .pipe(takeUntil(this.destroy$), filter(res => res.length > 0))
568
- .subscribe(res => {
569
- this.contextmenuList = res.map(i => {
570
- if (!Array.isArray(i.children)) {
571
- i.children = [];
572
- }
573
- return i;
574
- });
575
- this.cdr.detectChanges();
576
- this.cms.create(event, this.contextmenuTpl);
577
- });
578
- }
579
- // #endregion
580
- get cdkVirtualScrollViewport() {
581
- return this.orgTable.cdkVirtualScrollViewport;
582
- }
583
- resetColumns(options) {
584
- options = Object.assign({ emitReload: true, preClearData: false }, options);
585
- if (typeof options.columns !== 'undefined') {
586
- this.columns = options.columns;
587
- }
588
- if (typeof options.pi !== 'undefined') {
589
- this.pi = options.pi;
590
- }
591
- if (typeof options.ps !== 'undefined') {
592
- this.ps = options.ps;
593
- }
594
- if (options.emitReload) {
595
- // Should clean data, Because of changing columns may cause inaccurate data
596
- options.preClearData = true;
597
- }
598
- if (options.preClearData) {
599
- this._data = [];
600
- }
601
- this.refreshColumns();
602
- if (options.emitReload) {
603
- return this.loadPageData();
604
- }
605
- else {
606
- this.cd();
607
- return Promise.resolve(this);
608
- }
609
- }
610
- refreshColumns() {
611
- const res = this.columnSource.process(this.columns, {
612
- widthMode: this.widthMode,
613
- resizable: this._resizable,
614
- safeType: this.cog.safeType
615
- });
616
- this._columns = res.columns;
617
- this._headers = res.headers;
618
- if (this.customWidthConfig === false && res.headerWidths != null) {
619
- this._widthConfig = res.headerWidths;
620
- }
621
- return this;
622
- }
623
- optimizeData() {
624
- this._data = this.dataSource.optimizeData({
625
- columns: this._columns,
626
- result: this._data,
627
- rowClassName: this.rowClassName
628
- });
629
- }
630
- /**
631
- * Return pure data, `st` internally maintains a set of data for caching, this part of data may affect the backend
632
- *
633
- * 返回纯净数据,`st` 内部会维护一组用于缓存的数据,这部分数据可能会影响后端
634
- */
635
- pureItem(itemOrIndex) {
636
- if (typeof itemOrIndex === 'number') {
637
- itemOrIndex = this._data[itemOrIndex];
638
- }
639
- if (!itemOrIndex) {
640
- return null;
641
- }
642
- const copyItem = deepCopy(itemOrIndex);
643
- delete copyItem._values;
644
- return copyItem;
645
- }
646
- ngAfterViewInit() {
647
- this.columnSource.restoreAllRender(this._columns);
648
- }
649
- ngOnChanges(changes) {
650
- if (changes.columns) {
651
- this.refreshColumns().optimizeData();
652
- }
653
- const changeData = changes.data;
654
- if (changeData && changeData.currentValue && !(this.req.lazyLoad && changeData.firstChange)) {
655
- this.loadPageData();
656
- }
657
- if (changes.loading) {
658
- this._loading = changes.loading.currentValue;
659
- }
660
- }
661
- ngOnDestroy() {
662
- this.destroy$.next();
663
- this.destroy$.complete();
664
- }
665
- }
666
- STComponent.decorators = [
667
- { type: Component, args: [{
668
- selector: 'st',
669
- exportAs: 'st',
670
- template: "<ng-template #titleTpl let-i>\n <span [innerHTML]=\"i._text\"></span>\n <small *ngIf=\"i.optional\" class=\"st__head-optional\" [innerHTML]=\"i.optional\"></small>\n <i\n *ngIf=\"i.optionalHelp\"\n class=\"st__head-tip\"\n nz-tooltip\n [nzTooltipTitle]=\"i.optionalHelp\"\n nz-icon\n nzType=\"question-circle\"\n ></i>\n</ng-template>\n<ng-template #chkAllTpl let-custom>\n <label\n nz-checkbox\n class=\"st__checkall\"\n [nzDisabled]=\"_allCheckedDisabled\"\n [(ngModel)]=\"_allChecked\"\n [nzIndeterminate]=\"_indeterminate\"\n (ngModelChange)=\"_checkAll()\"\n [class.ant-table-selection-select-all-custom]=\"custom\"\n ></label>\n</ng-template>\n<nz-table\n #table\n [nzData]=\"_data\"\n [(nzPageIndex)]=\"pi\"\n (nzPageIndexChange)=\"_change('pi')\"\n [(nzPageSize)]=\"ps\"\n (nzPageSizeChange)=\"_change('ps')\"\n [nzTotal]=\"total\"\n [nzShowPagination]=\"_isPagination\"\n [nzFrontPagination]=\"false\"\n [nzBordered]=\"bordered\"\n [nzSize]=\"size\"\n [nzLoading]=\"_loading\"\n [nzLoadingDelay]=\"loadingDelay\"\n [nzLoadingIndicator]=\"loadingIndicator\"\n [nzTitle]=\"header!\"\n [nzFooter]=\"footer!\"\n [nzScroll]=\"scroll\"\n [nzVirtualItemSize]=\"virtualItemSize\"\n [nzVirtualMaxBufferPx]=\"virtualMaxBufferPx\"\n [nzVirtualMinBufferPx]=\"virtualMinBufferPx\"\n [nzVirtualForTrackBy]=\"virtualForTrackBy\"\n [nzNoResult]=\"noResult!\"\n [nzPageSizeOptions]=\"page.pageSizes!\"\n [nzShowQuickJumper]=\"page.showQuickJumper\"\n [nzShowSizeChanger]=\"page.showSize\"\n [nzPaginationPosition]=\"page.position!\"\n [nzPaginationType]=\"page.type!\"\n [nzItemRender]=\"page.itemRender!\"\n [nzSimple]=\"page.simple\"\n [nzShowTotal]=\"totalTpl\"\n [nzWidthConfig]=\"_widthConfig\"\n (contextmenu)=\"onContextmenu($event)\"\n>\n <thead *ngIf=\"showHeader\">\n <tr *ngFor=\"let row of _headers; let rowFirst = first\">\n <th *ngIf=\"rowFirst && expand\" nzWidth=\"50px\" [rowSpan]=\"_headers.length\"></th>\n <ng-container *ngFor=\"let h of row; let index = index; let last = last\">\n <th\n *let=\"h.column as _c\"\n [colSpan]=\"h.colSpan\"\n [rowSpan]=\"h.rowSpan\"\n [nzWidth]=\"$any(_c).width\"\n [nzLeft]=\"_c._left!\"\n [nzRight]=\"_c._right!\"\n [ngClass]=\"_c.className!\"\n [attr.data-col]=\"_c.indexKey\"\n [attr.data-col-index]=\"index\"\n [nzShowSort]=\"_c._sort.enabled\"\n [nzSortOrder]=\"$any(_c)._sort.default\"\n (nzSortOrderChange)=\"sort(_c, index, $event)\"\n [nzCustomFilter]=\"$any(_c).filter\"\n nz-resizable\n [nzDisabled]=\"last || $any(_c).resizable.disabled\"\n [nzMaxWidth]=\"$any(_c).resizable.maxWidth\"\n [nzMinWidth]=\"$any(_c).resizable.minWidth\"\n [nzBounds]=\"$any(_c).resizable.bounds\"\n [nzPreview]=\"$any(_c).resizable.preview\"\n (nzResizeEnd)=\"colResize($event, _c)\"\n >\n <nz-resize-handle *ngIf=\"$any(!last && !$any(_c).resizable.disabled)\" nzDirection=\"right\">\n <i></i>\n </nz-resize-handle>\n <ng-template\n #renderTitle\n [ngTemplateOutlet]=\"_c.__renderTitle!\"\n [ngTemplateOutletContext]=\"{ $implicit: h.column, index: index }\"\n ></ng-template>\n <ng-container *ngIf=\"!_c.__renderTitle; else renderTitle\">\n <ng-container [ngSwitch]=\"_c.type\">\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <ng-container *ngIf=\"_c.selections!.length === 0\">\n <ng-template [ngTemplateOutlet]=\"chkAllTpl\" [ngTemplateOutletContext]=\"{ $implicit: false }\">\n </ng-template>\n </ng-container>\n <div *ngIf=\"_c.selections!.length > 0\" class=\"ant-table-selection\">\n <ng-template [ngTemplateOutlet]=\"chkAllTpl\" [ngTemplateOutletContext]=\"{ $implicit: true }\">\n </ng-template>\n <div *ngIf=\"_c.selections!.length\" class=\"ant-table-selection-extra\">\n <div\n nz-dropdown\n nzPlacement=\"bottomLeft\"\n [nzDropdownMenu]=\"selectionMenu\"\n class=\"ant-table-selection-down st__checkall-selection\"\n >\n <i nz-icon nzType=\"down\"></i>\n </div>\n </div>\n <nz-dropdown-menu #selectionMenu=\"nzDropdownMenu\">\n <ul nz-menu class=\"ant-table-selection-menu\">\n <li\n nz-menu-item\n *ngFor=\"let rw of _c.selections\"\n (click)=\"_rowSelection(rw)\"\n [innerHTML]=\"rw.text\"\n ></li>\n </ul>\n </nz-dropdown-menu>\n </div>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-template\n [ngTemplateOutlet]=\"titleTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: _c.title }\"\n ></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"_c.filter\">\n <st-filter\n nz-th-extra\n [col]=\"h.column\"\n [f]=\"_c.filter\"\n [locale]=\"locale\"\n (n)=\"handleFilterNotify($event)\"\n (handle)=\"_handleFilter(_c, $event)\"\n ></st-filter>\n </ng-container>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody class=\"st__body\">\n <ng-container *ngIf=\"!_loading\">\n <ng-template\n [ngTemplateOutlet]=\"bodyHeader!\"\n [ngTemplateOutletContext]=\"{ $implicit: _statistical }\"\n ></ng-template>\n </ng-container>\n <ng-template #bodyTpl let-i let-index=\"index\">\n <tr\n [attr.data-index]=\"index\"\n (click)=\"_rowClick($event, i, index, false)\"\n (dblclick)=\"_rowClick($event, i, index, true)\"\n [ngClass]=\"i._rowClassName\"\n >\n <td\n *ngIf=\"expand\"\n [nzShowExpand]=\"expand && i.showExpand !== false\"\n [nzExpand]=\"i.expand\"\n (nzExpandChange)=\"_expandChange(i, $event)\"\n (click)=\"_stopPropagation($event)\"\n nzWidth=\"50px\"\n ></td>\n <td\n *ngFor=\"let c of _columns; let cIdx = index\"\n [nzLeft]=\"!!c._left\"\n [nzRight]=\"!!c._right\"\n [attr.data-col-index]=\"cIdx\"\n [ngClass]=\"c._className!\"\n [attr.colspan]=\"c.colSpan\"\n >\n <span *ngIf=\"responsive\" class=\"ant-table-rep__title\">\n <ng-template [ngTemplateOutlet]=\"titleTpl\" [ngTemplateOutletContext]=\"{ $implicit: c.title }\"></ng-template>\n </span>\n <st-td [data]=\"_data\" [i]=\"i\" [index]=\"index\" [c]=\"c\" [cIdx]=\"cIdx\" (n)=\"_handleTd($event)\"></st-td>\n </td>\n </tr>\n <tr [nzExpand]=\"i.expand\">\n <ng-template\n [ngTemplateOutlet]=\"expand\"\n [ngTemplateOutletContext]=\"{ $implicit: i, index: index }\"\n ></ng-template>\n </tr>\n </ng-template>\n <ng-container *ngIf=\"!virtualScroll\">\n <ng-container *ngFor=\"let i of _data; let index = index\">\n <ng-template [ngTemplateOutlet]=\"bodyTpl\" [ngTemplateOutletContext]=\"{ $implicit: i, index: index }\">\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"virtualScroll\">\n <ng-template nz-virtual-scroll let-i let-index=\"index\">\n <ng-template [ngTemplateOutlet]=\"bodyTpl\" [ngTemplateOutletContext]=\"{ $implicit: i, index: index }\">\n </ng-template>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!_loading\">\n <ng-template [ngTemplateOutlet]=\"body!\" [ngTemplateOutletContext]=\"{ $implicit: _statistical }\"></ng-template>\n </ng-container>\n </tbody>\n <ng-template #totalTpl let-range=\"range\" let-total>{{ renderTotal(total, range) }}</ng-template>\n</nz-table>\n<nz-dropdown-menu #contextmenuTpl=\"nzDropdownMenu\">\n <ul nz-menu class=\"st__contextmenu\">\n <ng-container *ngFor=\"let i of contextmenuList\">\n <li nz-menu-item *ngIf=\"i.children!.length === 0\" (click)=\"i.fn!(i)\" [innerHTML]=\"i.text\"></li>\n <li nz-submenu *ngIf=\"i.children!.length > 0\" [nzTitle]=\"i.text\">\n <ul>\n <li nz-menu-item *ngFor=\"let ci of i.children\" (click)=\"ci.fn!(ci)\" [innerHTML]=\"ci.text\"></li>\n </ul>\n </li>\n </ng-container>\n </ul>\n</nz-dropdown-menu>\n",
671
- providers: [STDataSource, STRowSource, STColumnSource, STExport, DatePipe, YNPipe, DecimalPipe],
672
- host: {
673
- '[class.st]': `true`,
674
- '[class.st__p-left]': `page.placement === 'left'`,
675
- '[class.st__p-center]': `page.placement === 'center'`,
676
- '[class.st__width-strict]': `widthMode.type === 'strict'`,
677
- '[class.ant-table-rep]': `responsive`,
678
- '[class.ant-table-rep__hide-header-footer]': `responsiveHideHeaderFooter`
679
- },
680
- preserveWhitespaces: false,
681
- changeDetection: ChangeDetectionStrategy.OnPush,
682
- encapsulation: ViewEncapsulation.None
683
- },] }
684
- ];
685
- STComponent.ctorParameters = () => [
686
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [ALAIN_I18N_TOKEN,] }] },
687
- { type: ChangeDetectorRef },
688
- { type: ElementRef },
689
- { type: STExport },
690
- { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
691
- { type: STColumnSource },
692
- { type: STDataSource },
693
- { type: DelonLocaleService },
694
- { type: AlainConfigService },
695
- { type: NzContextMenuService }
696
- ];
697
- STComponent.propDecorators = {
698
- orgTable: [{ type: ViewChild, args: ['table',] }],
699
- contextmenuTpl: [{ type: ViewChild, args: ['contextmenuTpl',] }],
700
- req: [{ type: Input }],
701
- res: [{ type: Input }],
702
- page: [{ type: Input }],
703
- data: [{ type: Input }],
704
- columns: [{ type: Input }],
705
- contextmenu: [{ type: Input }],
706
- ps: [{ type: Input }],
707
- pi: [{ type: Input }],
708
- total: [{ type: Input }],
709
- loading: [{ type: Input }],
710
- loadingDelay: [{ type: Input }],
711
- loadingIndicator: [{ type: Input }],
712
- bordered: [{ type: Input }],
713
- size: [{ type: Input }],
714
- scroll: [{ type: Input }],
715
- singleSort: [{ type: Input }],
716
- multiSort: [{ type: Input }],
717
- rowClassName: [{ type: Input }],
718
- clickRowClassName: [{ type: Input }],
719
- widthMode: [{ type: Input }],
720
- widthConfig: [{ type: Input }],
721
- resizable: [{ type: Input }],
722
- header: [{ type: Input }],
723
- showHeader: [{ type: Input }],
724
- footer: [{ type: Input }],
725
- bodyHeader: [{ type: Input }],
726
- body: [{ type: Input }],
727
- expandRowByClick: [{ type: Input }],
728
- expandAccordion: [{ type: Input }],
729
- expand: [{ type: Input }],
730
- noResult: [{ type: Input }],
731
- responsive: [{ type: Input }],
732
- responsiveHideHeaderFooter: [{ type: Input }],
733
- error: [{ type: Output }],
734
- change: [{ type: Output }],
735
- virtualScroll: [{ type: Input }],
736
- virtualItemSize: [{ type: Input }],
737
- virtualMaxBufferPx: [{ type: Input }],
738
- virtualMinBufferPx: [{ type: Input }],
739
- customRequest: [{ type: Input }],
740
- virtualForTrackBy: [{ type: Input }]
741
- };
742
- __decorate([
743
- InputNumber()
744
- ], STComponent.prototype, "ps", void 0);
745
- __decorate([
746
- InputNumber()
747
- ], STComponent.prototype, "pi", void 0);
748
- __decorate([
749
- InputNumber()
750
- ], STComponent.prototype, "total", void 0);
751
- __decorate([
752
- InputNumber()
753
- ], STComponent.prototype, "loadingDelay", void 0);
754
- __decorate([
755
- InputBoolean()
756
- ], STComponent.prototype, "bordered", void 0);
757
- __decorate([
758
- InputBoolean()
759
- ], STComponent.prototype, "showHeader", void 0);
760
- __decorate([
761
- InputBoolean()
762
- ], STComponent.prototype, "expandRowByClick", void 0);
763
- __decorate([
764
- InputBoolean()
765
- ], STComponent.prototype, "expandAccordion", void 0);
766
- __decorate([
767
- InputBoolean()
768
- ], STComponent.prototype, "responsive", void 0);
769
- __decorate([
770
- InputBoolean()
771
- ], STComponent.prototype, "responsiveHideHeaderFooter", void 0);
772
- __decorate([
773
- InputBoolean()
774
- ], STComponent.prototype, "virtualScroll", void 0);
775
- __decorate([
776
- InputNumber()
777
- ], STComponent.prototype, "virtualItemSize", void 0);
778
- __decorate([
779
- InputNumber()
780
- ], STComponent.prototype, "virtualMaxBufferPx", void 0);
781
- __decorate([
782
- InputNumber()
783
- ], STComponent.prototype, "virtualMinBufferPx", void 0);
784
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYWJjL3N0L3N0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBS04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNqRixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBb0IsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFjLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQWlCLE1BQU0sb0JBQW9CLENBQUM7QUFDdkUsT0FBTyxFQUFnQixZQUFZLEVBQUUsV0FBVyxFQUFlLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFM0QsT0FBTyxFQUFFLG9CQUFvQixFQUEyQixNQUFNLHdCQUF3QixDQUFDO0FBSXZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUEyQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQThDaEQsTUFBTSxPQUFPLFdBQVc7SUFxSnRCLFlBQ3dDLE9BQXlCLEVBQ3ZELEdBQXNCLEVBQ3RCLEVBQWMsRUFDZCxTQUFtQixFQUNELEdBQWMsRUFDaEMsWUFBNEIsRUFDNUIsVUFBd0IsRUFDeEIsU0FBNkIsRUFDckMsU0FBNkIsRUFDckIsR0FBeUI7UUFSekIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDRCxRQUFHLEdBQUgsR0FBRyxDQUFXO1FBQ2hDLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUM1QixlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBRTdCLFFBQUcsR0FBSCxHQUFHLENBQXNCO1FBaEozQixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUUvQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBTWQsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBQzNDLGlCQUFZLEdBQWEsRUFBRSxDQUFDO1FBQzVCLFdBQU0sR0FBZSxFQUFFLENBQUM7UUFDeEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixVQUFLLEdBQWEsRUFBRSxDQUFDO1FBQ3JCLGlCQUFZLEdBQXlCLEVBQUUsQ0FBQztRQUN4QyxrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsYUFBUSxHQUFnQixFQUFFLENBQUM7UUFDM0Isb0JBQWUsR0FBd0IsRUFBRSxDQUFDO1FBZ0NqQyxZQUFPLEdBQWUsRUFBRSxDQUFDO1FBRVYsT0FBRSxHQUFHLEVBQUUsQ0FBQztRQUNSLE9BQUUsR0FBRyxDQUFDLENBQUM7UUFDUCxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLFlBQU8sR0FBbUIsSUFBSSxDQUFDO1FBQ2hCLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRWhCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUF5Q2pCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFJbEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBR3hCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFFakMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDcEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFDaEMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdkIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsdUJBQWtCLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLHVCQUFrQixHQUFHLEdBQUcsQ0FBQztRQUV4QyxzQkFBaUIsR0FBNEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUE0Qm5FLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUUsQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNsRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUNYO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsTUFBTTthQUNYLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN4QixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQ3ZDO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUExSUQsSUFDSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUFZO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELFlBQVk7SUFDWixJQUNJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLEtBQVk7UUFDbEIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU8sQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQUUsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxLQUFLLG1DQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFLLEtBQUssQ0FBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBZUQsSUFDSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUFnQjtRQUM1QixJQUNFLENBQUMsT0FBTyxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pELENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUM5RDtZQUNBLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1lBQzVCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLHFCQUNWLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUM1QyxDQUFDO0lBQ0osQ0FBQztJQUdELElBQ0ksU0FBUyxDQUFDLEtBQWtCO1FBQzlCLElBQUksQ0FBQyxVQUFVLG1DQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFLLEtBQUssQ0FBRSxDQUFDO0lBQ3hELENBQUM7SUFDRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQ0ksV0FBVyxDQUFDLEdBQWE7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFDSSxTQUFTLENBQUMsR0FBbUM7UUFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRixDQUFDO0lBcUJEOztPQUVHO0lBQ0gsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQWdDTyxNQUFNLENBQUMsR0FBa0I7UUFDL0IsTUFBTSxhQUFhLHFCQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUUsQ0FBQztRQUMzQyxzSUFBc0k7UUFDdEksT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFekIsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtZQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztTQUNoQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxFQUFFO1FBQ0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYSxFQUFFLEtBQWU7UUFDeEMsT0FBTyxJQUFJLENBQUMsUUFBUTtZQUNsQixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0csQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULENBQUM7SUFFTyxVQUFVLENBQUMsSUFBa0IsRUFBRSxJQUFnQjtRQUNyRCxNQUFNLEdBQUcsR0FBYTtZQUNwQixJQUFJO1lBQ0osRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2xCLENBQUM7UUFDRixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDaEIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNsQjtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxlQUFlO0lBRWY7Ozs7T0FJRztJQUNILElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCO2FBQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNuQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLEdBQVk7UUFDN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVPLFFBQVEsQ0FBQyxPQUE2QjtRQUM1QyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQzFGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDMUI7WUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVO2lCQUN6QixPQUFPLGlCQUNOLEVBQUU7Z0JBQ0YsRUFBRTtnQkFDRixLQUFLO2dCQUNMLElBQUk7Z0JBQ0osR0FBRztnQkFDSCxHQUFHO2dCQUNILElBQUksRUFDSixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFDdEIsVUFBVTtnQkFDVixTQUFTO2dCQUNULFlBQVksRUFDWixTQUFTLEVBQUUsSUFBSSxFQUNmLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUN4RCxPQUFPLEVBQ1Y7aUJBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FDUixNQUFNLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFDaEMsS0FBSyxDQUFDLEVBQUU7Z0JBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixDQUFDLENBQ0YsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVhLFlBQVk7O1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsSUFBSTtnQkFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxFQUFFLEtBQUssV0FBVyxFQUFFO29CQUNwQyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7aUJBQ3JCO2dCQUNELElBQUksT0FBTyxNQUFNLENBQUMsRUFBRSxLQUFLLFdBQVcsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO2lCQUNyQjtnQkFDRCxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztpQkFDM0I7Z0JBQ0QsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO29CQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7aUJBQ3RDO2dCQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBbUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2Qyw2REFBNkQ7Z0JBQzdELG1EQUFtRDtnQkFDbkQsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7b0JBQ2pDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztpQkFDakY7Z0JBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDekI7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2lCQUN6QztnQkFDRCxPQUFPLElBQUksQ0FBQzthQUNiO1FBQ0gsQ0FBQztLQUFBO0lBRUQsYUFBYTtJQUNiLEtBQUssQ0FBQyxjQUF1QixJQUFJO1FBQy9CLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsT0FBTyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELGFBQWE7SUFDYixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksQ0FBQyxLQUFhLENBQUMsRUFBRSxXQUF1QixFQUFFLE9BQXVCO1FBQ25FLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksT0FBTyxXQUFXLEtBQUssV0FBVyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsaUNBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUssV0FBVyxFQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDbkc7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFdBQXVCLEVBQUUsT0FBdUI7UUFDckQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsV0FBdUIsRUFBRSxPQUF1QjtRQUNwRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sTUFBTSxDQUFDLE9BQWlCOztRQUM5QixJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTztRQUMzRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQTRCLENBQUM7UUFDaEQsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFZLENBQUM7UUFDN0QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUM7b0JBQ3JDLEdBQUcsRUFBRSxDQUFDO29CQUNOLElBQUksRUFBRSxDQUFDO2lCQUNSLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLE1BQUEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxxQ0FBcUMsQ0FBQywwQ0FBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3pFO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQWlCLEVBQUUsT0FBdUI7UUFDaEQsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUNsRixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDN0Q7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFZO1FBQ25DLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLO1lBQUUsT0FBTztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsU0FBUyxDQUFDLENBQVEsRUFBRSxJQUFZLEVBQUUsS0FBYSxFQUFFLEdBQVk7UUFDM0QsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQXFCLENBQUM7UUFDbkMsSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLE9BQU87WUFBRSxPQUFPO1FBQ3BDLE1BQU0sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxJQUFJLGdCQUFnQixFQUFFO1lBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDaEMsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsRUFBZSxFQUFFLElBQVksRUFBRSxLQUFhO1FBQ3JFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNsQyxJQUFJLEVBQUUsSUFBSSxJQUFJO1lBQUUsT0FBTztRQUN2QixNQUFNLE1BQU0sR0FBRyxnQkFDYixTQUFTLEVBQUUsS0FBSyxJQUNiLENBQUMsT0FBTyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ3pCLENBQUM7UUFDN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQWdCLENBQUM7UUFDN0MsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFlLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ3hHO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNsQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVksRUFBRSxNQUFlO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBUztRQUN4QixFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxTQUFTLENBQUMsSUFBZ0M7UUFDeEMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzVCO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDZjtZQUVBLElBQWlCO2lCQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNyQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxRQUFRO2FBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7YUFDNUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEQsQ0FBQyxDQUFDLE9BQVEsQ0FBQyxDQUFDLENBQUMsT0FBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWtCLENBQUM7UUFDN0YsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVKLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILE1BQU0sQ0FBQyxLQUFzQixFQUFFLElBQVksRUFBRSxPQUEyRDtRQUN0RyxPQUFPLG1CQUFLLGFBQWEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssSUFBSyxPQUFPLENBQUUsQ0FBQztRQUNsRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM3QixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDdEQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsYUFBYTtJQUViLGVBQWU7SUFFZixJQUFJLENBQUMsR0FBYyxFQUFFLEdBQVcsRUFBRSxLQUFnQjtRQUNoRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO1NBQy9DO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzdGO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsTUFBTSxHQUFHLEdBQUc7WUFDVixLQUFLO1lBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2xGLE1BQU0sRUFBRSxHQUFHO1NBQ1osQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsYUFBYTtJQUViLGlCQUFpQjtJQUVqQixhQUFhLENBQUMsR0FBYyxFQUFFLE9BQWdCO1FBQzVDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQztRQUNELHdCQUF3QjtRQUN4QixJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQWU7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxhQUFhO0lBRWIsbUJBQW1CO0lBRW5CLHNCQUFzQjtJQUN0QixVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxTQUFTO1FBQ2YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNyRixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDekQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWlCO1FBQ3pCLE9BQU8sR0FBRyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN0RSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBc0I7UUFDbEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGFBQWE7SUFFYixnQkFBZ0I7SUFFaEIsbUJBQW1CO0lBQ25CLFVBQVU7UUFDUixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxhQUFhO0lBRWIsU0FBUyxDQUFDLEVBQWU7UUFDdkIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFO1lBQ2YsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDaEMsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxpQkFBaUI7SUFFakI7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsT0FBeUIsRUFBRSxHQUFxQjtRQUNyRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDM0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDZixDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQWEsRUFBRSxFQUFFLENBQ2xGLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSwrQkFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQ3BCLEdBQUcsS0FDTixJQUFJLEVBQUUsR0FBRyxJQUNULENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhO0lBRWIsb0JBQW9CO0lBRXBCLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBaUIsRUFBRSxNQUFpQjtRQUNuRCxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGFBQWE7SUFFYixzQkFBc0I7SUFDdEIsYUFBYSxDQUFDLEtBQWlCO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3JCLE9BQU87U0FDUjtRQUNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUksS0FBSyxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFnQixDQUFDO1FBQ3ZGLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPO1NBQ1I7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzVCLEtBQUs7WUFDTCxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDL0IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRO1lBQ25DLFFBQVE7WUFDUixJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztTQUNoQyxDQUFDLENBQUM7UUFDSCxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkMsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQzlCO2FBQ0EsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQzlCLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2lCQUNqQjtnQkFDRCxPQUFPLENBQUMsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELGFBQWE7SUFFYixJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXlCLENBQUM7SUFDakQsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUE4QjtRQUN6QyxPQUFPLG1CQUFLLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssSUFBSyxPQUFPLENBQUUsQ0FBQztRQUNoRSxJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssV0FBVyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUN0QjtRQUNELElBQUksT0FBTyxPQUFPLENBQUMsRUFBRSxLQUFLLFdBQVcsRUFBRTtZQUNyQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDdEIsMkVBQTJFO1lBQzNFLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUM1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1YsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQXNCLEVBQUU7WUFDakUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUE0QjtTQUNoRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLEtBQUssSUFBSSxHQUFHLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTtZQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7U0FDdEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSztZQUNsQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxRQUFRLENBQUMsV0FBNEI7UUFDbkMsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLEVBQUU7WUFDbkMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3hCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUE2RDtRQUN2RSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3RDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDM0YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOzs7WUE5eEJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsSUFBSTtnQkFDZCw2c1JBQWtDO2dCQUNsQyxTQUFTLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUM7Z0JBQy9GLElBQUksRUFBRTtvQkFDSixZQUFZLEVBQUUsTUFBTTtvQkFDcEIsb0JBQW9CLEVBQUUsMkJBQTJCO29CQUNqRCxzQkFBc0IsRUFBRSw2QkFBNkI7b0JBQ3JELDBCQUEwQixFQUFFLDZCQUE2QjtvQkFDekQsdUJBQXVCLEVBQUUsWUFBWTtvQkFDckMsMkNBQTJDLEVBQUUsNEJBQTRCO2lCQUMxRTtnQkFDRCxtQkFBbUIsRUFBRSxLQUFLO2dCQUMxQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDdEM7Ozs0Q0F1SkksUUFBUSxZQUFJLE1BQU0sU0FBQyxnQkFBZ0I7WUFyT3RDLGlCQUFpQjtZQUVqQixVQUFVO1lBNkJILFFBQVE7NENBME1aLE1BQU0sU0FBQyxRQUFRO1lBNU1YLGNBQWM7WUFDZCxZQUFZO1lBVmtDLGtCQUFrQjtZQUNoRSxrQkFBa0I7WUFJbEIsb0JBQW9COzs7dUJBMEYxQixTQUFTLFNBQUMsT0FBTzs2QkFDakIsU0FBUyxTQUFDLGdCQUFnQjtrQkFFMUIsS0FBSztrQkFRTCxLQUFLO21CQVdMLEtBQUs7bUJBUUwsS0FBSztzQkFDTCxLQUFLOzBCQUNMLEtBQUs7aUJBQ0wsS0FBSztpQkFDTCxLQUFLO29CQUNMLEtBQUs7c0JBQ0wsS0FBSzsyQkFDTCxLQUFLOytCQUNMLEtBQUs7dUJBQ0wsS0FBSzttQkFDTCxLQUFLO3FCQUNMLEtBQUs7eUJBQ0wsS0FBSzt3QkFFTCxLQUFLOzJCQWdCTCxLQUFLO2dDQUNMLEtBQUs7d0JBQ0wsS0FBSzswQkFPTCxLQUFLO3dCQU1MLEtBQUs7cUJBSUwsS0FBSzt5QkFDTCxLQUFLO3FCQUNMLEtBQUs7eUJBQ0wsS0FBSzttQkFDTCxLQUFLOytCQUNMLEtBQUs7OEJBQ0wsS0FBSztxQkFDTCxLQUFLO3VCQUNMLEtBQUs7eUJBQ0wsS0FBSzt5Q0FDTCxLQUFLO29CQUNMLE1BQU07cUJBQ04sTUFBTTs0QkFDTixLQUFLOzhCQUNMLEtBQUs7aUNBQ0wsS0FBSztpQ0FDTCxLQUFLOzRCQUNMLEtBQUs7Z0NBQ0wsS0FBSzs7QUFoRWtCO0lBQWQsV0FBVyxFQUFFO3VDQUFTO0FBQ1I7SUFBZCxXQUFXLEVBQUU7dUNBQVE7QUFDUDtJQUFkLFdBQVcsRUFBRTswQ0FBVztBQUVWO0lBQWQsV0FBVyxFQUFFO2lEQUFrQjtBQUVoQjtJQUFmLFlBQVksRUFBRTs2Q0FBa0I7QUF5Q2pCO0lBQWYsWUFBWSxFQUFFOytDQUFtQjtBQUlsQjtJQUFmLFlBQVksRUFBRTtxREFBMEI7QUFDekI7SUFBZixZQUFZLEVBQUU7b0RBQXlCO0FBR3hCO0lBQWYsWUFBWSxFQUFFOytDQUE0QjtBQUMzQjtJQUFmLFlBQVksRUFBRTsrREFBcUM7QUFHcEM7SUFBZixZQUFZLEVBQUU7a0RBQXVCO0FBQ3ZCO0lBQWQsV0FBVyxFQUFFO29EQUFzQjtBQUNyQjtJQUFkLFdBQVcsRUFBRTt1REFBMEI7QUFDekI7SUFBZCxXQUFXLEVBQUU7dURBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBEZWNpbWFsUGlwZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFRyYWNrQnlGdW5jdGlvbixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb20sIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFsYWluSTE4TlNlcnZpY2UsIEFMQUlOX0kxOE5fVE9LRU4sIERhdGVQaXBlLCBEZWxvbkxvY2FsZVNlcnZpY2UsIExvY2FsZURhdGEsIFlOUGlwZSB9IGZyb20gJ0BkZWxvbi90aGVtZSc7XG5pbXBvcnQgeyBBbGFpbkNvbmZpZ1NlcnZpY2UsIEFsYWluU1RDb25maWcgfSBmcm9tICdAZGVsb24vdXRpbC9jb25maWcnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBJbnB1dEJvb2xlYW4sIElucHV0TnVtYmVyLCBOdW1iZXJJbnB1dCwgdG9Cb29sZWFuIH0gZnJvbSAnQGRlbG9uL3V0aWwvZGVjb3JhdG9yJztcbmltcG9ydCB7IGRlZXBDb3B5LCBkZWVwTWVyZ2VLZXkgfSBmcm9tICdAZGVsb24vdXRpbC9vdGhlcic7XG5pbXBvcnQgdHlwZSB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBOekNvbnRleHRNZW51U2VydmljZSwgTnpEcm9wZG93bk1lbnVDb21wb25lbnQgfSBmcm9tICduZy16b3Jyby1hbnRkL2Ryb3Bkb3duJztcbmltcG9ydCB7IE56UmVzaXplRXZlbnQgfSBmcm9tICduZy16b3Jyby1hbnRkL3Jlc2l6YWJsZSc7XG5pbXBvcnQgeyBOelRhYmxlQ29tcG9uZW50IH0gZnJvbSAnbmctem9ycm8tYW50ZC90YWJsZSc7XG5cbmltcG9ydCB7IFNUQ29sdW1uU291cmNlIH0gZnJvbSAnLi9zdC1jb2x1bW4tc291cmNlJztcbmltcG9ydCB7IFNURGF0YVNvdXJjZSwgU1REYXRhU291cmNlT3B0aW9ucywgU1REYXRhU291cmNlUmVzdWx0IH0gZnJvbSAnLi9zdC1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBTVEV4cG9ydCB9IGZyb20gJy4vc3QtZXhwb3J0JztcbmltcG9ydCB7IFNUUm93U291cmNlIH0gZnJvbSAnLi9zdC1yb3cuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNUX0RFRkFVTFRfQ09ORklHIH0gZnJvbSAnLi9zdC5jb25maWcnO1xuaW1wb3J0IHtcbiAgU1RDaGFuZ2UsXG4gIFNUQ2hhbmdlVHlwZSxcbiAgU1RDbGlja1Jvd0NsYXNzTmFtZSxcbiAgU1RDbGlja1Jvd0NsYXNzTmFtZVR5cGUsXG4gIFNUQ29sdW1uLFxuICBTVENvbHVtblNhZmVUeXBlLFxuICBTVENvbHVtblNlbGVjdGlvbixcbiAgU1RDb250ZXh0bWVudUZuLFxuICBTVENvbnRleHRtZW51SXRlbSxcbiAgU1RDdXN0b21SZXF1ZXN0T3B0aW9ucyxcbiAgU1REYXRhLFxuICBTVEVycm9yLFxuICBTVEV4cG9ydE9wdGlvbnMsXG4gIFNUTG9hZE9wdGlvbnMsXG4gIFNUTXVsdGlTb3J0LFxuICBTVFBhZ2UsXG4gIFNUUmVxLFxuICBTVFJlcyxcbiAgU1RSZXNldENvbHVtbnNPcHRpb24sXG4gIFNUUmVzaXphYmxlLFxuICBTVFJvd0NsYXNzTmFtZSxcbiAgU1RTaW5nbGVTb3J0LFxuICBTVFN0YXRpc3RpY2FsUmVzdWx0cyxcbiAgU1RXaWR0aE1vZGVcbn0gZnJvbSAnLi9zdC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IF9TVENvbHVtbiwgX1NURGF0YVZhbHVlLCBfU1RIZWFkZXIsIF9TVFRkTm90aWZ5LCBfU1RUZE5vdGlmeVR5cGUgfSBmcm9tICcuL3N0LnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QnLFxuICBleHBvcnRBczogJ3N0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0LmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbU1REYXRhU291cmNlLCBTVFJvd1NvdXJjZSwgU1RDb2x1bW5Tb3VyY2UsIFNURXhwb3J0LCBEYXRlUGlwZSwgWU5QaXBlLCBEZWNpbWFsUGlwZV0sXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLnN0XSc6IGB0cnVlYCxcbiAgICAnW2NsYXNzLnN0X19wLWxlZnRdJzogYHBhZ2UucGxhY2VtZW50ID09PSAnbGVmdCdgLFxuICAgICdbY2xhc3Muc3RfX3AtY2VudGVyXSc6IGBwYWdlLnBsYWNlbWVudCA9PT0gJ2NlbnRlcidgLFxuICAgICdbY2xhc3Muc3RfX3dpZHRoLXN0cmljdF0nOiBgd2lkdGhNb2RlLnR5cGUgPT09ICdzdHJpY3QnYCxcbiAgICAnW2NsYXNzLmFudC10YWJsZS1yZXBdJzogYHJlc3BvbnNpdmVgLFxuICAgICdbY2xhc3MuYW50LXRhYmxlLXJlcF9faGlkZS1oZWFkZXItZm9vdGVyXSc6IGByZXNwb25zaXZlSGlkZUhlYWRlckZvb3RlcmBcbiAgfSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFNUQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcHM6IE51bWJlcklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcGk6IE51bWJlcklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdG90YWw6IE51bWJlcklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbG9hZGluZ0RlbGF5OiBOdW1iZXJJbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2JvcmRlcmVkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHBhbmRSb3dCeUNsaWNrOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHBhbmRBY2NvcmRpb246IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Jlc3BvbnNpdmU6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Jlc3BvbnNpdmVIaWRlSGVhZGVyRm9vdGVyOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV92aXJ0dWFsU2Nyb2xsOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV92aXJ0dWFsSXRlbVNpemU6IE51bWJlcklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdmlydHVhbE1heEJ1ZmZlclB4OiBOdW1iZXJJbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3ZpcnR1YWxNaW5CdWZmZXJQeDogTnVtYmVySW5wdXQ7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgZGF0YSQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB0b3RhbFRwbCA9IGBgO1xuICBwcml2YXRlIGNvZzogQWxhaW5TVENvbmZpZztcbiAgcHJpdmF0ZSBfcmVxOiBTVFJlcTtcbiAgcHJpdmF0ZSBfcmVzOiBTVFJlcztcbiAgcHJpdmF0ZSBfcGFnZTogU1RQYWdlO1xuICBwcml2YXRlIF93aWR0aE1vZGU6IFNUV2lkdGhNb2RlO1xuICBwcml2YXRlIGN1c3RvbVdpZHRoQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XG4gIF93aWR0aENvbmZpZzogc3RyaW5nW10gPSBbXTtcbiAgbG9jYWxlOiBMb2NhbGVEYXRhID0ge307XG4gIF9sb2FkaW5nID0gZmFsc2U7XG4gIF9kYXRhOiBTVERhdGFbXSA9IFtdO1xuICBfc3RhdGlzdGljYWw6IFNUU3RhdGlzdGljYWxSZXN1bHRzID0ge307XG4gIF9pc1BhZ2luYXRpb24gPSB0cnVlO1xuICBfYWxsQ2hlY2tlZCA9IGZhbHNlO1xuICBfYWxsQ2hlY2tlZERpc2FibGVkID0gZmFsc2U7XG4gIF9pbmRldGVybWluYXRlID0gZmFsc2U7XG4gIF9oZWFkZXJzOiBfU1RIZWFkZXJbXVtdID0gW107XG4gIF9jb2x1bW5zOiBfU1RDb2x1bW5bXSA9IFtdO1xuICBjb250ZXh0bWVudUxpc3Q6IFNUQ29udGV4dG1lbnVJdGVtW10gPSBbXTtcbiAgQFZpZXdDaGlsZCgndGFibGUnKSByZWFkb25seSBvcmdUYWJsZTogTnpUYWJsZUNvbXBvbmVudDxTVERhdGE+O1xuICBAVmlld0NoaWxkKCdjb250ZXh0bWVudVRwbCcpIHJlYWRvbmx5IGNvbnRleHRtZW51VHBsITogTnpEcm9wZG93bk1lbnVDb21wb25lbnQ7XG5cbiAgQElucHV0KClcbiAgZ2V0IHJlcSgpOiBTVFJlcSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcTtcbiAgfVxuICBzZXQgcmVxKHZhbHVlOiBTVFJlcSkge1xuICAgIHRoaXMuX3JlcSA9IGRlZXBNZXJnZUtleSh7fSwgdHJ1ZSwgdGhpcy5jb2cucmVxLCB2YWx1ZSk7XG4gIH1cbiAgLyoqIOi/lOWbnuS9k+mFjee9riAqL1xuICBASW5wdXQoKVxuICBnZXQgcmVzKCk6IFNUUmVzIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzO1xuICB9XG4gIHNldCByZXModmFsdWU6IFNUUmVzKSB7XG4gICAgY29uc3QgaXRlbSA9ICh0aGlzLl9yZXMgPSBkZWVwTWVyZ2VLZXkoe30sIHRydWUsIHRoaXMuY29nLnJlcywgdmFsdWUpKTtcbiAgICBjb25zdCByZU5hbWUgPSBpdGVtLnJlTmFtZSE7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJlTmFtZS5saXN0KSkgcmVOYW1lLmxpc3QgPSByZU5hbWUubGlzdCEuc3BsaXQoJy4nKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVOYW1lLnRvdGFsKSkgcmVOYW1lLnRvdGFsID0gcmVOYW1lLnRvdGFsIS5zcGxpdCgnLicpO1xuICAgIHRoaXMuX3JlcyA9IGl0ZW07XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHBhZ2UoKTogU1RQYWdlIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZTtcbiAgfVxuICBzZXQgcGFnZSh2YWx1ZTogU1RQYWdlKSB7XG4gICAgdGhpcy5fcGFnZSA9IHsgLi4udGhpcy5jb2cucGFnZSwgLi4udmFsdWUgfTtcbiAgICB0aGlzLnVwZGF0ZVRvdGFsVHBsKCk7XG4gIH1cbiAgQElucHV0KCkgZGF0YTogc3RyaW5nIHwgU1REYXRhW10gfCBPYnNlcnZhYmxlPFNURGF0YVtdPjtcbiAgQElucHV0KCkgY29sdW1uczogU1RDb2x1bW5bXSA9IFtdO1xuICBASW5wdXQoKSBjb250ZXh0bWVudT86IFNUQ29udGV4dG1lbnVGbjtcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgcHMgPSAxMDtcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgcGkgPSAxO1xuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSB0b3RhbCA9IDA7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgbG9hZGluZ0RlbGF5ID0gMDtcbiAgQElucHV0KCkgbG9hZGluZ0luZGljYXRvcjogVGVtcGxhdGVSZWY8dm9pZD47XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBib3JkZXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ21pZGRsZScgfCAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIHNjcm9sbDogeyB5Pzogc3RyaW5nOyB4Pzogc3RyaW5nIH07XG4gIEBJbnB1dCgpIHNpbmdsZVNvcnQ6IFNUU2luZ2xlU29ydDtcbiAgcHJpdmF0ZSBfbXVsdGlTb3J0PzogU1RNdWx0aVNvcnQ7XG4gIEBJbnB1dCgpXG4gIGdldCBtdWx0aVNvcnQoKTogTnpTYWZlQW55IHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlTb3J0O1xuICB9XG4gIHNldCBtdWx0aVNvcnQodmFsdWU6IE56U2FmZUFueSkge1xuICAgIGlmIChcbiAgICAgICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyAmJiAhdG9Cb29sZWFuKHZhbHVlKSkgfHxcbiAgICAgICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDApXG4gICAgKSB7XG4gICAgICB0aGlzLl9tdWx0aVNvcnQgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX211bHRpU29ydCA9IHtcbiAgICAgIC4uLih0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWUgOiB7fSlcbiAgICB9O1xuICB9XG4gIEBJbnB1dCgpIHJvd0NsYXNzTmFtZTogU1RSb3dDbGFzc05hbWU7XG4gIEBJbnB1dCgpIGNsaWNrUm93Q2xhc3NOYW1lPzogU1RDbGlja1Jvd0NsYXNzTmFtZSB8IG51bGw7XG4gIEBJbnB1dCgpXG4gIHNldCB3aWR0aE1vZGUodmFsdWU6IFNUV2lkdGhNb2RlKSB7XG4gICAgdGhpcy5fd2lkdGhNb2RlID0geyAuLi50aGlzLmNvZy53aWR0aE1vZGUsIC4uLnZhbHVlIH07XG4gIH1cbiAgZ2V0IHdpZHRoTW9kZSgpOiBTVFdpZHRoTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX3dpZHRoTW9kZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgd2lkdGhDb25maWcodmFsOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX3dpZHRoQ29uZmlnID0gdmFsO1xuICAgIHRoaXMuY3VzdG9tV2lkdGhDb25maWcgPSB2YWwgJiYgdmFsLmxlbmd0aCA+IDA7XG4gIH1cbiAgcHJpdmF0ZSBfcmVzaXphYmxlOiBTVFJlc2l6YWJsZTtcbiAgQElucHV0KClcbiAgc2V0IHJlc2l6YWJsZSh2YWw6IFNUUmVzaXphYmxlIHwgYm9vbGVhbiB8IHN0cmluZykge1xuICAgIHRoaXMuX3Jlc2l6YWJsZSA9IHR5cGVvZiB2YWwgPT09ICdvYmplY3QnID8gdmFsIDogeyBkaXNhYmxlZDogIXRvQm9vbGVhbih2YWwpIH07XG4gIH1cbiAgQElucHV0KCkgaGVhZGVyPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD4gfCBudWxsO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd0hlYWRlciA9IHRydWU7XG4gIEBJbnB1dCgpIGZvb3Rlcj86IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+IHwgbnVsbDtcbiAgQElucHV0KCkgYm9keUhlYWRlcj86IFRlbXBsYXRlUmVmPFNUU3RhdGlzdGljYWxSZXN1bHRzPiB8IG51bGw7XG4gIEBJbnB1dCgpIGJvZHk/OiBUZW1wbGF0ZVJlZjxTVFN0YXRpc3RpY2FsUmVzdWx0cz4gfCBudWxsO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZXhwYW5kUm93QnlDbGljayA9IGZhbHNlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZXhwYW5kQWNjb3JkaW9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIGV4cGFuZDogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IE56U2FmZUFueTsgY29sdW1uOiBTVENvbHVtbiB9PjtcbiAgQElucHV0KCkgbm9SZXN1bHQ/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx2b2lkPiB8IG51bGw7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSByZXNwb25zaXZlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHJlc3BvbnNpdmVIaWRlSGVhZGVyRm9vdGVyOiBib29sZWFuO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPFNURXJyb3I+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNUQ2hhbmdlPigpO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSB2aXJ0dWFsSXRlbVNpemUgPSA1NDtcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgdmlydHVhbE1heEJ1ZmZlclB4ID0gMjAwO1xuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSB2aXJ0dWFsTWluQnVmZmVyUHggPSAxMDA7XG4gIEBJbnB1dCgpIGN1c3RvbVJlcXVlc3Q/OiAob3B0aW9uczogU1RDdXN0b21SZXF1ZXN0T3B0aW9ucykgPT4gT2JzZXJ2YWJsZTxOelNhZmVBbnk+O1xuICBASW5wdXQoKSB2aXJ0dWFsRm9yVHJhY2tCeTogVHJhY2tCeUZ1bmN0aW9uPFNURGF0YT4gPSBpbmRleCA9PiBpbmRleDtcblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgcGFnZVxuICAgKi9cbiAgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YSBvZiB0aGUgY3VycmVudCBwYWdlXG4gICAqL1xuICBnZXQgbGlzdCgpOiBTVERhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFMQUlOX0kxOE5fVE9LRU4pIGkxOG5TcnY6IEFsYWluSTE4TlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBleHBvcnRTcnY6IFNURXhwb3J0LFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jOiBOelNhZmVBbnksXG4gICAgcHJpdmF0ZSBjb2x1bW5Tb3VyY2U6IFNUQ29sdW1uU291cmNlLFxuICAgIHByaXZhdGUgZGF0YVNvdXJjZTogU1REYXRhU291cmNlLFxuICAgIHByaXZhdGUgZGVsb25JMThuOiBEZWxvbkxvY2FsZVNlcnZpY2UsXG4gICAgY29uZmlnU3J2OiBBbGFpbkNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjbXM6IE56Q29udGV4dE1lbnVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc2V0Q29nKGNvbmZpZ1Nydi5tZXJnZSgnc3QnLCBTVF9ERUZBVUxUX0NPTkZJRykhKTtcblxuICAgIHRoaXMuZGVsb25JMThuLmNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5kZWxvbkkxOG4uZ2V0RGF0YSgnc3QnKTtcbiAgICAgIGlmICh0aGlzLl9jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy51cGRhdGVUb3RhbFRwbCgpO1xuICAgICAgICB0aGlzLmNkKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpMThuU3J2LmNoYW5nZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2NvbHVtbnMubGVuZ3RoID4gMClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWZyZXNoQ29sdW1ucygpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29nKGNvZzogQWxhaW5TVENvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvcHlNdWx0aVNvcnQgPSB7IC4uLmNvZy5tdWx0aVNvcnQgfTtcbiAgICAvLyBCZWNhdXNlIG11bHRpU29ydC5nbG9iYWwgd2lsbCBhZmZlY3QgdGhlIHJlc3VsdCwgaXQgc2hvdWxkIGJlIHJlbW92ZWQgZmlyc3QsIGFuZCBtdWx0aVNvcnQgd2lsbCBiZSBvcGVyYXRlZCBhZ2FpbiBhZnRlciBwcm9jZXNzaW5nLlxuICAgIGRlbGV0ZSBjb2cubXVsdGlTb3J0O1xuICAgIHRoaXMuY29nID0gY29nO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgY29nKTtcblxuICAgIGlmIChjb3B5TXVsdGlTb3J0Lmdsb2JhbCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubXVsdGlTb3J0ID0gY29weU11bHRpU29ydDtcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5Tb3VyY2Uuc2V0Q29nKGNvZyk7XG4gIH1cblxuICBjZCgpOiB0aGlzIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZW5kZXJUb3RhbCh0b3RhbDogc3RyaW5nLCByYW5nZTogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRvdGFsVHBsXG4gICAgICA/IHRoaXMudG90YWxUcGwucmVwbGFjZSgne3t0b3RhbH19JywgdG90YWwpLnJlcGxhY2UoJ3t7cmFuZ2VbMF19fScsIHJhbmdlWzBdKS5yZXBsYWNlKCd7e3JhbmdlWzFdfX0nLCByYW5nZVsxXSlcbiAgICAgIDogJyc7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZUVtaXQodHlwZTogU1RDaGFuZ2VUeXBlLCBkYXRhPzogTnpTYWZlQW55KTogdm9pZCB7XG4gICAgY29uc3QgcmVzOiBTVENoYW5nZSA9IHtcbiAgICAgIHR5cGUsXG4gICAgICBwaTogdGhpcy5waSxcbiAgICAgIHBzOiB0aGlzLnBzLFxuICAgICAgdG90YWw6IHRoaXMudG90YWxcbiAgICB9O1xuICAgIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICAgIHJlc1t0eXBlXSA9IGRhdGE7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlLmVtaXQocmVzKTtcbiAgfVxuXG4gIC8vICNyZWdpb24gZGF0YVxuXG4gIC8qKlxuICAgKiDojrflj5bov4fmu6TlkI7miYDmnInmlbDmja5cbiAgICogLSDmnKzlnLDmlbDmja7vvJrljIXlkKvmjpLluo/jgIHov4fmu6TlkI7kuI3liIbpobXmlbDmja5cbiAgICogLSDov5znqIvmlbDmja7vvJrkuI3kvKDpgJIgYHBpYOOAgWBwc2Ag5Lik5Liq5Y+C5pWwXG4gICAqL1xuICBnZXQgZmlsdGVyZWREYXRhKCk6IFByb21pc2U8U1REYXRhW10+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkRGF0YSh7IHBhZ2luYXRvcjogZmFsc2UgfSBhcyBOelNhZmVBbnkpLnRoZW4ocmVzID0+IHJlcy5saXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVG90YWxUcGwoKTogdm9pZCB7XG4gICAgY29uc3QgeyB0b3RhbCB9ID0gdGhpcy5wYWdlO1xuICAgIGlmICh0eXBlb2YgdG90YWwgPT09ICdzdHJpbmcnICYmIHRvdGFsLmxlbmd0aCkge1xuICAgICAgdGhpcy50b3RhbFRwbCA9IHRvdGFsO1xuICAgIH0gZWxzZSBpZiAodG9Cb29sZWFuKHRvdGFsKSkge1xuICAgICAgdGhpcy50b3RhbFRwbCA9IHRoaXMubG9jYWxlLnRvdGFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRvdGFsVHBsID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkaW5nKHZhbDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRpbmcgPT0gbnVsbCkge1xuICAgICAgdGhpcy5fbG9hZGluZyA9IHZhbDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhKG9wdGlvbnM/OiBTVERhdGFTb3VyY2VPcHRpb25zKTogUHJvbWlzZTxTVERhdGFTb3VyY2VSZXN1bHQ+IHtcbiAgICBjb25zdCB7IHBpLCBwcywgZGF0YSwgcmVxLCByZXMsIHBhZ2UsIHRvdGFsLCBzaW5nbGVTb3J0LCBtdWx0aVNvcnQsIHJvd0NsYXNzTmFtZSB9ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmVQcm9taXNlLCByZWplY3RQcm9taXNlKSA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhJCkge1xuICAgICAgICB0aGlzLmRhdGEkLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0YSQgPSB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgLnByb2Nlc3Moe1xuICAgICAgICAgIHBpLFxuICAgICAgICAgIHBzLFxuICAgICAgICAgIHRvdGFsLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgcmVxLFxuICAgICAgICAgIHJlcyxcbiAgICAgICAgICBwYWdlLFxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMuX2NvbHVtbnMsXG4gICAgICAgICAgc2luZ2xlU29ydCxcbiAgICAgICAgICBtdWx0aVNvcnQsXG4gICAgICAgICAgcm93Q2xhc3NOYW1lLFxuICAgICAgICAgIHBhZ2luYXRvcjogdHJ1ZSxcbiAgICAgICAgICBjdXN0b21SZXF1ZXN0OiB0aGlzLmN1c3RvbVJlcXVlc3QgfHwgdGhpcy5jb2cuY3VzdG9tUmVxdWVzdCxcbiAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICByZXN1bHQgPT4gcmVzb2x2ZVByb21pc2UocmVzdWx0KSxcbiAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ3N0LmxvYWREYXRlJywgZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0UHJvbWlzZShlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUGFnZURhdGEoKTogUHJvbWlzZTx0aGlzPiB7XG4gICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmxvYWREYXRhKCk7XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQucGkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMucGkgPSByZXN1bHQucGk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJlc3VsdC5wcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5wcyA9IHJlc3VsdC5wcztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0LnRvdGFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLnRvdGFsID0gcmVzdWx0LnRvdGFsO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQucGFnZVNob3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuX2lzUGFnaW5hdGlvbiA9IHJlc3VsdC5wYWdlU2hvdztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2RhdGEgPSByZXN1bHQubGlzdDtcbiAgICAgIHRoaXMuX3N0YXRpc3RpY2FsID0gcmVzdWx0LnN0YXRpc3RpY2FsIGFzIFNUU3RhdGlzdGljYWxSZXN1bHRzO1xuICAgICAgdGhpcy5jaGFuZ2VFbWl0KCdsb2FkZWQnLCByZXN1bHQubGlzdCk7XG4gICAgICAvLyBTaG91bGQgYmUgcmUtcmVuZGVyIGluIG5leHQgdGlrZSB3aGVuIHVzaW5nIHZpcnR1YWwgc2Nyb2xsXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbmctYWxhaW4vbmctYWxhaW4vaXNzdWVzLzE4MzZcbiAgICAgIGlmICh0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LmNoZWNrVmlld3BvcnRTaXplKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX3JlZkNoZWNrKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICBpZiAoIXRoaXMuZGVzdHJveSQuaXNTdG9wcGVkKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5lcnJvci5lbWl0KHsgdHlwZTogJ3JlcScsIGVycm9yIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9XG5cbiAgLyoqIOa4heepuuaJgOacieaVsOaNriAqL1xuICBjbGVhcihjbGVhblN0YXR1czogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcbiAgICBpZiAoY2xlYW5TdGF0dXMpIHtcbiAgICAgIHRoaXMuY2xlYXJTdGF0dXMoKTtcbiAgICB9XG4gICAgdGhpcy5fZGF0YSA9IFtdO1xuICAgIHJldHVybiB0aGlzLmNkKCk7XG4gIH1cblxuICAvKiog5riF56m65omA5pyJ54q25oCBICovXG4gIGNsZWFyU3RhdHVzKCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmNsZWFyQ2hlY2soKS5jbGVhclJhZGlvKCkuY2xlYXJGaWx0ZXIoKS5jbGVhclNvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoLnmja7pobXnoIHph43mlrDliqDovb3mlbDmja5cbiAgICpcbiAgICogQHBhcmFtIHBpIOaMh+WumuW9k+WJjemhteegge+8jOm7mOiupO+8mmAxYFxuICAgKiBAcGFyYW0gZXh0cmFQYXJhbXMg6YeN5paw5oyH5a6aIGBleHRyYVBhcmFtc2Ag5YC8XG4gICAqIEBwYXJhbSBvcHRpb25zIOmAiemhuVxuICAgKi9cbiAgbG9hZChwaTogbnVtYmVyID0gMSwgZXh0cmFQYXJhbXM/OiBOelNhZmVBbnksIG9wdGlvbnM/OiBTVExvYWRPcHRpb25zKTogdGhpcyB7XG4gICAgaWYgKHBpICE9PSAtMSkgdGhpcy5waSA9IHBpO1xuICAgIGlmICh0eXBlb2YgZXh0cmFQYXJhbXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnJlcS5wYXJhbXMgPSBvcHRpb25zICYmIG9wdGlvbnMubWVyZ2UgPyB7IC4uLnRoaXMucmVxLnBhcmFtcywgLi4uZXh0cmFQYXJhbXMgfSA6IGV4dHJhUGFyYW1zO1xuICAgIH1cbiAgICB0aGlzLl9jaGFuZ2UoJ3BpJywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICog6YeN5paw5Yi35paw5b2T5YmN6aG1XG4gICAqXG4gICAqIEBwYXJhbSBleHRyYVBhcmFtcyDph43mlrDmjIflrpogYGV4dHJhUGFyYW1zYCDlgLxcbiAgICovXG4gIHJlbG9hZChleHRyYVBhcmFtcz86IE56U2FmZUFueSwgb3B0aW9ucz86IFNUTG9hZE9wdGlvbnMpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkKC0xLCBleHRyYVBhcmFtcywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICog6YeN572u5LiU6YeN5paw6K6+572uIGBwaWAg5Li6IGAxYO+8jOWMheWQq+S7peS4i+WAvO+8mlxuICAgKiAtIGBjaGVja2Ag5pWw5o2uXG4gICAqIC0gYHJhZGlvYCDmlbDmja5cbiAgICogLSBgc29ydGAg5pWw5o2uXG4gICAqIC0gYGZpbGV0ZXJgIOaVsOaNrlxuICAgKlxuICAgKiBAcGFyYW0gZXh0cmFQYXJhbXMg6YeN5paw5oyH5a6aIGBleHRyYVBhcmFtc2Ag5YC8XG4gICAqL1xuICByZXNldChleHRyYVBhcmFtcz86IE56U2FmZUFueSwgb3B0aW9ucz86IFNUTG9hZE9wdGlvbnMpOiB0aGlzIHtcbiAgICB0aGlzLmNsZWFyU3RhdHVzKCkubG9hZCgxLCBleHRyYVBhcmFtcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIF90b1RvcChlbmZvcmNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghKGVuZm9yY2UgPT0gbnVsbCA/IHRoaXMucGFnZS50b1RvcCA6IGVuZm9yY2UpKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAvLyBmaXggaGVhZGVyIGhlaWdodFxuICAgIHRoaXMuZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgLT0gdGhpcy5wYWdlLnRvVG9wT2Zmc2V0ITtcbiAgICBpZiAodGhpcy5zY3JvbGwpIHtcbiAgICAgIGlmICh0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUbyh7XG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIGxlZnQ6IDBcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5xdWVyeVNlbGVjdG9yKCcuYW50LXRhYmxlLWJvZHksIC5hbnQtdGFibGUtY29udGVudCcpPy5zY3JvbGxUbygwLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfY2hhbmdlKHR5cGU6ICdwaScgfCAncHMnLCBvcHRpb25zPzogU1RMb2FkT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICh0eXBlID09PSAncGknIHx8ICh0eXBlID09PSAncHMnICYmIHRoaXMucGkgPD0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBzKSkpIHtcbiAgICAgIHRoaXMubG9hZFBhZ2VEYXRhKCkudGhlbigoKSA9PiB0aGlzLl90b1RvcChvcHRpb25zPy50b1RvcCkpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRW1pdCh0eXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VPdGhlckV4cGFuZChpdGVtOiBTVERhdGEpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5leHBhbmRBY2NvcmRpb24gPT09IGZhbHNlKSByZXR1cm47XG4gICAgdGhpcy5fZGF0YS5maWx0ZXIoaSA9PiBpICE9PSBpdGVtKS5mb3JFYWNoKGkgPT4gKGkuZXhwYW5kID0gZmFsc2UpKTtcbiAgfVxuXG4gIF9yb3dDbGljayhlOiBFdmVudCwgaXRlbTogU1REYXRhLCBpbmRleDogbnVtYmVyLCBkYmw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChlbC5ub2RlTmFtZSA9PT0gJ0lOUFVUJykgcmV0dXJuO1xuICAgIGNvbnN0IHsgZXhwYW5kLCBleHBhbmRSb3dCeUNsaWNrIH0gPSB0aGlzO1xuICAgIGlmICghIWV4cGFuZCAmJiBpdGVtLnNob3dFeHBhbmQgIT09IGZhbHNlICYmIGV4cGFuZFJvd0J5Q2xpY2spIHtcbiAgICAgIGl0ZW0uZXhwYW5kID0gIWl0ZW0uZXhwYW5kO1xuICAgICAgdGhpcy5jbG9zZU90aGVyRXhwYW5kKGl0ZW0pO1xuICAgICAgdGhpcy5jaGFuZ2VFbWl0KCdleHBhbmQnLCBpdGVtKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0geyBlLCBpdGVtLCBpbmRleCB9O1xuICAgIGlmIChkYmwpIHtcbiAgICAgIHRoaXMuY2hhbmdlRW1pdCgnZGJsQ2xpY2snLCBkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2xpY2tSb3dDbGFzc05hbWUoZWwsIGl0ZW0sIGluZGV4KTtcbiAgICAgIHRoaXMuY2hhbmdlRW1pdCgnY2xpY2snLCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jbGlja1Jvd0NsYXNzTmFtZShlbDogSFRNTEVsZW1lbnQsIGl0ZW06IFNURGF0YSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGNyID0gdGhpcy5jbGlja1Jvd0NsYXNzTmFtZTtcbiAgICBpZiAoY3IgPT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGV4Y2x1c2l2ZTogZmFsc2UsXG4gICAgICAuLi4odHlwZW9mIGNyID09PSAnc3RyaW5nJyA/IHsgZm46ICgpID0+IGNyIH0gOiBjcilcbiAgICB9IGFzIFNUQ2xpY2tSb3dDbGFzc05hbWVUeXBlO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGNvbmZpZy5mbihpdGVtLCBpbmRleCk7XG4gICAgY29uc3QgdHJFbCA9IGVsLmNsb3Nlc3QoJ3RyJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKGNvbmZpZy5leGNsdXNpdmUpIHtcbiAgICAgIHRyRWwucGFyZW50RWxlbWVudCEhLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykuZm9yRWFjaCgoYTogSFRNTEVsZW1lbnQpID0+IGEuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpKTtcbiAgICB9XG4gICAgaWYgKHRyRWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcbiAgICAgIHRyRWwuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ckVsLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cblxuICBfZXhwYW5kQ2hhbmdlKGl0ZW06IFNURGF0YSwgZXhwYW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgaXRlbS5leHBhbmQgPSBleHBhbmQ7XG4gICAgdGhpcy5jbG9zZU90aGVyRXhwYW5kKGl0ZW0pO1xuICAgIHRoaXMuY2hhbmdlRW1pdCgnZXhwYW5kJywgaXRlbSk7XG4gIH1cblxuICBfc3RvcFByb3BhZ2F0aW9uKGV2OiBFdmVudCk6IHZvaWQge1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHJvdyBpbiB0aGUgdGFibGUsIGxpa2UgdGhpczpcbiAgICpcbiAgICogYGBgXG4gICAqIHRoaXMuc3QucmVtb3ZlUm93KDApXG4gICAqIHRoaXMuc3QucmVtb3ZlUm93KHN0RGF0YUl0ZW0pXG4gICAqIGBgYFxuICAgKi9cbiAgcmVtb3ZlUm93KGRhdGE6IFNURGF0YSB8IFNURGF0YVtdIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5fZGF0YS5zcGxpY2UoZGF0YSwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgfVxuXG4gICAgICAoZGF0YSBhcyBTVERhdGFbXSlcbiAgICAgICAgLm1hcChpdGVtID0+IHRoaXMuX2RhdGEuaW5kZXhPZihpdGVtKSlcbiAgICAgICAgLmZpbHRlcihwb3MgPT4gcG9zICE9PSAtMSlcbiAgICAgICAgLmZvckVhY2gocG9zID0+IHRoaXMuX2RhdGEuc3BsaWNlKHBvcywgMSkpO1xuICAgIH1cbiAgICAvLyByZWNhbGN1bGF0ZSBub1xuICAgIHRoaXMuX2NvbHVtbnNcbiAgICAgIC5maWx0ZXIodyA9PiB3LnR5cGUgPT09ICdubycpXG4gICAgICAuZm9yRWFjaChjID0+XG4gICAgICAgIHRoaXMuX2RhdGEuZm9yRWFjaCgoaSwgaWR4KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IGAke3RoaXMuZGF0YVNvdXJjZS5nZXROb0luZGV4KGksIGMsIGlkeCl9YDtcbiAgICAgICAgICBpLl92YWx1ZXMhW2MuX19wb2ludCFdID0geyB0ZXh0LCBfdGV4dDogdGV4dCwgb3JnOiBpZHgsIHNhZmVUeXBlOiAndGV4dCcgfSBhcyBfU1REYXRhVmFsdWU7XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuY2QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByb3cgdmFsdWUgZm9yIHRoZSBgaW5kZXhgIGluIHRoZSB0YWJsZSwgbGlrZSB0aGlzOlxuICAgKlxuICAgKiAtIGBvcHRpbm9zLnJlZnJlc2hTY2hlbWFgIFdoZXRoZXIgdG8gcmVmcmVzaCBvZiBzdCBzY2hlbWFzXG4gICAqIC0gYG9wdGlub3MuZW1pdFJlbG9hZGAgV2hldGhlciB0byB0cmlnZ2VyIGEgcmVsb2FkIGh0dHAgcmVxdWVzdCB3aGVuIGRhdGEgaXMgdXJsXG4gICAqXG4gICAqIGBgYFxuICAgKiB0aGlzLnN0LnNldFJvdygwLCB7IHByaWNlOiAxMDAgfSlcbiAgICogdGhpcy5zdC5zZXRSb3coMCwgeyBwcmljZTogMTAwLCBuYW1lOiAnYXNkZicgfSlcbiAgICogdGhpcy5zdC5zZXRSb3coaXRlbSwgeyBwcmljZTogMTAwIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgc2V0Um93KGluZGV4OiBudW1iZXIgfCBTVERhdGEsIGl0ZW06IFNURGF0YSwgb3B0aW9ucz86IHsgcmVmcmVzaFNjaGVtYT86IGJvb2xlYW47IGVtaXRSZWxvYWQ/OiBib29sZWFuIH0pOiB0aGlzIHtcbiAgICBvcHRpb25zID0geyByZWZyZXNoU2NoZW1hOiBmYWxzZSwgZW1pdFJlbG9hZDogZmFsc2UsIC4uLm9wdGlvbnMgfTtcbiAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgaW5kZXggPSB0aGlzLl9kYXRhLmluZGV4T2YoaW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhW2luZGV4XSA9IGRlZXBNZXJnZUtleSh0aGlzLl9kYXRhW2luZGV4XSwgZmFsc2UsIGl0ZW0pO1xuICAgIHRoaXMub3B0aW1pemVEYXRhKCk7XG4gICAgaWYgKG9wdGlvbnMucmVmcmVzaFNjaGVtYSkge1xuICAgICAgdGhpcy5yZXNldENvbHVtbnMoeyBlbWl0UmVsb2FkOiBvcHRpb25zLmVtaXRSZWxvYWQgfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gc29ydFxuXG4gIHNvcnQoY29sOiBfU1RDb2x1bW4sIGlkeDogbnVtYmVyLCB2YWx1ZTogTnpTYWZlQW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlTb3J0KSB7XG4gICAgICBjb2wuX3NvcnQuZGVmYXVsdCA9IHZhbHVlO1xuICAgICAgY29sLl9zb3J0LnRpY2sgPSB0aGlzLmRhdGFTb3VyY2UubmV4dFNvcnRUaWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jb2x1bW5zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiAoaXRlbS5fc29ydC5kZWZhdWx0ID0gaW5kZXggPT09IGlkeCA/IHZhbHVlIDogbnVsbCkpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5sb2FkUGFnZURhdGEoKTtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICB2YWx1ZSxcbiAgICAgIG1hcDogdGhpcy5kYXRhU291cmNlLmdldFJlcVNvcnRNYXAodGhpcy5zaW5nbGVTb3J0LCB0aGlzLm11bHRpU29ydCwgdGhpcy5fY29sdW1ucyksXG4gICAgICBjb2x1bW46IGNvbFxuICAgIH07XG4gICAgdGhpcy5jaGFuZ2VFbWl0KCdzb3J0JywgcmVzKTtcbiAgfVxuXG4gIGNsZWFyU29ydCgpOiB0aGlzIHtcbiAgICB0aGlzLl9jb2x1bW5zLmZvckVhY2goaXRlbSA9PiAoaXRlbS5fc29ydC5kZWZhdWx0ID0gbnVsbCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gZmlsdGVyXG5cbiAgX2hhbmRsZUZpbHRlcihjb2w6IF9TVENvbHVtbiwgY29uZmlybTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghY29uZmlybSkge1xuICAgICAgdGhpcy5jb2x1bW5Tb3VyY2UuY2xlYW5GaWx0ZXIoY29sKTtcbiAgICB9XG4gICAgLy8g6L+H5ruk6KGo56S65LiA56eN5pWw5o2u55qE5Y+Y5YyW5bqU6YeN572u6aG156CB5Li6IGAxYFxuICAgIHRoaXMucGkgPSAxO1xuICAgIHRoaXMuY29sdW1uU291cmNlLnVwZGF0ZURlZmF1bHQoY29sLmZpbHRlciEpO1xuICAgIHRoaXMubG9hZFBhZ2VEYXRhKCk7XG4gICAgdGhpcy5jaGFuZ2VFbWl0KCdmaWx0ZXInLCBjb2wpO1xuICB9XG5cbiAgaGFuZGxlRmlsdGVyTm90aWZ5KHZhbHVlPzogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlRW1pdCgnZmlsdGVyQ2hhbmdlJywgdmFsdWUpO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXIoKTogdGhpcyB7XG4gICAgdGhpcy5fY29sdW1ucy5maWx0ZXIodyA9PiB3LmZpbHRlciAmJiB3LmZpbHRlci5kZWZhdWx0ID09PSB0cnVlKS5mb3JFYWNoKGNvbCA9PiB0aGlzLmNvbHVtblNvdXJjZS5jbGVhbkZpbHRlcihjb2wpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBjaGVja2JveFxuXG4gIC8qKiDmuIXpmaTmiYDmnIkgYGNoZWNrYm94YCAqL1xuICBjbGVhckNoZWNrKCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLl9jaGVja0FsbChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIF9yZWZDaGVjaygpOiB0aGlzIHtcbiAgICBjb25zdCB2YWxpZERhdGEgPSB0aGlzLl9kYXRhLmZpbHRlcih3ID0+ICF3LmRpc2FibGVkKTtcbiAgICBjb25zdCBjaGVja2VkTGlzdCA9IHZhbGlkRGF0YS5maWx0ZXIodyA9PiB3LmNoZWNrZWQgPT09IHRydWUpO1xuICAgIHRoaXMuX2FsbENoZWNrZWQgPSBjaGVja2VkTGlzdC5sZW5ndGggPiAwICYmIGNoZWNrZWRMaXN0Lmxlbmd0aCA9PT0gdmFsaWREYXRhLmxlbmd0aDtcbiAgICBjb25zdCBhbGxVbkNoZWNrZWQgPSB2YWxpZERhdGEuZXZlcnkodmFsdWUgPT4gIXZhbHVlLmNoZWNrZWQpO1xuICAgIHRoaXMuX2luZGV0ZXJtaW5hdGUgPSAhdGhpcy5fYWxsQ2hlY2tlZCAmJiAhYWxsVW5DaGVja2VkO1xuICAgIHRoaXMuX2FsbENoZWNrZWREaXNhYmxlZCA9IHRoaXMuX2RhdGEubGVuZ3RoID09PSB0aGlzLl9kYXRhLmZpbHRlcih3ID0+IHcuZGlzYWJsZWQpLmxlbmd0aDtcbiAgICByZXR1cm4gdGhpcy5jZCgpO1xuICB9XG5cbiAgX2NoZWNrQWxsKGNoZWNrZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgY2hlY2tlZCA9IHR5cGVvZiBjaGVja2VkID09PSAndW5kZWZpbmVkJyA/IHRoaXMuX2FsbENoZWNrZWQgOiBjaGVja2VkO1xuICAgIHRoaXMuX2RhdGEuZmlsdGVyKHcgPT4gIXcuZGlzYWJsZWQpLmZvckVhY2goaSA9PiAoaS5jaGVja2VkID0gY2hlY2tlZCkpO1xuICAgIHJldHVybiB0aGlzLl9yZWZDaGVjaygpLl9jaGVja05vdGlmeSgpO1xuICB9XG5cbiAgX3Jvd1NlbGVjdGlvbihyb3c6IFNUQ29sdW1uU2VsZWN0aW9uKTogdGhpcyB7XG4gICAgcm93LnNlbGVjdCh0aGlzLl9kYXRhKTtcbiAgICByZXR1cm4gdGhpcy5fcmVmQ2hlY2soKS5fY2hlY2tOb3RpZnkoKTtcbiAgfVxuXG4gIF9jaGVja05vdGlmeSgpOiB0aGlzIHtcbiAgICBjb25zdCByZXMgPSB0aGlzLl9kYXRhLmZpbHRlcih3ID0+ICF3LmRpc2FibGVkICYmIHcuY2hlY2tlZCA9PT0gdHJ1ZSk7XG4gICAgdGhpcy5jaGFuZ2VFbWl0KCdjaGVja2JveCcsIHJlcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiByYWRpb1xuXG4gIC8qKiDmuIXpmaTmiYDmnIkgYHJhZGlvYCAqL1xuICBjbGVhclJhZGlvKCk6IHRoaXMge1xuICAgIHRoaXMuX2RhdGEuZmlsdGVyKHcgPT4gdy5jaGVja2VkKS5mb3JFYWNoKGl0ZW0gPT4gKGl0ZW0uY2hlY2tlZCA9IGZhbHNlKSk7XG4gICAgdGhpcy5jaGFuZ2VFbWl0KCdyYWRpbycsIG51bGwpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIF9oYW5kbGVUZChldjogX1NUVGROb3RpZnkpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2LnR5cGUpIHtcbiAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgdGhpcy5fcmVmQ2hlY2soKS5fY2hlY2tOb3RpZnkoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyYWRpbyc6XG4gICAgICAgIHRoaXMuY2hhbmdlRW1pdCgncmFkaW8nLCBldi5pdGVtKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gI3JlZ2lvbiBleHBvcnRcblxuICAvKipcbiAgICog5a+85Ye65b2T5YmN6aG177yM56Gu5L+d5bey57uP5rOo5YaMIGBYbHN4TW9kdWxlYFxuICAgKlxuICAgKiBAcGFyYW0gbmV3RGF0YSDph43mlrDmjIflrprmlbDmja7vvJvoi6XkuLogYHRydWVgIOihqOekuuS9v+eUqCBgZmlsdGVyZWREYXRhYCDmlbDmja5cbiAgICogQHBhcmFtIG9wdCDpop3lpJblj4LmlbBcbiAgICovXG4gIGV4cG9ydChuZXdEYXRhPzogU1REYXRhW10gfCB0cnVlLCBvcHQ/OiBTVEV4cG9ydE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gQXJyYXkuaXNBcnJheShuZXdEYXRhKVxuICAgICAgPyB0aGlzLmRhdGFTb3VyY2Uub3B0aW1pemVEYXRhKHsgY29sdW1uczogdGhpcy5fY29sdW1ucywgcmVzdWx0OiBuZXdEYXRhIH0pXG4gICAgICA6IHRoaXMuX2RhdGE7XG4gICAgKG5ld0RhdGEgPT09IHRydWUgPyBmcm9tKHRoaXMuZmlsdGVyZWREYXRhKSA6IG9mKGRhdGEpKS5zdWJzY3JpYmUoKHJlczogU1REYXRhW10pID0+XG4gICAgICB0aGlzLmV4cG9ydFNydi5leHBvcnQoe1xuICAgICAgICBjb2x1bWVuczogdGhpcy5fY29sdW1ucyxcbiAgICAgICAgLi4ub3B0LFxuICAgICAgICBkYXRhOiByZXNcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHJlc2l6YWJsZVxuXG4gIGNvbFJlc2l6ZSh7IHdpZHRoIH06IE56UmVzaXplRXZlbnQsIGNvbHVtbjogX1NUQ29sdW1uKTogdm9pZCB7XG4gICAgY29sdW1uLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIHRoaXMuY2hhbmdlRW1pdCgncmVzaXplJywgY29sdW1uKTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIGNvbnRleHRtZW51XG4gIG9uQ29udGV4dG1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dG1lbnUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjb2xFbCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ1tkYXRhLWNvbC1pbmRleF0nKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIWNvbEVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbEluZGV4ID0gTnVtYmVyKGNvbEVsLmRhdGFzZXQuY29sSW5kZXgpO1xuICAgIGNvbnN0IHJvd0luZGV4ID0gTnVtYmVyKChjb2xFbC5jbG9zZXN0KCd0cicpIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0LmluZGV4KTtcbiAgICBjb25zdCBpc1RpdGxlID0gaXNOYU4ocm93SW5kZXgpO1xuICAgIGNvbnN0IG9icyQgPSB0aGlzLmNvbnRleHRtZW51KHtcbiAgICAgIGV2ZW50LFxuICAgICAgdHlwZTogaXNUaXRsZSA/ICdoZWFkJyA6ICdib2R5JyxcbiAgICAgIHJvd0luZGV4OiBpc1RpdGxlID8gbnVsbCA6IHJvd0luZGV4LFxuICAgICAgY29sSW5kZXgsXG4gICAgICBkYXRhOiBpc1RpdGxlID8gbnVsbCA6IHRoaXMubGlzdFtyb3dJbmRleF0sXG4gICAgICBjb2x1bW46IHRoaXMuX2NvbHVtbnNbY29sSW5kZXhdXG4gICAgfSk7XG4gICAgKGlzT2JzZXJ2YWJsZShvYnMkKSA/IG9icyQgOiBvZihvYnMkKSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgIGZpbHRlcihyZXMgPT4gcmVzLmxlbmd0aCA+IDApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuY29udGV4dG1lbnVMaXN0ID0gcmVzLm1hcChpID0+IHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaS5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGkuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuY21zLmNyZWF0ZShldmVudCwgdGhpcy5jb250ZXh0bWVudVRwbCk7XG4gICAgICB9KTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgZ2V0IGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCgpOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQge1xuICAgIHJldHVybiB0aGlzLm9yZ1RhYmxlLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCE7XG4gIH1cblxuICByZXNldENvbHVtbnMob3B0aW9ucz86IFNUUmVzZXRDb2x1bW5zT3B0aW9uKTogUHJvbWlzZTx0aGlzPiB7XG4gICAgb3B0aW9ucyA9IHsgZW1pdFJlbG9hZDogdHJ1ZSwgcHJlQ2xlYXJEYXRhOiBmYWxzZSwgLi4ub3B0aW9ucyB9O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb2x1bW5zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5jb2x1bW5zID0gb3B0aW9ucy5jb2x1bW5zO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnBpID0gb3B0aW9ucy5waTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnBzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5wcyA9IG9wdGlvbnMucHM7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVtaXRSZWxvYWQpIHtcbiAgICAgIC8vIFNob3VsZCBjbGVhbiBkYXRhLCBCZWNhdXNlIG9mIGNoYW5naW5nIGNvbHVtbnMgbWF5IGNhdXNlIGluYWNjdXJhdGUgZGF0YVxuICAgICAgb3B0aW9ucy5wcmVDbGVhckRhdGEgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wcmVDbGVhckRhdGEpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoQ29sdW1ucygpO1xuICAgIGlmIChvcHRpb25zLmVtaXRSZWxvYWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRQYWdlRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNkKCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaENvbHVtbnMoKTogdGhpcyB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5jb2x1bW5Tb3VyY2UucHJvY2Vzcyh0aGlzLmNvbHVtbnMgYXMgX1NUQ29sdW1uW10sIHtcbiAgICAgIHdpZHRoTW9kZTogdGhpcy53aWR0aE1vZGUsXG4gICAgICByZXNpemFibGU6IHRoaXMuX3Jlc2l6YWJsZSxcbiAgICAgIHNhZmVUeXBlOiB0aGlzLmNvZy5zYWZlVHlwZSBhcyBTVENvbHVtblNhZmVUeXBlXG4gICAgfSk7XG4gICAgdGhpcy5fY29sdW1ucyA9IHJlcy5jb2x1bW5zO1xuICAgIHRoaXMuX2hlYWRlcnMgPSByZXMuaGVhZGVycztcbiAgICBpZiAodGhpcy5jdXN0b21XaWR0aENvbmZpZyA9PT0gZmFsc2UgJiYgcmVzLmhlYWRlcldpZHRocyAhPSBudWxsKSB7XG4gICAgICB0aGlzLl93aWR0aENvbmZpZyA9IHJlcy5oZWFkZXJXaWR0aHM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBvcHRpbWl6ZURhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5vcHRpbWl6ZURhdGEoe1xuICAgICAgY29sdW1uczogdGhpcy5fY29sdW1ucyxcbiAgICAgIHJlc3VsdDogdGhpcy5fZGF0YSxcbiAgICAgIHJvd0NsYXNzTmFtZTogdGhpcy5yb3dDbGFzc05hbWVcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gcHVyZSBkYXRhLCBgc3RgIGludGVybmFsbHkgbWFpbnRhaW5zIGEgc2V0IG9mIGRhdGEgZm9yIGNhY2hpbmcsIHRoaXMgcGFydCBvZiBkYXRhIG1heSBhZmZlY3QgdGhlIGJhY2tlbmRcbiAgICpcbiAgICog6L+U5Zue57qv5YeA5pWw5o2u77yMYHN0YCDlhoXpg6jkvJrnu7TmiqTkuIDnu4TnlKjkuo7nvJPlrZjnmoTmlbDmja7vvIzov5npg6jliIbmlbDmja7lj6/og73kvJrlvbHlk43lkI7nq69cbiAgICovXG4gIHB1cmVJdGVtKGl0ZW1PckluZGV4OiBTVERhdGEgfCBudW1iZXIpOiBTVERhdGEgfCBudWxsIHtcbiAgICBpZiAodHlwZW9mIGl0ZW1PckluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgaXRlbU9ySW5kZXggPSB0aGlzLl9kYXRhW2l0ZW1PckluZGV4XTtcbiAgICB9XG4gICAgaWYgKCFpdGVtT3JJbmRleCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvcHlJdGVtID0gZGVlcENvcHkoaXRlbU9ySW5kZXgpO1xuICAgIGRlbGV0ZSBjb3B5SXRlbS5fdmFsdWVzO1xuICAgIHJldHVybiBjb3B5SXRlbTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtblNvdXJjZS5yZXN0b3JlQWxsUmVuZGVyKHRoaXMuX2NvbHVtbnMpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbUCBpbiBrZXlvZiB0aGlzXT86IFNpbXBsZUNoYW5nZSB9ICYgU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmNvbHVtbnMpIHtcbiAgICAgIHRoaXMucmVmcmVzaENvbHVtbnMoKS5vcHRpbWl6ZURhdGEoKTtcbiAgICB9XG4gICAgY29uc3QgY2hhbmdlRGF0YSA9IGNoYW5nZXMuZGF0YTtcbiAgICBpZiAoY2hhbmdlRGF0YSAmJiBjaGFuZ2VEYXRhLmN1cnJlbnRWYWx1ZSAmJiAhKHRoaXMucmVxLmxhenlMb2FkICYmIGNoYW5nZURhdGEuZmlyc3RDaGFuZ2UpKSB7XG4gICAgICB0aGlzLmxvYWRQYWdlRGF0YSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLl9sb2FkaW5nID0gY2hhbmdlcy5sb2FkaW5nLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==