ngx-tethys 17.0.0 → 17.0.2

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 (384) hide show
  1. package/CHANGELOG.md +26 -7
  2. package/action/action.component.d.ts +3 -0
  3. package/affix/affix.component.d.ts +2 -0
  4. package/alert/alert.component.d.ts +1 -0
  5. package/anchor/anchor.component.d.ts +3 -0
  6. package/arrow-switcher/arrow-switcher.component.d.ts +1 -0
  7. package/autocomplete/autocomplete.component.d.ts +2 -3
  8. package/autocomplete/autocomplete.trigger.directive.d.ts +3 -0
  9. package/avatar/avatar.component.d.ts +4 -0
  10. package/back-top/back-top.component.d.ts +1 -0
  11. package/badge/badge.component.d.ts +5 -0
  12. package/button/button-icon.component.d.ts +2 -0
  13. package/button/button.component.d.ts +2 -0
  14. package/card/card.component.d.ts +3 -0
  15. package/card/content.component.d.ts +2 -1
  16. package/carousel/carousel.component.d.ts +5 -0
  17. package/cascader/cascader-li.component.d.ts +9 -2
  18. package/cascader/cascader-search-option.component.d.ts +7 -2
  19. package/cascader/cascader.component.d.ts +23 -2
  20. package/cascader/styles/cascader.scss +1 -0
  21. package/cascader/types.d.ts +1 -0
  22. package/checkbox/checkbox.component.d.ts +1 -0
  23. package/collapse/collapse-item.component.d.ts +2 -0
  24. package/collapse/collapse.component.d.ts +1 -0
  25. package/color-picker/color-picker-panel.component.d.ts +1 -0
  26. package/color-picker/color-picker.component.d.ts +7 -1
  27. package/copy/copy.directive.d.ts +1 -0
  28. package/core/behaviors/decorators.d.ts +6 -0
  29. package/date-picker/abstract-picker.component.d.ts +8 -1
  30. package/date-picker/abstract-picker.directive.d.ts +4 -0
  31. package/date-picker/base-picker.component.d.ts +2 -0
  32. package/date-picker/lib/calendar/calendar-footer.component.d.ts +1 -0
  33. package/date-picker/lib/popups/inner-popup.component.d.ts +1 -0
  34. package/date-picker/picker.component.d.ts +1 -0
  35. package/date-range/date-range.component.d.ts +2 -0
  36. package/dialog/body/dialog-body.component.d.ts +2 -1
  37. package/dialog/footer/dialog-footer.component.d.ts +1 -0
  38. package/dialog/header/dialog-header.component.d.ts +1 -0
  39. package/divider/divider.component.d.ts +2 -0
  40. package/drag-drop/drag-handle.directive.d.ts +1 -0
  41. package/drag-drop/drag.directive.d.ts +1 -0
  42. package/drag-drop/drop-container.directive.d.ts +1 -0
  43. package/dropdown/dropdown-menu-item.directive.d.ts +3 -1
  44. package/dropdown/dropdown-menu.component.d.ts +1 -0
  45. package/dropdown/dropdown.directive.d.ts +3 -0
  46. package/empty/empty.component.d.ts +1 -0
  47. package/esm2022/action/action.component.mjs +9 -22
  48. package/esm2022/affix/affix.component.mjs +8 -15
  49. package/esm2022/alert/alert.component.mjs +5 -10
  50. package/esm2022/anchor/anchor.component.mjs +10 -20
  51. package/esm2022/arrow-switcher/arrow-switcher.component.mjs +5 -11
  52. package/esm2022/autocomplete/autocomplete.component.mjs +5 -23
  53. package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +9 -20
  54. package/esm2022/avatar/avatar.component.mjs +14 -30
  55. package/esm2022/back-top/back-top.component.mjs +6 -10
  56. package/esm2022/badge/badge.component.mjs +15 -37
  57. package/esm2022/button/button-icon.component.mjs +9 -20
  58. package/esm2022/button/button.component.mjs +7 -16
  59. package/esm2022/card/card.component.mjs +6 -20
  60. package/esm2022/card/content.component.mjs +5 -6
  61. package/esm2022/carousel/carousel.component.mjs +13 -30
  62. package/esm2022/cascader/cascader-li.component.mjs +16 -31
  63. package/esm2022/cascader/cascader-search-option.component.mjs +12 -21
  64. package/esm2022/cascader/cascader.component.mjs +32 -52
  65. package/esm2022/cascader/types.mjs +1 -1
  66. package/esm2022/checkbox/checkbox.component.mjs +7 -13
  67. package/esm2022/collapse/collapse-item.component.mjs +8 -15
  68. package/esm2022/collapse/collapse.component.mjs +5 -10
  69. package/esm2022/color-picker/color-picker-panel.component.mjs +5 -10
  70. package/esm2022/color-picker/color-picker.component.mjs +17 -37
  71. package/esm2022/copy/copy.directive.mjs +5 -10
  72. package/esm2022/core/behaviors/decorators.mjs +7 -44
  73. package/esm2022/date-picker/abstract-picker.component.mjs +21 -45
  74. package/esm2022/date-picker/abstract-picker.directive.mjs +11 -27
  75. package/esm2022/date-picker/base-picker.component.mjs +8 -15
  76. package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +5 -10
  77. package/esm2022/date-picker/lib/popups/date-popup.component.mjs +4 -2
  78. package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +7 -6
  79. package/esm2022/date-picker/picker.component.mjs +6 -10
  80. package/esm2022/date-range/date-range.component.mjs +7 -15
  81. package/esm2022/dialog/body/dialog-body.component.mjs +6 -6
  82. package/esm2022/dialog/footer/dialog-footer.component.mjs +6 -13
  83. package/esm2022/dialog/header/dialog-header.component.mjs +6 -10
  84. package/esm2022/divider/divider.component.mjs +7 -15
  85. package/esm2022/drag-drop/drag-handle.directive.mjs +5 -13
  86. package/esm2022/drag-drop/drag.directive.mjs +5 -11
  87. package/esm2022/drag-drop/drop-container.directive.mjs +5 -10
  88. package/esm2022/dropdown/dropdown-menu-item.directive.mjs +9 -19
  89. package/esm2022/dropdown/dropdown-menu.component.mjs +6 -9
  90. package/esm2022/dropdown/dropdown.directive.mjs +8 -22
  91. package/esm2022/empty/empty.component.mjs +7 -13
  92. package/esm2022/flexible-text/flexible-text.component.mjs +4 -11
  93. package/esm2022/form/form-group-error/form-group-error.component.mjs +5 -10
  94. package/esm2022/form/form-group-label.directive.mjs +6 -6
  95. package/esm2022/form/form-group.component.mjs +13 -17
  96. package/esm2022/icon/icon.component.mjs +6 -20
  97. package/esm2022/image/image.directive.mjs +7 -15
  98. package/esm2022/input/input-search.component.mjs +6 -11
  99. package/esm2022/input/input.component.mjs +7 -15
  100. package/esm2022/input-number/input-number.component.mjs +12 -25
  101. package/esm2022/layout/header.component.mjs +9 -19
  102. package/esm2022/layout/sidebar-header.component.mjs +5 -10
  103. package/esm2022/layout/sidebar.component.mjs +22 -45
  104. package/esm2022/list/list.component.mjs +5 -11
  105. package/esm2022/list/selection/selection-list.mjs +13 -10
  106. package/esm2022/loading/loading.component.mjs +9 -20
  107. package/esm2022/menu/group/menu-group.component.mjs +12 -38
  108. package/esm2022/menu/item/action/menu-item-action.component.mjs +5 -10
  109. package/esm2022/menu/item/name/menu-item-name.component.mjs +5 -10
  110. package/esm2022/menu/menu.component.mjs +5 -10
  111. package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +6 -6
  112. package/esm2022/nav/nav-ink-bar.directive.mjs +7 -15
  113. package/esm2022/nav/nav-item.directive.mjs +10 -20
  114. package/esm2022/nav/nav.component.mjs +12 -25
  115. package/esm2022/pagination/pagination.component.mjs +18 -68
  116. package/esm2022/popover/popover.directive.mjs +12 -33
  117. package/esm2022/progress/progress-circle.component.mjs +9 -20
  118. package/esm2022/progress/progress-strip.component.mjs +5 -11
  119. package/esm2022/progress/progress.component.mjs +11 -23
  120. package/esm2022/property/properties.component.mjs +5 -10
  121. package/esm2022/property/property-item.component.mjs +8 -15
  122. package/esm2022/property-operation/property-operation.component.mjs +16 -37
  123. package/esm2022/radio/group/radio-group.component.mjs +6 -21
  124. package/esm2022/rate/rate-item.component.mjs +5 -10
  125. package/esm2022/rate/rate.component.mjs +16 -25
  126. package/esm2022/resizable/resizable.directive.mjs +24 -62
  127. package/esm2022/resizable/resize-handle.component.mjs +6 -10
  128. package/esm2022/resizable/resize-handles.component.mjs +5 -10
  129. package/esm2022/segment/segment-item.component.mjs +5 -10
  130. package/esm2022/segment/segment.component.mjs +7 -16
  131. package/esm2022/select/custom-select/custom-select.component.mjs +30 -65
  132. package/esm2022/select/native-select/native-select.component.mjs +6 -10
  133. package/esm2022/shared/base-form-check.component.mjs +10 -20
  134. package/esm2022/shared/directives/thy-autofocus.directive.mjs +10 -15
  135. package/esm2022/shared/directives/thy-scroll.directive.mjs +6 -13
  136. package/esm2022/shared/directives/thy-show.mjs +5 -11
  137. package/esm2022/shared/option/group/option-group.component.mjs +5 -10
  138. package/esm2022/shared/option/list-option/list-option.component.mjs +6 -13
  139. package/esm2022/shared/option/option.component.mjs +5 -11
  140. package/esm2022/shared/select/select-control/select-control.component.mjs +17 -44
  141. package/esm2022/skeleton/skeleton-circle.component.mjs +6 -9
  142. package/esm2022/skeleton/skeleton-rectangle.component.mjs +6 -9
  143. package/esm2022/skeleton/skeleton.component.mjs +5 -10
  144. package/esm2022/skeleton/stylized/bullet-list.component.mjs +6 -9
  145. package/esm2022/skeleton/stylized/list.component.mjs +6 -9
  146. package/esm2022/skeleton/stylized/paragraph.component.mjs +6 -9
  147. package/esm2022/slide/slide-body/slide-body-section.component.mjs +6 -6
  148. package/esm2022/slider/slider.component.mjs +18 -35
  149. package/esm2022/space/space.component.mjs +6 -10
  150. package/esm2022/stepper/step-header.component.mjs +9 -20
  151. package/esm2022/stepper/stepper.component.mjs +7 -16
  152. package/esm2022/switch/switch.component.mjs +12 -17
  153. package/esm2022/table/table-column.component.mjs +9 -31
  154. package/esm2022/table/table-skeleton.component.mjs +8 -14
  155. package/esm2022/table/table.component.mjs +32 -83
  156. package/esm2022/tabs/tab.component.mjs +5 -10
  157. package/esm2022/tabs/tabs.component.mjs +8 -15
  158. package/esm2022/tag/tag.component.mjs +6 -10
  159. package/esm2022/time-picker/time-picker-panel.component.mjs +8 -15
  160. package/esm2022/time-picker/time-picker.component.mjs +20 -46
  161. package/esm2022/timeline/timeline.component.mjs +5 -10
  162. package/esm2022/tooltip/tooltip.directive.mjs +11 -34
  163. package/esm2022/tree/tree-node.component.mjs +17 -40
  164. package/esm2022/tree/tree.component.mjs +19 -47
  165. package/esm2022/tree-select/tree-select.component.mjs +18 -40
  166. package/esm2022/upload/file-select-base.mjs +7 -6
  167. package/esm2022/upload/file-select.component.mjs +11 -26
  168. package/esm2022/version.mjs +2 -2
  169. package/esm2022/vote/vote.component.mjs +11 -33
  170. package/esm2022/watermark/watermark.directive.mjs +6 -10
  171. package/fesm2022/ngx-tethys-action.mjs +9 -21
  172. package/fesm2022/ngx-tethys-action.mjs.map +1 -1
  173. package/fesm2022/ngx-tethys-affix.mjs +6 -14
  174. package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
  175. package/fesm2022/ngx-tethys-alert.mjs +4 -9
  176. package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
  177. package/fesm2022/ngx-tethys-anchor.mjs +8 -19
  178. package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
  179. package/fesm2022/ngx-tethys-arrow-switcher.mjs +4 -10
  180. package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
  181. package/fesm2022/ngx-tethys-autocomplete.mjs +14 -39
  182. package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
  183. package/fesm2022/ngx-tethys-avatar.mjs +14 -29
  184. package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
  185. package/fesm2022/ngx-tethys-back-top.mjs +5 -9
  186. package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
  187. package/fesm2022/ngx-tethys-badge.mjs +14 -36
  188. package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
  189. package/fesm2022/ngx-tethys-button.mjs +13 -30
  190. package/fesm2022/ngx-tethys-button.mjs.map +1 -1
  191. package/fesm2022/ngx-tethys-card.mjs +8 -23
  192. package/fesm2022/ngx-tethys-card.mjs.map +1 -1
  193. package/fesm2022/ngx-tethys-carousel.mjs +12 -29
  194. package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
  195. package/fesm2022/ngx-tethys-cascader.mjs +55 -95
  196. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  197. package/fesm2022/ngx-tethys-checkbox.mjs +5 -12
  198. package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
  199. package/fesm2022/ngx-tethys-collapse.mjs +10 -20
  200. package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
  201. package/fesm2022/ngx-tethys-color-picker.mjs +19 -42
  202. package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
  203. package/fesm2022/ngx-tethys-copy.mjs +4 -9
  204. package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
  205. package/fesm2022/ngx-tethys-core.mjs +6 -43
  206. package/fesm2022/ngx-tethys-core.mjs.map +1 -1
  207. package/fesm2022/ngx-tethys-date-picker.mjs +48 -94
  208. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  209. package/fesm2022/ngx-tethys-date-range.mjs +6 -14
  210. package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
  211. package/fesm2022/ngx-tethys-dialog.mjs +13 -21
  212. package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
  213. package/fesm2022/ngx-tethys-divider.mjs +6 -14
  214. package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
  215. package/fesm2022/ngx-tethys-drag-drop.mjs +10 -25
  216. package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
  217. package/fesm2022/ngx-tethys-dropdown.mjs +19 -42
  218. package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
  219. package/fesm2022/ngx-tethys-empty.mjs +5 -12
  220. package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
  221. package/fesm2022/ngx-tethys-flexible-text.mjs +3 -10
  222. package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
  223. package/fesm2022/ngx-tethys-form.mjs +19 -25
  224. package/fesm2022/ngx-tethys-form.mjs.map +1 -1
  225. package/fesm2022/ngx-tethys-icon.mjs +5 -19
  226. package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
  227. package/fesm2022/ngx-tethys-image.mjs +7 -14
  228. package/fesm2022/ngx-tethys-image.mjs.map +1 -1
  229. package/fesm2022/ngx-tethys-input-number.mjs +11 -24
  230. package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
  231. package/fesm2022/ngx-tethys-input.mjs +10 -21
  232. package/fesm2022/ngx-tethys-input.mjs.map +1 -1
  233. package/fesm2022/ngx-tethys-layout.mjs +31 -64
  234. package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
  235. package/fesm2022/ngx-tethys-list.mjs +16 -18
  236. package/fesm2022/ngx-tethys-list.mjs.map +1 -1
  237. package/fesm2022/ngx-tethys-loading.mjs +8 -19
  238. package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
  239. package/fesm2022/ngx-tethys-menu.mjs +20 -55
  240. package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
  241. package/fesm2022/ngx-tethys-nav.mjs +28 -55
  242. package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
  243. package/fesm2022/ngx-tethys-pagination.mjs +17 -67
  244. package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
  245. package/fesm2022/ngx-tethys-popover.mjs +11 -32
  246. package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
  247. package/fesm2022/ngx-tethys-progress.mjs +20 -45
  248. package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
  249. package/fesm2022/ngx-tethys-property-operation.mjs +14 -36
  250. package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
  251. package/fesm2022/ngx-tethys-property.mjs +10 -21
  252. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  253. package/fesm2022/ngx-tethys-radio.mjs +5 -19
  254. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  255. package/fesm2022/ngx-tethys-rate.mjs +18 -30
  256. package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
  257. package/fesm2022/ngx-tethys-resizable.mjs +29 -73
  258. package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
  259. package/fesm2022/ngx-tethys-segment.mjs +10 -21
  260. package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
  261. package/fesm2022/ngx-tethys-select.mjs +32 -70
  262. package/fesm2022/ngx-tethys-select.mjs.map +1 -1
  263. package/fesm2022/ngx-tethys-shared.mjs +49 -105
  264. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  265. package/fesm2022/ngx-tethys-skeleton.mjs +20 -38
  266. package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
  267. package/fesm2022/ngx-tethys-slide.mjs +6 -5
  268. package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
  269. package/fesm2022/ngx-tethys-slider.mjs +17 -34
  270. package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
  271. package/fesm2022/ngx-tethys-space.mjs +5 -9
  272. package/fesm2022/ngx-tethys-space.mjs.map +1 -1
  273. package/fesm2022/ngx-tethys-stepper.mjs +13 -31
  274. package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
  275. package/fesm2022/ngx-tethys-switch.mjs +11 -16
  276. package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
  277. package/fesm2022/ngx-tethys-table.mjs +43 -120
  278. package/fesm2022/ngx-tethys-table.mjs.map +1 -1
  279. package/fesm2022/ngx-tethys-tabs.mjs +10 -20
  280. package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
  281. package/fesm2022/ngx-tethys-tag.mjs +5 -9
  282. package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
  283. package/fesm2022/ngx-tethys-time-picker.mjs +24 -55
  284. package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
  285. package/fesm2022/ngx-tethys-timeline.mjs +4 -9
  286. package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
  287. package/fesm2022/ngx-tethys-tooltip.mjs +10 -33
  288. package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
  289. package/fesm2022/ngx-tethys-tree-select.mjs +17 -39
  290. package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
  291. package/fesm2022/ngx-tethys-tree.mjs +33 -82
  292. package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
  293. package/fesm2022/ngx-tethys-upload.mjs +15 -28
  294. package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
  295. package/fesm2022/ngx-tethys-vote.mjs +10 -32
  296. package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
  297. package/fesm2022/ngx-tethys-watermark.mjs +5 -9
  298. package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
  299. package/fesm2022/ngx-tethys.mjs +1 -1
  300. package/fesm2022/ngx-tethys.mjs.map +1 -1
  301. package/flexible-text/flexible-text.component.d.ts +1 -0
  302. package/form/form-group-error/form-group-error.component.d.ts +1 -0
  303. package/form/form-group-label.directive.d.ts +2 -1
  304. package/form/form-group.component.d.ts +5 -2
  305. package/icon/icon.component.d.ts +3 -0
  306. package/image/image.directive.d.ts +2 -0
  307. package/input/input-search.component.d.ts +1 -0
  308. package/input/input.component.d.ts +2 -0
  309. package/input-number/input-number.component.d.ts +4 -0
  310. package/layout/header.component.d.ts +5 -2
  311. package/layout/sidebar-header.component.d.ts +1 -0
  312. package/layout/sidebar.component.d.ts +14 -4
  313. package/list/list.component.d.ts +1 -0
  314. package/list/selection/selection-list.d.ts +4 -1
  315. package/loading/loading.component.d.ts +4 -2
  316. package/menu/group/menu-group.component.d.ts +6 -0
  317. package/menu/item/action/menu-item-action.component.d.ts +1 -0
  318. package/menu/item/name/menu-item-name.component.d.ts +1 -0
  319. package/menu/menu.component.d.ts +1 -0
  320. package/nav/icon-nav/icon-nav-link.directive.d.ts +2 -1
  321. package/nav/nav-ink-bar.directive.d.ts +2 -0
  322. package/nav/nav-item.directive.d.ts +3 -0
  323. package/nav/nav.component.d.ts +4 -0
  324. package/package.json +7 -7
  325. package/pagination/pagination.component.d.ts +11 -0
  326. package/popover/popover.directive.d.ts +5 -0
  327. package/progress/progress-circle.component.d.ts +3 -0
  328. package/progress/progress-strip.component.d.ts +1 -0
  329. package/progress/progress.component.d.ts +3 -0
  330. package/property/properties.component.d.ts +1 -0
  331. package/property/property-item.component.d.ts +2 -0
  332. package/property-operation/property-operation.component.d.ts +5 -0
  333. package/radio/group/radio-group.component.d.ts +2 -2
  334. package/rate/rate-item.component.d.ts +1 -0
  335. package/rate/rate.component.d.ts +5 -1
  336. package/resizable/resizable.directive.d.ts +10 -1
  337. package/resizable/resize-handle.component.d.ts +1 -0
  338. package/resizable/resize-handles.component.d.ts +1 -0
  339. package/resizable/styles/resizable.scss +1 -0
  340. package/schematics/dependencies.js +1 -1
  341. package/schematics/version.d.ts +1 -1
  342. package/schematics/version.js +1 -1
  343. package/segment/segment-item.component.d.ts +1 -0
  344. package/segment/segment.component.d.ts +2 -0
  345. package/select/custom-select/custom-select.component.d.ts +12 -1
  346. package/select/native-select/native-select.component.d.ts +1 -0
  347. package/shared/base-form-check.component.d.ts +2 -0
  348. package/shared/directives/thy-autofocus.directive.d.ts +3 -1
  349. package/shared/directives/thy-scroll.directive.d.ts +1 -0
  350. package/shared/directives/thy-show.d.ts +1 -0
  351. package/shared/option/group/option-group.component.d.ts +1 -0
  352. package/shared/option/list-option/list-option.component.d.ts +1 -0
  353. package/shared/option/option.component.d.ts +1 -0
  354. package/shared/option/styles/select-dropdown.scss +1 -0
  355. package/shared/select/select-control/select-control.component.d.ts +7 -0
  356. package/skeleton/skeleton-circle.component.d.ts +1 -0
  357. package/skeleton/skeleton-rectangle.component.d.ts +1 -0
  358. package/skeleton/skeleton.component.d.ts +1 -0
  359. package/skeleton/stylized/bullet-list.component.d.ts +1 -0
  360. package/skeleton/stylized/list.component.d.ts +1 -0
  361. package/skeleton/stylized/paragraph.component.d.ts +1 -0
  362. package/slide/slide-body/slide-body-section.component.d.ts +2 -1
  363. package/slider/slider.component.d.ts +6 -1
  364. package/space/space.component.d.ts +1 -0
  365. package/stepper/step-header.component.d.ts +3 -0
  366. package/stepper/stepper.component.d.ts +2 -0
  367. package/switch/switch.component.d.ts +3 -1
  368. package/table/table-column.component.d.ts +7 -2
  369. package/table/table-skeleton.component.d.ts +2 -0
  370. package/table/table.component.d.ts +14 -0
  371. package/tabs/tab.component.d.ts +1 -0
  372. package/tabs/tabs.component.d.ts +2 -0
  373. package/tag/tag.component.d.ts +1 -0
  374. package/time-picker/time-picker-panel.component.d.ts +2 -0
  375. package/time-picker/time-picker.component.d.ts +6 -2
  376. package/timeline/timeline.component.d.ts +1 -0
  377. package/tooltip/tooltip.directive.d.ts +5 -0
  378. package/tree/tree-node.component.d.ts +7 -0
  379. package/tree/tree.component.d.ts +8 -0
  380. package/tree-select/tree-select.component.d.ts +7 -0
  381. package/upload/file-select-base.d.ts +1 -0
  382. package/upload/file-select.component.d.ts +3 -0
  383. package/vote/vote.component.d.ts +4 -2
  384. package/watermark/watermark.directive.d.ts +1 -0
