@seniorsistemas/angular-components 19.0.5 → 19.0.6

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 (439) hide show
  1. package/accordion/lib/accordion/accordion.component.d.ts +25 -0
  2. package/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.d.ts +60 -0
  3. package/alert/lib/alert/alert.component.d.ts +40 -0
  4. package/autocomplete/lib/autocomplete/autocomplete.component.d.ts +51 -0
  5. package/badge/lib/badge/badge.component.d.ts +20 -0
  6. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +46 -1
  7. package/breadcrumb/lib/breadcrumb/breadcrumb.component.d.ts +12 -0
  8. package/button/lib/button/button.component.d.ts +101 -0
  9. package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +24 -0
  10. package/card/lib/card/card.component.d.ts +18 -0
  11. package/chat/lib/chat/chat.component.d.ts +20 -2
  12. package/chat/lib/chat/components/chat-message/chat-message.component.d.ts +18 -2
  13. package/checkbox/lib/checkbox/checkbox.component.d.ts +23 -3
  14. package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +20 -0
  15. package/chips/lib/chips/chip-item/chip-item.component.d.ts +15 -0
  16. package/chips/lib/chips/chips/chips.component.d.ts +41 -0
  17. package/code-editor/lib/code-editor/code-editor.component.d.ts +40 -0
  18. package/collapse-link/lib/collapse-link/collapse-link.component.d.ts +18 -0
  19. package/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.d.ts +5 -0
  20. package/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.d.ts +19 -0
  21. package/content-generator/lib/content-generator/content-generator.component.d.ts +30 -0
  22. package/control-errors/lib/control-errors/control-errors.component.d.ts +36 -0
  23. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +36 -0
  24. package/currency/lib/currency.service.d.ts +15 -2
  25. package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +31 -0
  26. package/dialog/lib/src/dialog/dialog.component.d.ts +51 -0
  27. package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -2
  28. package/dialog/lib/src/dialog/services/internal-dialog.service.d.ts +1 -1
  29. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +6 -5
  30. package/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.d.ts +5 -0
  31. package/dynamic-form/dynamic-form/configurations/structure/fieldset.d.ts +14 -0
  32. package/dynamic-form/dynamic-form/configurations/structure/row.d.ts +67 -0
  33. package/dynamic-form/dynamic-form/configurations/structure/section.d.ts +8 -0
  34. package/dynamic-form/dynamic-form/configurations/structure/structure.d.ts +19 -0
  35. package/dynamic-form/dynamic-form/dynamic-form.component.d.ts +21 -1
  36. package/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +45 -0
  37. package/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +59 -0
  38. package/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.d.ts +55 -0
  39. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +35 -0
  40. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +17 -0
  41. package/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.d.ts +23 -0
  42. package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +66 -0
  43. package/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +15 -0
  44. package/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.d.ts +30 -0
  45. package/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.d.ts +47 -2
  46. package/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.d.ts +26 -0
  47. package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +18 -1
  48. package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +44 -0
  49. package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +112 -4
  50. package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +42 -3
  51. package/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.d.ts +48 -0
  52. package/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +62 -0
  53. package/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.d.ts +34 -0
  54. package/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.d.ts +63 -0
  55. package/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.d.ts +47 -1
  56. package/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +23 -0
  57. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +37 -1
  58. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +65 -2
  59. package/dynamic-form/public-api.d.ts +1 -0
  60. package/editable-overlay/lib/editable-overlay/editable-overlay.directive.d.ts +16 -0
  61. package/empty-state/lib/empty-state/empty-state.component.d.ts +59 -0
  62. package/esm2022/accordion/lib/accordion/accordion.component.mjs +26 -1
  63. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +61 -1
  64. package/esm2022/alert/lib/alert/alert.component.mjs +41 -1
  65. package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +52 -1
  66. package/esm2022/badge/lib/badge/badge.component.mjs +21 -1
  67. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +47 -2
  68. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +13 -1
  69. package/esm2022/button/lib/button/button.component.mjs +102 -1
  70. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +72 -47
  71. package/esm2022/card/lib/card/card.component.mjs +21 -6
  72. package/esm2022/chat/lib/chat/chat.component.mjs +23 -5
  73. package/esm2022/chat/lib/chat/components/chat-message/chat-message.component.mjs +20 -4
  74. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +24 -4
  75. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +22 -2
  76. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +17 -2
  77. package/esm2022/chips/lib/chips/chips/chips.component.mjs +42 -1
  78. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +41 -1
  79. package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +19 -1
  80. package/esm2022/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.mjs +6 -1
  81. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +20 -1
  82. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +31 -1
  83. package/esm2022/control-errors/lib/control-errors/control-errors.component.mjs +37 -1
  84. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +37 -1
  85. package/esm2022/currency/lib/currency.service.mjs +21 -8
  86. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +32 -1
  87. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +66 -11
  88. package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -10
  89. package/esm2022/dialog/lib/src/dialog/services/internal-dialog.service.mjs +3 -3
  90. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +1 -1
  91. package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.mjs +2 -0
  92. package/esm2022/dynamic-form/dynamic-form/configurations/structure/fieldset.mjs +1 -1
  93. package/esm2022/dynamic-form/dynamic-form/configurations/structure/row.mjs +1 -1
  94. package/esm2022/dynamic-form/dynamic-form/configurations/structure/section.mjs +1 -1
  95. package/esm2022/dynamic-form/dynamic-form/configurations/structure/structure.mjs +1 -1
  96. package/esm2022/dynamic-form/dynamic-form/dynamic-form.component.mjs +22 -2
  97. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +1 -1
  98. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +1 -1
  99. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.mjs +1 -1
  100. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.mjs +1 -1
  101. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +1 -1
  102. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.mjs +1 -1
  103. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +1 -1
  104. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +1 -1
  105. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.mjs +1 -1
  106. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.mjs +1 -1
  107. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +1 -1
  108. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
  109. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +1 -2
  110. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
  111. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
  112. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.mjs +1 -1
  113. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.mjs +1 -1
  114. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +6 -1
  115. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.mjs +1 -1
  116. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.mjs +1 -1
  117. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +1 -1
  118. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.mjs +1 -1
  119. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +1 -1
  120. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +3 -3
  121. package/esm2022/dynamic-form/public-api.mjs +2 -2
  122. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.directive.mjs +17 -1
  123. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +60 -1
  124. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +25 -5
  125. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +48 -1
  126. package/esm2022/gantt/lib/gantt/gantt.component.mjs +32 -1
  127. package/esm2022/global-search/lib/global-search/global-search.component.mjs +30 -1
  128. package/esm2022/grid-menu/lib/grid-menu/grid-menu.component.mjs +40 -1
  129. package/esm2022/help-popover/lib/help-popover/help-popover.directive.mjs +83 -27
  130. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +40 -3
  131. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +18 -2
  132. package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +33 -4
  133. package/esm2022/inline-edit/lib/inline-edit/inline-edit.component.mjs +16 -1
  134. package/esm2022/insights/lib/insights/insights.component.mjs +23 -1
  135. package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +21 -1
  136. package/esm2022/kanban/lib/kanban/kanban.component.mjs +34 -16
  137. package/esm2022/label-value/lib/label-value/label-value.component.mjs +14 -1
  138. package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +37 -1
  139. package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +24 -1
  140. package/esm2022/locale/lib/locale/locale.service.mjs +8 -1
  141. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +17 -1
  142. package/esm2022/mask/lib/mask/mask-formatter.pipe.mjs +13 -1
  143. package/esm2022/mouse-events/lib/mouse-events/double-click.directive.mjs +16 -3
  144. package/esm2022/mouse-events/lib/mouse-events/long-press.directive.mjs +24 -10
  145. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +20 -1
  146. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +32 -12
  147. package/esm2022/numeric/lib/numeric.pipe.mjs +16 -1
  148. package/esm2022/numeric/lib/numeric.service.mjs +21 -1
  149. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +9 -6
  150. package/esm2022/object-card/lib/object-card/object-card.component.mjs +24 -1
  151. package/esm2022/optional-fields/editor/editor-field.mjs +1 -1
  152. package/esm2022/paginator/lib/paginator/paginator.component.mjs +20 -1
  153. package/esm2022/panel/lib/panel/panel.component.mjs +44 -23
  154. package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +25 -1
  155. package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +54 -1
  156. package/esm2022/picklist/lib/picklist/picklist.component.mjs +33 -2
  157. package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +29 -34
  158. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +86 -2
  159. package/esm2022/progressbar/lib/progressbar/progressbar.component.mjs +53 -3
  160. package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +28 -1
  161. package/esm2022/radio-button/lib/radio-button-group/radio-button-group.component.mjs +27 -1
  162. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +39 -7
  163. package/esm2022/select/lib/select/select.component.mjs +35 -1
  164. package/esm2022/select-button/lib/select-button/select-button.component.mjs +35 -1
  165. package/esm2022/shared/lib/shared/border-button/border-button.component.mjs +11 -3
  166. package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +54 -1
  167. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +76 -36
  168. package/esm2022/slider/lib/slider/slider.component.mjs +90 -9
  169. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +25 -4
  170. package/esm2022/split-button/lib/split-button/split-button.component.mjs +24 -2
  171. package/esm2022/star-rating/star-rating/star-rating.component.mjs +17 -1
  172. package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +32 -10
  173. package/esm2022/stepper/lib/stepper/stepper.component.mjs +20 -1
  174. package/esm2022/structure/lib/structure/footer.component.mjs +11 -1
  175. package/esm2022/switch/lib/switch/switch.component.mjs +22 -2
  176. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +16 -1
  177. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +29 -3
  178. package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +33 -2
  179. package/esm2022/tabs/lib/tabs/tabs.component.mjs +35 -3
  180. package/esm2022/template/lib/template/template.directive.mjs +14 -2
  181. package/esm2022/text-area/lib/text-area/text-area.component.mjs +28 -1
  182. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +25 -1
  183. package/esm2022/thumbnails/lib/thumbnails/thumbnails.component.mjs +28 -3
  184. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +30 -1
  185. package/esm2022/tile/lib/tile/tile.component.mjs +26 -1
  186. package/esm2022/timeline/lib/timeline/timeline.component.mjs +26 -3
  187. package/esm2022/toast/lib/toast/toast.component.mjs +24 -4
  188. package/esm2022/token-list/lib/token-list/token-list.component.mjs +22 -1
  189. package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +66 -1
  190. package/esm2022/topbar/lib/topbar/topbar.component.mjs +18 -1
  191. package/esm2022/tree/lib/tree/tree.component.mjs +28 -1
  192. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +47 -1
  193. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +85 -0
  194. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  195. package/fesm2022/seniorsistemas-angular-components-alert.mjs +40 -0
  196. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  197. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +51 -0
  198. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
  199. package/fesm2022/seniorsistemas-angular-components-badge.mjs +20 -0
  200. package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
  201. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +46 -1
  202. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  203. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +12 -0
  204. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  205. package/fesm2022/seniorsistemas-angular-components-button.mjs +101 -0
  206. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  207. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +71 -46
  208. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  209. package/fesm2022/seniorsistemas-angular-components-card.mjs +19 -4
  210. package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
  211. package/fesm2022/seniorsistemas-angular-components-chat.mjs +39 -5
  212. package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
  213. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +21 -1
  214. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  215. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +23 -3
  216. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  217. package/fesm2022/seniorsistemas-angular-components-chips.mjs +57 -1
  218. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  219. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +40 -0
  220. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  221. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +18 -0
  222. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
  223. package/fesm2022/seniorsistemas-angular-components-common.mjs +5 -0
  224. package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
  225. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +19 -0
  226. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
  227. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +30 -0
  228. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  229. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +36 -0
  230. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
  231. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +36 -0
  232. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  233. package/fesm2022/seniorsistemas-angular-components-currency.mjs +19 -6
  234. package/fesm2022/seniorsistemas-angular-components-currency.mjs.map +1 -1
  235. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +31 -0
  236. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
  237. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +74 -16
  238. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  239. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +29 -4
  240. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  241. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +16 -0
  242. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
  243. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +59 -0
  244. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  245. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +21 -1
  246. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  247. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +47 -0
  248. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  249. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +31 -0
  250. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  251. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +29 -0
  252. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  253. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +39 -0
  254. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
  255. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +80 -24
  256. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  257. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +38 -1
  258. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  259. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +17 -1
  260. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
  261. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +30 -1
  262. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  263. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +15 -0
  264. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  265. package/fesm2022/seniorsistemas-angular-components-insights.mjs +22 -0
  266. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
  267. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +20 -0
  268. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  269. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +28 -10
  270. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  271. package/fesm2022/seniorsistemas-angular-components-label-value.mjs +13 -0
  272. package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
  273. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +59 -0
  274. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  275. package/fesm2022/seniorsistemas-angular-components-locale.mjs +7 -0
  276. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  277. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +16 -0
  278. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
  279. package/fesm2022/seniorsistemas-angular-components-mask.mjs +12 -0
  280. package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
  281. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +35 -8
  282. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
  283. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +19 -0
  284. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  285. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +31 -11
  286. package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
  287. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +8 -5
  288. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  289. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +35 -0
  290. package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
  291. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +23 -0
  292. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  293. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -1
  294. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +19 -0
  295. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  296. package/fesm2022/seniorsistemas-angular-components-panel.mjs +39 -18
  297. package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
  298. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +77 -0
  299. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
  300. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +32 -1
  301. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  302. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +28 -33
  303. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  304. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +85 -1
  305. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  306. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +52 -2
  307. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
  308. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +53 -0
  309. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
  310. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +36 -4
  311. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  312. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +34 -0
  313. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  314. package/fesm2022/seniorsistemas-angular-components-select.mjs +34 -0
  315. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  316. package/fesm2022/seniorsistemas-angular-components-shared.mjs +9 -1
  317. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  318. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +53 -0
  319. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  320. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +71 -31
  321. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
  322. package/fesm2022/seniorsistemas-angular-components-slider.mjs +89 -8
  323. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  324. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +24 -3
  325. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  326. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +22 -0
  327. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  328. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +16 -0
  329. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  330. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +30 -8
  331. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  332. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +19 -0
  333. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
  334. package/fesm2022/seniorsistemas-angular-components-structure.mjs +10 -0
  335. package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
  336. package/fesm2022/seniorsistemas-angular-components-switch.mjs +20 -0
  337. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  338. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +28 -2
  339. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  340. package/fesm2022/seniorsistemas-angular-components-table.mjs +15 -0
  341. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  342. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +65 -2
  343. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
  344. package/fesm2022/seniorsistemas-angular-components-template.mjs +13 -1
  345. package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
  346. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +27 -0
  347. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  348. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +24 -0
  349. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  350. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +26 -1
  351. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
  352. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +29 -0
  353. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  354. package/fesm2022/seniorsistemas-angular-components-tile.mjs +25 -0
  355. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  356. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +25 -2
  357. package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
  358. package/fesm2022/seniorsistemas-angular-components-toast.mjs +22 -2
  359. package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
  360. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +21 -0
  361. package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
  362. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +65 -0
  363. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  364. package/fesm2022/seniorsistemas-angular-components-topbar.mjs +17 -0
  365. package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
  366. package/fesm2022/seniorsistemas-angular-components-tree.mjs +27 -0
  367. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  368. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +46 -0
  369. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  370. package/fieldset/lib/fieldset/fieldset.component.d.ts +23 -3
  371. package/file-picker/lib/file-picker/file-picker.component.d.ts +47 -0
  372. package/gantt/lib/gantt/gantt.component.d.ts +31 -0
  373. package/global-search/lib/global-search/global-search.component.d.ts +29 -0
  374. package/grid-menu/lib/grid-menu/grid-menu.component.d.ts +39 -0
  375. package/help-popover/lib/help-popover/help-popover.directive.d.ts +67 -17
  376. package/image-cropper/lib/image-cropper/image-cropper.component.d.ts +38 -0
  377. package/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.d.ts +15 -0
  378. package/info-sign/lib/info-sign/info-sign.directive.d.ts +30 -1
  379. package/inline-edit/lib/inline-edit/inline-edit.component.d.ts +15 -0
  380. package/insights/lib/insights/insights.component.d.ts +22 -0
  381. package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +20 -0
  382. package/kanban/lib/kanban/kanban.component.d.ts +25 -5
  383. package/label-value/lib/label-value/label-value.component.d.ts +13 -0
  384. package/loading-state/lib/loading-state/loading-state.component.d.ts +36 -0
  385. package/loading-state/lib/loading-state/loading-state.directive.d.ts +23 -0
  386. package/locale/lib/locale/locale.service.d.ts +7 -0
  387. package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +16 -0
  388. package/mask/lib/mask/mask-formatter.pipe.d.ts +12 -0
  389. package/mouse-events/lib/mouse-events/double-click.directive.d.ts +13 -0
  390. package/mouse-events/lib/mouse-events/long-press.directive.d.ts +16 -2
  391. package/navigation-button/lib/navigation-button/navigation-button.component.d.ts +19 -0
  392. package/number-input/lib/number-input/number-input.directive.d.ts +19 -1
  393. package/numeric/lib/numeric.pipe.d.ts +15 -0
  394. package/numeric/lib/numeric.service.d.ts +20 -0
  395. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +5 -4
  396. package/object-card/lib/object-card/object-card.component.d.ts +23 -0
  397. package/optional-fields/editor/editor-field.d.ts +19 -0
  398. package/package.json +12 -12
  399. package/paginator/lib/paginator/paginator.component.d.ts +19 -0
  400. package/panel/lib/panel/panel.component.d.ts +24 -3
  401. package/password-strength/lib/password-strength/password-strength.component.d.ts +24 -0
  402. package/password-strength/lib/password-strength/password-strength.directive.d.ts +53 -0
  403. package/picklist/lib/picklist/picklist.component.d.ts +29 -0
  404. package/pin-code-field/lib/pin-code-field/pin-code-field.component.d.ts +28 -33
  405. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +85 -1
  406. package/progressbar/lib/progressbar/progressbar.component.d.ts +50 -0
  407. package/radio-button/lib/radio-button/radio-button.component.d.ts +27 -0
  408. package/radio-button/lib/radio-button-group/radio-button-group.component.d.ts +26 -0
  409. package/rating-scale/lib/rating-scale/rating-scale.component.d.ts +30 -2
  410. package/select/lib/select/select.component.d.ts +34 -0
  411. package/select-button/lib/select-button/select-button.component.d.ts +34 -0
  412. package/shared/lib/shared/border-button/border-button.component.d.ts +10 -2
  413. package/sidebar/lib/sidebar/sidebar.component.d.ts +53 -0
  414. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +53 -2
  415. package/slider/lib/slider/slider.component.d.ts +72 -0
  416. package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +18 -0
  417. package/split-button/lib/split-button/split-button.component.d.ts +22 -0
  418. package/star-rating/star-rating/star-rating.component.d.ts +16 -0
  419. package/stats-card/lib/stats-card/stats-card.component.d.ts +28 -0
  420. package/stepper/lib/stepper/stepper.component.d.ts +19 -0
  421. package/structure/lib/structure/footer.component.d.ts +10 -0
  422. package/switch/lib/switch/switch.component.d.ts +20 -0
  423. package/table/lib/table/table-column/table-columns.component.d.ts +15 -0
  424. package/table-header/lib/table-header/table-header-checkbox.component.d.ts +18 -0
  425. package/tabs/lib/tab-item/tab-item.component.d.ts +31 -0
  426. package/tabs/lib/tabs/tabs.component.d.ts +28 -0
  427. package/template/lib/template/template.directive.d.ts +12 -0
  428. package/text-area/lib/text-area/text-area.component.d.ts +27 -0
  429. package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +24 -0
  430. package/thumbnails/lib/thumbnails/thumbnails.component.d.ts +27 -2
  431. package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +29 -0
  432. package/tile/lib/tile/tile.component.d.ts +25 -0
  433. package/timeline/lib/timeline/timeline.component.d.ts +24 -0
  434. package/toast/lib/toast/toast.component.d.ts +22 -2
  435. package/token-list/lib/token-list/token-list.component.d.ts +21 -0
  436. package/tooltip/lib/tooltip/tooltip.directive.d.ts +65 -0
  437. package/topbar/lib/topbar/topbar.component.d.ts +17 -0
  438. package/tree/lib/tree/tree.component.d.ts +27 -0
  439. package/workspace-switch/lib/workspace-switch/workspace-switch.component.d.ts +46 -0