@@ -1,12 +1,10 @@
1
- import { __decorate, __metadata } from "tslib";
2
1
  import { Subject } from 'rxjs';
3
2
  import { normalizePassiveListenerOptions } from '@angular/cdk/platform';
4
- import { Component, ContentChild, ElementRef, EventEmitter, HostBinding, Inject, Input, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';
3
+ import { Component, ContentChild, ElementRef, EventEmitter, HostBinding, Inject, Input, Output, TemplateRef, ViewChild, ViewEncapsulation, booleanAttribute, numberAttribute } from '@angular/core';
5
4
  import { THY_TREE_ABSTRACT_TOKEN } from './tree-abstract';
6
5
  import { ThyTreeNode } from './tree-node.class';
7
6
  import { ThyTreeNodeCheckState } from './tree.class';
8
7
  import { ThyTreeService } from './tree.service';
9
- import { InputBoolean, InputNumber } from 'ngx-tethys/core';
10
8
  import { ThyLoading } from 'ngx-tethys/loading';
11
9
  import { ThyIcon } from 'ngx-tethys/icon';
12
10
  import { NgIf, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';
@@ -156,36 +154,8 @@ export class ThyTreeNodeComponent {
156
154
  this.destroy$.complete();
157
155
  }
158
156
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyTreeNodeComponent, deps: [{ token: THY_TREE_ABSTRACT_TOKEN }, { token: i1.ThyTreeService }], target: i0.ɵɵFactoryTarget.Component }); }
159
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: ThyTreeNodeComponent, isStandalone: true, selector: "thy-tree-node", inputs: { node: "node", thyAsync: "thyAsync", thyMultiple: "thyMultiple", thyDraggable: "thyDraggable", thyCheckable: "thyCheckable", thyClickBehavior: "thyClickBehavior", thyTitleTruncate: "thyTitleTruncate", templateRef: "templateRef", emptyChildrenTemplateRef: "emptyChildrenTemplateRef", thyItemSize: "thyItemSize", thyIndent: "thyIndent" }, outputs: { thyOnClick: "thyOnClick", thyDblClick: "thyDblClick", thyOnExpandChange: "thyOnExpandChange", thyOnCheckboxChange: "thyOnCheckboxChange" }, host: { properties: { "class.thy-tree-node": "this.thyTreeNodeClass", "class": "this.itemClass" } }, queries: [{ propertyName: "childrenTreeTemplateRef", first: true, predicate: ["childrenTree"], descendants: true }], viewQueries: [{ propertyName: "treeNodeWrapper", first: true, predicate: ["treeNodeWrapper"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #treeNodeWrapper\n class=\"thy-tree-node-wrapper\"\n [class.active]=\"root.isSelected(node)\"\n [class.disabled]=\"node.isDisabled\"\n [class.expand]=\"node.children.length\"\n [style.height]=\"thyItemSize + 'px'\"\n (click)=\"clickNode($event)\"\n>\n <span class=\"thy-tree-index\" [style.width.px]=\"node.level * thyIndent\"></span>\n <span class=\"thy-tree-drag-icon\">\n <thy-icon thyIconName=\"drag\"></thy-icon>\n </span>\n <span class=\"thy-tree-expand\" (click)=\"expandNode($event)\">\n <ng-container *ngIf=\"isShowExpand(node)\">\n <ng-container *ngIf=\"(node.children && node.children.length > 0) || thyAsync || emptyChildrenTemplateRef\">\n <thy-icon\n *ngIf=\"root.thyIcons?.expand && root.thyIcons?.collapse; else defaultIcon\"\n class=\"thy-tree-expand-icon\"\n [thyIconName]=\"node.isExpanded ? root.thyIcons.expand : root.thyIcons.collapse\"\n ></thy-icon>\n <ng-template #defaultIcon>\n <thy-icon class=\"thy-tree-expand-icon\" [class.collapse]=\"!node.isExpanded\" thyIconName=\"caret-right-down\"></thy-icon>\n </ng-template>\n </ng-container>\n </ng-container>\n </span>\n\n <span class=\"thy-tree-node-content\" (dblclick)=\"dbClickNode($event)\">\n <input\n *ngIf=\"thyCheckable\"\n type=\"checkbox\"\n class=\"thy-tree-node-check\"\n [class.form-check-indeterminate]=\"node.isChecked === checkState.indeterminate\"\n [class.form-unchecked]=\"node.isChecked === checkState.unchecked\"\n [checked]=\"node.isChecked === checkState.checked\"\n [disabled]=\"node.isDisabled\"\n (click)=\"clickNodeCheck($event)\"\n />\n <ng-container *ngIf=\"!templateRef\">\n <ng-container *ngIf=\"nodeIcon\">\n <span class=\"thy-tree-node-icon\"> <i [ngClass]=\"nodeIcon\" [ngStyle]=\"nodeIconStyle\"></i></span>\n </ng-container>\n <span [title]=\"node.title\" class=\"thy-tree-node-title\" [class.truncate]=\"thyTitleTruncate\"> {{ node.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"templateRef\">\n <ng-template\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node, node: node, origin: node?.origin }\"\n ></ng-template>\n </ng-container>\n </span>\n</div>\n<ng-container *ngIf=\"thyAsync\">\n <thy-loading *ngIf=\"node.isLoading\" [thyDone]=\"!node.isLoading\"></thy-loading>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
157
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.3", type: ThyTreeNodeComponent, isStandalone: true, selector: "thy-tree-node", inputs: { node: "node", thyAsync: ["thyAsync", "thyAsync", booleanAttribute], thyMultiple: ["thyMultiple", "thyMultiple", booleanAttribute], thyDraggable: ["thyDraggable", "thyDraggable", booleanAttribute], thyCheckable: ["thyCheckable", "thyCheckable", booleanAttribute], thyClickBehavior: "thyClickBehavior", thyTitleTruncate: ["thyTitleTruncate", "thyTitleTruncate", booleanAttribute], templateRef: "templateRef", emptyChildrenTemplateRef: "emptyChildrenTemplateRef", thyItemSize: ["thyItemSize", "thyItemSize", numberAttribute], thyIndent: ["thyIndent", "thyIndent", numberAttribute] }, outputs: { thyOnClick: "thyOnClick", thyDblClick: "thyDblClick", thyOnExpandChange: "thyOnExpandChange", thyOnCheckboxChange: "thyOnCheckboxChange" }, host: { properties: { "class.thy-tree-node": "this.thyTreeNodeClass", "class": "this.itemClass" } }, queries: [{ propertyName: "childrenTreeTemplateRef", first: true, predicate: ["childrenTree"], descendants: true }], viewQueries: [{ propertyName: "treeNodeWrapper", first: true, predicate: ["treeNodeWrapper"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #treeNodeWrapper\n class=\"thy-tree-node-wrapper\"\n [class.active]=\"root.isSelected(node)\"\n [class.disabled]=\"node.isDisabled\"\n [class.expand]=\"node.children.length\"\n [style.height]=\"thyItemSize + 'px'\"\n (click)=\"clickNode($event)\"\n>\n <span class=\"thy-tree-index\" [style.width.px]=\"node.level * thyIndent\"></span>\n <span class=\"thy-tree-drag-icon\">\n <thy-icon thyIconName=\"drag\"></thy-icon>\n </span>\n <span class=\"thy-tree-expand\" (click)=\"expandNode($event)\">\n <ng-container *ngIf=\"isShowExpand(node)\">\n <ng-container *ngIf=\"(node.children && node.children.length > 0) || thyAsync || emptyChildrenTemplateRef\">\n <thy-icon\n *ngIf=\"root.thyIcons?.expand && root.thyIcons?.collapse; else defaultIcon\"\n class=\"thy-tree-expand-icon\"\n [thyIconName]=\"node.isExpanded ? root.thyIcons.expand : root.thyIcons.collapse\"\n ></thy-icon>\n <ng-template #defaultIcon>\n <thy-icon class=\"thy-tree-expand-icon\" [class.collapse]=\"!node.isExpanded\" thyIconName=\"caret-right-down\"></thy-icon>\n </ng-template>\n </ng-container>\n </ng-container>\n </span>\n\n <span class=\"thy-tree-node-content\" (dblclick)=\"dbClickNode($event)\">\n <input\n *ngIf=\"thyCheckable\"\n type=\"checkbox\"\n class=\"thy-tree-node-check\"\n [class.form-check-indeterminate]=\"node.isChecked === checkState.indeterminate\"\n [class.form-unchecked]=\"node.isChecked === checkState.unchecked\"\n [checked]=\"node.isChecked === checkState.checked\"\n [disabled]=\"node.isDisabled\"\n (click)=\"clickNodeCheck($event)\"\n />\n <ng-container *ngIf=\"!templateRef\">\n <ng-container *ngIf=\"nodeIcon\">\n <span class=\"thy-tree-node-icon\"> <i [ngClass]=\"nodeIcon\" [ngStyle]=\"nodeIconStyle\"></i></span>\n </ng-container>\n <span [title]=\"node.title\" class=\"thy-tree-node-title\" [class.truncate]=\"thyTitleTruncate\"> {{ node.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"templateRef\">\n <ng-template\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node, node: node, origin: node?.origin }\"\n ></ng-template>\n </ng-container>\n </span>\n</div>\n<ng-container *ngIf=\"thyAsync\">\n <thy-loading *ngIf=\"node.isLoading\" [thyDone]=\"!node.isLoading\"></thy-loading>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
160
158
  }
161
- __decorate([
162
- InputBoolean(),
163
- __metadata("design:type", Object)
164
- ], ThyTreeNodeComponent.prototype, "thyAsync", void 0);
165
- __decorate([
166
- InputBoolean(),
167
- __metadata("design:type", Object)
168
- ], ThyTreeNodeComponent.prototype, "thyMultiple", void 0);
169
- __decorate([
170
- InputBoolean(),
171
- __metadata("design:type", Object)
172
- ], ThyTreeNodeComponent.prototype, "thyDraggable", void 0);
173
- __decorate([
174
- InputBoolean(),
175
- __metadata("design:type", Object)
176
- ], ThyTreeNodeComponent.prototype, "thyCheckable", void 0);
177
- __decorate([
178
- InputBoolean(),
179
- __metadata("design:type", Boolean)
180
- ], ThyTreeNodeComponent.prototype, "thyTitleTruncate", void 0);
181
- __decorate([
182
- InputNumber(),
183
- __metadata("design:type", Object)
184
- ], ThyTreeNodeComponent.prototype, "thyItemSize", void 0);
185
- __decorate([
186
- InputNumber(),
187
- __metadata("design:type", Object)
188
- ], ThyTreeNodeComponent.prototype, "thyIndent", void 0);
189
159
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyTreeNodeComponent, decorators: [{
190
160
  type: Component,
191
161
  args: [{ selector: 'thy-tree-node', encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf, ThyIcon, NgClass, NgStyle, NgTemplateOutlet, ThyLoading], template: "<div\n #treeNodeWrapper\n class=\"thy-tree-node-wrapper\"\n [class.active]=\"root.isSelected(node)\"\n [class.disabled]=\"node.isDisabled\"\n [class.expand]=\"node.children.length\"\n [style.height]=\"thyItemSize + 'px'\"\n (click)=\"clickNode($event)\"\n>\n <span class=\"thy-tree-index\" [style.width.px]=\"node.level * thyIndent\"></span>\n <span class=\"thy-tree-drag-icon\">\n <thy-icon thyIconName=\"drag\"></thy-icon>\n </span>\n <span class=\"thy-tree-expand\" (click)=\"expandNode($event)\">\n <ng-container *ngIf=\"isShowExpand(node)\">\n <ng-container *ngIf=\"(node.children && node.children.length > 0) || thyAsync || emptyChildrenTemplateRef\">\n <thy-icon\n *ngIf=\"root.thyIcons?.expand && root.thyIcons?.collapse; else defaultIcon\"\n class=\"thy-tree-expand-icon\"\n [thyIconName]=\"node.isExpanded ? root.thyIcons.expand : root.thyIcons.collapse\"\n ></thy-icon>\n <ng-template #defaultIcon>\n <thy-icon class=\"thy-tree-expand-icon\" [class.collapse]=\"!node.isExpanded\" thyIconName=\"caret-right-down\"></thy-icon>\n </ng-template>\n </ng-container>\n </ng-container>\n </span>\n\n <span class=\"thy-tree-node-content\" (dblclick)=\"dbClickNode($event)\">\n <input\n *ngIf=\"thyCheckable\"\n type=\"checkbox\"\n class=\"thy-tree-node-check\"\n [class.form-check-indeterminate]=\"node.isChecked === checkState.indeterminate\"\n [class.form-unchecked]=\"node.isChecked === checkState.unchecked\"\n [checked]=\"node.isChecked === checkState.checked\"\n [disabled]=\"node.isDisabled\"\n (click)=\"clickNodeCheck($event)\"\n />\n <ng-container *ngIf=\"!templateRef\">\n <ng-container *ngIf=\"nodeIcon\">\n <span class=\"thy-tree-node-icon\"> <i [ngClass]=\"nodeIcon\" [ngStyle]=\"nodeIconStyle\"></i></span>\n </ng-container>\n <span [title]=\"node.title\" class=\"thy-tree-node-title\" [class.truncate]=\"thyTitleTruncate\"> {{ node.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"templateRef\">\n <ng-template\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node, node: node, origin: node?.origin }\"\n ></ng-template>\n </ng-container>\n </span>\n</div>\n<ng-container *ngIf=\"thyAsync\">\n <thy-loading *ngIf=\"node.isLoading\" [thyDone]=\"!node.isLoading\"></thy-loading>\n</ng-container>\n" }]
@@ -195,17 +165,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
195
165
  }] }, { type: i1.ThyTreeService }], propDecorators: { node: [{
196
166
  type: Input
197
167
  }], thyAsync: [{
198
- type: Input
168
+ type: Input,
169
+ args: [{ transform: booleanAttribute }]
199
170
  }], thyMultiple: [{
200
- type: Input
171
+ type: Input,
172
+ args: [{ transform: booleanAttribute }]
201
173
  }], thyDraggable: [{
202
- type: Input
174
+ type: Input,
175
+ args: [{ transform: booleanAttribute }]
203
176
  }], thyCheckable: [{
204
- type: Input
177
+ type: Input,
178
+ args: [{ transform: booleanAttribute }]
205
179
  }], thyClickBehavior: [{
206
180
  type: Input
207
181
  }], thyTitleTruncate: [{
208
- type: Input
182
+ type: Input,
183
+ args: [{ transform: booleanAttribute }]
209
184
  }], templateRef: [{
210
185
  type: Input
211
186
  }], emptyChildrenTemplateRef: [{
@@ -231,8 +206,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
231
206
  type: HostBinding,
232
207
  args: ['class']
233
208
  }], thyItemSize: [{
234
- type: Input
209
+ type: Input,
210
+ args: [{ transform: numberAttribute }]
235
211
  }], thyIndent: [{
236
- type: Input
212
+ type: Input,
213
+ args: [{ transform: numberAttribute }]
237
214
  }] } });
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmVlL3RyZWUtbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvdHJlZS90cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEUsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFLTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLHVCQUF1QixFQUE0QixNQUFNLGlCQUFpQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQW9CLHFCQUFxQixFQUFvQixNQUFNLGNBQWMsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFFM0UsTUFBTSwyQkFBMkIsR0FBNEIsK0JBQStCLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUVoSDs7OztHQUlHO0FB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QUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFRIWV9UUkVFX0FCU1RSQUNUX1RPS0VOLCBUaHlUcmVlQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtYWJzdHJhY3QnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGUgfSBmcm9tICcuL3RyZWUtbm9kZS5jbGFzcyc7XG5pbXBvcnQgeyBUaHlUcmVlRW1pdEV2ZW50LCBUaHlUcmVlTm9kZUNoZWNrU3RhdGUsIFRoeUNsaWNrQmVoYXZpb3IgfSBmcm9tICcuL3RyZWUuY2xhc3MnO1xuaW1wb3J0IHsgVGh5VHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4sIElucHV0TnVtYmVyIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IFRoeUxvYWRpbmcgfSBmcm9tICduZ3gtdGV0aHlzL2xvYWRpbmcnO1xuaW1wb3J0IHsgVGh5SWNvbiB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBOZ0lmLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuY29uc3QgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zID0gPEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zPm5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMoeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4vKipcbiAqIOagkeW9ouaOp+S7tueahOiKgueCuee7hOS7tlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHRoeS10cmVlLW5vZGVcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdHJlZS1ub2RlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIFRoeUljb24sIE5nQ2xhc3MsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQsIFRoeUxvYWRpbmddXG59KVxuZXhwb3J0IGNsYXNzIFRoeVRyZWVOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqXG4gICAgICogbm9kZSDoioLngrnlsZXnjrDmiYDpnIDnmoTmlbDmja5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBub2RlOiBUaHlUcmVlTm9kZTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIHlvILmraXliqDovb1cbiAgICAgKi9cbiAgICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdGh5QXN5bmMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIHlpJrpgInoioLngrlcbiAgICAgKi9cbiAgICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdGh5TXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIHmi5bmi73mjpLluo9cbiAgICAgKi9cbiAgICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdGh5RHJhZ2dhYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyBIENoZWNrYm94IOmAieaLqVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlDaGVja2FibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOeCueWHu+iKgueCueeahOihjOS4uu+8jGBkZWZhdWx0YCDkuLrpgInkuK3lvZPliY3oioLngrnvvIxgc2VsZWN0Q2hlY2tib3hgIOS4uumAieS4reiKgueCueeahCBDaGVja2JveO+8jCBgdGh5Q2hlY2thYmxlYCDkuLogdHJ1ZSDml7bnlJ/mlYjjgIJcbiAgICAgKiBAZGVmYXVsdCBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q2xpY2tCZWhhdmlvcjogVGh5Q2xpY2tCZWhhdmlvcjtcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruiKgueCueWQjeensOaYr+WQpuaUr+aMgei2heWHuuaIquWPllxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeVRpdGxlVHJ1bmNhdGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg55qE5riy5p+T5qih5p2/XG4gICAgICovXG4gICAgQElucHV0KCkgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lrZDnmoTnqbrmlbDmja7muLLmn5PmqKHmnb9cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gbm9kZSDngrnlh7vkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25DbGljazogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5Y+M5Ye7IG5vZGUg5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeURibENsaWNrOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7vlsZXlvIDop6blj5Hkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25FeHBhbmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBjaGVjayDpgInmi6nkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25DaGVja2JveENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIGNoaWxkcmVuVHJlZSDnmoTmuLLmn5PmqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdjaGlsZHJlblRyZWUnKSBjaGlsZHJlblRyZWVUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBUaGUgbmF0aXZlIGA8ZGl2IGNsYXNzPVwidGh5LXRyZWUtbm9kZS13cmFwcGVyIHRoeS1zb3J0YWJsZS1pdGVtXCI+PC9kaXY+YCBlbGVtZW50LiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RyZWVOb2RlV3JhcHBlcicsIHsgc3RhdGljOiB0cnVlIH0pIHRyZWVOb2RlV3JhcHBlcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10cmVlLW5vZGUnKSB0aHlUcmVlTm9kZUNsYXNzID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBpdGVtQ2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIOW8gOWQr+iZmuaLn+a7muWKqOaXtu+8jOWNleihjOiKgueCueeahOmrmOW6pu+8jOW9k2B0aHlTaXplYOS4umBkZWZhdWx0YOaXtu+8jOivpeWPguaVsOaJjeeUn+aViFxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHRoeUl0ZW1TaXplID0gNDQ7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7oioLngrnnvKnov5vot53nprvvvIznvKnov5vot53nprsgPSB0aHlJbmRlbnQgKiBub2RlLmxldmVsXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgdGh5SW5kZW50ID0gMjU7XG5cbiAgICBwdWJsaWMgZ2V0IG5vZGVJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlLm9yaWdpbi5pY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbm9kZUljb25TdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5vcmlnaW4uaWNvblN0eWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY2hlY2tTdGF0ZSA9IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoVEhZX1RSRUVfQUJTVFJBQ1RfVE9LRU4pIHB1YmxpYyByb290OiBUaHlUcmVlQWJzdHJhY3RDb21wb25lbnQsIHB1YmxpYyB0aHlUcmVlU2VydmljZTogVGh5VHJlZVNlcnZpY2UpIHt9XG5cbiAgICBwdWJsaWMgY2xpY2tOb2RlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5ub2RlLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kTm9kZShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy50aHlDaGVja2FibGUgJiYgdGhpcy50aHlDbGlja0JlaGF2aW9yID09PSAnc2VsZWN0Q2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja05vZGVDaGVjayhldmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvb3QudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb290LnRvZ2dsZVRyZWVOb2RlKHRoaXMubm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb290LnNlbGVjdFRyZWVOb2RlKHRoaXMubm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudGh5T25DbGljay5lbWl0KHtcbiAgICAgICAgICAgIGV2ZW50TmFtZTogJ2NsaWNrJyxcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIG5vZGU6IHRoaXMubm9kZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGJDbGlja05vZGUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMudGh5RGJsQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICBldmVudE5hbWU6ICdkYmNsaWNrJyxcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIG5vZGU6IHRoaXMubm9kZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tOb2RlQ2hlY2soZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5ub2RlLmlzQ2hlY2tlZCA9PT0gVGh5VHJlZU5vZGVDaGVja1N0YXRlLnVuY2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5ub2RlLnNldENoZWNrZWQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ub2RlLmlzQ2hlY2tlZCA9PT0gVGh5VHJlZU5vZGVDaGVja1N0YXRlLmNoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZS5zZXRDaGVja2VkKGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5vZGUuaXNDaGVja2VkID09PSBUaHlUcmVlTm9kZUNoZWNrU3RhdGUuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlQ2hpbGRyZW4gPSB0aGlzLm5vZGUuY2hpbGRyZW4uZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uaXNEaXNhYmxlZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNBbGxBY3RpdmVDaGlsZHJlbkNoZWNrZWQgPSBhY3RpdmVDaGlsZHJlbi5ldmVyeShpdGVtID0+IGl0ZW0uaXNDaGVja2VkKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuc2V0Q2hlY2tlZCghaXNBbGxBY3RpdmVDaGlsZHJlbkNoZWNrZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuc2V0Q2hlY2tlZCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoeU9uQ2hlY2tib3hDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBldmVudE5hbWU6ICdjaGVja2JveENoYW5nZScsXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICBub2RlOiB0aGlzLm5vZGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cGFuZE5vZGUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm5vZGUuc2V0RXhwYW5kZWQoIXRoaXMubm9kZS5pc0V4cGFuZGVkKTtcbiAgICAgICAgaWYgKHRoaXMucm9vdC50aHlTaG93RXhwYW5kKSB7XG4gICAgICAgICAgICB0aGlzLnRoeU9uRXhwYW5kQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIGV2ZW50TmFtZTogJ2V4cGFuZCcsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIG5vZGU6IHRoaXMubm9kZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy50aHlBc3luYyAmJiB0aGlzLm5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNTaG93RXhwYW5kKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3QuaXNTaG93RXhwYW5kKG5vZGUpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1DbGFzcyA9IHRoaXMubm9kZT8uaXRlbUNsYXNzPy5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5ub2RlICYmICFjaGFuZ2VzLm5vZGUuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1DbGFzcyA9IGNoYW5nZXM/Lm5vZGU/LmN1cnJlbnRWYWx1ZS5pdGVtQ2xhc3M/LmpvaW4oJyAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgI3RyZWVOb2RlV3JhcHBlclxuICBjbGFzcz1cInRoeS10cmVlLW5vZGUtd3JhcHBlclwiXG4gIFtjbGFzcy5hY3RpdmVdPVwicm9vdC5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgW2NsYXNzLmRpc2FibGVkXT1cIm5vZGUuaXNEaXNhYmxlZFwiXG4gIFtjbGFzcy5leHBhbmRdPVwibm9kZS5jaGlsZHJlbi5sZW5ndGhcIlxuICBbc3R5bGUuaGVpZ2h0XT1cInRoeUl0ZW1TaXplICsgJ3B4J1wiXG4gIChjbGljayk9XCJjbGlja05vZGUoJGV2ZW50KVwiXG4+XG4gIDxzcGFuIGNsYXNzPVwidGh5LXRyZWUtaW5kZXhcIiBbc3R5bGUud2lkdGgucHhdPVwibm9kZS5sZXZlbCAqIHRoeUluZGVudFwiPjwvc3Bhbj5cbiAgPHNwYW4gIGNsYXNzPVwidGh5LXRyZWUtZHJhZy1pY29uXCI+XG4gICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwiZHJhZ1wiPjwvdGh5LWljb24+XG4gIDwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJ0aHktdHJlZS1leHBhbmRcIiAoY2xpY2spPVwiZXhwYW5kTm9kZSgkZXZlbnQpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2hvd0V4cGFuZChub2RlKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgdGh5QXN5bmMgfHwgZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmXCI+XG4gICAgICAgIDx0aHktaWNvblxuICAgICAgICAgICpuZ0lmPVwicm9vdC50aHlJY29ucz8uZXhwYW5kICYmIHJvb3QudGh5SWNvbnM/LmNvbGxhcHNlOyBlbHNlIGRlZmF1bHRJY29uXCJcbiAgICAgICAgICBjbGFzcz1cInRoeS10cmVlLWV4cGFuZC1pY29uXCJcbiAgICAgICAgICBbdGh5SWNvbk5hbWVdPVwibm9kZS5pc0V4cGFuZGVkID8gcm9vdC50aHlJY29ucy5leHBhbmQgOiByb290LnRoeUljb25zLmNvbGxhcHNlXCJcbiAgICAgICAgPjwvdGh5LWljb24+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEljb24+XG4gICAgICAgICAgPHRoeS1pY29uIGNsYXNzPVwidGh5LXRyZWUtZXhwYW5kLWljb25cIiBbY2xhc3MuY29sbGFwc2VdPVwiIW5vZGUuaXNFeHBhbmRlZFwiIHRoeUljb25OYW1lPVwiY2FyZXQtcmlnaHQtZG93blwiPjwvdGh5LWljb24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9zcGFuPlxuXG4gIDxzcGFuIGNsYXNzPVwidGh5LXRyZWUtbm9kZS1jb250ZW50XCIgKGRibGNsaWNrKT1cImRiQ2xpY2tOb2RlKCRldmVudClcIj5cbiAgICA8aW5wdXRcbiAgICAgICpuZ0lmPVwidGh5Q2hlY2thYmxlXCJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICBjbGFzcz1cInRoeS10cmVlLW5vZGUtY2hlY2tcIlxuICAgICAgW2NsYXNzLmZvcm0tY2hlY2staW5kZXRlcm1pbmF0ZV09XCJub2RlLmlzQ2hlY2tlZCA9PT0gY2hlY2tTdGF0ZS5pbmRldGVybWluYXRlXCJcbiAgICAgIFtjbGFzcy5mb3JtLXVuY2hlY2tlZF09XCJub2RlLmlzQ2hlY2tlZCA9PT0gY2hlY2tTdGF0ZS51bmNoZWNrZWRcIlxuICAgICAgW2NoZWNrZWRdPVwibm9kZS5pc0NoZWNrZWQgPT09IGNoZWNrU3RhdGUuY2hlY2tlZFwiXG4gICAgICBbZGlzYWJsZWRdPVwibm9kZS5pc0Rpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJjbGlja05vZGVDaGVjaygkZXZlbnQpXCJcbiAgICAvPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGVtcGxhdGVSZWZcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlSWNvblwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRoeS10cmVlLW5vZGUtaWNvblwiPiA8aSBbbmdDbGFzc109XCJub2RlSWNvblwiIFtuZ1N0eWxlXT1cIm5vZGVJY29uU3R5bGVcIj48L2k+PC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8c3BhbiBbdGl0bGVdPVwibm9kZS50aXRsZVwiIGNsYXNzPVwidGh5LXRyZWUtbm9kZS10aXRsZVwiIFtjbGFzcy50cnVuY2F0ZV09XCJ0aHlUaXRsZVRydW5jYXRlXCI+IHt7IG5vZGUudGl0bGUgfX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlbXBsYXRlUmVmXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVSZWZcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGUsIG5vZGU6IG5vZGUsIG9yaWdpbjogbm9kZT8ub3JpZ2luIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvc3Bhbj5cbjwvZGl2PlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoeUFzeW5jXCI+XG4gIDx0aHktbG9hZGluZyAqbmdJZj1cIm5vZGUuaXNMb2FkaW5nXCIgW3RoeURvbmVdPVwiIW5vZGUuaXNMb2FkaW5nXCI+PC90aHktbG9hZGluZz5cbjwvbmctY29udGFpbmVyPlxuIl19
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmVlL3RyZWUtbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvdHJlZS90cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUtMLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsdUJBQXVCLEVBQTRCLE1BQU0saUJBQWlCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBb0IscUJBQXFCLEVBQW9CLE1BQU0sY0FBYyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFFM0UsTUFBTSwyQkFBMkIsR0FBNEIsK0JBQStCLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUVoSDs7OztHQUlHO0FBUUgsTUFBTSxPQUFPLG9CQUFvQjtJQTBGN0IsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVELElBQVcsYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBTUQsWUFBb0QsSUFBOEIsRUFBUyxjQUE4QjtRQUFyRSxTQUFJLEdBQUosSUFBSSxDQUEwQjtRQUFTLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWhHekg7O1dBRUc7UUFDcUMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUV6RDs7V0FFRztRQUNxQyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUU1RDs7V0FFRztRQUNxQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUU3RDs7V0FFRztRQUNxQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQXdCN0Q7O1dBRUc7UUFDTyxlQUFVLEdBQW1DLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRTVGOztXQUVHO1FBQ08sZ0JBQVcsR0FBbUMsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFFN0Y7O1dBRUc7UUFDTyxzQkFBaUIsR0FBbUMsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFFbkc7O1dBRUc7UUFDTyx3QkFBbUIsR0FBbUMsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFVakUscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBSTVEOztXQUVHO1FBQ29DLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRXhEOztXQUVHO1FBQ29DLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFVOUMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdkMsZUFBVSxHQUFHLHFCQUFxQixDQUFDO0lBRXlGLENBQUM7SUFFdEgsU0FBUyxDQUFDLEtBQVk7UUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixFQUFFLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNqQixTQUFTLEVBQUUsT0FBTztZQUNsQixLQUFLLEVBQUUsS0FBSztZQUNaLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNsQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQVk7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDbEIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDbEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUFZO1FBQzlCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRSxNQUFNLDBCQUEwQixHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2hGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUN0RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1lBQzFCLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDbEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFZO1FBQzFCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixLQUFLLEVBQUUsS0FBSztnQkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLElBQWlCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7OEdBM0xRLG9CQUFvQixrQkFzR1QsdUJBQXVCO2tHQXRHbEMsb0JBQW9CLDRHQVNULGdCQUFnQiwrQ0FLaEIsZ0JBQWdCLGtEQUtoQixnQkFBZ0Isa0RBS2hCLGdCQUFnQixvR0FZaEIsZ0JBQWdCLGlJQStDaEIsZUFBZSx5Q0FLZixlQUFlLHFpQkN0SXZDLDA1RUF3REEsNENEWmMsSUFBSSw2RkFBRSxPQUFPLHNNQUFFLE9BQU8sb0ZBQUUsT0FBTywyRUFBRSxnQkFBZ0Isb0pBQUUsVUFBVTs7MkZBRTlELG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDSSxlQUFlLGlCQUVWLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsQ0FBQzs7MEJBd0czRCxNQUFNOzJCQUFDLHVCQUF1QjtzRUFsR2xDLElBQUk7c0JBQVosS0FBSztnQkFLa0MsUUFBUTtzQkFBL0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLRSxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUtFLFlBQVk7c0JBQW5ELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS0UsWUFBWTtzQkFBbkQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFNN0IsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU1rQyxnQkFBZ0I7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSzdCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUtJLFVBQVU7c0JBQW5CLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFLRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBS0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUt1Qix1QkFBdUI7c0JBQXBELFlBQVk7dUJBQUMsY0FBYztnQkFHb0IsZUFBZTtzQkFBOUQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRVYsZ0JBQWdCO3NCQUFuRCxXQUFXO3VCQUFDLHFCQUFxQjtnQkFFWixTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU87Z0JBS21CLFdBQVc7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUtFLFNBQVM7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBudW1iZXJBdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFRIWV9UUkVFX0FCU1RSQUNUX1RPS0VOLCBUaHlUcmVlQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtYWJzdHJhY3QnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGUgfSBmcm9tICcuL3RyZWUtbm9kZS5jbGFzcyc7XG5pbXBvcnQgeyBUaHlUcmVlRW1pdEV2ZW50LCBUaHlUcmVlTm9kZUNoZWNrU3RhdGUsIFRoeUNsaWNrQmVoYXZpb3IgfSBmcm9tICcuL3RyZWUuY2xhc3MnO1xuaW1wb3J0IHsgVGh5VHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBUaHlMb2FkaW5nIH0gZnJvbSAnbmd4LXRldGh5cy9sb2FkaW5nJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgTmdJZiwgTmdDbGFzcywgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmNvbnN0IHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucyA9IDxBZGRFdmVudExpc3RlbmVyT3B0aW9ucz5ub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zKHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuLyoqXG4gKiDmoJHlvaLmjqfku7bnmoToioLngrnnu4Tku7ZcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSB0aHktdHJlZS1ub2RlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LXRyZWUtbm9kZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtbm9kZS5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBUaHlJY29uLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0LCBUaHlMb2FkaW5nXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlUcmVlTm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKlxuICAgICAqIG5vZGUg6IqC54K55bGV546w5omA6ZyA55qE5pWw5o2uXG4gICAgICovXG4gICAgQElucHV0KCkgbm9kZTogVGh5VHJlZU5vZGU7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5byC5q2l5Yqg6L29XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHRoeUFzeW5jID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5aSa6YCJ6IqC54K5XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHRoeU11bHRpcGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5ouW5ou95o6S5bqPXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHRoeURyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgSBDaGVja2JveCDpgInmi6lcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5Q2hlY2thYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7voioLngrnnmoTooYzkuLrvvIxgZGVmYXVsdGAg5Li66YCJ5Lit5b2T5YmN6IqC54K577yMYHNlbGVjdENoZWNrYm94YCDkuLrpgInkuK3oioLngrnnmoQgQ2hlY2tib3jvvIwgYHRoeUNoZWNrYWJsZWAg5Li6IHRydWUg5pe255Sf5pWI44CCXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNsaWNrQmVoYXZpb3I6IFRoeUNsaWNrQmVoYXZpb3I7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7oioLngrnlkI3np7DmmK/lkKbmlK/mjIHotoXlh7rmiKrlj5ZcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0aHlUaXRsZVRydW5jYXRlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOeahOa4suafk+aooeadv1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5a2Q55qE56m65pWw5o2u5riy5p+T5qih5p2/XG4gICAgICovXG4gICAgQElucHV0KCkgZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIG5vZGUg54K55Ye75LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOWPjOWHuyBub2RlIOS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlEYmxDbGljazogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog54K55Ye75bGV5byA6Kem5Y+R5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uRXhwYW5kQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gY2hlY2sg6YCJ5oup5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uQ2hlY2tib3hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBjaGlsZHJlblRyZWUg55qE5riy5p+T5qih5p2/XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnY2hpbGRyZW5UcmVlJykgY2hpbGRyZW5UcmVlVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogVGhlIG5hdGl2ZSBgPGRpdiBjbGFzcz1cInRoeS10cmVlLW5vZGUtd3JhcHBlciB0aHktc29ydGFibGUtaXRlbVwiPjwvZGl2PmAgZWxlbWVudC4gKi9cbiAgICBAVmlld0NoaWxkKCd0cmVlTm9kZVdyYXBwZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSB0cmVlTm9kZVdyYXBwZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktdHJlZS1ub2RlJykgdGh5VHJlZU5vZGVDbGFzcyA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgaXRlbUNsYXNzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDlvIDlkK/omZrmi5/mu5rliqjml7bvvIzljZXooYzoioLngrnnmoTpq5jluqbvvIzlvZNgdGh5U2l6ZWDkuLpgZGVmYXVsdGDml7bvvIzor6Xlj4LmlbDmiY3nlJ/mlYhcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0aHlJdGVtU2l6ZSA9IDQ0O1xuXG4gICAgLyoqXG4gICAgICog6K6+572u6IqC54K557yp6L+b6Led56a777yM57yp6L+b6Led56a7ID0gdGh5SW5kZW50ICogbm9kZS5sZXZlbFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRoeUluZGVudCA9IDI1O1xuXG4gICAgcHVibGljIGdldCBub2RlSWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5vcmlnaW4uaWNvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5vZGVJY29uU3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGUub3JpZ2luLmljb25TdHlsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNoZWNrU3RhdGUgPSBUaHlUcmVlTm9kZUNoZWNrU3RhdGU7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KFRIWV9UUkVFX0FCU1RSQUNUX1RPS0VOKSBwdWJsaWMgcm9vdDogVGh5VHJlZUFic3RyYWN0Q29tcG9uZW50LCBwdWJsaWMgdGh5VHJlZVNlcnZpY2U6IFRoeVRyZWVTZXJ2aWNlKSB7fVxuXG4gICAgcHVibGljIGNsaWNrTm9kZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZE5vZGUoZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudGh5Q2hlY2thYmxlICYmIHRoaXMudGh5Q2xpY2tCZWhhdmlvciA9PT0gJ3NlbGVjdENoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tOb2RlQ2hlY2soZXZlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb290LnRoeU11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdC50b2dnbGVUcmVlTm9kZSh0aGlzLm5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdC5zZWxlY3RUcmVlTm9kZSh0aGlzLm5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoeU9uQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICBldmVudE5hbWU6ICdjbGljaycsXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICBub2RlOiB0aGlzLm5vZGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRiQ2xpY2tOb2RlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICB0aGlzLnRoeURibENsaWNrLmVtaXQoe1xuICAgICAgICAgICAgZXZlbnROYW1lOiAnZGJjbGljaycsXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICBub2RlOiB0aGlzLm5vZGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrTm9kZUNoZWNrKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMubm9kZS5pc0NoZWNrZWQgPT09IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS51bmNoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZS5zZXRDaGVja2VkKHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubm9kZS5pc0NoZWNrZWQgPT09IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS5jaGVja2VkKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGUuc2V0Q2hlY2tlZChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ub2RlLmlzQ2hlY2tlZCA9PT0gVGh5VHJlZU5vZGVDaGVja1N0YXRlLmluZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUNoaWxkcmVuID0gdGhpcy5ub2RlLmNoaWxkcmVuLmZpbHRlcihpdGVtID0+ICFpdGVtLmlzRGlzYWJsZWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQWxsQWN0aXZlQ2hpbGRyZW5DaGVja2VkID0gYWN0aXZlQ2hpbGRyZW4uZXZlcnkoaXRlbSA9PiBpdGVtLmlzQ2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLnNldENoZWNrZWQoIWlzQWxsQWN0aXZlQ2hpbGRyZW5DaGVja2VkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLnNldENoZWNrZWQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aHlPbkNoZWNrYm94Q2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgZXZlbnROYW1lOiAnY2hlY2tib3hDaGFuZ2UnLFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgbm9kZTogdGhpcy5ub2RlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBhbmROb2RlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5ub2RlLnNldEV4cGFuZGVkKCF0aGlzLm5vZGUuaXNFeHBhbmRlZCk7XG4gICAgICAgIGlmICh0aGlzLnJvb3QudGh5U2hvd0V4cGFuZCkge1xuICAgICAgICAgICAgdGhpcy50aHlPbkV4cGFuZENoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6ICdleHBhbmQnLFxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICBub2RlOiB0aGlzLm5vZGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMudGh5QXN5bmMgJiYgdGhpcy5ub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzU2hvd0V4cGFuZChub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290LmlzU2hvd0V4cGFuZChub2RlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xhc3MgPSB0aGlzLm5vZGU/Lml0ZW1DbGFzcz8uam9pbignICcpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMubm9kZSAmJiAhY2hhbmdlcy5ub2RlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5pdGVtQ2xhc3MgPSBjaGFuZ2VzPy5ub2RlPy5jdXJyZW50VmFsdWUuaXRlbUNsYXNzPy5qb2luKCcgJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICN0cmVlTm9kZVdyYXBwZXJcbiAgY2xhc3M9XCJ0aHktdHJlZS1ub2RlLXdyYXBwZXJcIlxuICBbY2xhc3MuYWN0aXZlXT1cInJvb3QuaXNTZWxlY3RlZChub2RlKVwiXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJub2RlLmlzRGlzYWJsZWRcIlxuICBbY2xhc3MuZXhwYW5kXT1cIm5vZGUuY2hpbGRyZW4ubGVuZ3RoXCJcbiAgW3N0eWxlLmhlaWdodF09XCJ0aHlJdGVtU2l6ZSArICdweCdcIlxuICAoY2xpY2spPVwiY2xpY2tOb2RlKCRldmVudClcIlxuPlxuICA8c3BhbiBjbGFzcz1cInRoeS10cmVlLWluZGV4XCIgW3N0eWxlLndpZHRoLnB4XT1cIm5vZGUubGV2ZWwgKiB0aHlJbmRlbnRcIj48L3NwYW4+XG4gIDxzcGFuICBjbGFzcz1cInRoeS10cmVlLWRyYWctaWNvblwiPlxuICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImRyYWdcIj48L3RoeS1pY29uPlxuICA8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwidGh5LXRyZWUtZXhwYW5kXCIgKGNsaWNrKT1cImV4cGFuZE5vZGUoJGV2ZW50KVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Nob3dFeHBhbmQobm9kZSlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHx8IHRoeUFzeW5jIHx8IGVtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZlwiPlxuICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAqbmdJZj1cInJvb3QudGh5SWNvbnM/LmV4cGFuZCAmJiByb290LnRoeUljb25zPy5jb2xsYXBzZTsgZWxzZSBkZWZhdWx0SWNvblwiXG4gICAgICAgICAgY2xhc3M9XCJ0aHktdHJlZS1leHBhbmQtaWNvblwiXG4gICAgICAgICAgW3RoeUljb25OYW1lXT1cIm5vZGUuaXNFeHBhbmRlZCA/IHJvb3QudGh5SWNvbnMuZXhwYW5kIDogcm9vdC50aHlJY29ucy5jb2xsYXBzZVwiXG4gICAgICAgID48L3RoeS1pY29uPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRJY29uPlxuICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRoeS10cmVlLWV4cGFuZC1pY29uXCIgW2NsYXNzLmNvbGxhcHNlXT1cIiFub2RlLmlzRXhwYW5kZWRcIiB0aHlJY29uTmFtZT1cImNhcmV0LXJpZ2h0LWRvd25cIj48L3RoeS1pY29uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvc3Bhbj5cblxuICA8c3BhbiBjbGFzcz1cInRoeS10cmVlLW5vZGUtY29udGVudFwiIChkYmxjbGljayk9XCJkYkNsaWNrTm9kZSgkZXZlbnQpXCI+XG4gICAgPGlucHV0XG4gICAgICAqbmdJZj1cInRoeUNoZWNrYWJsZVwiXG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgY2xhc3M9XCJ0aHktdHJlZS1ub2RlLWNoZWNrXCJcbiAgICAgIFtjbGFzcy5mb3JtLWNoZWNrLWluZGV0ZXJtaW5hdGVdPVwibm9kZS5pc0NoZWNrZWQgPT09IGNoZWNrU3RhdGUuaW5kZXRlcm1pbmF0ZVwiXG4gICAgICBbY2xhc3MuZm9ybS11bmNoZWNrZWRdPVwibm9kZS5pc0NoZWNrZWQgPT09IGNoZWNrU3RhdGUudW5jaGVja2VkXCJcbiAgICAgIFtjaGVja2VkXT1cIm5vZGUuaXNDaGVja2VkID09PSBjaGVja1N0YXRlLmNoZWNrZWRcIlxuICAgICAgW2Rpc2FibGVkXT1cIm5vZGUuaXNEaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwiY2xpY2tOb2RlQ2hlY2soJGV2ZW50KVwiXG4gICAgLz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRlbXBsYXRlUmVmXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZUljb25cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aHktdHJlZS1ub2RlLWljb25cIj4gPGkgW25nQ2xhc3NdPVwibm9kZUljb25cIiBbbmdTdHlsZV09XCJub2RlSWNvblN0eWxlXCI+PC9pPjwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHNwYW4gW3RpdGxlXT1cIm5vZGUudGl0bGVcIiBjbGFzcz1cInRoeS10cmVlLW5vZGUtdGl0bGVcIiBbY2xhc3MudHJ1bmNhdGVdPVwidGh5VGl0bGVUcnVuY2F0ZVwiPiB7eyBub2RlLnRpdGxlIH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZVJlZlwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlUmVmXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBub2RlLCBub2RlOiBub2RlLCBvcmlnaW46IG5vZGU/Lm9yaWdpbiB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3NwYW4+XG48L2Rpdj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0aHlBc3luY1wiPlxuICA8dGh5LWxvYWRpbmcgKm5nSWY9XCJub2RlLmlzTG9hZGluZ1wiIFt0aHlEb25lXT1cIiFub2RlLmlzTG9hZGluZ1wiPjwvdGh5LWxvYWRpbmc+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==