@@ -2,13 +2,37 @@ import { Directive, HostListener, Input } from '@angular/core';
2
2
  import { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "primeng/calendar";
5
+ /**
6
+ * @description Diretiva que aplica máscara de entrada a um componente `p-calendar` do PrimeNG,
7
+ * formatando automaticamente a data conforme o formato configurado no calendário.
8
+ * Intercepta os eventos de teclado e input do campo interno do calendar para garantir
9
+ * que apenas entradas válidas sejam aceitas.
10
+ *
11
+ * @example
12
+ * ```html
13
+ * <p-calendar sCalendarMask [(ngModel)]="data" dateFormat="dd/mm/yy" />
14
+ * ```
15
+ *
16
+ * @category Inputs
17
+ */
5
18
  export class CalendarMaskDirective {
6
19
  host;
7
20
  renderer;
8
21
  // TODO: Mudei um monte de coisa e tem que testar se isso ainda funciona
9
22
  // TODO: Ainda está sendo usada esta diretiva?
10
23
  SELECTORS = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
11
- slotChar = "_";
24
+ /**
25
+ * @description Caractere usado como placeholder para as posições ainda não preenchidas na máscara.
26
+ *
27
+ * @default '_'
28
+ */
29
+ slotChar = '_';
30
+ /**
31
+ * @description Quando `true`, limpa automaticamente o campo caso o valor digitado
32
+ * seja inválido ao perder o foco.
33
+ *
34
+ * @default false
35
+ */
12
36
  autoClear = false;
13
37
  value;
14
38
  input;
@@ -40,22 +64,22 @@ export class CalendarMaskDirective {
40
64
  setListeners() {
41
65
  this.input = this.host.inputfieldViewChild?.nativeElement;
42
66
  this.value = this.input?.value;
43
- this.focusListener = this.renderer.listen(this.input, "focus", () => {
67
+ this.focusListener = this.renderer.listen(this.input, 'focus', () => {
44
68
  this.onInputFocus();
45
69
  });
46
- this.blurListener = this.renderer.listen(this.input, "blur", (event) => {
70
+ this.blurListener = this.renderer.listen(this.input, 'blur', (event) => {
47
71
  this.onInputBlur(event);
48
72
  });
49
- this.keydownListener = this.renderer.listen(this.input, "keydown", (event) => {
73
+ this.keydownListener = this.renderer.listen(this.input, 'keydown', (event) => {
50
74
  this.onKeyDown(event);
51
75
  });
52
- this.keypressListener = this.renderer.listen(this.input, "keypress", (event) => {
76
+ this.keypressListener = this.renderer.listen(this.input, 'keypress', (event) => {
53
77
  this.onKeyPress(event);
54
78
  });
55
- this.inputListener = this.renderer.listen(this.input, "input", (event) => {
79
+ this.inputListener = this.renderer.listen(this.input, 'input', (event) => {
56
80
  this.onInputChange(event);
57
81
  });
58
- this.pasteListener = this.renderer.listen(this.input, "paste", (event) => {
82
+ this.pasteListener = this.renderer.listen(this.input, 'paste', (event) => {
59
83
  this.handleInputChange(event);
60
84
  });
61
85
  }
@@ -71,13 +95,13 @@ export class CalendarMaskDirective {
71
95
  set mask(val) {
72
96
  this._mask = val;
73
97
  this.initMask();
74
- this.writeValue("");
98
+ this.writeValue('');
75
99
  }
76
100
  writeValue(value) {
77
101
  this.value = value;
78
102
  if (this.input) {
79
103
  if (this.value == undefined) {
80
- this.input.value = "";
104
+ this.input.value = '';
81
105
  }
82
106
  else {
83
107
  this.input.value = this.value;
@@ -93,13 +117,13 @@ export class CalendarMaskDirective {
93
117
  if (this.value != this.focusText) {
94
118
  if (!this.input?.disabled &&
95
119
  (this.value === undefined || this.value === null || this.value.indexOf(this.slotChar) >= 0)) {
96
- this.value = "";
97
- e.target.value = "";
120
+ this.value = '';
121
+ e.target.value = '';
98
122
  this.host.updateModel(null);
99
123
  }
100
124
  this.updateModel(e);
101
- const event = document.createEvent("HTMLEvents");
102
- event.initEvent("change", true, false);
125
+ const event = document.createEvent('HTMLEvents');
126
+ event.initEvent('change', true, false);
103
127
  this.input?.dispatchEvent(event);
104
128
  }
105
129
  }
@@ -192,12 +216,13 @@ export class CalendarMaskDirective {
192
216
  }
193
217
  createCompleteMask() {
194
218
  switch (this.host.selectionMode) {
195
- case "range":
219
+ case 'range':
196
220
  return this.mask + ` ${this.host.rangeSeparator} ` + this.mask;
197
- case "single":
198
- case "multiple":
221
+ case 'single':
222
+ case 'multiple':
199
223
  return this.mask;
200
- default: return '';
224
+ default:
225
+ return '';
201
226
  }
202
227
  }
203
228
  checkVal(allow) {
@@ -236,11 +261,11 @@ export class CalendarMaskDirective {
236
261
  this.writeBuffer();
237
262
  }
238
263
  else if (lastMatch + 1 < this.partialPosition) {
239
- if (this.autoClear || this.buffer.join("") === this.defaultBuffer) {
264
+ if (this.autoClear || this.buffer.join('') === this.defaultBuffer) {
240
265
  // Invalid value. Remove it and replace it with the
241
266
  // mask, which is the default behavior.
242
267
  if (this.input?.value) {
243
- this.input.value = "";
268
+ this.input.value = '';
244
269
  }
245
270
  this.clearBuffer(0, this.len);
246
271
  }
@@ -270,7 +295,7 @@ export class CalendarMaskDirective {
270
295
  return;
271
296
  }
272
297
  this.writeBuffer();
273
- if (pos == this.mask.replace("?", "").length) {
298
+ if (pos == this.mask.replace('?', '').length) {
274
299
  this.caret(0, pos);
275
300
  }
276
301
  else {
@@ -301,7 +326,7 @@ export class CalendarMaskDirective {
301
326
  }
302
327
  }
303
328
  updateFilledState() {
304
- this.filled = this.input && this.input.value != "";
329
+ this.filled = this.input && this.input.value != '';
305
330
  }
306
331
  focus() {
307
332
  this.input?.focus();
@@ -313,12 +338,12 @@ export class CalendarMaskDirective {
313
338
  this.len = completeMask.length;
314
339
  this.firstNonMaskPos = null;
315
340
  this.defs = {
316
- "9": "[0-9]",
341
+ '9': '[0-9]',
317
342
  };
318
- const maskTokens = completeMask.split("");
343
+ const maskTokens = completeMask.split('');
319
344
  for (let i = 0; i < maskTokens.length; i++) {
320
345
  const c = maskTokens[i];
321
- if (c == "?") {
346
+ if (c == '?') {
322
347
  this.len--;
323
348
  this.partialPosition = i;
324
349
  }
@@ -338,7 +363,7 @@ export class CalendarMaskDirective {
338
363
  this.buffer = [];
339
364
  for (let i = 0; i < maskTokens.length; i++) {
340
365
  const c = maskTokens[i];
341
- if (c != "?") {
366
+ if (c != '?') {
342
367
  if (this.defs[c]) {
343
368
  this.buffer.push(this.getPlaceholder(i));
344
369
  }
@@ -347,24 +372,24 @@ export class CalendarMaskDirective {
347
372
  }
348
373
  }
349
374
  }
350
- this.defaultBuffer = this.buffer.join("");
375
+ this.defaultBuffer = this.buffer.join('');
351
376
  }
352
377
  caret(first, last) {
353
378
  let range, begin, end;
354
379
  if (!this.input?.offsetParent || this.input !== document.activeElement) {
355
380
  return { begin: 0, end: 0 };
356
381
  }
357
- if (typeof first == "number") {
382
+ if (typeof first == 'number') {
358
383
  begin = first;
359
- end = typeof last === "number" ? last : begin;
384
+ end = typeof last === 'number' ? last : begin;
360
385
  if (this.input.setSelectionRange) {
361
386
  this.input.setSelectionRange(begin, end);
362
387
  }
363
- else if (this.input["createTextRange"]) {
364
- range = this.input["createTextRange"]();
388
+ else if (this.input['createTextRange']) {
389
+ range = this.input['createTextRange']();
365
390
  range.collapse(true);
366
- range.moveEnd("character", end);
367
- range.moveStart("character", begin);
391
+ range.moveEnd('character', end);
392
+ range.moveStart('character', begin);
368
393
  range.select();
369
394
  }
370
395
  }
@@ -454,7 +479,7 @@ export class CalendarMaskDirective {
454
479
  setTimeout(() => {
455
480
  this.caret(pos.begin, pos.begin);
456
481
  if (this.isCompleted()) {
457
- const sentVal = curVal?.replace(this.slotChar, ""); // Limpa os caracteres placeholders extras caso ele esteja completo
482
+ const sentVal = curVal?.replace(this.slotChar, ''); // Limpa os caracteres placeholders extras caso ele esteja completo
458
483
  sentVal && this.updateCalendarValue(sentVal);
459
484
  }
460
485
  }, 0);
@@ -468,7 +493,7 @@ export class CalendarMaskDirective {
468
493
  setTimeout(() => {
469
494
  this.caret(pos.begin, pos.begin);
470
495
  if (this.isCompleted()) {
471
- const sentVal = curVal?.replace(this.slotChar, ""); // Limpa os caracteres placeholders extras caso ele esteja completo
496
+ const sentVal = curVal?.replace(this.slotChar, ''); // Limpa os caracteres placeholders extras caso ele esteja completo
472
497
  sentVal && this.updateCalendarValue(sentVal);
473
498
  }
474
499
  }, 0);
@@ -493,31 +518,31 @@ export class CalendarMaskDirective {
493
518
  }
494
519
  writeBuffer() {
495
520
  if (!isNullOrUndefined(this.input)) {
496
- this.input.value = this.buffer.join("");
521
+ this.input.value = this.buffer.join('');
497
522
  }
498
523
  }
499
524
  createMaskFromDateFormat() {
500
525
  const calendar = this.host;
501
- let mask = this.autoClear ? "?" : "";
526
+ let mask = this.autoClear ? '?' : '';
502
527
  if (!calendar.timeOnly) {
503
528
  let dateFormat = calendar.dateFormat;
504
- dateFormat = dateFormat?.replace(/y/g, "yy");
505
- mask += dateFormat?.replace(/[^/*,.\-+\[\]\\]/g, "9");
529
+ dateFormat = dateFormat?.replace(/y/g, 'yy');
530
+ mask += dateFormat?.replace(/[^/*,.\-+\[\]\\]/g, '9');
506
531
  if (calendar.showTime) {
507
- mask += " ";
532
+ mask += ' ';
508
533
  }
509
534
  }
510
535
  if (calendar.showTime || calendar.timeOnly) {
511
- mask += "99:99";
536
+ mask += '99:99';
512
537
  if (calendar.showSeconds) {
513
- mask += ":99";
538
+ mask += ':99';
514
539
  }
515
540
  }
516
541
  this._mask = mask;
517
542
  this.initMask();
518
543
  }
519
544
  isCompleted() {
520
- for (let i = (this.firstNonMaskPos ?? 0); i <= this.lastRequiredNonMaskPos; i++) {
545
+ for (let i = this.firstNonMaskPos ?? 0; i <= this.lastRequiredNonMaskPos; i++) {
521
546
  if (this.tests?.[i] && this.buffer[i] === this.getPlaceholder(i)) {
522
547
  return false;
523
548
  }
@@ -529,7 +554,7 @@ export class CalendarMaskDirective {
529
554
  this.firstTime = false;
530
555
  this.setListeners();
531
556
  if (!isNullOrUndefined(this.input)) {
532
- this.input.type = "tel";
557
+ this.input.type = 'tel';
533
558
  }
534
559
  }
535
560
  }
@@ -549,7 +574,7 @@ export class CalendarMaskDirective {
549
574
  }
550
575
  onKeydownEventTest(e) {
551
576
  const { key } = e;
552
- if (key == "Tab") {
577
+ if (key == 'Tab') {
553
578
  // Este código foi implementado para corrigir um problema no componente na v9
554
579
  // Deve ser removido assim que atualizarmos o PrimeNG para a v10
555
580
  const allFocusableElements = document.querySelectorAll(this.SELECTORS);
@@ -566,7 +591,7 @@ export class CalendarMaskDirective {
566
591
  }
567
592
  }
568
593
  let activeTagName = window.document.activeElement?.tagName;
569
- if (e.shiftKey && element.id && element.tagName === "INPUT" && activeTagName == "BUTTON") {
594
+ if (e.shiftKey && element.id && element.tagName === 'INPUT' && activeTagName == 'BUTTON') {
570
595
  previousFocusable = element.id;
571
596
  forceCloseModal = false;
572
597
  }
@@ -606,6 +631,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
606
631
  type: Input
607
632
  }], onKeydownEventTest: [{
608
633
  type: HostListener,
609
- args: ["keydown", ["$event"]]
634
+ args: ['keydown', ['$event']]
610
635
  }] } });
611
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY2FsZW5kYXItbWFzay9zcmMvbGliL2NhbGVuZGFyLW1hc2svY2FsZW5kYXItbWFzay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7OztBQU83RSxNQUFNLE9BQU8scUJBQXFCO0lBc0NuQjtJQUNBO0lBdENYLHdFQUF3RTtJQUN4RSw4Q0FBOEM7SUFDOUMsU0FBUyxHQUFHLDBFQUEwRSxDQUFDO0lBR2hGLFFBQVEsR0FBRyxHQUFHLENBQUM7SUFHZixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWxCLEtBQUssQ0FBTTtJQUNYLEtBQUssQ0FBb0I7SUFDekIsTUFBTSxDQUFXO0lBRWhCLEtBQUssQ0FBVTtJQUNmLElBQUksQ0FBTTtJQUNWLEtBQUssQ0FBUztJQUNkLGVBQWUsQ0FBTTtJQUNyQixlQUFlLENBQTRCO0lBQzNDLHNCQUFzQixDQUFNO0lBQzVCLEdBQUcsQ0FBVTtJQUNiLE1BQU0sQ0FBVTtJQUNoQixNQUFNLENBQU07SUFDWixhQUFhLENBQVU7SUFDdkIsU0FBUyxDQUFVO0lBQ25CLGNBQWMsQ0FBTTtJQUNwQixhQUFhLENBQVc7SUFDeEIsU0FBUyxHQUFHLElBQUksQ0FBQztJQUVqQixhQUFhLENBQWM7SUFDM0IsWUFBWSxDQUFjO0lBQzFCLGVBQWUsQ0FBYztJQUM3QixnQkFBZ0IsQ0FBYztJQUM5QixhQUFhLENBQWM7SUFDM0IsYUFBYSxDQUFjO0lBRW5DLFlBQ1csSUFBYyxFQUNkLFFBQW1CO1FBRG5CLFNBQUksR0FBSixJQUFJLENBQVU7UUFDZCxhQUFRLEdB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LGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLE9BQU87b0JBQ1gsQ0FBQztvQkFDRCxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixDQUFDO3FCQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ2xDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBVSxFQUFFLElBQWE7UUFDN0MsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3JCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDTCxDQUFDO3dHQXBwQlEscUJBQXFCOzRGQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDJCQUEyQjtpQkFDeEM7cUdBT1UsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkE4bEJOLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdDaGVja2VkLCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5cbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAncHJpbWVuZy9jYWxlbmRhcic7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAncC1jYWxlbmRhcltzQ2FsZW5kYXJNYXNrXScsXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyTWFza0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgICAvLyBUT0RPOiBNdWRlaSB1bSBtb250ZSBkZSBjb2lzYSBlIHRlbSBxdWUgdGVzdGFyIHNlIGlzc28gYWluZGEgZnVuY2lvbmFcbiAgICAvLyBUT0RPOiBBaW5kYSBlc3TDoSBzZW5kbyB1c2FkYSBlc3RhIGRpcmV0aXZhP1xuICAgIFNFTEVDVE9SUyA9ICdidXR0b24sIFtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKSc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzbG90Q2hhciA9IFwiX1wiO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXV0b0NsZWFyID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgdmFsdWU6IGFueTtcbiAgICBwdWJsaWMgaW5wdXQ/OiBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHB1YmxpYyBmaWxsZWQ/OiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBfbWFzaz86IHN0cmluZztcbiAgICBwcml2YXRlIGRlZnM6IGFueTtcbiAgICBwcml2YXRlIHRlc3RzPzogYW55W107XG4gICAgcHJpdmF0ZSBwYXJ0aWFsUG9zaXRpb246IGFueTtcbiAgICBwcml2YXRlIGZpcnN0Tm9uTWFza1BvczogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGxhc3RSZXF1aXJlZE5vbk1hc2tQb3M6IGFueTtcbiAgICBwcml2YXRlIGxlbj86IG51bWJlcjtcbiAgICBwcml2YXRlIG9sZFZhbD86IHN0cmluZztcbiAgICBwcml2YXRlIGJ1ZmZlcjogYW55O1xuICAgIHByaXZhdGUgZGVmYXVsdEJ1ZmZlcj86IHN0cmluZztcbiAgICBwcml2YXRlIGZvY3VzVGV4dD86IHN0cmluZztcbiAgICBwcml2YXRlIGNhcmV0VGltZW91dElkOiBhbnk7XG4gICAgcHJpdmF0ZSBhbmRyb2lkQ2hyb21lPzogYm9vbGVhbjtcbiAgICBwcml2YXRlIGZpcnN0VGltZSA9IHRydWU7XG5cbiAgICBwcml2YXRlIGZvY3VzTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xuICAgIHByaXZhdGUgYmx1ckxpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIGtleWRvd25MaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBrZXlwcmVzc0xpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIGlucHV0TGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xuICAgIHByaXZhdGUgcGFzdGVMaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGhvc3Q6IENhbGVuZGFyLFxuICAgICAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkgeyB9XG5cbiAgICBwcml2YXRlIHNldExpc3RlbmVycygpIHtcbiAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuaG9zdC5pbnB1dGZpZWxkVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pbnB1dD8udmFsdWU7XG5cbiAgICAgICAgdGhpcy5mb2N1c0xpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5pbnB1dCwgXCJmb2N1c1wiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRGb2N1cygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmJsdXJMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQsIFwiYmx1clwiLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Qmx1cihldmVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMua2V5ZG93bkxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5pbnB1dCwgXCJrZXlkb3duXCIsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93bihldmVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMua2V5cHJlc3NMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQsIFwia2V5cHJlc3NcIiwgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25LZXlQcmVzcyhldmVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaW5wdXRMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQsIFwiaW5wdXRcIiwgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZShldmVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucGFzdGVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQsIFwicGFzdGVcIiwgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICAgICAgdGhpcy5hbmRyb2lkQ2hyb21lID0gL2Nocm9tZS9pLnRlc3QodWEpICYmIC9hbmRyb2lkL2kudGVzdCh1YSk7XG5cbiAgICAgICAgdGhpcy5jcmVhdGVNYXNrRnJvbURhdGVGb3JtYXQoKTtcbiAgICAgICAgdGhpcy5pbml0TWFzaygpO1xuICAgIH1cblxuICAgIGdldCBtYXNrKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXNrID8/ICcnO1xuICAgIH1cblxuICAgIHNldCBtYXNrKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21hc2sgPSB2YWw7XG5cbiAgICAgICAgdGhpcy5pbml0TWFzaygpO1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUoXCJcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jaGVja1ZhbCgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c1RleHQgPSB0aGlzLmlucHV0LnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxsZWRTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW5wdXRCbHVyKGU6IGFueSkge1xuICAgICAgICB0aGlzLmNoZWNrVmFsKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsbGVkU3RhdGUoKTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSB0aGlzLmZvY3VzVGV4dCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICF0aGlzLmlucHV0Py5kaXNhYmxlZCAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy52YWx1ZSA9PT0gbnVsbCB8fCAodGhpcy52YWx1ZSBhcyBzdHJpbmcpLmluZGV4T2YodGhpcy5zbG90Q2hhcikgPj0gMClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QudXBkYXRlTW9kZWwobnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiSFRNTEV2ZW50c1wiKTtcbiAgICAgICAgICAgIGV2ZW50LmluaXRFdmVudChcImNoYW5nZVwiLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0Py5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbktleURvd24oZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmhvc3QucmVhZG9ubHlJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgayA9IGUud2hpY2ggfHwgZS5rZXlDb2RlO1xuICAgICAgICBjb25zdCBpUGhvbmUgPSAvaXBob25lL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICAgbGV0IHBvcztcbiAgICAgICAgbGV0IGJlZ2luO1xuICAgICAgICBsZXQgZW5kO1xuICAgICAgICB0aGlzLm9sZFZhbCA9IHRoaXMuaW5wdXQ/LnZhbHVlO1xuXG4gICAgICAgIC8vIEJhY2tzcGFjZSwgZGVsZXRlLCBhbmQgZXNjYXBlIGdldCBzcGVjaWFsIHRyZWF0bWVudFxuICAgICAgICBpZiAoayA9PT0gOCB8fCBrID09PSA0NiB8fCAoaVBob25lICYmIGsgPT09IDEyNykpIHtcbiAgICAgICAgICAgIHBvcyA9IHRoaXMuY2FyZXQoKTtcbiAgICAgICAgICAgIGJlZ2luID0gcG9zPy5iZWdpbjtcbiAgICAgICAgICAgIGVuZCA9IHBvcz8uZW5kO1xuXG4gICAgICAgICAgICBpZiAoYmVnaW4gJiYgZW5kKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVuZCAtIGJlZ2luID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luID0gayAhPT0gNDYgPyB0aGlzLnNlZWtQcmV2KGJlZ2luKSA6IChlbmQgPSB0aGlzLnNlZWtOZXh0KGJlZ2luIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSBrID09PSA0NiA/IHRoaXMuc2Vla05leHQoZW5kKSA6IGVuZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQnVmZmVyKGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hpZnRMKGJlZ2luLCBlbmQgLSAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlbChlKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrID09PSAxMykge1xuICAgICAgICAgICAgLy8gRW50ZXJcbiAgICAgICAgICAgIHRoaXMub25JbnB1dEJsdXIoZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGsgPT09IDI3KSB7XG4gICAgICAgICAgICAvLyBFc2NhcGVcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0ICYmIHRoaXMuZm9jdXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9IHRoaXMuZm9jdXNUZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMuY2FyZXQoMCwgdGhpcy5jaGVja1ZhbCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25LZXlQcmVzcyhlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuaG9zdC5yZWFkb25seUlucHV0KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgayA9IGUud2hpY2ggfHwgZS5rZXlDb2RlO1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmNhcmV0KCk7XG4gICAgICAgIGxldCBwO1xuICAgICAgICBsZXQgYztcbiAgICAgICAgbGV0IG5leHQ6IGFueTtcblxuICAgICAgICBpZiAoZS5jdHJsS2V5IHx8IGUuYWx0S2V5IHx8IGUubWV0YUtleSB8fCBrIDwgMzIgfHwgKGsgPiAzNCAmJiBrIDwgNDEpKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChrICYmIGsgIT09IDEzKSB7XG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHBvcz8uZW5kKSAmJiAhaXNOdWxsT3JVbmRlZmluZWQocG9zPy5iZWdpbikpIHtcbiAgICAgICAgICAgICAgICBpZiAocG9zLmVuZCAtIHBvcy5iZWdpbiAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQnVmZmVyKHBvcy5iZWdpbiwgcG9zLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnRMKHBvcy5iZWdpbiwgcG9zLmVuZCAtIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChwb3M/LmJlZ2luKSkge1xuICAgICAgICAgICAgICAgIHAgPSB0aGlzLnNlZWtOZXh0KHBvcy5iZWdpbiAtIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocCA8ICh0aGlzLmxlbiA/PyAwKSkge1xuICAgICAgICAgICAgICAgIGMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGspO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzPy5bcF0udGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0UihwKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltwXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRoaXMuc2Vla05leHQocCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGF0aCBmb3IgQ1NQIFZpb2xhdGlvbiBvbiBGaXJlRm94IE9TIDEuMVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJveHkgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJldChuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocHJveHksIDApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJldChuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsbGVkU3RhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbXBsZXRlTWFzaygpOiBzdHJpbmcge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuaG9zdC5zZWxlY3Rpb25Nb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwicmFuZ2VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXNrICsgYCAke3RoaXMuaG9zdC5yYW5nZVNlcGFyYXRvcn0gYCArIHRoaXMubWFzaztcbiAgICAgICAgICAgIGNhc2UgXCJzaW5nbGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc2s7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hlY2tWYWwoYWxsb3c/OiBib29sZWFuKSB7XG4gICAgICAgIC8vIFRyeSB0byBwbGFjZSBjaGFyYWN0ZXJzIHdoZXJlIHRoZXkgYmVsb25nXG4gICAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLmlucHV0Py52YWx1ZTtcbiAgICAgICAgbGV0IGxhc3RNYXRjaCA9IC0xO1xuICAgICAgICBsZXQgaTogYW55O1xuICAgICAgICBsZXQgYzogYW55O1xuICAgICAgICBsZXQgcG9zID0gMDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKHRoaXMubGVuID8/IDApOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzPy5baV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltpXSA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoaSk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHBvcysrIDwgKHRlc3Q/Lmxlbmd0aCA/PyAwKSkge1xuICAgICAgICAgICAgICAgICAgICBjID0gdGVzdD8uY2hhckF0KHBvcyAtIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXN0c1tpXS50ZXN0KGMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltpXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0TWF0Y2ggPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBvcyA+ICh0ZXN0Py5sZW5ndGggPz8gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckJ1ZmZlcihpICsgMSwgdGhpcy5sZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJ1ZmZlcltpXSA9PT0gdGVzdD8uY2hhckF0KHBvcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpIDwgdGhpcy5wYXJ0aWFsUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdE1hdGNoID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbG93KSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlQnVmZmVyKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobGFzdE1hdGNoICsgMSA8IHRoaXMucGFydGlhbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvQ2xlYXIgfHwgdGhpcy5idWZmZXIuam9pbihcIlwiKSA9PT0gdGhpcy5kZWZhdWx0QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgLy8gSW52YWxpZCB2YWx1ZS4gUmVtb3ZlIGl0IGFuZCByZXBsYWNlIGl0IHdpdGggdGhlXG4gICAgICAgICAgICAgICAgLy8gbWFzaywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQ/LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQnVmZmVyKDAsIHRoaXMubGVuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSW52YWxpZCB2YWx1ZSwgYnV0IHdlIG9wdCB0byBzaG93IHRoZSB2YWx1ZSB0byB0aGVcbiAgICAgICAgICAgICAgICAvLyB1c2VyIGFuZCBhbGxvdyB0aGVtIHRvIGNvcnJlY3QgdGhlaXIgbWlzdGFrZS5cbiAgICAgICAgICAgICAgICB0aGlzLndyaXRlQnVmZmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlQnVmZmVyKCk7XG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9IHRoaXMuaW5wdXQudmFsdWUuc3Vic3RyaW5nKDAsIGxhc3RNYXRjaCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucGFydGlhbFBvc2l0aW9uID8gaSA6IHRoaXMuZmlyc3ROb25NYXNrUG9zO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbklucHV0Rm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmhvc3QucmVhZG9ubHlJbnB1dCkgcmV0dXJuO1xuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNhcmV0VGltZW91dElkKTtcbiAgICAgICAgbGV0IHBvczogYW55O1xuXG4gICAgICAgIHRoaXMuZm9jdXNUZXh0ID0gdGhpcy5pbnB1dD8udmFsdWU7XG5cbiAgICAgICAgcG9zID0gdGhpcy5jaGVja1ZhbCgpO1xuXG4gICAgICAgIHRoaXMuY2FyZXRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53cml0ZUJ1ZmZlcigpO1xuICAgICAgICAgICAgaWYgKHBvcyA9PSB0aGlzLm1hc2sucmVwbGFjZShcIj9cIiwgXCJcIikubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJldCgwLCBwb3MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmV0KHBvcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25JbnB1dENoYW5nZShldmVudDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmFuZHJvaWRDaHJvbWUpIHRoaXMuaGFuZGxlQW5kcm9pZElucHV0KGV2ZW50KTtcbiAgICAgICAgZWxzZSB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5ob3N0LnJlYWRvbmx5SW5wdXQpIHJldHVybjtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY2hlY2tWYWwodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmNhcmV0KHBvcyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKGV2ZW50KTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZU1vZGVsKGU6IGFueSkge1xuICAgICAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgaWYgKHVwZGF0ZWRWYWx1ZSAhPT0gbnVsbCB8fCB1cGRhdGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHVwZGF0ZWRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5vblVzZXJJbnB1dChlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVGaWxsZWRTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5maWxsZWQgPSB0aGlzLmlucHV0ICYmIHRoaXMuaW5wdXQudmFsdWUgIT0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXMoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQ/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0TWFzaygpIHtcbiAgICAgICAgY29uc3QgY29tcGxldGVNYXNrID0gdGhpcy5jcmVhdGVDb21wbGV0ZU1hc2soKTtcblxuICAgICAgICB0aGlzLnRlc3RzID0gW107XG4gICAgICAgIHRoaXMucGFydGlhbFBvc2l0aW9uID0gY29tcGxldGVNYXNrLmxlbmd0aDtcbiAgICAgICAgdGhpcy5sZW4gPSBjb21wbGV0ZU1hc2subGVuZ3RoO1xuICAgICAgICB0aGlzLmZpcnN0Tm9uTWFza1BvcyA9IG51bGw7XG4gICAgICAgIHRoaXMuZGVmcyA9IHtcbiAgICAgICAgICAgIFwiOVwiOiBcIlswLTldXCIsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWFza1Rva2VucyA9IGNvbXBsZXRlTWFzay5zcGxpdChcIlwiKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrVG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbWFza1Rva2Vuc1tpXTtcblxuICAgICAgICAgICAgaWYgKGMgPT0gXCI/XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbi0tO1xuICAgICAgICAgICAgICAgIHRoaXMucGFydGlhbFBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kZWZzW2NdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXN0cy5wdXNoKG5ldyBSZWdFeHAodGhpcy5kZWZzW2NdKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maXJzdE5vbk1hc2tQb3MgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdE5vbk1hc2tQb3MgPSB0aGlzLnRlc3RzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGkgPCB0aGlzLnBhcnRpYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RSZXF1aXJlZE5vbk1hc2tQb3MgPSB0aGlzLnRlc3RzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1ZmZlciA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFza1Rva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYyA9IG1hc2tUb2tlbnNbaV07XG5cbiAgICAgICAgICAgIGlmIChjICE9IFwiP1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmc1tjXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKHRoaXMuZ2V0UGxhY2Vob2xkZXIoaSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0QnVmZmVyID0gdGhpcy5idWZmZXIuam9pbihcIlwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhcmV0KGZpcnN0PzogbnVtYmVyLCBsYXN0PzogbnVtYmVyKSB7XG4gICAgICAgIGxldCByYW5nZSwgYmVnaW4sIGVuZDtcblxuICAgICAgICBpZiAoIXRoaXMuaW5wdXQ/Lm9mZnNldFBhcmVudCB8fCB0aGlzLmlucHV0ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4geyBiZWdpbjogMCwgZW5kOiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGZpcnN0ID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGJlZ2luID0gZmlyc3Q7XG4gICAgICAgICAgICBlbmQgPSB0eXBlb2YgbGFzdCA9PT0gXCJudW1iZXJcIiA/IGxhc3QgOiBiZWdpbjtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnNldFNlbGVjdGlvblJhbmdlKGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgodGhpcy5pbnB1dCBhcyBhbnkpW1wiY3JlYXRlVGV4dFJhbmdlXCJdKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UgPSAodGhpcy5pbnB1dCBhcyBhbnkpW1wiY3JlYXRlVGV4dFJhbmdlXCJdKCk7XG4gICAgICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmFuZ2UubW92ZUVuZChcImNoYXJhY3RlclwiLCBlbmQpO1xuICAgICAgICAgICAgICAgIHJhbmdlLm1vdmVTdGFydChcImNoYXJhY3RlclwiLCBiZWdpbik7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiZWdpbiA9IHRoaXMuaW5wdXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICBlbmQgPSB0aGlzLmlucHV0LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgICAgcmV0dXJuIHsgYmVnaW46IGJlZ2luLCBlbmQ6IGVuZCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgYmVnaW46IGZpcnN0ID8/IDAsIGVuZDogbGFzdCA/PyAwIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQbGFjZWhvbGRlcihpOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGkgPCB0aGlzLnNsb3RDaGFyLmxlbmd0aCkgcmV0dXJuIHRoaXMuc2xvdENoYXIuY2hhckF0KGkpO1xuICAgICAgICByZXR1cm4gdGhpcy5zbG90Q2hhci5jaGFyQXQoMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWVrTmV4dChwb3M6IGFueSkge1xuICAgICAgICB3aGlsZSAoKytwb3MgPCAodGhpcy5sZW4gPz8gMCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzPy5bcG9zXSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlZWtQcmV2KHBvczogYW55KSB7XG4gICAgICAgIHdoaWxlICgtLXBvcyA+PSAwICYmICF0aGlzLnRlc3RzPy5bcG9zXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVzdHM/Lltwb3NdKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hpZnRMKGJlZ2luOiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gICAgICAgIGxldCBpOiBhbnk7XG4gICAgICAgIGxldCBqOiBhbnk7XG5cbiAgICAgICAgaWYgKGJlZ2luIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaiA9IHRoaXMuc2Vla05leHQoZW5kKTtcblxuICAgICAgICBmb3IgKGkgPSBiZWdpbjsgaSA8ICh0aGlzLmxlbiA/PyAwKTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXN0cz8uW2ldKSB7XG4gICAgICAgICAgICAgICAgaWYgKGogPCAodGhpcy5sZW4gPz8gMCkgJiYgdGhpcy50ZXN0c1tpXS50ZXN0KHRoaXMuYnVmZmVyW2pdKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltpXSA9IHRoaXMuYnVmZmVyW2pdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltqXSA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgaiA9IHRoaXMuc2Vla05leHQoaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53cml0ZUJ1ZmZlcigpO1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZmlyc3ROb25NYXNrUG9zKSkge1xuICAgICAgICAgICAgdGhpcy5jYXJldChNYXRoLm1heCh0aGlzLmZpcnN0Tm9uTWFza1BvcywgYmVnaW4pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hpZnRSKHBvczogYW55KSB7XG4gICAgICAgIGxldCBpOiBhbnk7XG4gICAgICAgIGxldCBjID0gdGhpcy5nZXRQbGFjZWhvbGRlcihwb3MpO1xuICAgICAgICBsZXQgajogYW55O1xuICAgICAgICBsZXQgdDogYW55O1xuXG4gICAgICAgIGZvciAoaSA9IHBvczsgaSA8ICh0aGlzLmxlbiA/PyAwKTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXN0cz8uW2ldKSB7XG4gICAgICAgICAgICAgICAgaiA9IHRoaXMuc2Vla05leHQoaSk7XG4gICAgICAgICAgICAgICAgdCA9IHRoaXMuYnVmZmVyW2ldO1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyW2ldID0gYztcblxuICAgICAgICAgICAgICAgIGlmIChqIDwgKHRoaXMubGVuID8/IDApICYmIHRoaXMudGVzdHNbal0udGVzdCh0KSkge1xuICAgICAgICAgICAgICAgICAgICBjID0gdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUFuZHJvaWRJbnB1dChlOiBhbnkpIHtcbiAgICAgICAgY29uc3QgY3VyVmFsID0gdGhpcy5pbnB1dD8udmFsdWU7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY2FyZXQoKTtcblxuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQocG9zPy5iZWdpbikpIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5vbGRWYWwgJiYgdGhpcy5vbGRWYWwubGVuZ3RoICYmIHRoaXMub2xkVmFsLmxlbmd0aCA+IChjdXJWYWw/Lmxlbmd0aCA/PyAwKSkge1xuICAgICAgICAgICAgLy8gQSBkZWxldGlvbiBvciBiYWNrc3BhY2UgaGFwcGVuZWRcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWwodHJ1ZSk7XG4gICAgICAgICAgICB3aGlsZSAocG9zPy5iZWdpbiA+IDAgJiYgIXRoaXMudGVzdHM/Lltwb3MuYmVnaW4gLSAxXSkge1xuICAgICAgICAgICAgICAgIHBvcy5iZWdpbi0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvcy5iZWdpbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChwb3MuYmVnaW4gPCAodGhpcy5maXJzdE5vbk1hc2tQb3MgPz8gMCkgJiYgIXRoaXMudGVzdHM/Lltwb3MuYmVnaW5dKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcy5iZWdpbisrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJldChwb3MuYmVnaW4hLCBwb3MuYmVnaW4hKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbnRWYWwgPSBjdXJWYWw/LnJlcGxhY2UodGhpcy5zbG90Q2hhciwgXCJcIik7IC8vIExpbXBhIG9zIGNhcmFjdGVyZXMgcGxhY2Vob2xkZXJzIGV4dHJhcyBjYXNvIGVsZSBlc3RlamEgY29tcGxldG9cbiAgICAgICAgICAgICAgICAgICAgc2VudFZhbCAmJiB0aGlzLnVwZGF0ZUNhbGVuZGFyVmFsdWUoc2VudFZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsKHRydWUpO1xuXG4gICAgICAgICAgICB3aGlsZSAocG9zLmJlZ2luIDwgKHRoaXMubGVuID8/IDApICYmICF0aGlzLnRlc3RzPy5bcG9zLmJlZ2luXSkge1xuICAgICAgICAgICAgICAgIHBvcy5iZWdpbisrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHBvcy5iZWdpbikpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJldChwb3MuYmVnaW4hLCBwb3MuYmVnaW4hKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VudFZhbCA9IGN1clZhbD8ucmVwbGFjZSh0aGlzLnNsb3RDaGFyLCBcIlwiKTsgLy8gTGltcGEgb3MgY2FyYWN0ZXJlcyBwbGFjZWhvbGRlcnMgZXh0cmFzIGNhc28gZWxlIGVzdGVqYSBjb21wbGV0b1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VudFZhbCAmJiB0aGlzLnVwZGF0ZUNhbGVuZGFyVmFsdWUoc2VudFZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2FsZW5kYXJWYWx1ZShzZW50VmFsOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gVE9ETyB2ZXJpZmljYXJcbiAgICAgICAgY29uc3QgZGF0ZVZhbCA9IDxEYXRlPnRoaXMuaG9zdC5wYXJzZVZhbHVlRnJvbVN0cmluZyhzZW50VmFsKTtcbiAgICAgICAgaWYgKHRoaXMuaG9zdC5pc1NlbGVjdGFibGUoZGF0ZVZhbC5nZXREYXRlKCksIGRhdGVWYWwuZ2V0TW9udGgoKSwgZGF0ZVZhbC5nZXRGdWxsWWVhcigpLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaG9zdC51cGRhdGVNb2RlbChzZW50VmFsKTtcbiAgICAgICAgICAgIHRoaXMuaG9zdC51cGRhdGVVSSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckJ1ZmZlcihzdGFydDogYW55LCBlbmQ6IGFueSkge1xuICAgICAgICBsZXQgaTtcblxuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZCAmJiBpIDwgKHRoaXMubGVuID8/IDApOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzPy5baV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltpXSA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlQnVmZmVyKCkge1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuaW5wdXQpKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnZhbHVlID0gdGhpcy5idWZmZXIuam9pbihcIlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTWFza0Zyb21EYXRlRm9ybWF0KCkge1xuICAgICAgICBjb25zdCBjYWxlbmRhciA9IHRoaXMuaG9zdDtcbiAgICAgICAgbGV0IG1hc2sgPSB0aGlzLmF1dG9DbGVhciA/IFwiP1wiIDogXCJcIjtcblxuICAgICAgICBpZiAoIWNhbGVuZGFyLnRpbWVPbmx5KSB7XG4gICAgICAgICAgICBsZXQgZGF0ZUZvcm1hdCA9IGNhbGVuZGFyLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdD8ucmVwbGFjZSgveS9nLCBcInl5XCIpO1xuICAgICAgICAgICAgbWFzayArPSBkYXRlRm9ybWF0Py5yZXBsYWNlKC9bXi8qLC5cXC0rXFxbXFxdXFxcXF0vZywgXCI5XCIpO1xuICAgICAgICAgICAgaWYgKGNhbGVuZGFyLnNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgbWFzayArPSBcIiBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWxlbmRhci5zaG93VGltZSB8fCBjYWxlbmRhci50aW1lT25seSkge1xuICAgICAgICAgICAgbWFzayArPSBcIjk5Ojk5XCI7XG4gICAgICAgICAgICBpZiAoY2FsZW5kYXIuc2hvd1NlY29uZHMpIHtcbiAgICAgICAgICAgICAgICBtYXNrICs9IFwiOjk5XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYXNrID0gbWFzaztcblxuICAgICAgICB0aGlzLmluaXRNYXNrKCk7XG4gICAgfVxuXG4gICAgaXNDb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAodGhpcy5maXJzdE5vbk1hc2tQb3MgPz8gMCk7IGkgPD0gdGhpcy5sYXN0UmVxdWlyZWROb25NYXNrUG9zOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzPy5baV0gJiYgdGhpcy5idWZmZXJbaV0gPT09IHRoaXMuZ2V0UGxhY2Vob2xkZXIoaSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhvc3QuaW5wdXRmaWVsZFZpZXdDaGlsZCAmJiB0aGlzLmZpcnN0VGltZSkge1xuICAgICAgICAgICAgdGhpcy5maXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2V0TGlzdGVuZXJzKCk7XG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC50eXBlID0gXCJ0ZWxcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb2N1c0xpc3RlbmVyKSB0aGlzLmZvY3VzTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHRoaXMuYmx1ckxpc3RlbmVyKSB0aGlzLmJsdXJMaXN0ZW5lcigpO1xuICAgICAgICBpZiAodGhpcy5rZXlkb3duTGlzdGVuZXIpIHRoaXMua2V5ZG93bkxpc3RlbmVyKCk7XG4gICAgICAgIGlmICh0aGlzLmtleXByZXNzTGlzdGVuZXIpIHRoaXMua2V5cHJlc3NMaXN0ZW5lcigpO1xuICAgICAgICBpZiAodGhpcy5pbnB1dExpc3RlbmVyKSB0aGlzLmlucHV0TGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHRoaXMucGFzdGVMaXN0ZW5lcikgdGhpcy5wYXN0ZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcImtleWRvd25cIiwgW1wiJGV2ZW50XCJdKVxuICAgIG9uS2V5ZG93bkV2ZW50VGVzdChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsga2V5IH0gPSBlO1xuICAgICAgICBpZiAoa2V5ID09IFwiVGFiXCIpIHtcbiAgICAgICAgICAgIC8vIEVzdGUgY8OzZGlnbyBmb2kgaW1wbGVtZW50YWRvIHBhcmEgY29ycmlnaXIgdW0gcHJvYmxlbWEgbm8gY29tcG9uZW50ZSBuYSB2OVxuICAgICAgICAgICAgLy8gRGV2ZSBzZXIgcmVtb3ZpZG8gYXNzaW0gcXVlIGF0dWFsaXphcm1vcyBvIFByaW1lTkcgcGFyYSBhIHYxMFxuICAgICAgICAgICAgY29uc3QgYWxsRm9jdXNhYmxlRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuU0VMRUNUT1JTKTtcbiAgICAgICAgICAgIGxldCBuZXh0SXNGb2N1c2FibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBwcmV2aW91c0ZvY3VzYWJsZTogc3RyaW5nO1xuICAgICAgICAgICAgbGV0IGZvcmNlQ2xvc2VNb2RhbCA9IHRydWU7XG4gICAgICAgICAgICBhbGxGb2N1c2FibGVFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0SXNGb2N1c2FibGUgJiYgZWxlbWVudC5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c2FibGVFbGVtZW50KGVsZW1lbnQuaWQsIGZvcmNlQ2xvc2VNb2RhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0SXNGb2N1c2FibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhY3RpdmVUYWdOYW1lID0gd2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/LnRhZ05hbWU7XG4gICAgICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkgJiYgZWxlbWVudC5pZCAmJiBlbGVtZW50LnRhZ05hbWUgPT09IFwiSU5QVVRcIiAmJiBhY3RpdmVUYWdOYW1lID09IFwiQlVUVE9OXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNGb2N1c2FibGUgPSBlbGVtZW50LmlkO1xuICAgICAgICAgICAgICAgICAgICBmb3JjZUNsb3NlTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pZCA9PT0gdGhpcy5ob3N0LmlucHV0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzRm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnQocHJldmlvdXNGb2N1c2FibGUsIGZvcmNlQ2xvc2VNb2RhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUNsb3NlTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5leHRJc0ZvY3VzYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIGVsZW1lbnQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNGb2N1c2FibGUgPSBlbGVtZW50LmlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzYWJsZUVsZW1lbnQoaWQ6IHN0cmluZywgaGlkZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgIGh0bWxFbGVtZW50Py5mb2N1cygpO1xuICAgICAgICBpZiAoaGlkZSkge1xuICAgICAgICAgICAgdGhpcy5ob3N0LmhpZGVPdmVybGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
636
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY2FsZW5kYXItbWFzay9zcmMvbGliL2NhbGVuZGFyLW1hc2svY2FsZW5kYXItbWFzay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7OztBQUk3RTs7Ozs7Ozs7Ozs7O0dBWUc7QUFJSCxNQUFNLE9BQU8scUJBQXFCO0lBaURuQjtJQUNBO0lBakRYLHdFQUF3RTtJQUN4RSw4Q0FBOEM7SUFDOUMsU0FBUyxHQUFHLDBFQUEwRSxDQUFDO0lBRXZGOzs7O09BSUc7SUFFSSxRQUFRLEdBQUcsR0FBRyxDQUFDO0lBRXRCOzs7OztPQUtHO0lBRUksU0FBUyxHQUFHLEtBQUssQ0FBQztJQUVsQixLQUFLLENBQU07SUFDWCxLQUFLLENBQW9CO0lBQ3pCLE1BQU0sQ0FBVztJQUVoQixLQUFLLENBQVU7SUFDZixJQUFJLENBQU07SUFDVixLQUFLLENBQVM7SUFDZCxlQUFlLENBQU07SUFDckIsZUFBZSxDQUE0QjtJQUMzQyxzQkFBc0IsQ0FBTTtJQUM1QixHQUFHLENBQVU7SUFDYixNQUFNLENBQVU7SUFDaEIsTUFBTSxDQUFNO0lBQ1osYUFBYSxDQUFVO0lBQ3ZCLFNBQVMsQ0FBVTtJQUNuQixjQUFjLENBQU07SUFDcEIsYUFBYSxDQUFXO0lBQ3hCLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFFakIsYUFBYSxDQUFjO0lBQzNCLFlBQVksQ0FBYztJQUMxQixlQUFlLENBQWM7SUFDN0IsZ0JBQWdCLENBQWM7SUFDOUIsYUFBYSxDQUFjO0lBQzNCLGFBQWEsQ0FBYztJQUVuQyxZQUNXLElBQWMs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QUFDLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ25CLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLE9BQU87b0JBQ1gsQ0FBQztvQkFDRCxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixDQUFDO3FCQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ2xDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBVSxFQUFFLElBQWE7UUFDN0MsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3JCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDTCxDQUFDO3dHQWhxQlEscUJBQXFCOzRGQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDJCQUEyQjtpQkFDeEM7cUdBWVUsUUFBUTtzQkFEZCxLQUFLO2dCQVVDLFNBQVM7c0JBRGYsS0FBSztnQkErbEJOLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdDaGVja2VkLCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5cbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAncHJpbWVuZy9jYWxlbmRhcic7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERpcmV0aXZhIHF1ZSBhcGxpY2EgbcOhc2NhcmEgZGUgZW50cmFkYSBhIHVtIGNvbXBvbmVudGUgYHAtY2FsZW5kYXJgIGRvIFByaW1lTkcsXG4gKiBmb3JtYXRhbmRvIGF1dG9tYXRpY2FtZW50ZSBhIGRhdGEgY29uZm9ybWUgbyBmb3JtYXRvIGNvbmZpZ3VyYWRvIG5vIGNhbGVuZMOhcmlvLlxuICogSW50ZXJjZXB0YSBvcyBldmVudG9zIGRlIHRlY2xhZG8gZSBpbnB1dCBkbyBjYW1wbyBpbnRlcm5vIGRvIGNhbGVuZGFyIHBhcmEgZ2FyYW50aXJcbiAqIHF1ZSBhcGVuYXMgZW50cmFkYXMgdsOhbGlkYXMgc2VqYW0gYWNlaXRhcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHAtY2FsZW5kYXIgc0NhbGVuZGFyTWFzayBbKG5nTW9kZWwpXT1cImRhdGFcIiBkYXRlRm9ybWF0PVwiZGQvbW0veXlcIiAvPlxuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IElucHV0c1xuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ3AtY2FsZW5kYXJbc0NhbGVuZGFyTWFza10nLFxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhck1hc2tEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gICAgLy8gVE9ETzogTXVkZWkgdW0gbW9udGUgZGUgY29pc2EgZSB0ZW0gcXVlIHRlc3RhciBzZSBpc3NvIGFpbmRhIGZ1bmNpb25hXG4gICAgLy8gVE9ETzogQWluZGEgZXN0w6Egc2VuZG8gdXNhZGEgZXN0YSBkaXJldGl2YT9cbiAgICBTRUxFQ1RPUlMgPSAnYnV0dG9uLCBbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENhcmFjdGVyZSB1c2FkbyBjb21vIHBsYWNlaG9sZGVyIHBhcmEgYXMgcG9zacOnw7VlcyBhaW5kYSBuw6NvIHByZWVuY2hpZGFzIG5hIG3DoXNjYXJhLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ18nXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2xvdENoYXIgPSAnXyc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUXVhbmRvIGB0cnVlYCwgbGltcGEgYXV0b21hdGljYW1lbnRlIG8gY2FtcG8gY2FzbyBvIHZhbG9yIGRpZ2l0YWRvXG4gICAgICogc2VqYSBpbnbDoWxpZG8gYW8gcGVyZGVyIG8gZm9jby5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXV0b0NsZWFyID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgdmFsdWU6IGFueTtcbiAgICBwdWJsaWMgaW5wdXQ/OiBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHB1YmxpYyBmaWxsZWQ/OiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBfbWFzaz86IHN0cmluZztcbiAgICBwcml2YXRlIGRlZnM6IGFueTtcbiAgICBwcml2YXRlIHRlc3RzPzogYW55W107XG4gICAgcHJpdmF0ZSBwYXJ0aWFsUG9zaXRpb246IGFueTtcbiAgICBwcml2YXRlIGZpcnN0Tm9uTWFza1BvczogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGxhc3RSZXF1aXJlZE5vbk1hc2tQb3M6IGFueTtcbiAgICBwcml2YXRlIGxlbj86IG51bWJlcjtcbiAgICBwcml2YXRlIG9sZFZhbD86IHN0cmluZztcbiAgICBwcml2YXRlIGJ1ZmZlcjogYW55O1xuICAgIHByaXZhdGUgZGVmYXVsdEJ1ZmZlcj86IHN0cmluZztcbiAgICBwcml2YXRlIGZvY3VzVGV4dD86IHN0cmluZztcbiAgICBwcml2YXRlIGNhcmV0VGltZW91dElkOiBhbnk7XG4gICAgcHJpdmF0ZSBhbmRyb2lkQ2hyb21lPzogYm9vbGVhbjtcbiAgICBwcml2YXRlIGZpcnN0VGltZSA9IHRydWU7XG5cbiAgICBwcml2YXRlIGZvY3VzTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xuICAgIHByaXZhdGUgYmx1ckxpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIGtleWRvd25MaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBrZXlwcmVzc0xpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIGlucHV0TGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xuICAgIHByaXZhdGUgcGFzdGVMaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGhvc3Q6IENhbGVuZGFyLFxuICAgICAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICApIHt9XG5cbiAgICBwcml2YXRlIHNldExpc3RlbmVycygpIHtcbiAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuaG9zdC5pbnB1dGZpZWxkVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pbnB1dD8udmFsdWU7XG5cbiAgICAgICAgdGhpcy5mb2N1c0xpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5pbnB1dCwgJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Rm9jdXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ibHVyTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmlucHV0LCAnYmx1cicsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRCbHVyKGV2ZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5rZXlkb3duTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmlucHV0LCAna2V5ZG93bicsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93bihldmVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMua2V5cHJlc3NMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQsICdrZXlwcmVzcycsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5UHJlc3MoZXZlbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmlucHV0TGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmlucHV0LCAnaW5wdXQnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKGV2ZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wYXN0ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5pbnB1dCwgJ3Bhc3RlJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICAgICAgdGhpcy5hbmRyb2lkQ2hyb21lID0gL2Nocm9tZS9pLnRlc3QodWEpICYmIC9hbmRyb2lkL2kudGVzdCh1YSk7XG5cbiAgICAgICAgdGhpcy5jcmVhdGVNYXNrRnJvbURhdGVGb3JtYXQoKTtcbiAgICAgICAgdGhpcy5pbml0TWFzaygpO1xuICAgIH1cblxuICAgIGdldCBtYXNrKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXNrID8/ICcnO1xuICAgIH1cblxuICAgIHNldCBtYXNrKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21hc2sgPSB2YWw7XG5cbiAgICAgICAgdGhpcy5pbml0TWFzaygpO1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUoJycpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVGV4dCA9IHRoaXMuaW5wdXQudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbGxlZFN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25JbnB1dEJsdXIoZTogYW55KSB7XG4gICAgICAgIHRoaXMuY2hlY2tWYWwoKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxsZWRTdGF0ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlICE9IHRoaXMuZm9jdXNUZXh0KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMuaW5wdXQ/LmRpc2FibGVkICYmXG4gICAgICAgICAgICAgICAgKHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnZhbHVlID09PSBudWxsIHx8ICh0aGlzLnZhbHVlIGFzIHN0cmluZykuaW5kZXhPZih0aGlzLnNsb3RDaGFyKSA+PSAwKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LnVwZGF0ZU1vZGVsKG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKGUpO1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xuICAgICAgICAgICAgZXZlbnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0Py5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbktleURvd24oZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmhvc3QucmVhZG9ubHlJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgayA9IGUud2hpY2ggfHwgZS5rZXlDb2RlO1xuICAgICAgICBjb25zdCBpUGhvbmUgPSAvaXBob25lL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICAgbGV0IHBvcztcbiAgICAgICAgbGV0IGJlZ2luO1xuICAgICAgICBsZXQgZW5kO1xuICAgICAgICB0aGlzLm9sZFZhbCA9IHRoaXMuaW5wdXQ/LnZhbHVlO1xuXG4gICAgICAgIC8vIEJhY2tzcGFjZSwgZGVsZXRlLCBhbmQgZXNjYXBlIGdldCBzcGVjaWFsIHRyZWF0bWVudFxuICAgICAgICBpZiAoayA9PT0gOCB8fCBrID09PSA0NiB8fCAoaVBob25lICYmIGsgPT09IDEyNykpIHtcbiAgICAgICAgICAgIHBvcyA9IHRoaXMuY2FyZXQoKTtcbiAgICAgICAgICAgIGJlZ2luID0gcG9zPy5iZWdpbjtcbiAgICAgICAgICAgIGVuZCA9IHBvcz8uZW5kO1xuXG4gICAgICAgICAgICBpZiAoYmVnaW4gJiYgZW5kKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVuZCAtIGJlZ2luID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luID0gayAhPT0gNDYgPyB0aGlzLnNlZWtQcmV2KGJlZ2luKSA6IChlbmQgPSB0aGlzLnNlZWtOZXh0KGJlZ2luIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSBrID09PSA0NiA/IHRoaXMuc2Vla05leHQoZW5kKSA6IGVuZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQnVmZmVyKGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hpZnRMKGJlZ2luLCBlbmQgLSAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlbChlKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrID09PSAxMykge1xuICAgICAgICAgICAgLy8gRW50ZXJcbiAgICAgICAgICAgIHRoaXMub25JbnB1dEJsdXIoZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGsgPT09IDI3KSB7XG4gICAgICAgICAgICAvLyBFc2NhcGVcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0ICYmIHRoaXMuZm9jdXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9IHRoaXMuZm9jdXNUZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMuY2FyZXQoMCwgdGhpcy5jaGVja1ZhbCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25LZXlQcmVzcyhlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuaG9zdC5yZWFkb25seUlucHV0KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgayA9IGUud2hpY2ggfHwgZS5rZXlDb2RlO1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmNhcmV0KCk7XG4gICAgICAgIGxldCBwO1xuICAgICAgICBsZXQgYztcbiAgICAgICAgbGV0IG5leHQ6IGFueTtcblxuICAgICAgICBpZiAoZS5jdHJsS2V5IHx8IGUuYWx0S2V5IHx8IGUubWV0YUtleSB8fCBrIDwgMzIgfHwgKGsgPiAzNCAmJiBrIDwgNDEpKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChrICYmIGsgIT09IDEzKSB7XG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHBvcz8uZW5kKSAmJiAhaXNOdWxsT3JVbmRlZmluZWQocG9zPy5iZWdpbikpIHtcbiAgICAgICAgICAgICAgICBpZiAocG9zLmVuZCAtIHBvcy5iZWdpbiAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQnVmZmVyKHBvcy5iZWdpbiwgcG9zLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnRMKHBvcy5iZWdpbiwgcG9zLmVuZCAtIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChwb3M/LmJlZ2luKSkge1xuICAgICAgICAgICAgICAgIHAgPSB0aGlzLnNlZWtOZXh0KHBvcy5iZWdpbiAtIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocCA8ICh0aGlzLmxlbiA/PyAwKSkge1xuICAgICAgICAgICAgICAgIGMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGspO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzPy5bcF0udGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0UihwKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltwXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRoaXMuc2Vla05leHQocCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGF0aCBmb3IgQ1NQIFZpb2xhdGlvbiBvbiBGaXJlRm94IE9TIDEuMVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJveHkgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJldChuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocHJveHksIDApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJldChuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsbGVkU3RhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbXBsZXRlTWFzaygpOiBzdHJpbmcge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuaG9zdC5zZWxlY3Rpb25Nb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdyYW5nZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFzayArIGAgJHt0aGlzLmhvc3QucmFuZ2VTZXBhcmF0b3J9IGAgKyB0aGlzLm1hc2s7XG4gICAgICAgICAgICBjYXNlICdzaW5nbGUnOlxuICAgICAgICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc2s7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja1ZhbChhbGxvdz86IGJvb2xlYW4pIHtcbiAgICAgICAgLy8gVHJ5IHRvIHBsYWNlIGNoYXJhY3RlcnMgd2hlcmUgdGhleSBiZWxvbmdcbiAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMuaW5wdXQ/LnZhbHVlO1xuICAgICAgICBsZXQgbGFzdE1hdGNoID0gLTE7XG4gICAgICAgIGxldCBpOiBhbnk7XG4gICAgICAgIGxldCBjOiBhbnk7XG4gICAgICAgIGxldCBwb3MgPSAwO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAodGhpcy5sZW4gPz8gMCk7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVzdHM/LltpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyW2ldID0gdGhpcy5nZXRQbGFjZWhvbGRlcihpKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAocG9zKysgPCAodGVzdD8ubGVuZ3RoID8/IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSB0ZXN0Py5jaGFyQXQocG9zIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzW2ldLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyW2ldID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RNYXRjaCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocG9zID4gKHRlc3Q/Lmxlbmd0aCA/PyAwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQnVmZmVyKGkgKyAxLCB0aGlzLmxlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVmZmVyW2ldID09PSB0ZXN0Py5jaGFyQXQocG9zKSkge1xuICAgICAgICAgICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPCB0aGlzLnBhcnRpYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBsYXN0TWF0Y2ggPSBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3cpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXN0TWF0Y2ggKyAxIDwgdGhpcy5wYXJ0aWFsUG9zaXRpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9DbGVhciB8fCB0aGlzLmJ1ZmZlci5qb2luKCcnKSA9PT0gdGhpcy5kZWZhdWx0QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgLy8gSW52YWxpZCB2YWx1ZS4gUmVtb3ZlIGl0IGFuZCByZXBsYWNlIGl0IHdpdGggdGhlXG4gICAgICAgICAgICAgICAgLy8gbWFzaywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQ/LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckJ1ZmZlcigwLCB0aGlzLmxlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEludmFsaWQgdmFsdWUsIGJ1dCB3ZSBvcHQgdG8gc2hvdyB0aGUgdmFsdWUgdG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gdXNlciBhbmQgYWxsb3cgdGhlbSB0byBjb3JyZWN0IHRoZWlyIG1pc3Rha2UuXG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZUJ1ZmZlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cml0ZUJ1ZmZlcigpO1xuICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLmlucHV0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlLnN1YnN0cmluZygwLCBsYXN0TWF0Y2ggKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnBhcnRpYWxQb3NpdGlvbiA/IGkgOiB0aGlzLmZpcnN0Tm9uTWFza1BvcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb25JbnB1dEZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5ob3N0LnJlYWRvbmx5SW5wdXQpIHJldHVybjtcblxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jYXJldFRpbWVvdXRJZCk7XG4gICAgICAgIGxldCBwb3M6IGFueTtcblxuICAgICAgICB0aGlzLmZvY3VzVGV4dCA9IHRoaXMuaW5wdXQ/LnZhbHVlO1xuXG4gICAgICAgIHBvcyA9IHRoaXMuY2hlY2tWYWwoKTtcblxuICAgICAgICB0aGlzLmNhcmV0VGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dCAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcbiAgICAgICAgICAgIGlmIChwb3MgPT0gdGhpcy5tYXNrLnJlcGxhY2UoJz8nLCAnJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJldCgwLCBwb3MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmV0KHBvcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25JbnB1dENoYW5nZShldmVudDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmFuZHJvaWRDaHJvbWUpIHRoaXMuaGFuZGxlQW5kcm9pZElucHV0KGV2ZW50KTtcbiAgICAgICAgZWxzZSB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5ob3N0LnJlYWRvbmx5SW5wdXQpIHJldHVybjtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY2hlY2tWYWwodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmNhcmV0KHBvcyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKGV2ZW50KTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZU1vZGVsKGU6IGFueSkge1xuICAgICAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgaWYgKHVwZGF0ZWRWYWx1ZSAhPT0gbnVsbCB8fCB1cGRhdGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHVwZGF0ZWRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5vblVzZXJJbnB1dChlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVGaWxsZWRTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5maWxsZWQgPSB0aGlzLmlucHV0ICYmIHRoaXMuaW5wdXQudmFsdWUgIT0gJyc7XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzKCkge1xuICAgICAgICB0aGlzLmlucHV0Py5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdE1hc2soKSB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXRlTWFzayA9IHRoaXMuY3JlYXRlQ29tcGxldGVNYXNrKCk7XG5cbiAgICAgICAgdGhpcy50ZXN0cyA9IFtdO1xuICAgICAgICB0aGlzLnBhcnRpYWxQb3NpdGlvbiA9IGNvbXBsZXRlTWFzay5sZW5ndGg7XG4gICAgICAgIHRoaXMubGVuID0gY29tcGxldGVNYXNrLmxlbmd0aDtcbiAgICAgICAgdGhpcy5maXJzdE5vbk1hc2tQb3MgPSBudWxsO1xuICAgICAgICB0aGlzLmRlZnMgPSB7XG4gICAgICAgICAgICAnOSc6ICdbMC05XScsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWFza1Rva2VucyA9IGNvbXBsZXRlTWFzay5zcGxpdCgnJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFza1Rva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYyA9IG1hc2tUb2tlbnNbaV07XG5cbiAgICAgICAgICAgIGlmIChjID09ICc/Jykge1xuICAgICAgICAgICAgICAgIHRoaXMubGVuLS07XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWFsUG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRlZnNbY10pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RzLnB1c2gobmV3IFJlZ0V4cCh0aGlzLmRlZnNbY10pKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0Tm9uTWFza1BvcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0Tm9uTWFza1BvcyA9IHRoaXMudGVzdHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaSA8IHRoaXMucGFydGlhbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFJlcXVpcmVkTm9uTWFza1BvcyA9IHRoaXMudGVzdHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudGVzdHMucHVzaChudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVmZmVyID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrVG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbWFza1Rva2Vuc1tpXTtcblxuICAgICAgICAgICAgaWYgKGMgIT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmc1tjXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKHRoaXMuZ2V0UGxhY2Vob2xkZXIoaSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0QnVmZmVyID0gdGhpcy5idWZmZXIuam9pbignJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXJldChmaXJzdD86IG51bWJlciwgbGFzdD86IG51bWJlcikge1xuICAgICAgICBsZXQgcmFuZ2UsIGJlZ2luLCBlbmQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlucHV0Py5vZmZzZXRQYXJlbnQgfHwgdGhpcy5pbnB1dCAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgYmVnaW46IDAsIGVuZDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBmaXJzdCA9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgYmVnaW4gPSBmaXJzdDtcbiAgICAgICAgICAgIGVuZCA9IHR5cGVvZiBsYXN0ID09PSAnbnVtYmVyJyA/IGxhc3QgOiBiZWdpbjtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnNldFNlbGVjdGlvblJhbmdlKGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgodGhpcy5pbnB1dCBhcyBhbnkpWydjcmVhdGVUZXh0UmFuZ2UnXSkge1xuICAgICAgICAgICAgICAgIHJhbmdlID0gKHRoaXMuaW5wdXQgYXMgYW55KVsnY3JlYXRlVGV4dFJhbmdlJ10oKTtcbiAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgICAgICAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQpO1xuICAgICAgICAgICAgICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgYmVnaW4pO1xuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmVnaW4gPSB0aGlzLmlucHV0LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgZW5kID0gdGhpcy5pbnB1dC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAgIHJldHVybiB7IGJlZ2luOiBiZWdpbiwgZW5kOiBlbmQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGJlZ2luOiBmaXJzdCA/PyAwLCBlbmQ6IGxhc3QgPz8gMCB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGxhY2Vob2xkZXIoaTogbnVtYmVyKSB7XG4gICAgICAgIGlmIChpIDwgdGhpcy5zbG90Q2hhci5sZW5ndGgpIHJldHVybiB0aGlzLnNsb3RDaGFyLmNoYXJBdChpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xvdENoYXIuY2hhckF0KDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2Vla05leHQocG9zOiBhbnkpIHtcbiAgICAgICAgd2hpbGUgKCsrcG9zIDwgKHRoaXMubGVuID8/IDApKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXN0cz8uW3Bvc10pIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWVrUHJldihwb3M6IGFueSkge1xuICAgICAgICB3aGlsZSAoLS1wb3MgPj0gMCAmJiAhdGhpcy50ZXN0cz8uW3Bvc10pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzPy5bcG9zXSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNoaWZ0TChiZWdpbjogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xuICAgICAgICBsZXQgaTogYW55O1xuICAgICAgICBsZXQgajogYW55O1xuXG4gICAgICAgIGlmIChiZWdpbiA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGogPSB0aGlzLnNlZWtOZXh0KGVuZCk7XG5cbiAgICAgICAgZm9yIChpID0gYmVnaW47IGkgPCAodGhpcy5sZW4gPz8gMCk7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVzdHM/LltpXSkge1xuICAgICAgICAgICAgICAgIGlmIChqIDwgKHRoaXMubGVuID8/IDApICYmIHRoaXMudGVzdHNbaV0udGVzdCh0aGlzLmJ1ZmZlcltqXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJbaV0gPSB0aGlzLmJ1ZmZlcltqXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJbal0gPSB0aGlzLmdldFBsYWNlaG9sZGVyKGopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBicmVhaztcblxuICAgICAgICAgICAgICAgIGogPSB0aGlzLnNlZWtOZXh0KGopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLmZpcnN0Tm9uTWFza1BvcykpIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZXQoTWF0aC5tYXgodGhpcy5maXJzdE5vbk1hc2tQb3MsIGJlZ2luKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNoaWZ0Uihwb3M6IGFueSkge1xuICAgICAgICBsZXQgaTogYW55O1xuICAgICAgICBsZXQgYyA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIocG9zKTtcbiAgICAgICAgbGV0IGo6IGFueTtcbiAgICAgICAgbGV0IHQ6IGFueTtcblxuICAgICAgICBmb3IgKGkgPSBwb3M7IGkgPCAodGhpcy5sZW4gPz8gMCk7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVzdHM/LltpXSkge1xuICAgICAgICAgICAgICAgIGogPSB0aGlzLnNlZWtOZXh0KGkpO1xuICAgICAgICAgICAgICAgIHQgPSB0aGlzLmJ1ZmZlcltpXTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltpXSA9IGM7XG5cbiAgICAgICAgICAgICAgICBpZiAoaiA8ICh0aGlzLmxlbiA/PyAwKSAmJiB0aGlzLnRlc3RzW2pdLnRlc3QodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IHQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVBbmRyb2lkSW5wdXQoZTogYW55KSB7XG4gICAgICAgIGNvbnN0IGN1clZhbCA9IHRoaXMuaW5wdXQ/LnZhbHVlO1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmNhcmV0KCk7XG5cbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHBvcz8uYmVnaW4pKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMub2xkVmFsICYmIHRoaXMub2xkVmFsLmxlbmd0aCAmJiB0aGlzLm9sZFZhbC5sZW5ndGggPiAoY3VyVmFsPy5sZW5ndGggPz8gMCkpIHtcbiAgICAgICAgICAgIC8vIEEgZGVsZXRpb24gb3IgYmFja3NwYWNlIGhhcHBlbmVkXG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsKHRydWUpO1xuICAgICAgICAgICAgd2hpbGUgKHBvcz8uYmVnaW4gPiAwICYmICF0aGlzLnRlc3RzPy5bcG9zLmJlZ2luIC0gMV0pIHtcbiAgICAgICAgICAgICAgICBwb3MuYmVnaW4tLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwb3MuYmVnaW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAocG9zLmJlZ2luIDwgKHRoaXMuZmlyc3ROb25NYXNrUG9zID8/IDApICYmICF0aGlzLnRlc3RzPy5bcG9zLmJlZ2luXSkge1xuICAgICAgICAgICAgICAgICAgICBwb3MuYmVnaW4rKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FyZXQocG9zLmJlZ2luISwgcG9zLmJlZ2luISk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZW50VmFsID0gY3VyVmFsPy5yZXBsYWNlKHRoaXMuc2xvdENoYXIsICcnKTsgLy8gTGltcGEgb3MgY2FyYWN0ZXJlcyBwbGFjZWhvbGRlcnMgZXh0cmFzIGNhc28gZWxlIGVzdGVqYSBjb21wbGV0b1xuICAgICAgICAgICAgICAgICAgICBzZW50VmFsICYmIHRoaXMudXBkYXRlQ2FsZW5kYXJWYWx1ZShzZW50VmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWwodHJ1ZSk7XG5cbiAgICAgICAgICAgIHdoaWxlIChwb3MuYmVnaW4gPCAodGhpcy5sZW4gPz8gMCkgJiYgIXRoaXMudGVzdHM/Lltwb3MuYmVnaW5dKSB7XG4gICAgICAgICAgICAgICAgcG9zLmJlZ2luKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQocG9zLmJlZ2luKSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcmV0KHBvcy5iZWdpbiEsIHBvcy5iZWdpbiEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZW50VmFsID0gY3VyVmFsPy5yZXBsYWNlKHRoaXMuc2xvdENoYXIsICcnKTsgLy8gTGltcGEgb3MgY2FyYWN0ZXJlcyBwbGFjZWhvbGRlcnMgZXh0cmFzIGNhc28gZWxlIGVzdGVqYSBjb21wbGV0b1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VudFZhbCAmJiB0aGlzLnVwZGF0ZUNhbGVuZGFyVmFsdWUoc2VudFZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2FsZW5kYXJWYWx1ZShzZW50VmFsOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gVE9ETyB2ZXJpZmljYXJcbiAgICAgICAgY29uc3QgZGF0ZVZhbCA9IDxEYXRlPnRoaXMuaG9zdC5wYXJzZVZhbHVlRnJvbVN0cmluZyhzZW50VmFsKTtcbiAgICAgICAgaWYgKHRoaXMuaG9zdC5pc1NlbGVjdGFibGUoZGF0ZVZhbC5nZXREYXRlKCksIGRhdGVWYWwuZ2V0TW9udGgoKSwgZGF0ZVZhbC5nZXRGdWxsWWVhcigpLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaG9zdC51cGRhdGVNb2RlbChzZW50VmFsKTtcbiAgICAgICAgICAgIHRoaXMuaG9zdC51cGRhdGVVSSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckJ1ZmZlcihzdGFydDogYW55LCBlbmQ6IGFueSkge1xuICAgICAgICBsZXQgaTtcblxuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZCAmJiBpIDwgKHRoaXMubGVuID8/IDApOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzPy5baV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltpXSA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlQnVmZmVyKCkge1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuaW5wdXQpKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnZhbHVlID0gdGhpcy5idWZmZXIuam9pbignJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU1hc2tGcm9tRGF0ZUZvcm1hdCgpIHtcbiAgICAgICAgY29uc3QgY2FsZW5kYXIgPSB0aGlzLmhvc3Q7XG4gICAgICAgIGxldCBtYXNrID0gdGhpcy5hdXRvQ2xlYXIgPyAnPycgOiAnJztcblxuICAgICAgICBpZiAoIWNhbGVuZGFyLnRpbWVPbmx5KSB7XG4gICAgICAgICAgICBsZXQgZGF0ZUZvcm1hdCA9IGNhbGVuZGFyLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdD8ucmVwbGFjZSgveS9nLCAneXknKTtcbiAgICAgICAgICAgIG1hc2sgKz0gZGF0ZUZvcm1hdD8ucmVwbGFjZSgvW14vKiwuXFwtK1xcW1xcXVxcXFxdL2csICc5Jyk7XG4gICAgICAgICAgICBpZiAoY2FsZW5kYXIuc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICBtYXNrICs9ICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWxlbmRhci5zaG93VGltZSB8fCBjYWxlbmRhci50aW1lT25seSkge1xuICAgICAgICAgICAgbWFzayArPSAnOTk6OTknO1xuICAgICAgICAgICAgaWYgKGNhbGVuZGFyLnNob3dTZWNvbmRzKSB7XG4gICAgICAgICAgICAgICAgbWFzayArPSAnOjk5JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hc2sgPSBtYXNrO1xuXG4gICAgICAgIHRoaXMuaW5pdE1hc2soKTtcbiAgICB9XG5cbiAgICBpc0NvbXBsZXRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZmlyc3ROb25NYXNrUG9zID8/IDA7IGkgPD0gdGhpcy5sYXN0UmVxdWlyZWROb25NYXNrUG9zOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzPy5baV0gJiYgdGhpcy5idWZmZXJbaV0gPT09IHRoaXMuZ2V0UGxhY2Vob2xkZXIoaSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhvc3QuaW5wdXRmaWVsZFZpZXdDaGlsZCAmJiB0aGlzLmZpcnN0VGltZSkge1xuICAgICAgICAgICAgdGhpcy5maXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2V0TGlzdGVuZXJzKCk7XG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC50eXBlID0gJ3RlbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNMaXN0ZW5lcikgdGhpcy5mb2N1c0xpc3RlbmVyKCk7XG4gICAgICAgIGlmICh0aGlzLmJsdXJMaXN0ZW5lcikgdGhpcy5ibHVyTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHRoaXMua2V5ZG93bkxpc3RlbmVyKSB0aGlzLmtleWRvd25MaXN0ZW5lcigpO1xuICAgICAgICBpZiAodGhpcy5rZXlwcmVzc0xpc3RlbmVyKSB0aGlzLmtleXByZXNzTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRMaXN0ZW5lcikgdGhpcy5pbnB1dExpc3RlbmVyKCk7XG4gICAgICAgIGlmICh0aGlzLnBhc3RlTGlzdGVuZXIpIHRoaXMucGFzdGVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIG9uS2V5ZG93bkV2ZW50VGVzdChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsga2V5IH0gPSBlO1xuICAgICAgICBpZiAoa2V5ID09ICdUYWInKSB7XG4gICAgICAgICAgICAvLyBFc3RlIGPDs2RpZ28gZm9pIGltcGxlbWVudGFkbyBwYXJhIGNvcnJpZ2lyIHVtIHByb2JsZW1hIG5vIGNvbXBvbmVudGUgbmEgdjlcbiAgICAgICAgICAgIC8vIERldmUgc2VyIHJlbW92aWRvIGFzc2ltIHF1ZSBhdHVhbGl6YXJtb3MgbyBQcmltZU5HIHBhcmEgYSB2MTBcbiAgICAgICAgICAgIGNvbnN0IGFsbEZvY3VzYWJsZUVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLlNFTEVDVE9SUyk7XG4gICAgICAgICAgICBsZXQgbmV4dElzRm9jdXNhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgcHJldmlvdXNGb2N1c2FibGU6IHN0cmluZztcbiAgICAgICAgICAgIGxldCBmb3JjZUNsb3NlTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgYWxsRm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dElzRm9jdXNhYmxlICYmIGVsZW1lbnQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudChlbGVtZW50LmlkLCBmb3JjZUNsb3NlTW9kYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dElzRm9jdXNhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYWN0aXZlVGFnTmFtZSA9IHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50Py50YWdOYW1lO1xuICAgICAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5ICYmIGVsZW1lbnQuaWQgJiYgZWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQnICYmIGFjdGl2ZVRhZ05hbWUgPT0gJ0JVVFRPTicpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNGb2N1c2FibGUgPSBlbGVtZW50LmlkO1xuICAgICAgICAgICAgICAgICAgICBmb3JjZUNsb3NlTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pZCA9PT0gdGhpcy5ob3N0LmlucHV0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzRm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnQocHJldmlvdXNGb2N1c2FibGUsIGZvcmNlQ2xvc2VNb2RhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUNsb3NlTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5leHRJc0ZvY3VzYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIGVsZW1lbnQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNGb2N1c2FibGUgPSBlbGVtZW50LmlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzYWJsZUVsZW1lbnQoaWQ6IHN0cmluZywgaGlkZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgIGh0bWxFbGVtZW50Py5mb2N1cygpO1xuICAgICAgICBpZiAoaGlkZSkge1xuICAgICAgICAgICAgdGhpcy5ob3N0LmhpZGVPdmVybGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiJdfQ==