@seniorsistemas/angular-components 17.27.1-fix-interactive-content-22e06381 → 17.27.1-fixlookupteste-sds-110-c424f879

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 (932) hide show
  1. package/dynamic-form/lib/dynamic-form/components/lookup/lookup.component.d.ts +2 -1
  2. package/dynamic-form/lib/dynamic-form/dynamic-form.module.d.ts +23 -23
  3. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +2 -0
  4. package/dynamic-form/lib/dynamic-form/form-field/fields/radio-button/radio-button-field.component.d.ts +3 -3
  5. package/esm2022/accordion/lib/accordion/accordion.component.mjs +84 -0
  6. package/esm2022/accordion/lib/accordion/accordion.module.mjs +36 -0
  7. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +124 -0
  8. package/esm2022/accordion/lib/accordion/models/accordion-button-settings.mjs +2 -0
  9. package/esm2022/accordion/public-api.mjs +4 -0
  10. package/esm2022/accordion/seniorsistemas-angular-components-accordion.mjs +5 -0
  11. package/esm2022/alert/lib/alert/alert.component.mjs +44 -0
  12. package/esm2022/alert/lib/alert/alert.module.mjs +18 -0
  13. package/esm2022/alert/public-api.mjs +3 -0
  14. package/esm2022/alert/seniorsistemas-angular-components-alert.mjs +5 -0
  15. package/esm2022/badge/lib/badge/badge.component.mjs +46 -0
  16. package/esm2022/badge/lib/badge/badge.module.mjs +20 -0
  17. package/esm2022/badge/lib/badge/types/badge-colors.mjs +4 -0
  18. package/esm2022/badge/lib/badge/types/badge-types.mjs +2 -0
  19. package/esm2022/badge/public-api.mjs +3 -0
  20. package/esm2022/badge/seniorsistemas-angular-components-badge.mjs +5 -0
  21. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +156 -0
  22. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.module.mjs +21 -0
  23. package/esm2022/bignumber-input/public-api.mjs +3 -0
  24. package/esm2022/bignumber-input/seniorsistemas-angular-components-bignumber-input.mjs +5 -0
  25. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +105 -0
  26. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.module.mjs +20 -0
  27. package/esm2022/breadcrumb/public-api.mjs +3 -0
  28. package/esm2022/breadcrumb/seniorsistemas-angular-components-breadcrumb.mjs +5 -0
  29. package/esm2022/button/lib/button/button.component.mjs +106 -0
  30. package/esm2022/button/lib/button/button.module.mjs +18 -0
  31. package/esm2022/button/lib/button/models/button-animations.mjs +2 -0
  32. package/esm2022/button/lib/button/models/button-badge-config.mjs +2 -0
  33. package/esm2022/button/lib/button/models/button-priority.mjs +2 -0
  34. package/esm2022/button/lib/button/models/button-size.mjs +2 -0
  35. package/esm2022/button/lib/button/models/index.mjs +2 -0
  36. package/esm2022/button/public-api.mjs +4 -0
  37. package/esm2022/button/seniorsistemas-angular-components-button.mjs +5 -0
  38. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +611 -0
  39. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.module.mjs +18 -0
  40. package/esm2022/calendar-mask/public-api.mjs +3 -0
  41. package/esm2022/calendar-mask/seniorsistemas-angular-components-calendar-mask.mjs +5 -0
  42. package/esm2022/card/lib/card/card.component.mjs +85 -0
  43. package/esm2022/card/lib/card/card.module.mjs +19 -0
  44. package/esm2022/card/public-api.mjs +3 -0
  45. package/esm2022/card/seniorsistemas-angular-components-card.mjs +5 -0
  46. package/esm2022/chat/lib/chat/chat.component.mjs +29 -0
  47. package/esm2022/chat/lib/chat/chat.module.mjs +22 -0
  48. package/esm2022/chat/lib/chat/components/chat-message/chat-message.component.mjs +29 -0
  49. package/esm2022/chat/lib/chat/types/chat-message.mjs +2 -0
  50. package/esm2022/chat/public-api.mjs +3 -0
  51. package/esm2022/chat/seniorsistemas-angular-components-chat.mjs +5 -0
  52. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +67 -0
  53. package/esm2022/checkbox/public-api.mjs +2 -0
  54. package/esm2022/checkbox/seniorsistemas-angular-components-checkbox.mjs +5 -0
  55. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +129 -0
  56. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.module.mjs +19 -0
  57. package/esm2022/checkbox-list/lib/checkbox-list/models/checkbox-list-data.mjs +2 -0
  58. package/esm2022/checkbox-list/lib/checkbox-list/models/checkbox-list-state.mjs +2 -0
  59. package/esm2022/checkbox-list/public-api.mjs +3 -0
  60. package/esm2022/checkbox-list/seniorsistemas-angular-components-checkbox-list.mjs +5 -0
  61. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +67 -0
  62. package/esm2022/chips/lib/chips/chips/chips.component.mjs +241 -0
  63. package/esm2022/chips/lib/chips/chips.module.mjs +22 -0
  64. package/esm2022/chips/lib/chips/models/chip-models.mjs +2 -0
  65. package/esm2022/chips/public-api.mjs +3 -0
  66. package/esm2022/chips/seniorsistemas-angular-components-chips.mjs +5 -0
  67. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +111 -0
  68. package/esm2022/code-editor/lib/code-editor/code-editor.module.mjs +32 -0
  69. package/esm2022/code-editor/lib/code-editor/core/facades/core-facade.mjs +85 -0
  70. package/esm2022/code-editor/lib/code-editor/core/facades/linter-facade.mjs +2 -0
  71. package/esm2022/code-editor/lib/code-editor/core/models/enums/marker-severity.mjs +7 -0
  72. package/esm2022/code-editor/lib/code-editor/core/models/index.mjs +5 -0
  73. package/esm2022/code-editor/lib/code-editor/core/models/interfaces/marker.mjs +2 -0
  74. package/esm2022/code-editor/lib/code-editor/core/use-cases/core-linters.mjs +11 -0
  75. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/codemirror-6-core.mjs +97 -0
  76. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/editor-languages.mjs +17 -0
  77. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/json/json.language.mjs +67 -0
  78. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-states/autocomplete-empty-state.mjs +29 -0
  79. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-states/autocomplete-loading-state.mjs +29 -0
  80. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-states/autocomplete-state-wrapper/autocomplete-state-wrapper-style.mjs +17 -0
  81. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-states/autocomplete-state-wrapper/autocomplete-state-wrapper.mjs +77 -0
  82. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-states/index.mjs +4 -0
  83. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-style.mjs +35 -0
  84. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete.mjs +334 -0
  85. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete.service.mjs +25 -0
  86. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/base-configs/base-configs.mjs +18 -0
  87. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/base-configs/grammar.mjs +37 -0
  88. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/enums/completion-types.mjs +10 -0
  89. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/enums/enum-type-order.mjs +8 -0
  90. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/enums/keywords.mjs +12 -0
  91. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/enums/meta-type.mjs +36 -0
  92. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/enums/request-types.mjs +9 -0
  93. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/index.mjs +22 -0
  94. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/completion-Item.mjs +2 -0
  95. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/facade-metadata-name.mjs +2 -0
  96. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/fields-order-by.mjs +2 -0
  97. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/get-facade-metadata-by-path.mjs +2 -0
  98. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/list-context-metadata-by-id.mjs +2 -0
  99. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/list-expression-metadata.mjs +2 -0
  100. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/list-facade-metadata-names.mjs +2 -0
  101. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/rec-expression-metadata.mjs +2 -0
  102. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/rec-front-context-metadata.mjs +2 -0
  103. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/rec-front-facade-metadata.mjs +2 -0
  104. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/rec-front-field-metadata.mjs +2 -0
  105. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/rec-page-request.mjs +2 -0
  106. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/safe-http-communication.mjs +2 -0
  107. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/tax-calculation-configs.mjs +2 -0
  108. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/tax-calculation-language-configs.mjs +11 -0
  109. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/tax-calculation.language.mjs +9 -0
  110. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/utils/get-language-configs.mjs +14 -0
  111. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/utils/get-safe-response.mjs +18 -0
  112. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/utils/index.mjs +3 -0
  113. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/models/index.mjs +4 -0
  114. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/models/types/diagnostic-severity.mjs +2 -0
  115. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/models/types/editor-theme.mjs +2 -0
  116. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/editor-themes.mjs +15 -0
  117. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/extensions/autocomplete-tooltip.mjs +61 -0
  118. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/extensions/font-style.mjs +39 -0
  119. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/extensions/line-counter.mjs +25 -0
  120. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/extensions/scrollbars.mjs +18 -0
  121. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/sds-light-highlight-style.mjs +16 -0
  122. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/sds-light-style.mjs +13 -0
  123. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/sds-light-theme.mjs +22 -0
  124. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/utils/convert-markers-to-diagnostics.mjs +15 -0
  125. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/utils/index.mjs +3 -0
  126. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/utils/is-current-position-inside-string.mjs +5 -0
  127. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-http-client/custom-http-client.mjs +82 -0
  128. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-http-client/json-response-formatters/format-blob-response.mjs +10 -0
  129. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-http-client/json-response-formatters/format-json-response.mjs +9 -0
  130. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-http-client/json-response-formatters/index.mjs +3 -0
  131. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/custom-translations-service.mjs +37 -0
  132. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/custom-translations.module.mjs +32 -0
  133. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/index.mjs +3 -0
  134. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/models/index.mjs +3 -0
  135. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/models/interfaces/translations.mjs +2 -0
  136. package/esm2022/code-editor/lib/code-editor/infra/utils/index.mjs +3 -0
  137. package/esm2022/code-editor/lib/code-editor/models/enums/languages.mjs +6 -0
  138. package/esm2022/code-editor/lib/code-editor/models/enums/themes.mjs +5 -0
  139. package/esm2022/code-editor/lib/code-editor/models/index.mjs +6 -0
  140. package/esm2022/code-editor/lib/code-editor/models/interfaces/editor-options.mjs +2 -0
  141. package/esm2022/code-editor/public-api.mjs +6 -0
  142. package/esm2022/code-editor/seniorsistemas-angular-components-code-editor.mjs +5 -0
  143. package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +81 -0
  144. package/esm2022/collapse-link/lib/collapse-link/collapse-link.module.mjs +18 -0
  145. package/esm2022/collapse-link/public-api.mjs +3 -0
  146. package/esm2022/collapse-link/seniorsistemas-angular-components-collapse-link.mjs +5 -0
  147. package/esm2022/common/lib/angular-components.module.mjs +24 -0
  148. package/esm2022/common/lib/custom-http-client/custom-http-client.mjs +86 -0
  149. package/esm2022/common/lib/custom-http-client/json-response-formatters/format-blob-response.mjs +10 -0
  150. package/esm2022/common/lib/custom-http-client/json-response-formatters/format-json-response.mjs +9 -0
  151. package/esm2022/common/lib/debouce.mjs +35 -0
  152. package/esm2022/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.mjs +11 -0
  153. package/esm2022/common/lib/svg-factory/components/senior-icon/senior-icon.component.mjs +11 -0
  154. package/esm2022/common/lib/svg-factory/components/svg-factory-icons.mjs +2 -0
  155. package/esm2022/common/lib/svg-factory/index.mjs +3 -0
  156. package/esm2022/common/lib/svg-factory/svg-factory.directive.mjs +44 -0
  157. package/esm2022/common/lib/svg-factory/svg-factory.module.mjs +26 -0
  158. package/esm2022/common/public-api.mjs +5 -0
  159. package/esm2022/common/seniorsistemas-angular-components-common.mjs +5 -0
  160. package/esm2022/confirm-dialog/lib/confirm-dialog.model.mjs +2 -0
  161. package/esm2022/confirm-dialog/lib/confirm-dialog.service.mjs +34 -0
  162. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +17 -0
  163. package/esm2022/confirm-dialog/public-api.mjs +2 -0
  164. package/esm2022/confirm-dialog/seniorsistemas-angular-components-confirm-dialog.mjs +5 -0
  165. package/esm2022/control-errors/lib/control-errors/control-errors.component.mjs +52 -0
  166. package/esm2022/control-errors/lib/control-errors/control-errors.module.mjs +19 -0
  167. package/esm2022/control-errors/public-api.mjs +3 -0
  168. package/esm2022/control-errors/seniorsistemas-angular-components-control-errors.mjs +5 -0
  169. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +319 -0
  170. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.module.mjs +41 -0
  171. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.mjs +42 -0
  172. package/esm2022/country-phone-picker/lib/country-phone-picker/models/country-phone-data.mjs +2 -0
  173. package/esm2022/country-phone-picker/lib/country-phone-picker/models/ordination.mjs +7 -0
  174. package/esm2022/country-phone-picker/lib/country-phone-picker/models/phone-selection-data.mjs +2 -0
  175. package/esm2022/country-phone-picker/lib/country-phone-picker/resources/countries.mjs +228 -0
  176. package/esm2022/country-phone-picker/public-api.mjs +5 -0
  177. package/esm2022/country-phone-picker/seniorsistemas-angular-components-country-phone-picker.mjs +5 -0
  178. package/esm2022/currency/lib/currency.service.mjs +25 -0
  179. package/esm2022/currency/lib/models/currencies.mjs +161 -0
  180. package/esm2022/currency/lib/types/currency.mjs +2 -0
  181. package/esm2022/currency/public-api.mjs +3 -0
  182. package/esm2022/currency/seniorsistemas-angular-components-currency.mjs +5 -0
  183. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +690 -0
  184. package/esm2022/custom-fields/lib/custom-fields/custom-fields.module.mjs +45 -0
  185. package/esm2022/custom-fields/lib/custom-fields/custom-fields.service.mjs +35 -0
  186. package/esm2022/custom-fields/lib/custom-fields/models/custom-field-type.mjs +17 -0
  187. package/esm2022/custom-fields/public-api.mjs +4 -0
  188. package/esm2022/custom-fields/seniorsistemas-angular-components-custom-fields.mjs +5 -0
  189. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +82 -0
  190. package/esm2022/dialog/lib/src/dialog/models/active-dialog.mjs +18 -0
  191. package/esm2022/dialog/lib/src/dialog/models/dialog-models.mjs +2 -0
  192. package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +96 -0
  193. package/esm2022/dialog/lib/src/dialog/services/internal-dialog.service.mjs +29 -0
  194. package/esm2022/dialog/public-api.mjs +4 -0
  195. package/esm2022/dialog/seniorsistemas-angular-components-dialog.mjs +5 -0
  196. package/esm2022/dynamic-form/lib/dynamic-form/components/field-label/field-label.component.mjs +20 -0
  197. package/esm2022/dynamic-form/lib/dynamic-form/components/grid/row/row.component.mjs +41 -0
  198. package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/lookup.component.mjs +632 -0
  199. package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/types/default-filter.mjs +2 -0
  200. package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/types/label-options.mjs +2 -0
  201. package/esm2022/dynamic-form/lib/dynamic-form/components/structure/base-structure-component.mjs +2 -0
  202. package/esm2022/dynamic-form/lib/dynamic-form/components/structure/fieldset/fieldset.component.mjs +27 -0
  203. package/esm2022/dynamic-form/lib/dynamic-form/components/structure/section/section.component.mjs +33 -0
  204. package/esm2022/dynamic-form/lib/dynamic-form/configurations/dynamic-config.mjs +71 -0
  205. package/esm2022/dynamic-form/lib/dynamic-form/configurations/dynamic-type.mjs +26 -0
  206. package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid/grid.mjs +14 -0
  207. package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid/row.mjs +10 -0
  208. package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid-type.mjs +5 -0
  209. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/fieldset.mjs +10 -0
  210. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/section.mjs +31 -0
  211. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/structure.mjs +9 -0
  212. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure-type.mjs +6 -0
  213. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.component.mjs +41 -0
  214. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.directive.mjs +107 -0
  215. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.mjs +189 -0
  216. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.module.mjs +289 -0
  217. package/esm2022/dynamic-form/lib/dynamic-form/form-field/addon-config.mjs +2 -0
  218. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/field-size.mjs +13 -0
  219. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/field-type.mjs +34 -0
  220. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +24 -0
  221. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +37 -0
  222. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/blob-field.mjs +31 -0
  223. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-field.mjs +30 -0
  224. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +15 -0
  225. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/button-field.mjs +47 -0
  226. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/calendar-field.mjs +56 -0
  227. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +9 -0
  228. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/chips-field.mjs +25 -0
  229. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +15 -0
  230. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/currency-field.mjs +14 -0
  231. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/decimal-field.mjs +16 -0
  232. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/editor-field.mjs +15 -0
  233. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/field.mjs +64 -0
  234. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/lookup-field.mjs +66 -0
  235. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/number-field.mjs +38 -0
  236. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/password-field.mjs +33 -0
  237. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/profile-picture.mjs +35 -0
  238. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +27 -0
  239. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/select-field.mjs +43 -0
  240. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/slider-field.mjs +30 -0
  241. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +17 -0
  242. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-field.mjs +30 -0
  243. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-ia-field.mjs +32 -0
  244. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-field.mjs +38 -0
  245. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +36 -0
  246. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/base-field-component.mjs +22 -0
  247. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +124 -0
  248. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +27 -0
  249. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +23 -0
  250. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/button-field/button-field.component.mjs +31 -0
  251. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +118 -0
  252. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +21 -0
  253. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/chips/chips-field.component.mjs +59 -0
  254. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.mjs +29 -0
  255. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/currency/currency-field.component.mjs +90 -0
  256. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/editor/editor-field.component.mjs +23 -0
  257. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/file-upload/file-upload-field.component.mjs +56 -0
  258. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/lookup/lookup-field.component.mjs +23 -0
  259. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/number/number-field.component.mjs +121 -0
  260. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/password/password-field.component.mjs +75 -0
  261. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/profile-picture/profile-picture-field.component.mjs +22 -0
  262. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +52 -0
  263. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/select/select-field.component.mjs +24 -0
  264. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/slider/slider-field.component.mjs +103 -0
  265. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/star-rating/star-rating-field.component.mjs +25 -0
  266. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text/text-field.component.mjs +88 -0
  267. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +29 -0
  268. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text-area-ia/text-area-ia-field.component.mjs +22 -0
  269. package/esm2022/dynamic-form/lib/dynamic-form/form-field/form-field.mjs +243 -0
  270. package/esm2022/dynamic-form/lib/dynamic-form/services/dynamic-form-cache.mjs +150 -0
  271. package/esm2022/dynamic-form/public-api.mjs +44 -0
  272. package/esm2022/dynamic-form/seniorsistemas-angular-components-dynamic-form.mjs +5 -0
  273. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.directive.mjs +44 -0
  274. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.module.mjs +18 -0
  275. package/esm2022/editable-overlay/public-api.mjs +3 -0
  276. package/esm2022/editable-overlay/seniorsistemas-angular-components-editable-overlay.mjs +5 -0
  277. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +51 -0
  278. package/esm2022/empty-state/lib/empty-state/empty-state.module.mjs +22 -0
  279. package/esm2022/empty-state/lib/empty-state/go-back/go-back.component.mjs +34 -0
  280. package/esm2022/empty-state/public-api.mjs +4 -0
  281. package/esm2022/empty-state/seniorsistemas-angular-components-empty-state.mjs +5 -0
  282. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +78 -0
  283. package/esm2022/fieldset/lib/fieldset/fieldset.models.mjs +2 -0
  284. package/esm2022/fieldset/lib/fieldset/fieldset.module.mjs +19 -0
  285. package/esm2022/fieldset/public-api.mjs +3 -0
  286. package/esm2022/fieldset/seniorsistemas-angular-components-fieldset.mjs +5 -0
  287. package/esm2022/file-upload/lib/file-upload/file-upload.component.mjs +276 -0
  288. package/esm2022/file-upload/lib/file-upload/file-upload.module.mjs +38 -0
  289. package/esm2022/file-upload/lib/file-upload/file-upload.service.mjs +18 -0
  290. package/esm2022/file-upload/lib/file-upload/models/file-dto.mjs +2 -0
  291. package/esm2022/file-upload/lib/file-upload/models/file-upload-permissions.mjs +2 -0
  292. package/esm2022/file-upload/lib/file-upload/models/list-blob-metadata.mjs +2 -0
  293. package/esm2022/file-upload/lib/file-upload/models/uploadError.mjs +2 -0
  294. package/esm2022/file-upload/lib/file-upload/models/validate-errors.mjs +2 -0
  295. package/esm2022/file-upload/public-api.mjs +3 -0
  296. package/esm2022/file-upload/seniorsistemas-angular-components-file-upload.mjs +5 -0
  297. package/esm2022/gantt/lib/gantt/components/gantt/arrow.mjs +87 -0
  298. package/esm2022/gantt/lib/gantt/components/gantt/bar.mjs +294 -0
  299. package/esm2022/gantt/lib/gantt/components/gantt/gantt-options.mjs +20 -0
  300. package/esm2022/gantt/lib/gantt/components/gantt/gantt.mjs +812 -0
  301. package/esm2022/gantt/lib/gantt/components/gantt/popup.mjs +110 -0
  302. package/esm2022/gantt/lib/gantt/components/gantt/utils/date-utils.mjs +116 -0
  303. package/esm2022/gantt/lib/gantt/components/gantt/utils/svg-utils.mjs +111 -0
  304. package/esm2022/gantt/lib/gantt/components/side-table/side-table.component.mjs +32 -0
  305. package/esm2022/gantt/lib/gantt/gantt.component.mjs +146 -0
  306. package/esm2022/gantt/lib/gantt/gantt.module.mjs +24 -0
  307. package/esm2022/gantt/lib/gantt/models/index.mjs +2 -0
  308. package/esm2022/gantt/lib/gantt/models/options.mjs +2 -0
  309. package/esm2022/gantt/lib/gantt/models/task.mjs +2 -0
  310. package/esm2022/gantt/lib/gantt/models/view-mode.mjs +12 -0
  311. package/esm2022/gantt/public-api.mjs +4 -0
  312. package/esm2022/gantt/seniorsistemas-angular-components-gantt.mjs +5 -0
  313. package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +73 -0
  314. package/esm2022/global-search/lib/global-search/global-search.component.mjs +140 -0
  315. package/esm2022/global-search/lib/global-search/global-search.module.mjs +78 -0
  316. package/esm2022/global-search/lib/global-search/types/global-search-size.enum.mjs +2 -0
  317. package/esm2022/global-search/public-api.mjs +5 -0
  318. package/esm2022/global-search/seniorsistemas-angular-components-global-search.mjs +5 -0
  319. package/esm2022/grid-menu/lib/grid-menu/components/grid-menu-item/grid-menu-item.component.mjs +34 -0
  320. package/esm2022/grid-menu/lib/grid-menu/grid-menu.component.mjs +19 -0
  321. package/esm2022/grid-menu/lib/grid-menu/grid-menu.module.mjs +19 -0
  322. package/esm2022/grid-menu/lib/grid-menu/types/grid-menu-item.mjs +2 -0
  323. package/esm2022/grid-menu/public-api.mjs +4 -0
  324. package/esm2022/grid-menu/seniorsistemas-angular-components-grid-menu.mjs +5 -0
  325. package/esm2022/help-popover/lib/help-popover/help-popover/help-popover.component.mjs +84 -0
  326. package/esm2022/help-popover/lib/help-popover/help-popover.directive.mjs +314 -0
  327. package/esm2022/help-popover/lib/help-popover/help-popover.module.mjs +25 -0
  328. package/esm2022/help-popover/lib/help-popover/models/help-popover.models.mjs +2 -0
  329. package/esm2022/help-popover/public-api.mjs +4 -0
  330. package/esm2022/help-popover/seniorsistemas-angular-components-help-popover.mjs +5 -0
  331. package/esm2022/ia-insight/lib/ia-insight/components/ia-insight-card/components/ia-insight-card-loader/ia-insight-card-loader.component.mjs +13 -0
  332. package/esm2022/ia-insight/lib/ia-insight/components/ia-insight-card/ia-insight-card.component.mjs +82 -0
  333. package/esm2022/ia-insight/lib/ia-insight/components/ia-insight-sidebar/ia-insight-sidebar.component.mjs +49 -0
  334. package/esm2022/ia-insight/lib/ia-insight/ia-insight.component.mjs +66 -0
  335. package/esm2022/ia-insight/lib/ia-insight/ia-insight.module.mjs +47 -0
  336. package/esm2022/ia-insight/lib/ia-insight/models/ia-insight-item.mjs +2 -0
  337. package/esm2022/ia-insight/lib/ia-insight/models/ia-insight-template-types.mjs +2 -0
  338. package/esm2022/ia-insight/lib/ia-insight/models/index.mjs +2 -0
  339. package/esm2022/ia-insight/public-api.mjs +4 -0
  340. package/esm2022/ia-insight/seniorsistemas-angular-components-ia-insight.mjs +5 -0
  341. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +179 -0
  342. package/esm2022/image-cropper/lib/image-cropper/image-cropper.module.mjs +23 -0
  343. package/esm2022/image-cropper/lib/image-cropper/image-cropper.service.mjs +73 -0
  344. package/esm2022/image-cropper/public-api.mjs +4 -0
  345. package/esm2022/image-cropper/seniorsistemas-angular-components-image-cropper.mjs +5 -0
  346. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +28 -0
  347. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.module.mjs +18 -0
  348. package/esm2022/infinite-scroll/public-api.mjs +3 -0
  349. package/esm2022/infinite-scroll/seniorsistemas-angular-components-infinite-scroll.mjs +5 -0
  350. package/esm2022/info-sign/lib/info-sign/components/info-sign/info-sign.component.mjs +17 -0
  351. package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +68 -0
  352. package/esm2022/info-sign/lib/info-sign/info-sign.module.mjs +20 -0
  353. package/esm2022/info-sign/public-api.mjs +3 -0
  354. package/esm2022/info-sign/seniorsistemas-angular-components-info-sign.mjs +5 -0
  355. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.mjs +53 -0
  356. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-lookup/inline-edit-lookup.component.mjs +32 -0
  357. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +85 -0
  358. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +32 -0
  359. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text-area/inline-edit-text-area.component.mjs +33 -0
  360. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text-area-ia/inline-edit-text-area-ia.component.mjs +32 -0
  361. package/esm2022/inline-edit/lib/inline-edit/components/index.mjs +8 -0
  362. package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +105 -0
  363. package/esm2022/inline-edit/lib/inline-edit/fields/index.mjs +8 -0
  364. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-calendar-field.mjs +45 -0
  365. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-field.mjs +13 -0
  366. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-lookup-field.mjs +60 -0
  367. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-number-field.mjs +38 -0
  368. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-text-area-field.mjs +15 -0
  369. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-text-area-ia-field.mjs +7 -0
  370. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-text-field.mjs +7 -0
  371. package/esm2022/inline-edit/lib/inline-edit/inline-edit.component.mjs +66 -0
  372. package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +102 -0
  373. package/esm2022/inline-edit/lib/inline-edit/types/addon-config.mjs +2 -0
  374. package/esm2022/inline-edit/public-api.mjs +4 -0
  375. package/esm2022/inline-edit/seniorsistemas-angular-components-inline-edit.mjs +5 -0
  376. package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +63 -0
  377. package/esm2022/interactive-content/public-api.mjs +2 -0
  378. package/esm2022/interactive-content/seniorsistemas-angular-components-interactive-content.mjs +5 -0
  379. package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +100 -0
  380. package/esm2022/kanban/lib/kanban/components/kanban-item/kanban-item.component.mjs +62 -0
  381. package/esm2022/kanban/lib/kanban/components/kanban-item-dragging/kanban-item-dragging.component.mjs +17 -0
  382. package/esm2022/kanban/lib/kanban/kanban-event.service.mjs +26 -0
  383. package/esm2022/kanban/lib/kanban/kanban.component.mjs +219 -0
  384. package/esm2022/kanban/lib/kanban/kanban.module.mjs +56 -0
  385. package/esm2022/kanban/lib/kanban/types/index.mjs +2 -0
  386. package/esm2022/kanban/lib/kanban/types/kanban-data.mjs +2 -0
  387. package/esm2022/kanban/lib/kanban/types/kanban-template-types.mjs +2 -0
  388. package/esm2022/kanban/public-api.mjs +3 -0
  389. package/esm2022/kanban/seniorsistemas-angular-components-kanban.mjs +5 -0
  390. package/esm2022/label-value/lib/label-value/label-value.component.mjs +35 -0
  391. package/esm2022/label-value/lib/label-value/label-value.module.mjs +22 -0
  392. package/esm2022/label-value/lib/label-value/types/label-value-configuration.mjs +2 -0
  393. package/esm2022/label-value/public-api.mjs +3 -0
  394. package/esm2022/label-value/seniorsistemas-angular-components-label-value.mjs +5 -0
  395. package/esm2022/lib/locale/fallback.mjs +333 -0
  396. package/esm2022/loading-state/lib/loading-state/components/dots-indicator/dots-indicator.components.mjs +11 -0
  397. package/esm2022/loading-state/lib/loading-state/components/loading-state-indicators.mjs +6 -0
  398. package/esm2022/loading-state/lib/loading-state/components/logo-indicator/logo-indicator.component.mjs +12 -0
  399. package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +74 -0
  400. package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +62 -0
  401. package/esm2022/loading-state/lib/loading-state/loading-state.module.mjs +30 -0
  402. package/esm2022/loading-state/public-api.mjs +5 -0
  403. package/esm2022/loading-state/seniorsistemas-angular-components-loading-state.mjs +5 -0
  404. package/esm2022/locale/lib/locale/locale.module.mjs +85 -0
  405. package/esm2022/locale/lib/locale/locale.service.mjs +87 -0
  406. package/esm2022/locale/lib/locale/options/calendar.mjs +24 -0
  407. package/esm2022/locale/lib/locale/options/index.mjs +27 -0
  408. package/esm2022/locale/lib/locale/options/number.mjs +9 -0
  409. package/esm2022/locale/lib/locale/pipes/localized-bignumber-impure.pipe.mjs +18 -0
  410. package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +38 -0
  411. package/esm2022/locale/lib/locale/pipes/localized-currency-impure.pipe.mjs +21 -0
  412. package/esm2022/locale/lib/locale/pipes/localized-currency.pipe.mjs +53 -0
  413. package/esm2022/locale/lib/locale/pipes/localized-date-impure.pipe.mjs +15 -0
  414. package/esm2022/locale/lib/locale/pipes/localized-date.pipe.mjs +23 -0
  415. package/esm2022/locale/lib/locale/pipes/localized-number.pipe.mjs +31 -0
  416. package/esm2022/locale/lib/locale/pipes/localized-time-impure.pipe.mjs +15 -0
  417. package/esm2022/locale/lib/locale/pipes/localized-time.pipe.mjs +23 -0
  418. package/esm2022/locale/public-api.mjs +13 -0
  419. package/esm2022/locale/seniorsistemas-angular-components-locale.mjs +5 -0
  420. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +63 -0
  421. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.module.mjs +18 -0
  422. package/esm2022/localized-number-input/public-api.mjs +3 -0
  423. package/esm2022/localized-number-input/seniorsistemas-angular-components-localized-number-input.mjs +5 -0
  424. package/esm2022/mask/lib/mask/mask-formatter.module.mjs +16 -0
  425. package/esm2022/mask/lib/mask/mask-formatter.pipe.mjs +65 -0
  426. package/esm2022/mask/public-api.mjs +3 -0
  427. package/esm2022/mask/seniorsistemas-angular-components-mask.mjs +5 -0
  428. package/esm2022/mouse-events/lib/mouse-events/double-click.directive.mjs +37 -0
  429. package/esm2022/mouse-events/lib/mouse-events/long-press.directive.mjs +51 -0
  430. package/esm2022/mouse-events/lib/mouse-events/mouse-events.module.mjs +27 -0
  431. package/esm2022/mouse-events/public-api.mjs +4 -0
  432. package/esm2022/mouse-events/seniorsistemas-angular-components-mouse-events.mjs +5 -0
  433. package/esm2022/navigation-button/lib/navigation-button/models/index.mjs +2 -0
  434. package/esm2022/navigation-button/lib/navigation-button/models/navigation-button-item.mjs +2 -0
  435. package/esm2022/navigation-button/lib/navigation-button/models/navigation-button-step-changed-info.mjs +2 -0
  436. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +134 -0
  437. package/esm2022/navigation-button/lib/navigation-button/navigation-button.module.mjs +20 -0
  438. package/esm2022/navigation-button/public-api.mjs +4 -0
  439. package/esm2022/navigation-button/seniorsistemas-angular-components-navigation-button.mjs +5 -0
  440. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +164 -0
  441. package/esm2022/number-input/lib/number-input/number-input.module.mjs +21 -0
  442. package/esm2022/number-input/public-api.mjs +3 -0
  443. package/esm2022/number-input/seniorsistemas-angular-components-number-input.mjs +5 -0
  444. package/esm2022/numeric/lib/numeric.module.mjs +18 -0
  445. package/esm2022/numeric/lib/numeric.pipe.mjs +29 -0
  446. package/esm2022/numeric/lib/numeric.service.mjs +92 -0
  447. package/esm2022/numeric/public-api.mjs +4 -0
  448. package/esm2022/numeric/seniorsistemas-angular-components-numeric.mjs +5 -0
  449. package/esm2022/object-card/lib/object-card/elements/field/object-card-field.component.mjs +51 -0
  450. package/esm2022/object-card/lib/object-card/elements/main/object-card-main.component.mjs +87 -0
  451. package/esm2022/object-card/lib/object-card/object-card.component.mjs +171 -0
  452. package/esm2022/object-card/lib/object-card/object-card.module.mjs +24 -0
  453. package/esm2022/object-card/public-api.mjs +5 -0
  454. package/esm2022/object-card/seniorsistemas-angular-components-object-card.mjs +5 -0
  455. package/esm2022/paginator/lib/models/paginator.models.mjs +2 -0
  456. package/esm2022/paginator/lib/paginator/paginator.component.mjs +138 -0
  457. package/esm2022/paginator/public-api.mjs +2 -0
  458. package/esm2022/paginator/seniorsistemas-angular-components-paginator.mjs +5 -0
  459. package/esm2022/panel/lib/panel/panel.component.mjs +91 -0
  460. package/esm2022/panel/lib/panel/panel.module.mjs +20 -0
  461. package/esm2022/panel/public-api.mjs +3 -0
  462. package/esm2022/panel/seniorsistemas-angular-components-panel.mjs +5 -0
  463. package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +92 -0
  464. package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +210 -0
  465. package/esm2022/password-strength/lib/password-strength/password-strength.module.mjs +19 -0
  466. package/esm2022/password-strength/lib/password-strength/types/password-positions.mjs +2 -0
  467. package/esm2022/password-strength/lib/password-strength/types/password-strengths.mjs +2 -0
  468. package/esm2022/password-strength/public-api.mjs +4 -0
  469. package/esm2022/password-strength/seniorsistemas-angular-components-password-strength.mjs +5 -0
  470. package/esm2022/picklist/lib/picklist/picklist.component.mjs +299 -0
  471. package/esm2022/picklist/lib/picklist/picklist.module.mjs +36 -0
  472. package/esm2022/picklist/lib/picklist/types/index.mjs +2 -0
  473. package/esm2022/picklist/lib/picklist/types/picklist-item.mjs +2 -0
  474. package/esm2022/picklist/lib/picklist/types/picklist-template-types.mjs +2 -0
  475. package/esm2022/picklist/public-api.mjs +5 -0
  476. package/esm2022/picklist/seniorsistemas-angular-components-picklist.mjs +5 -0
  477. package/esm2022/product-header/lib/product-header/product-header.component.mjs +44 -0
  478. package/esm2022/product-header/lib/product-header/product-header.module.mjs +20 -0
  479. package/esm2022/product-header/public-api.mjs +3 -0
  480. package/esm2022/product-header/seniorsistemas-angular-components-product-header.mjs +5 -0
  481. package/esm2022/profile-picture-picker/lib/profile-picture-picker/models/confirmation-texts.mjs +2 -0
  482. package/esm2022/profile-picture-picker/lib/profile-picture-picker/models/cropper-labels-config.mjs +2 -0
  483. package/esm2022/profile-picture-picker/lib/profile-picture-picker/models/file-validation-errors.mjs +2 -0
  484. package/esm2022/profile-picture-picker/lib/profile-picture-picker/models/index.mjs +2 -0
  485. package/esm2022/profile-picture-picker/lib/profile-picture-picker/models/profile-picture-picker-data.mjs +2 -0
  486. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +277 -0
  487. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +25 -0
  488. package/esm2022/profile-picture-picker/lib/profile-picture-picker/validators/index.mjs +2 -0
  489. package/esm2022/profile-picture-picker/lib/profile-picture-picker/validators/validators.mjs +28 -0
  490. package/esm2022/profile-picture-picker/public-api.mjs +4 -0
  491. package/esm2022/profile-picture-picker/seniorsistemas-angular-components-profile-picture-picker.mjs +5 -0
  492. package/esm2022/progressbar/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.mjs +60 -0
  493. package/esm2022/progressbar/lib/progressbar/components/progressbar-indeterminate/progressbar-indeterminate.component.mjs +19 -0
  494. package/esm2022/progressbar/lib/progressbar/progressbar.component.mjs +57 -0
  495. package/esm2022/progressbar/lib/progressbar/progressbar.module.mjs +21 -0
  496. package/esm2022/progressbar/lib/progressbar/types/index.mjs +2 -0
  497. package/esm2022/progressbar/lib/progressbar/types/progressbar-colors.mjs +2 -0
  498. package/esm2022/progressbar/lib/progressbar/types/progressbar-mode.mjs +2 -0
  499. package/esm2022/progressbar/public-api.mjs +4 -0
  500. package/esm2022/progressbar/seniorsistemas-angular-components-progressbar.mjs +5 -0
  501. package/esm2022/public-api.mjs +2 -0
  502. package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +82 -0
  503. package/esm2022/radio-button/lib/radio-button-group/models/radio-button-group.models.mjs +2 -0
  504. package/esm2022/radio-button/lib/radio-button-group/radio-button-group.component.mjs +62 -0
  505. package/esm2022/radio-button/lib/services/radio-button-registry.service.mjs +38 -0
  506. package/esm2022/radio-button/public-api.mjs +3 -0
  507. package/esm2022/radio-button/seniorsistemas-angular-components-radio-button.mjs +5 -0
  508. package/esm2022/rating-scale/lib/rating-scale/models/index.mjs +2 -0
  509. package/esm2022/rating-scale/lib/rating-scale/models/rating-scale-node.mjs +2 -0
  510. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +54 -0
  511. package/esm2022/rating-scale/lib/rating-scale/rating-scale.module.mjs +24 -0
  512. package/esm2022/rating-scale/public-api.mjs +3 -0
  513. package/esm2022/rating-scale/seniorsistemas-angular-components-rating-scale.mjs +5 -0
  514. package/esm2022/select/lib/select/components/select-option/select-option.component.mjs +27 -0
  515. package/esm2022/select/lib/select/select.component.mjs +712 -0
  516. package/esm2022/select/public-api.mjs +2 -0
  517. package/esm2022/select/seniorsistemas-angular-components-select.mjs +5 -0
  518. package/esm2022/select-button/lib/select-button/components/select-button-item/select-button-item.component.mjs +28 -0
  519. package/esm2022/select-button/lib/select-button/models/select-button-item.mjs +2 -0
  520. package/esm2022/select-button/lib/select-button/select-button.component.mjs +122 -0
  521. package/esm2022/select-button/lib/select-button/select-button.module.mjs +23 -0
  522. package/esm2022/select-button/public-api.mjs +3 -0
  523. package/esm2022/select-button/seniorsistemas-angular-components-select-button.mjs +5 -0
  524. package/esm2022/seniorsistemas-angular-components.mjs +5 -0
  525. package/esm2022/shared/lib/shared/border-button/border-button.component.mjs +19 -0
  526. package/esm2022/shared/lib/shared/border-button/border-button.module.mjs +19 -0
  527. package/esm2022/shared/lib/shared/helpers.mjs +31 -0
  528. package/esm2022/shared/lib/shared/models/border-button-options.mjs +2 -0
  529. package/esm2022/shared/lib/shared/models/severities.mjs +9 -0
  530. package/esm2022/shared/public-api.mjs +5 -0
  531. package/esm2022/shared/seniorsistemas-angular-components-shared.mjs +5 -0
  532. package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +114 -0
  533. package/esm2022/sidebar/lib/sidebar/sidebar.module.mjs +20 -0
  534. package/esm2022/sidebar/public-api.mjs +3 -0
  535. package/esm2022/sidebar/seniorsistemas-angular-components-sidebar.mjs +5 -0
  536. package/esm2022/slide-panel/lib/slide-panel/slide-panel.component.mjs +137 -0
  537. package/esm2022/slide-panel/lib/slide-panel/slide-panel.module.mjs +20 -0
  538. package/esm2022/slide-panel/lib/slide-panel/slide-panel.service.mjs +26 -0
  539. package/esm2022/slide-panel/public-api.mjs +4 -0
  540. package/esm2022/slide-panel/seniorsistemas-angular-components-slide-panel.mjs +5 -0
  541. package/esm2022/slider/lib/slider/slider.component.mjs +601 -0
  542. package/esm2022/slider/lib/slider/slider.module.mjs +19 -0
  543. package/esm2022/slider/public-api.mjs +3 -0
  544. package/esm2022/slider/seniorsistemas-angular-components-slider.mjs +5 -0
  545. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +217 -0
  546. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition.module.mjs +24 -0
  547. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition.service.mjs +146 -0
  548. package/esm2022/speech-recognition/lib/speech-recognition/text-to-speech.service.mjs +81 -0
  549. package/esm2022/speech-recognition/public-api.mjs +5 -0
  550. package/esm2022/speech-recognition/seniorsistemas-angular-components-speech-recognition.mjs +5 -0
  551. package/esm2022/split-button/lib/split-button/models/index.mjs +2 -0
  552. package/esm2022/split-button/lib/split-button/models/split-button-option.mjs +2 -0
  553. package/esm2022/split-button/lib/split-button/models/split-button-type.mjs +2 -0
  554. package/esm2022/split-button/lib/split-button/split-button.component.mjs +64 -0
  555. package/esm2022/split-button/lib/split-button/split-button.module.mjs +18 -0
  556. package/esm2022/split-button/public-api.mjs +4 -0
  557. package/esm2022/split-button/seniorsistemas-angular-components-split-button.mjs +5 -0
  558. package/esm2022/star-rating/public-api.mjs +2 -0
  559. package/esm2022/star-rating/seniorsistemas-angular-components-star-rating.mjs +5 -0
  560. package/esm2022/star-rating/star-rating/star-rating-models.mjs +2 -0
  561. package/esm2022/star-rating/star-rating/star-rating.component.mjs +63 -0
  562. package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +119 -0
  563. package/esm2022/stats-card/lib/stats-card/stats-card.module.mjs +19 -0
  564. package/esm2022/stats-card/public-api.mjs +3 -0
  565. package/esm2022/stats-card/seniorsistemas-angular-components-stats-card.mjs +5 -0
  566. package/esm2022/steps/lib/steps/steps.component.mjs +122 -0
  567. package/esm2022/steps/lib/steps/steps.module.mjs +19 -0
  568. package/esm2022/steps/public-api.mjs +3 -0
  569. package/esm2022/steps/seniorsistemas-angular-components-steps.mjs +5 -0
  570. package/esm2022/structure/lib/structure/footer.component.mjs +14 -0
  571. package/esm2022/structure/lib/structure/header.component.mjs +14 -0
  572. package/esm2022/structure/lib/structure/structure.module.mjs +19 -0
  573. package/esm2022/structure/public-api.mjs +5 -0
  574. package/esm2022/structure/seniorsistemas-angular-components-structure.mjs +5 -0
  575. package/esm2022/switch/lib/switch/switch.component.mjs +93 -0
  576. package/esm2022/switch/lib/switch/switch.module.mjs +18 -0
  577. package/esm2022/switch/public-api.mjs +3 -0
  578. package/esm2022/switch/seniorsistemas-angular-components-switch.mjs +5 -0
  579. package/esm2022/table/lib/locale-utils.mjs +15 -0
  580. package/esm2022/table/lib/table/export-utils.mjs +112 -0
  581. package/esm2022/table/lib/table/navigation/navigation.directive.mjs +130 -0
  582. package/esm2022/table/lib/table/row-toggler/row-toggler.directive.mjs +38 -0
  583. package/esm2022/table/lib/table/table-column/index.mjs +3 -0
  584. package/esm2022/table/lib/table/table-column/models/badge-column.interface.mjs +2 -0
  585. package/esm2022/table/lib/table/table-column/models/badge-configs.interface.mjs +2 -0
  586. package/esm2022/table/lib/table/table-column/models/column-colors.mjs +2 -0
  587. package/esm2022/table/lib/table/table-column/models/column-values.interface.mjs +2 -0
  588. package/esm2022/table/lib/table/table-column/models/column.interface.mjs +2 -0
  589. package/esm2022/table/lib/table/table-column/models/dynamic-editable-grid.interface.mjs +2 -0
  590. package/esm2022/table/lib/table/table-column/models/enum-badge-colors.mjs +10 -0
  591. package/esm2022/table/lib/table/table-column/models/enum-column-field-type.mjs +13 -0
  592. package/esm2022/table/lib/table/table-column/models/index.mjs +11 -0
  593. package/esm2022/table/lib/table/table-column/models/locale-options.interface.mjs +2 -0
  594. package/esm2022/table/lib/table/table-column/models/number-locale-options.interface.mjs +2 -0
  595. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +299 -0
  596. package/esm2022/table/lib/table/table-paging/index.mjs +3 -0
  597. package/esm2022/table/lib/table/table-paging/models/custom-action.interface.mjs +2 -0
  598. package/esm2022/table/lib/table/table-paging/models/index.mjs +2 -0
  599. package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +321 -0
  600. package/esm2022/table/lib/table/table.module.mjs +27 -0
  601. package/esm2022/table/public-api.mjs +6 -0
  602. package/esm2022/table/seniorsistemas-angular-components-table.mjs +5 -0
  603. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +151 -0
  604. package/esm2022/table-header/lib/table-header/table-header-checkox.module.mjs +20 -0
  605. package/esm2022/table-header/public-api.mjs +3 -0
  606. package/esm2022/table-header/seniorsistemas-angular-components-table-header.mjs +5 -0
  607. package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +36 -0
  608. package/esm2022/tabs/lib/tabs/tabs.component.mjs +51 -0
  609. package/esm2022/tabs/public-api.mjs +3 -0
  610. package/esm2022/tabs/seniorsistemas-angular-components-tabs.mjs +5 -0
  611. package/esm2022/template/lib/template/template.directive.mjs +22 -0
  612. package/esm2022/template/lib/template/template.module.mjs +17 -0
  613. package/esm2022/template/public-api.mjs +3 -0
  614. package/esm2022/template/seniorsistemas-angular-components-template.mjs +5 -0
  615. package/esm2022/text-area/lib/text-area/text-area.component.mjs +116 -0
  616. package/esm2022/text-area/lib/text-area.module.mjs +35 -0
  617. package/esm2022/text-area/public-api.mjs +3 -0
  618. package/esm2022/text-area/seniorsistemas-angular-components-text-area.mjs +5 -0
  619. package/esm2022/text-area-ia/lib/services/IAssist/iassist.service.mjs +77 -0
  620. package/esm2022/text-area-ia/lib/services/IAssist/models/iassist-input-data.mjs +3 -0
  621. package/esm2022/text-area-ia/lib/services/IAssist/models/iassist-response.mjs +3 -0
  622. package/esm2022/text-area-ia/lib/text-area-ia/text-area-ia.component.mjs +150 -0
  623. package/esm2022/text-area-ia/lib/text-area-ia/text-area-ia.module.mjs +50 -0
  624. package/esm2022/text-area-ia/public-api.mjs +3 -0
  625. package/esm2022/text-area-ia/seniorsistemas-angular-components-text-area-ia.mjs +5 -0
  626. package/esm2022/thumbnail/lib/thumbnail/thumbnail-size.mjs +2 -0
  627. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +77 -0
  628. package/esm2022/thumbnail/lib/thumbnail/thumbnail.module.mjs +20 -0
  629. package/esm2022/thumbnail/lib/thumbnail/thumbnail.service.mjs +62 -0
  630. package/esm2022/thumbnail/public-api.mjs +4 -0
  631. package/esm2022/thumbnail/seniorsistemas-angular-components-thumbnail.mjs +5 -0
  632. package/esm2022/thumbnails/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-image/thumbnail-item-image.component.mjs +17 -0
  633. package/esm2022/thumbnails/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-video/thumbnail-item-video.component.mjs +42 -0
  634. package/esm2022/thumbnails/lib/thumbnails/components/thumbnail-item/thumbnail-item.component.mjs +64 -0
  635. package/esm2022/thumbnails/lib/thumbnails/models/thumbnails-item.mjs +2 -0
  636. package/esm2022/thumbnails/lib/thumbnails/thumbnails.component.mjs +48 -0
  637. package/esm2022/thumbnails/lib/thumbnails/thumbnails.module.mjs +24 -0
  638. package/esm2022/thumbnails/public-api.mjs +3 -0
  639. package/esm2022/thumbnails/seniorsistemas-angular-components-thumbnails.mjs +5 -0
  640. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +303 -0
  641. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.mjs +11 -0
  642. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +73 -0
  643. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +179 -0
  644. package/esm2022/tiered-menu/lib/tiered-menu/models/index.mjs +2 -0
  645. package/esm2022/tiered-menu/lib/tiered-menu/models/tiered-menu-item-data.mjs +2 -0
  646. package/esm2022/tiered-menu/lib/tiered-menu/models/tiered-menu-item-internal-data.mjs +2 -0
  647. package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.event.service.mjs +17 -0
  648. package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.global.service.mjs +11 -0
  649. package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.service.mjs +54 -0
  650. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +234 -0
  651. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.module.mjs +34 -0
  652. package/esm2022/tiered-menu/public-api.mjs +6 -0
  653. package/esm2022/tiered-menu/seniorsistemas-angular-components-tiered-menu.mjs +5 -0
  654. package/esm2022/tile/lib/tile/tile.component.mjs +65 -0
  655. package/esm2022/tile/lib/tile/tile.module.mjs +20 -0
  656. package/esm2022/tile/public-api.mjs +3 -0
  657. package/esm2022/tile/seniorsistemas-angular-components-tile.mjs +5 -0
  658. package/esm2022/timeline/lib/timeline/components/horizontal-timeline/horizontal-timeline.component.mjs +24 -0
  659. package/esm2022/timeline/lib/timeline/components/horizontal-timeline/horizontal-timeline.module.mjs +20 -0
  660. package/esm2022/timeline/lib/timeline/components/timeline-icon-item/timeline-icon-item.component.mjs +26 -0
  661. package/esm2022/timeline/lib/timeline/components/timeline-icon-item/timeline-icon-item.module.mjs +19 -0
  662. package/esm2022/timeline/lib/timeline/components/vertical-timeline/components/collapse-option/collapse-option.component.mjs +21 -0
  663. package/esm2022/timeline/lib/timeline/components/vertical-timeline/components/collapsed-items/collapsed-items.component.mjs +33 -0
  664. package/esm2022/timeline/lib/timeline/components/vertical-timeline/components/range-line/range-line.component.mjs +11 -0
  665. package/esm2022/timeline/lib/timeline/components/vertical-timeline/components/vertical-items/vertical-items.component.mjs +29 -0
  666. package/esm2022/timeline/lib/timeline/components/vertical-timeline/vertical-timeline.component.mjs +60 -0
  667. package/esm2022/timeline/lib/timeline/components/vertical-timeline/vertical-timeline.module.mjs +33 -0
  668. package/esm2022/timeline/lib/timeline/models/timeline-item-severity.mjs +7 -0
  669. package/esm2022/timeline/lib/timeline/models/timeline-item-size.mjs +6 -0
  670. package/esm2022/timeline/lib/timeline/models/timeline-item.mjs +44 -0
  671. package/esm2022/timeline/lib/timeline/timeline.component.mjs +66 -0
  672. package/esm2022/timeline/lib/timeline/timeline.module.mjs +32 -0
  673. package/esm2022/timeline/public-api.mjs +6 -0
  674. package/esm2022/timeline/seniorsistemas-angular-components-timeline.mjs +5 -0
  675. package/esm2022/toast/lib/toast/toast.component.mjs +46 -0
  676. package/esm2022/toast/lib/toast/toast.module.mjs +17 -0
  677. package/esm2022/toast/lib/toast/toast.service.mjs +68 -0
  678. package/esm2022/toast/lib/toast/types/toast.mjs +2 -0
  679. package/esm2022/toast/public-api.mjs +4 -0
  680. package/esm2022/toast/seniorsistemas-angular-components-toast.mjs +5 -0
  681. package/esm2022/token-list/lib/token-list/models/index.mjs +2 -0
  682. package/esm2022/token-list/lib/token-list/models/token.mjs +2 -0
  683. package/esm2022/token-list/lib/token-list/token-list.component.mjs +42 -0
  684. package/esm2022/token-list/lib/token-list/token-list.module.mjs +18 -0
  685. package/esm2022/token-list/public-api.mjs +4 -0
  686. package/esm2022/token-list/seniorsistemas-angular-components-token-list.mjs +5 -0
  687. package/esm2022/tooltip/lib/tooltip/models/mobile-behavior.mjs +2 -0
  688. package/esm2022/tooltip/lib/tooltip/models/tooltip-event.mjs +2 -0
  689. package/esm2022/tooltip/lib/tooltip/models/tooltip-position.mjs +2 -0
  690. package/esm2022/tooltip/lib/tooltip/tooltip.component.mjs +18 -0
  691. package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +339 -0
  692. package/esm2022/tooltip/lib/tooltip/tooltip.module.mjs +19 -0
  693. package/esm2022/tooltip/public-api.mjs +3 -0
  694. package/esm2022/tooltip/seniorsistemas-angular-components-tooltip.mjs +5 -0
  695. package/esm2022/utils/lib/utils/breakpoints.mjs +11 -0
  696. package/esm2022/utils/lib/utils/utils.mjs +51 -0
  697. package/esm2022/utils/public-api.mjs +3 -0
  698. package/esm2022/utils/seniorsistemas-angular-components-utils.mjs +5 -0
  699. package/esm2022/workspace-switch/lib/workspace-switch/models/index.mjs +2 -0
  700. package/esm2022/workspace-switch/lib/workspace-switch/models/workspace.mjs +2 -0
  701. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +137 -0
  702. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.module.mjs +18 -0
  703. package/esm2022/workspace-switch/public-api.mjs +3 -0
  704. package/esm2022/workspace-switch/seniorsistemas-angular-components-workspace-switch.mjs +5 -0
  705. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +10 -10
  706. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  707. package/fesm2022/seniorsistemas-angular-components-alert.mjs +7 -7
  708. package/fesm2022/seniorsistemas-angular-components-badge.mjs +7 -7
  709. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +7 -7
  710. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +7 -7
  711. package/fesm2022/seniorsistemas-angular-components-button.mjs +7 -7
  712. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  713. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +7 -7
  714. package/fesm2022/seniorsistemas-angular-components-card.mjs +7 -7
  715. package/fesm2022/seniorsistemas-angular-components-chat.mjs +10 -10
  716. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +7 -7
  717. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +3 -3
  718. package/fesm2022/seniorsistemas-angular-components-chips.mjs +10 -10
  719. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  720. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +11 -11
  721. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +7 -7
  722. package/fesm2022/seniorsistemas-angular-components-common.mjs +20 -20
  723. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +6 -6
  724. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +7 -7
  725. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +10 -10
  726. package/fesm2022/seniorsistemas-angular-components-currency.mjs +3 -3
  727. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +10 -10
  728. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +9 -9
  729. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  730. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +125 -119
  731. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  732. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +7 -7
  733. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +10 -10
  734. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +9 -10
  735. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  736. package/fesm2022/seniorsistemas-angular-components-file-upload.mjs +10 -10
  737. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +10 -10
  738. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  739. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +10 -10
  740. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +10 -10
  741. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +10 -10
  742. package/fesm2022/seniorsistemas-angular-components-ia-insight.mjs +16 -16
  743. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +10 -10
  744. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +7 -7
  745. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +10 -10
  746. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  747. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +28 -28
  748. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  749. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +7 -3
  750. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  751. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +19 -19
  752. package/fesm2022/seniorsistemas-angular-components-label-value.mjs +7 -7
  753. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +16 -16
  754. package/fesm2022/seniorsistemas-angular-components-locale.mjs +34 -34
  755. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +7 -7
  756. package/fesm2022/seniorsistemas-angular-components-mask.mjs +7 -7
  757. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +10 -10
  758. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +8 -8
  759. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  760. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +7 -7
  761. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +10 -10
  762. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +13 -13
  763. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  764. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +3 -3
  765. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  766. package/fesm2022/seniorsistemas-angular-components-panel.mjs +7 -7
  767. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +10 -10
  768. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +7 -7
  769. package/fesm2022/seniorsistemas-angular-components-product-header.mjs +7 -7
  770. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +7 -7
  771. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +13 -13
  772. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +182 -0
  773. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -0
  774. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +7 -7
  775. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +10 -10
  776. package/fesm2022/seniorsistemas-angular-components-select.mjs +6 -6
  777. package/fesm2022/seniorsistemas-angular-components-shared.mjs +7 -7
  778. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  779. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +42 -23
  780. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  781. package/fesm2022/seniorsistemas-angular-components-slide-panel.mjs +10 -10
  782. package/fesm2022/seniorsistemas-angular-components-slider.mjs +8 -8
  783. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  784. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +13 -13
  785. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +7 -7
  786. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +4 -4
  787. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  788. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +7 -7
  789. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  790. package/fesm2022/seniorsistemas-angular-components-steps.mjs +7 -7
  791. package/fesm2022/seniorsistemas-angular-components-steps.mjs.map +1 -1
  792. package/fesm2022/seniorsistemas-angular-components-structure.mjs +11 -11
  793. package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
  794. package/fesm2022/seniorsistemas-angular-components-switch.mjs +7 -7
  795. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +7 -7
  796. package/fesm2022/seniorsistemas-angular-components-table.mjs +16 -16
  797. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  798. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +91 -0
  799. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -0
  800. package/fesm2022/seniorsistemas-angular-components-template.mjs +12 -15
  801. package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
  802. package/fesm2022/seniorsistemas-angular-components-text-area-ia.mjs +10 -10
  803. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +7 -7
  804. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +10 -10
  805. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +16 -16
  806. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +54 -92
  807. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  808. package/fesm2022/seniorsistemas-angular-components-tile.mjs +7 -7
  809. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  810. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +40 -40
  811. package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
  812. package/fesm2022/seniorsistemas-angular-components-toast.mjs +10 -10
  813. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +7 -7
  814. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +24 -14
  815. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  816. package/fesm2022/seniorsistemas-angular-components-utils.mjs +13 -4
  817. package/fesm2022/seniorsistemas-angular-components-utils.mjs.map +1 -1
  818. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +7 -7
  819. package/fesm2022/seniorsistemas-angular-components.mjs +1 -0
  820. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  821. package/fieldset/lib/fieldset/fieldset.component.d.ts +1 -1
  822. package/fieldset/lib/fieldset/fieldset.module.d.ts +1 -2
  823. package/index.d.ts +5 -0
  824. package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +2 -1
  825. package/lib/locale/fallback.d.ts +1 -0
  826. package/package.json +13 -89
  827. package/public-api.d.ts +1 -0
  828. package/radio-button/index.d.ts +5 -0
  829. package/radio-button/lib/radio-button/radio-button.component.d.ts +31 -0
  830. package/radio-button/lib/radio-button-group/models/radio-button-group.models.d.ts +5 -0
  831. package/radio-button/lib/radio-button-group/radio-button-group.component.d.ts +25 -0
  832. package/radio-button/lib/services/radio-button-registry.service.d.ts +12 -0
  833. package/radio-button/public-api.d.ts +3 -0
  834. package/select/index.d.ts +5 -0
  835. package/select/lib/select/components/select-option/select-option.component.d.ts +14 -0
  836. package/select/lib/select/select.component.d.ts +275 -0
  837. package/select/public-api.d.ts +1 -0
  838. package/sidebar/lib/sidebar/sidebar.component.d.ts +7 -6
  839. package/src/lib/styles/tailwind.scss +4 -0
  840. package/tabs/index.d.ts +5 -0
  841. package/tabs/lib/tab-item/tab-item.component.d.ts +18 -0
  842. package/tabs/lib/tabs/tabs.component.d.ts +16 -0
  843. package/tabs/public-api.d.ts +2 -0
  844. package/tailwind.css +455 -414
  845. package/template/lib/template/template.directive.d.ts +2 -3
  846. package/template/lib/template/template.module.d.ts +3 -3
  847. package/tooltip/lib/tooltip/tooltip.directive.d.ts +4 -2
  848. package/tooltip/lib/tooltip/tooltip.module.d.ts +3 -3
  849. package/utils/lib/utils/utils.d.ts +2 -0
  850. package/accordion/package.json +0 -3
  851. package/alert/package.json +0 -3
  852. package/badge/package.json +0 -3
  853. package/bignumber-input/package.json +0 -3
  854. package/breadcrumb/package.json +0 -3
  855. package/button/package.json +0 -3
  856. package/calendar-mask/package.json +0 -3
  857. package/card/package.json +0 -3
  858. package/chat/package.json +0 -3
  859. package/checkbox/package.json +0 -3
  860. package/checkbox-list/package.json +0 -3
  861. package/chips/package.json +0 -3
  862. package/code-editor/package.json +0 -3
  863. package/collapse-link/package.json +0 -3
  864. package/common/package.json +0 -3
  865. package/confirm-dialog/package.json +0 -3
  866. package/control-errors/package.json +0 -3
  867. package/country-phone-picker/package.json +0 -3
  868. package/currency/package.json +0 -3
  869. package/custom-fields/package.json +0 -3
  870. package/dialog/package.json +0 -3
  871. package/dynamic-form/package.json +0 -3
  872. package/editable-overlay/package.json +0 -3
  873. package/empty-state/package.json +0 -3
  874. package/fieldset/package.json +0 -3
  875. package/file-upload/package.json +0 -3
  876. package/gantt/package.json +0 -3
  877. package/global-search/package.json +0 -3
  878. package/grid-menu/package.json +0 -3
  879. package/help-popover/package.json +0 -3
  880. package/ia-insight/package.json +0 -3
  881. package/image-cropper/package.json +0 -3
  882. package/infinite-scroll/package.json +0 -3
  883. package/info-sign/package.json +0 -3
  884. package/inline-edit/package.json +0 -3
  885. package/interactive-content/package.json +0 -3
  886. package/kanban/package.json +0 -3
  887. package/label-value/package.json +0 -3
  888. package/loading-state/package.json +0 -3
  889. package/locale/package.json +0 -3
  890. package/localized-number-input/package.json +0 -3
  891. package/mask/package.json +0 -3
  892. package/mouse-events/package.json +0 -3
  893. package/navigation-button/package.json +0 -3
  894. package/number-input/package.json +0 -3
  895. package/numeric/package.json +0 -3
  896. package/object-card/package.json +0 -3
  897. package/paginator/package.json +0 -3
  898. package/panel/package.json +0 -3
  899. package/password-strength/package.json +0 -3
  900. package/picklist/package.json +0 -3
  901. package/product-header/package.json +0 -3
  902. package/profile-picture-picker/package.json +0 -3
  903. package/progressbar/package.json +0 -3
  904. package/rating-scale/package.json +0 -3
  905. package/select-button/package.json +0 -3
  906. package/shared/package.json +0 -3
  907. package/sidebar/package.json +0 -3
  908. package/slide-panel/package.json +0 -3
  909. package/slider/package.json +0 -3
  910. package/speech-recognition/package.json +0 -3
  911. package/split-button/package.json +0 -3
  912. package/star-rating/package.json +0 -3
  913. package/stats-card/package.json +0 -3
  914. package/steps/package.json +0 -3
  915. package/structure/package.json +0 -3
  916. package/switch/package.json +0 -3
  917. package/table/package.json +0 -3
  918. package/table-header/package.json +0 -3
  919. package/template/package.json +0 -3
  920. package/text-area/package.json +0 -3
  921. package/text-area-ia/package.json +0 -3
  922. package/thumbnail/package.json +0 -3
  923. package/thumbnails/package.json +0 -3
  924. package/tiered-menu/lib/tiered-menu/utils.d.ts +0 -2
  925. package/tiered-menu/package.json +0 -3
  926. package/tile/package.json +0 -3
  927. package/timeline/package.json +0 -3
  928. package/toast/package.json +0 -3
  929. package/token-list/package.json +0 -3
  930. package/tooltip/package.json +0 -3
  931. package/utils/package.json +0 -3
  932. package/workspace-switch/package.json +0 -3
@@ -0,0 +1,812 @@
1
+ import { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';
2
+ import { ViewMode } from '../../models/view-mode';
3
+ import { Arrow } from './arrow';
4
+ import { Bar } from './bar';
5
+ import { defaultOptions } from './gantt-options';
6
+ import { Popup } from './popup';
7
+ import { DateUtils } from './utils/date-utils';
8
+ import { $, createSVG } from './utils/svg-utils';
9
+ export class Gantt {
10
+ options = { ...defaultOptions };
11
+ tasks;
12
+ dependency_map;
13
+ dates;
14
+ layers;
15
+ bars;
16
+ arrows;
17
+ bar_being_dragged;
18
+ $svg;
19
+ $container;
20
+ popup_wrapper;
21
+ popup = null;
22
+ _minDate;
23
+ _maxDate;
24
+ constructor(wrapper, tasks, options) {
25
+ this._setupOptions(options);
26
+ this._setupWrapper(wrapper);
27
+ this.setup_tasks(tasks);
28
+ // initialize with default view mode
29
+ this.change_view_mode();
30
+ this._bindEvents();
31
+ }
32
+ get minDate() {
33
+ return this._minDate;
34
+ }
35
+ get maxDate() {
36
+ return this._maxDate;
37
+ }
38
+ setup_tasks(tasks) {
39
+ // prepare tasks
40
+ this.tasks = tasks.map((task, i) => {
41
+ // standard colors if needed
42
+ task.color = task.color || '#7892A1';
43
+ // convert to Date objects
44
+ task._start = DateUtils.parse(task.start);
45
+ task._end = DateUtils.parse(task.end);
46
+ // make task invalid if duration too large
47
+ if (DateUtils.diff(task._end, task._start, 'year') > 10) {
48
+ task.end = null;
49
+ }
50
+ // cache index
51
+ task._index = i;
52
+ if (typeof task._row_id === 'number') {
53
+ task._index = task._row_id;
54
+ }
55
+ // invalid dates
56
+ if (!task.start && !task.end) {
57
+ const today = DateUtils.today();
58
+ task._start = today;
59
+ task._end = DateUtils.add(today, 2, 'day');
60
+ }
61
+ if (!task.start && task.end) {
62
+ task._start = DateUtils.add(task._end, -2, 'day');
63
+ }
64
+ if (task.start && !task.end) {
65
+ task._end = DateUtils.add(task._start, 2, 'day');
66
+ }
67
+ // if hours is not set, assume the last day is full day
68
+ // e.g: 2018-09-09 becomes 2018-09-09 23:59:59
69
+ const taskEndValues = DateUtils.getDateValues(task._end);
70
+ if (taskEndValues.slice(3).every((d) => d === 0)) {
71
+ task._end = DateUtils.add(task._end, 24, 'hour');
72
+ }
73
+ // invalid flag
74
+ if (!task.start || !task.end) {
75
+ task.invalid = true;
76
+ }
77
+ // dependencies
78
+ if (typeof task.dependencies === 'string' || !task.dependencies) {
79
+ let deps = [];
80
+ if (task.dependencies) {
81
+ deps = task.dependencies
82
+ .split(',')
83
+ .map((d) => d.trim())
84
+ .filter((d) => d);
85
+ }
86
+ task.dependencies = deps;
87
+ }
88
+ // uids
89
+ if (!task.id) {
90
+ task.id = generate_id(task);
91
+ }
92
+ return task;
93
+ });
94
+ this._setupDependencies();
95
+ }
96
+ refresh(tasks) {
97
+ this.setup_tasks(tasks);
98
+ this.change_view_mode();
99
+ }
100
+ change_view_mode(mode = this.options?.viewMode) {
101
+ this._setupGanttDates();
102
+ this._updateViewScale(mode);
103
+ this._setupDates();
104
+ this._render();
105
+ // fire viewmode_change event
106
+ this.trigger_event('onViewChange', [mode]);
107
+ }
108
+ make_grid_highlights() {
109
+ if (this.view_is(ViewMode.Day)) {
110
+ const width = this.options?.columnWidth;
111
+ const height = ((this.options?.barHeight ?? 0) + (this.options?.padding ?? 0)) * (this.tasks?.length ?? 0) +
112
+ (this.options?.headerHeight ?? 0) +
113
+ (this.options?.padding ?? 0) / 2;
114
+ let x = 0;
115
+ if (isNullOrUndefined(this.dates))
116
+ return;
117
+ for (const date of this.dates) {
118
+ let y = ((this.options?.headerHeight ?? 0) + (this.options?.padding ?? 0)) / 2;
119
+ const isToday = date === DateUtils.today();
120
+ const isWeekend = date.getDay() === 0 || date.getDay() === 6;
121
+ let className;
122
+ if (isToday) {
123
+ className = 'today-highlight';
124
+ y = ((this.options?.headerHeight ?? 0) + (this.options?.padding ?? 0)) / 2;
125
+ }
126
+ else if (isWeekend) {
127
+ className = 'weekend-highlight';
128
+ }
129
+ const rx = 3;
130
+ const ry = 3;
131
+ if (isToday || isWeekend) {
132
+ createSVG('rect', {
133
+ x,
134
+ y,
135
+ rx,
136
+ ry,
137
+ width,
138
+ height,
139
+ class: className,
140
+ append_to: this.layers.grid,
141
+ });
142
+ }
143
+ x += this.options?.columnWidth ?? 0;
144
+ }
145
+ }
146
+ }
147
+ unselect_all() {
148
+ [...this.$svg.querySelectorAll('.bar-wrapper')].forEach((el) => {
149
+ el.classList.remove('active');
150
+ });
151
+ }
152
+ view_is(modes) {
153
+ if (Array.isArray(modes)) {
154
+ return modes.some((mode) => this.options?.viewMode === mode);
155
+ }
156
+ return this.options?.viewMode === modes;
157
+ }
158
+ get_bar(id) {
159
+ return this.bars?.find((bar) => bar.task.id === id);
160
+ }
161
+ show_popup(options) {
162
+ if (!this.popup) {
163
+ this.popup = new Popup(this.popup_wrapper, this.options?.customPopupHtml);
164
+ }
165
+ this.popup.show(options);
166
+ }
167
+ hide_popup() {
168
+ this.popup?.hide();
169
+ }
170
+ trigger_event(event, args) {
171
+ if (this.options?.[event]) {
172
+ this.options[event].apply(null, args);
173
+ }
174
+ }
175
+ _setupWrapper(element) {
176
+ let svgElement, wrapperElement;
177
+ // CSS Selector is passed
178
+ if (typeof element === 'string') {
179
+ element = document.querySelector(element);
180
+ }
181
+ // get the SVGElement
182
+ if (element instanceof HTMLElement) {
183
+ wrapperElement = element;
184
+ svgElement = element.querySelector('svg');
185
+ }
186
+ else if (element instanceof SVGElement) {
187
+ svgElement = element;
188
+ }
189
+ else {
190
+ throw new TypeError(
191
+ // eslint-disable-next-line max-len
192
+ "Frappé Gantt only supports usage of a string CSS selector, HTML DOM element or SVG DOM element for the 'element' parameter");
193
+ }
194
+ // svg element
195
+ if (!svgElement) {
196
+ // create it
197
+ this.$svg = createSVG('svg', {
198
+ append_to: wrapperElement,
199
+ class: 'gantt',
200
+ });
201
+ }
202
+ else {
203
+ this.$svg = svgElement;
204
+ this.$svg.classList.add('gantt');
205
+ }
206
+ // wrapper element
207
+ this.$container = document.createElement('div');
208
+ this.$container.classList.add('gantt-container');
209
+ if (this.options?.containerWidth) {
210
+ this.$container.style.width = this.options.containerWidth + 'px';
211
+ }
212
+ const parentElement = this.$svg.parentElement;
213
+ parentElement.appendChild(this.$container);
214
+ this.$container.appendChild(this.$svg);
215
+ // popup wrapper
216
+ this.popup_wrapper = document.createElement('div');
217
+ this.popup_wrapper.classList.add('popup-wrapper');
218
+ this.$container.appendChild(this.popup_wrapper);
219
+ }
220
+ _setupOptions(options) {
221
+ this.options = Object.assign({}, defaultOptions, options);
222
+ }
223
+ _setupDependencies() {
224
+ this.dependency_map = {};
225
+ if (isNullOrUndefined(this.tasks))
226
+ return;
227
+ for (const t of this.tasks) {
228
+ if (isNullOrUndefined(t.dependencies))
229
+ continue;
230
+ for (const d of t.dependencies) {
231
+ this.dependency_map[d] = this.dependency_map[d] || [];
232
+ this.dependency_map[d].push(t.id);
233
+ }
234
+ }
235
+ }
236
+ _updateViewScale(view_mode) {
237
+ if (isNullOrUndefined(this.options))
238
+ return;
239
+ this.options.viewMode = view_mode;
240
+ if (view_mode === ViewMode.QuarterHour) {
241
+ this.options.step = 24 / 24 / 4;
242
+ this.options.columnWidth = 50;
243
+ }
244
+ else if (view_mode === ViewMode.Hour) {
245
+ this.options.step = 24 / 24;
246
+ this.options.columnWidth = 50;
247
+ }
248
+ else if (view_mode === ViewMode.Day) {
249
+ this.options.step = 24;
250
+ this.options.columnWidth = 50;
251
+ }
252
+ else if (view_mode === ViewMode.HalfDay) {
253
+ this.options.step = 24 / 2;
254
+ this.options.columnWidth = 50;
255
+ }
256
+ else if (view_mode === ViewMode.QuarterDay) {
257
+ this.options.step = 24 / 4;
258
+ this.options.columnWidth = 50;
259
+ }
260
+ else if (view_mode === ViewMode.Week) {
261
+ this.options.step = 24 * 7;
262
+ this.options.columnWidth = 140;
263
+ }
264
+ else if (view_mode === ViewMode.Month) {
265
+ this.options.step = 24 * 30;
266
+ this.options.columnWidth = 120;
267
+ }
268
+ else if (view_mode === ViewMode.Year) {
269
+ this.options.step = 24 * 365;
270
+ this.options.columnWidth = 120;
271
+ }
272
+ }
273
+ _setupDates() {
274
+ this._setupDateValues();
275
+ }
276
+ _setupGanttDates() {
277
+ this._minDate = undefined;
278
+ this._maxDate = undefined;
279
+ if (!isNullOrUndefined(this.tasks)) {
280
+ for (const task of this.tasks) {
281
+ // set global start and end date
282
+ if (!this.minDate || task.start < this.minDate) {
283
+ this._minDate = DateUtils.startOf(task.start, 'day');
284
+ }
285
+ if (!this.maxDate || task.end > this.maxDate) {
286
+ this._maxDate = task.end;
287
+ }
288
+ }
289
+ }
290
+ if (isNullOrUndefined(this.minDate) || isNullOrUndefined(this.maxDate))
291
+ return;
292
+ switch (this.options?.viewMode) {
293
+ case ViewMode.QuarterHour:
294
+ this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 15), 'minutes');
295
+ this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 15, 'minutes');
296
+ break;
297
+ case ViewMode.Hour:
298
+ this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 1), 'hour');
299
+ this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 1, 'hour');
300
+ break;
301
+ case ViewMode.QuarterDay:
302
+ this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 6), 'hour');
303
+ this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 6, 'hour');
304
+ break;
305
+ case ViewMode.HalfDay:
306
+ this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 12), 'hour');
307
+ this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 12, 'hour');
308
+ break;
309
+ case ViewMode.Day:
310
+ this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 1), 'day');
311
+ this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 1, 'day');
312
+ break;
313
+ case ViewMode.Week:
314
+ this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 1), 'week');
315
+ this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 1, 'week');
316
+ break;
317
+ case ViewMode.Month:
318
+ this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 1), 'month');
319
+ this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 1, 'month');
320
+ break;
321
+ case ViewMode.Year:
322
+ this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 1), 'year');
323
+ this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 1, 'year');
324
+ break;
325
+ }
326
+ }
327
+ _setupDateValues() {
328
+ this.dates = [];
329
+ let curDate = null;
330
+ if (!isNullOrUndefined(this.minDate) && !isNullOrUndefined(this.maxDate)) {
331
+ while (curDate === null || curDate < this.maxDate) {
332
+ if (!curDate) {
333
+ curDate = DateUtils.clone(this.minDate);
334
+ }
335
+ else {
336
+ if (this.view_is(ViewMode.Year)) {
337
+ curDate = DateUtils.add(curDate, 1, 'year');
338
+ }
339
+ else if (this.view_is(ViewMode.Month)) {
340
+ curDate = DateUtils.add(curDate, 1, 'month');
341
+ }
342
+ else {
343
+ curDate = DateUtils.add(curDate, this.options?.step, 'hour');
344
+ }
345
+ }
346
+ this.dates.push(curDate);
347
+ }
348
+ }
349
+ if (this.options?.containerWidth) {
350
+ const columnWidth = (this.options.containerWidth - 1) / this.dates.length;
351
+ this.options.columnWidth = columnWidth < 45 ? 45 : columnWidth;
352
+ }
353
+ }
354
+ _bindEvents() {
355
+ this._bindGridClick();
356
+ this._bindBarEvents();
357
+ }
358
+ _render() {
359
+ this._clear();
360
+ this._setupLayers();
361
+ this._makeGrid();
362
+ this._makeDates();
363
+ this._makeBars();
364
+ this._makeArrows();
365
+ this._mapArrowsOnBars();
366
+ this._setWidth();
367
+ this._setScrollPosition();
368
+ }
369
+ _setupLayers() {
370
+ this.layers = {};
371
+ const layers = ['grid', 'date', 'arrow', 'progress', 'bar', 'details'];
372
+ // make group layers
373
+ for (const layer of layers) {
374
+ this.layers[layer] = createSVG('g', {
375
+ class: layer,
376
+ append_to: this.$svg,
377
+ });
378
+ }
379
+ }
380
+ _makeGrid() {
381
+ this._makeGridBackground();
382
+ this._makeGridRows();
383
+ this._makeGridHeader();
384
+ this.make_grid_highlights();
385
+ this._makeGridTicks();
386
+ }
387
+ _makeGridBackground() {
388
+ let gridWidth = (this.dates?.length ?? 0) * (this.options?.columnWidth ?? 0);
389
+ if (this.options?.containerWidth) {
390
+ gridWidth = this.options.containerWidth;
391
+ }
392
+ const distinctRows = [...new Set(this.tasks?.map((x) => x._row_id))];
393
+ const gridHeight = (this.options?.headerHeight ?? 0) +
394
+ (this.options?.padding ?? 0) / 2 +
395
+ ((this.options?.barHeight ?? 0) + (this.options?.padding ?? 0)) * distinctRows.length;
396
+ createSVG('rect', {
397
+ x: 0,
398
+ y: 0,
399
+ width: gridWidth,
400
+ height: gridHeight,
401
+ class: 'grid-background',
402
+ append_to: this.layers.grid,
403
+ });
404
+ $.attr(this.$svg, {
405
+ height: gridHeight,
406
+ width: '100%',
407
+ }, null);
408
+ }
409
+ _makeGridRows() {
410
+ const rowsLayer = createSVG('g', { append_to: this.layers.grid });
411
+ const linesLayer = createSVG('g', { append_to: this.layers.grid });
412
+ const rowWidth = (this.dates?.length ?? 0) * (this.options?.columnWidth ?? 0);
413
+ const rowHeight = (this.options?.barHeight ?? 0) + (this.options?.padding ?? 0);
414
+ let rowY = (this.options?.headerHeight ?? 0) + (this.options?.padding ?? 0) / 2;
415
+ this.tasks?.forEach((_) => {
416
+ createSVG('rect', {
417
+ x: 0,
418
+ y: rowY,
419
+ width: rowWidth,
420
+ height: rowHeight,
421
+ class: 'grid-row',
422
+ append_to: rowsLayer,
423
+ });
424
+ createSVG('line', {
425
+ x1: 0,
426
+ y1: rowY + rowHeight,
427
+ x2: rowWidth,
428
+ y2: rowY + rowHeight,
429
+ class: 'row-line',
430
+ append_to: linesLayer,
431
+ });
432
+ rowY += (this.options?.barHeight ?? 0) + (this.options?.padding ?? 0);
433
+ });
434
+ }
435
+ _makeGridHeader() {
436
+ // const addIsHourView = this.isHourView ? 25 : 10
437
+ const headerWidth = (this.dates?.length ?? 0) * (this.options?.columnWidth ?? 0);
438
+ const headerHeight = (this.options?.headerHeight ?? 0) + 10;
439
+ createSVG('rect', {
440
+ x: 0,
441
+ y: 0,
442
+ width: headerWidth,
443
+ height: headerHeight,
444
+ class: 'grid-header',
445
+ append_to: this.layers.grid,
446
+ });
447
+ }
448
+ _makeGridTicks() {
449
+ let tickX = 0;
450
+ const tickY = (this.options?.headerHeight ?? 0) + (this.options?.padding ?? 0) / 2;
451
+ const tickHeight = ((this.options?.barHeight ?? 0) + (this.options?.padding ?? 0)) * (this.tasks?.length ?? 0);
452
+ if (isNullOrUndefined(this.dates))
453
+ return;
454
+ for (const date of this.dates) {
455
+ let tickClass = 'tick';
456
+ if (this.view_is(ViewMode.QuarterHour) && date.getHours() === 0 && date.getMinutes() === 0) {
457
+ // thick tick for first hour of day.
458
+ tickClass += ' thick';
459
+ }
460
+ else if (this.view_is([ViewMode.Hour, ViewMode.QuarterDay, ViewMode.HalfDay]) && date.getHours() === 0) {
461
+ // thick tick for first hour of day.
462
+ tickClass += ' thick';
463
+ }
464
+ else if (this.view_is(ViewMode.Day) && date.getDate() === 1) {
465
+ // thick tick for monday
466
+ tickClass += ' thick';
467
+ }
468
+ else if (this.view_is(ViewMode.Week) && date.getDate() >= 1 && date.getDate() < 8) {
469
+ // thick tick for first week
470
+ tickClass += ' thick';
471
+ }
472
+ else if (this.view_is(ViewMode.Month) && date.getMonth() % 3 === 0) {
473
+ // thick ticks for quarters
474
+ tickClass += ' thick';
475
+ }
476
+ createSVG('path', {
477
+ d: `M ${tickX} ${tickY} v ${tickHeight}`,
478
+ class: tickClass,
479
+ append_to: this.layers.grid,
480
+ });
481
+ if (this.view_is(ViewMode.Month)) {
482
+ tickX += (DateUtils.getDaysInMonth(date) * (this.options?.columnWidth ?? 0)) / 30;
483
+ }
484
+ else {
485
+ tickX += this.options?.columnWidth ?? 0;
486
+ }
487
+ }
488
+ }
489
+ _makeDates() {
490
+ const dates = this._getDatesToDraw();
491
+ if (isNullOrUndefined(dates))
492
+ return;
493
+ for (let i = 0; i < dates.length; i++) {
494
+ const date = dates[i];
495
+ createSVG('text', {
496
+ x: date.lower_x,
497
+ y: date.lower_y + 20,
498
+ innerHTML: date.lower_text,
499
+ class: 'title-2',
500
+ append_to: this.layers.date,
501
+ });
502
+ if (date.middle_text) {
503
+ createSVG('text', {
504
+ x: date.middle_x,
505
+ y: date.middle_y,
506
+ innerHTML: date.middle_text,
507
+ class: 'middle-text',
508
+ append_to: this.layers.date,
509
+ });
510
+ }
511
+ if (date.upper_text) {
512
+ const $upperText = createSVG('text', {
513
+ x: date.upper_x,
514
+ y: date.upper_y,
515
+ innerHTML: date.upper_text,
516
+ class: 'upper-text',
517
+ append_to: this.layers.date,
518
+ });
519
+ // remove out-of-bound dates
520
+ if ($upperText.getBBox().x2 > this.layers.grid.getBBox().width) {
521
+ $upperText.remove();
522
+ }
523
+ }
524
+ }
525
+ }
526
+ _getDatesToDraw() {
527
+ let lastDate = null;
528
+ const dates = this.dates?.map((date, i) => {
529
+ const d = this._getDateInfo(date, lastDate, i);
530
+ lastDate = date;
531
+ return d;
532
+ });
533
+ return dates;
534
+ }
535
+ _getDateInfo(date, last_date, i) {
536
+ if (!last_date) {
537
+ last_date = DateUtils.add(date, 1, 'year');
538
+ }
539
+ const dateText = {
540
+ // quarter hour
541
+ quarterHourUpper: date.getDate() !== last_date.getDate() ? DateUtils.format(date, 'D MMM', this.options?.language) : '',
542
+ quarterHourLower: DateUtils.format(date, 'HH:mm', this.options?.language),
543
+ // hour
544
+ hourUpper: date.getDate() !== last_date.getDate() ? DateUtils.format(date, 'D MMM', this.options?.language) : '',
545
+ hourLower: DateUtils.format(date, 'HH:mm', this.options?.language),
546
+ // quarter day
547
+ quarterDayUpper: date.getDate() !== last_date.getDate() ? DateUtils.format(date, 'D MMM', this.options?.language) : '',
548
+ quarterDayLower: DateUtils.format(date, 'HH:mm', this.options?.language),
549
+ // half day
550
+ halfDayUpper: date.getDate() !== last_date.getDate()
551
+ ? date.getMonth() !== last_date.getMonth() || i < 2
552
+ ? DateUtils.format(date, 'D MMM', this.options?.language)
553
+ : DateUtils.format(date, 'D', this.options?.language)
554
+ : '',
555
+ halfDayLower: DateUtils.format(date, 'HH:mm', this.options?.language),
556
+ // day
557
+ dayUpper: date.getMonth() !== last_date.getMonth() || i === 0 ? DateUtils.format(date, 'MMMM', this.options?.language) : '',
558
+ dayMiddle: DateUtils.format(date, 'ddd', this.options?.language),
559
+ dayLower: DateUtils.format(date, 'D', this.options?.language),
560
+ // week
561
+ weekUpper: date.getMonth() !== last_date.getMonth() ? DateUtils.format(date, 'MMMM', this.options?.language) : '',
562
+ weekLower: date.getMonth() !== last_date.getMonth()
563
+ ? DateUtils.format(date, 'D MMM', this.options?.language)
564
+ : DateUtils.format(date, 'D', this.options?.language),
565
+ // month
566
+ monthUpper: date.getFullYear() !== last_date.getFullYear() ? DateUtils.format(date, 'YYYY', this.options?.language) : '',
567
+ monthLower: DateUtils.format(date, 'MMMM', this.options?.language),
568
+ // year
569
+ yearUpper: date.getFullYear() !== last_date.getFullYear() ? DateUtils.format(date, 'YYYY', this.options?.language) : '',
570
+ yearLower: DateUtils.format(date, 'YYYY', this.options?.language),
571
+ };
572
+ // Descontando 20 para adcionar uma segunda linha de informação no cabeçalho
573
+ const basePos = {
574
+ x: i * (this.options?.columnWidth ?? 0),
575
+ upper_y: (this.options?.headerHeight ?? 0) - 20 - 25,
576
+ middle_y: (this.options?.headerHeight ?? 0) - 20,
577
+ lower_y: (this.options?.headerHeight ?? 0) - 20,
578
+ };
579
+ const xPos = {
580
+ quarterHourUpper: (this.dates?.length ?? 0) < 14 ? (this.options?.columnWidth ?? 0) : ((this.options?.columnWidth ?? 0) * 24) / 2,
581
+ quarterHourMiddle: (this.options?.columnWidth ?? 0) / 2,
582
+ quarterHourLower: (this.options?.columnWidth ?? 0) / 2,
583
+ hourUpper: (this.dates?.length ?? 0) < 14 ? (this.options?.columnWidth ?? 0) : ((this.options?.columnWidth ?? 0) * 24) / 2,
584
+ hourMiddle: (this.options?.columnWidth ?? 0) / 2,
585
+ hourLower: (this.options?.columnWidth ?? 0) / 2,
586
+ quarterDayUpper: ((this.options?.columnWidth ?? 0) * 4) / 2,
587
+ quarterDayMiddle: (this.options?.columnWidth ?? 0) / 2,
588
+ quarterDayLower: (this.options?.columnWidth ?? 0) / 2,
589
+ halfDayUpper: ((this.options?.columnWidth ?? 0) * 2) / 2,
590
+ halfDayMiddle: (this.options?.columnWidth ?? 0) / 2,
591
+ halfDayLower: (this.options?.columnWidth ?? 0) / 2,
592
+ dayUpper: (this.dates?.length ?? 0) < 15 ? (this.options?.columnWidth ?? 0) : ((this.options?.columnWidth ?? 0) * 30) / 2,
593
+ dayMiddle: (this.options?.columnWidth ?? 0) / 2 - 12,
594
+ dayLower: (this.options?.columnWidth ?? 0) / 2,
595
+ weekUpper: ((this.options?.columnWidth ?? 0) * 4) / 2,
596
+ weekMiddle: 0,
597
+ weekLower: 0,
598
+ monthUpper: (this.dates?.length ?? 0) < 15 ? (this.options?.columnWidth ?? 0) : ((this.options?.columnWidth ?? 0) * 12) / 2,
599
+ monthMiddle: 0,
600
+ monthLower: (this.options?.columnWidth ?? 0) / 2,
601
+ yearUpper: ((this.options?.columnWidth ?? 0) * 30) / 2,
602
+ yearMiddle: (this.options?.columnWidth ?? 0) / 2,
603
+ yearLower: (this.options?.columnWidth ?? 0) / 2,
604
+ };
605
+ return {
606
+ upper_text: dateText[`${this.options?.viewMode ?? 'day'}Upper`],
607
+ middle_text: dateText[`${this.options?.viewMode ?? 'day'}Middle`],
608
+ lower_text: dateText[`${this.options?.viewMode ?? 'day'}Lower`],
609
+ upper_x: basePos.x + xPos[`${this.options?.viewMode ?? 'day'}Upper`],
610
+ upper_y: basePos.upper_y,
611
+ middle_x: basePos.x + xPos[`${this.options?.viewMode ?? 'day'}Middle`],
612
+ middle_y: basePos.middle_y,
613
+ lower_x: basePos.x + xPos[`${this.options?.viewMode ?? 'day'}Lower`],
614
+ lower_y: basePos.lower_y,
615
+ date,
616
+ };
617
+ }
618
+ _makeBars() {
619
+ this.bars = this.tasks?.map((task) => {
620
+ const bar = new Bar(this, task);
621
+ this.layers.bar.appendChild(bar.group);
622
+ return bar;
623
+ });
624
+ }
625
+ _makeArrows() {
626
+ this.arrows = [];
627
+ if (isNullOrUndefined(this.tasks))
628
+ return;
629
+ for (const task of this.tasks) {
630
+ if (isNullOrUndefined(task.dependencies))
631
+ continue;
632
+ let arrows = [];
633
+ arrows = task.dependencies
634
+ .map((task_id) => {
635
+ const dependency = this._getTask(task_id);
636
+ if (!dependency || !this.bars)
637
+ return undefined;
638
+ const arrow = new Arrow(this, this.bars[dependency._index], // from_task
639
+ this.bars[task._index]);
640
+ this.layers.arrow.appendChild(arrow.element);
641
+ return arrow;
642
+ })
643
+ .filter((arrow) => arrow !== undefined); // filter undefined values
644
+ this.arrows = this.arrows.concat(arrows);
645
+ }
646
+ }
647
+ _mapArrowsOnBars() {
648
+ if (isNullOrUndefined(this.bars))
649
+ return;
650
+ for (const bar of this.bars) {
651
+ bar.arrows = this.arrows?.filter((arrow) => arrow.fromTask.task?.id === bar.task?.id || arrow.toTask.task?.id === bar.task?.id) ?? [];
652
+ }
653
+ }
654
+ _setWidth() {
655
+ const curWidth = this.$svg.getBoundingClientRect().width;
656
+ const actualWidth = this.$svg.querySelector('.grid .grid-row').getAttribute('width');
657
+ if (curWidth < actualWidth) {
658
+ this.$svg.setAttribute('width', actualWidth);
659
+ }
660
+ }
661
+ _setScrollPosition() {
662
+ const parentElement = this.$svg.parentElement;
663
+ if (!parentElement || !this.minDate)
664
+ return;
665
+ const hoursBeforeFirstTask = DateUtils.diff(this._getOldestStartingDate(), this.minDate, 'hour');
666
+ const scrollPos = (hoursBeforeFirstTask / (this.options?.step ?? 0)) * (this.options?.columnWidth ?? 0) - (this.options?.columnWidth ?? 0);
667
+ parentElement.scrollLeft = scrollPos;
668
+ }
669
+ _bindGridClick() {
670
+ $.on(this.$svg, this.options?.popupTrigger, '.grid-row, .grid-header', () => {
671
+ this.unselect_all();
672
+ this.hide_popup();
673
+ });
674
+ }
675
+ _bindBarEvents() {
676
+ let isDragging = false;
677
+ let xOnStart = 0;
678
+ let isResizingLeft = false;
679
+ let isResizingRight = false;
680
+ let parentBarId = null;
681
+ let bars = [];
682
+ this.bar_being_dragged = null;
683
+ function action_in_progress() {
684
+ return isDragging || isResizingLeft || isResizingRight;
685
+ }
686
+ $.on(this.$svg, 'mousedown', '.bar-wrapper, .handle', (e, element) => {
687
+ const barWrapper = $.closest('.bar-wrapper', element);
688
+ if (element.classList.contains('left')) {
689
+ isResizingLeft = true;
690
+ }
691
+ else if (element.classList.contains('right')) {
692
+ isResizingRight = true;
693
+ }
694
+ else if (element.classList.contains('bar-wrapper') && this.options?.allowMovement) {
695
+ isDragging = true;
696
+ }
697
+ barWrapper?.classList.add('active');
698
+ xOnStart = e.offsetX;
699
+ parentBarId = barWrapper?.getAttribute('data-id');
700
+ const ids = [parentBarId, ...this._getAllDependentTasks(parentBarId)];
701
+ bars = ids.map((id) => this.get_bar(id)).filter((bar) => bar !== undefined);
702
+ this.bar_being_dragged = parentBarId;
703
+ bars.forEach((bar) => {
704
+ const $bar = bar.element;
705
+ $bar.ox = $bar.getX();
706
+ $bar.oy = $bar.getY();
707
+ $bar.owidth = $bar.getWidth();
708
+ $bar.finaldx = 0;
709
+ });
710
+ });
711
+ $.on(this.$svg, 'mousemove', (e) => {
712
+ if (!action_in_progress()) {
713
+ return;
714
+ }
715
+ const dx = e.offsetX - xOnStart;
716
+ bars.forEach((bar) => {
717
+ const $bar = bar.element;
718
+ $bar.finaldx = this._getSnapPosition(dx);
719
+ this.hide_popup();
720
+ if (isResizingLeft) {
721
+ if (parentBarId === bar.task?.id) {
722
+ bar.updateBarPosition({
723
+ x: $bar.ox + $bar.finaldx,
724
+ width: $bar.owidth - $bar.finaldx,
725
+ });
726
+ }
727
+ else {
728
+ bar.updateBarPosition({
729
+ x: $bar.ox + $bar.finaldx,
730
+ });
731
+ }
732
+ }
733
+ else if (isResizingRight) {
734
+ if (parentBarId === bar.task?.id) {
735
+ bar.updateBarPosition({
736
+ width: $bar.owidth + $bar.finaldx,
737
+ });
738
+ }
739
+ }
740
+ else if (isDragging) {
741
+ bar.updateBarPosition({ x: $bar.ox + $bar.finaldx });
742
+ }
743
+ });
744
+ }, null);
745
+ document.addEventListener('mouseup', (e) => {
746
+ if (isDragging || isResizingLeft || isResizingRight || !this.options?.allowMovement) {
747
+ bars.forEach((bar) => bar.group.classList.remove('active'));
748
+ }
749
+ isDragging = false;
750
+ isResizingLeft = false;
751
+ isResizingRight = false;
752
+ });
753
+ $.on(this.$svg, 'mouseup', (e) => {
754
+ this.bar_being_dragged = null;
755
+ bars.forEach((bar) => {
756
+ const $bar = bar.element;
757
+ if (!$bar.finaldx)
758
+ return;
759
+ bar.dateChanged();
760
+ bar.setActionCompleted();
761
+ });
762
+ }, null);
763
+ }
764
+ _getAllDependentTasks(task_id) {
765
+ let out = [];
766
+ let toProcess = [task_id];
767
+ while (toProcess.length) {
768
+ const deps = toProcess.reduce((acc, curr) => {
769
+ acc = acc.concat(this.dependency_map[curr]);
770
+ return acc;
771
+ }, []);
772
+ out = out.concat(deps);
773
+ toProcess = deps.filter((d) => !toProcess.includes(d));
774
+ }
775
+ return out.filter(Boolean);
776
+ }
777
+ _getSnapPosition(dx) {
778
+ const odx = dx;
779
+ let rem;
780
+ let position;
781
+ if (this.view_is(ViewMode.Hour)) {
782
+ rem = dx % ((this.options?.columnWidth ?? 0) / 6);
783
+ position = odx - rem + (rem < (this.options?.columnWidth ?? 0) / 12 ? 0 : (this.options?.columnWidth ?? 0) / 6);
784
+ }
785
+ else if (this.view_is(ViewMode.Week)) {
786
+ rem = dx % ((this.options?.columnWidth ?? 0) / 7);
787
+ position = odx - rem + (rem < (this.options?.columnWidth ?? 0) / 14 ? 0 : (this.options?.columnWidth ?? 0) / 7);
788
+ }
789
+ else if (this.view_is(ViewMode.Month)) {
790
+ rem = dx % ((this.options?.columnWidth ?? 0) / 30);
791
+ position = odx - rem + (rem < (this.options?.columnWidth ?? 0) / 60 ? 0 : (this.options?.columnWidth ?? 0) / 30);
792
+ }
793
+ else {
794
+ rem = dx % (this.options?.columnWidth ?? 0);
795
+ position = odx - rem + (rem < (this.options?.columnWidth ?? 0) / 2 ? 0 : (this.options?.columnWidth ?? 0));
796
+ }
797
+ return position;
798
+ }
799
+ _getTask(id) {
800
+ return this.tasks?.find((task) => task.id === id);
801
+ }
802
+ _getOldestStartingDate() {
803
+ return this.tasks?.map((task) => task._start).reduce((prev_date, cur_date) => (cur_date <= prev_date ? cur_date : prev_date));
804
+ }
805
+ _clear() {
806
+ this.$svg.innerHTML = '';
807
+ }
808
+ }
809
+ function generate_id(task) {
810
+ return task.name + '_' + Math.random().toString(36).slice(2, 12);
811
+ }
812
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvZ2FudHQvc3JjL2xpYi9nYW50dC9jb21wb25lbnRzL2dhbnR0L2dhbnR0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsTUFBTSxPQUFPLEtBQUs7SUFDUCxPQUFPLEdBQVksRUFBRSxHQUFHLGNBQWMsRUFBYSxDQUFDO0lBQ3BELEtBQUssQ0FBa0I7SUFDdkIsY0FBYyxDQUFNO0lBQ3BCLEtBQUssQ0FBVTtJQUNmLE1BQU0sQ0FBTTtJQUNaLElBQUksQ0FBUztJQUNiLE1BQU0sQ0FBVztJQUNqQixpQkFBaUIsQ0FBTTtJQUN2QixJQUFJLENBQU07SUFDVixVQUFVLENBQWtCO0lBQzVCLGFBQWEsQ0FBa0I7SUFDL0IsS0FBSyxHQUFpQixJQUFJLENBQUM7SUFFMUIsUUFBUSxDQUFRO0lBQ2hCLFFBQVEsQ0FBUTtJQUV4QixZQUFZLE9BQVksRUFBRSxLQUFhLEVBQUUsT0FBMEI7UUFDL0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFVO1FBQ3pCLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsQ0FBTSxFQUFFLEVBQUU7WUFDekMsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUM7WUFFckMsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV0QywwQ0FBMEM7WUFDMUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7WUFDcEIsQ0FBQztZQUVELGNBQWM7WUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUVoQixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQy9CLENBQUM7WUFFRCxnQkFBZ0I7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBRUQsdURBQXVEO1lBQ3ZELDhDQUE4QztZQUM5QyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6RCxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFFRCxlQUFlO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLENBQUM7WUFFRCxlQUFlO1lBQ2YsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM5RCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BCLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWTt5QkFDbkIsS0FBSyxDQUFDLEdBQUcsQ0FBQzt5QkFDVixHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt5QkFDekIsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUM3QixDQUFDO1lBRUQsT0FBTztZQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFhO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVE7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZiw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxvQkFBb0I7UUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDO1lBQ3hDLE1BQU0sTUFBTSxHQUNSLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQzNGLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFVixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTztZQUUxQyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRS9FLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxTQUFTLENBQUM7Z0JBRWQsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDVixTQUFTLEdBQUcsaUJBQWlCLENBQUM7b0JBQzlCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0UsQ0FBQztxQkFBTSxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNuQixTQUFTLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ3BDLENBQUM7Z0JBRUQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFFYixJQUFJLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDdkIsU0FBUyxDQUFDLE1BQU0sRUFBRTt3QkFDZCxDQUFDO3dCQUNELENBQUM7d0JBQ0QsRUFBRTt3QkFDRixFQUFFO3dCQUNGLEtBQUs7d0JBQ0wsTUFBTTt3QkFDTixLQUFLLEVBQUUsU0FBUzt3QkFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtxQkFDOUIsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBRUQsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxJQUFJLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTSxZQUFZO1FBQ2YsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUMzRCxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBNEI7UUFDdkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVNLE9BQU8sQ0FBQyxFQUFPO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTSxVQUFVLENBQUMsT0FBWTtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxVQUFVO1FBQ2IsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQW9CLEVBQUUsSUFBUztRQUNoRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FBQyxPQUFZO1FBQzlCLElBQUksVUFBVSxFQUFFLGNBQWMsQ0FBQztRQUUvQix5QkFBeUI7UUFDekIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLGNBQWMsR0FBRyxPQUFPLENBQUM7WUFDekIsVUFBVSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsQ0FBQzthQUFNLElBQUksT0FBTyxZQUFZLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLFVBQVUsR0FBRyxPQUFPLENBQUM7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLElBQUksU0FBUztZQUNmLG1DQUFtQztZQUNuQyw0SEFBNEgsQ0FDL0gsQ0FBQztRQUNOLENBQUM7UUFFRCxjQUFjO1FBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2QsWUFBWTtZQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRTtnQkFDekIsU0FBUyxFQUFFLGNBQWM7Z0JBQ3pCLEtBQUssRUFBRSxPQUFPO2FBQ2pCLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3JFLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUM5QyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkMsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxhQUFhLENBQUMsT0FBWTtRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDMUMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUFFLFNBQVM7WUFDaEQsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxTQUFjO1FBQ25DLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU87UUFFNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ2xDLElBQUksU0FBUyxLQUFLLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDbEMsQ0FBQzthQUFNLElBQUksU0FBUyxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDO2FBQU0sSUFBSSxTQUFTLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDbEMsQ0FBQzthQUFNLElBQUksU0FBUyxLQUFLLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDO2FBQU0sSUFBSSxTQUFTLEtBQUssUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLENBQUM7YUFBTSxJQUFJLFNBQVMsS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDbkMsQ0FBQzthQUFNLElBQUksU0FBUyxLQUFLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUNuQyxDQUFDO2FBQU0sSUFBSSxTQUFTLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO1FBQ25DLENBQUM7SUFDTCxDQUFDO0lBRU8sV0FBVztRQUNmLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFFMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1QixnQ0FBZ0M7Z0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekQsQ0FBQztnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUM3QixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTztRQUUvRSxRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDN0IsS0FBSyxRQUFRLENBQUMsV0FBVztnQkFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2hHLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDMUYsTUFBTTtZQUNWLEtBQUssUUFBUSxDQUFDLElBQUk7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzVGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDdEYsTUFBTTtZQUNWLEtBQUssUUFBUSxDQUFDLFVBQVU7Z0JBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM1RixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3RGLE1BQU07WUFDVixLQUFLLFFBQVEsQ0FBQyxPQUFPO2dCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDN0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN2RixNQUFNO1lBQ1YsS0FBSyxRQUFRLENBQUMsR0FBRztnQkFDYixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNyRixNQUFNO1lBQ1YsS0FBSyxRQUFRLENBQUMsSUFBSTtnQkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDNUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RixNQUFNO1lBQ1YsS0FBSyxRQUFRLENBQUMsS0FBSztnQkFDZixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDN0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN2RixNQUFNO1lBQ1YsS0FBSyxRQUFRLENBQUMsSUFBSTtnQkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFB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dGVudCI6WyJpbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuaW1wb3J0IHsgRW5yaWNoZWRUYXNrLCBUYXNrIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvb3B0aW9ucyc7XG5pbXBvcnQgeyBWaWV3TW9kZSB9IGZyb20gJy4uLy4uL21vZGVscy92aWV3LW1vZGUnO1xuaW1wb3J0IHsgQXJyb3cgfSBmcm9tICcuL2Fycm93JztcbmltcG9ydCB7IEJhciB9IGZyb20gJy4vYmFyJztcbmltcG9ydCB7IGRlZmF1bHRPcHRpb25zIH0gZnJvbSAnLi9nYW50dC1vcHRpb25zJztcbmltcG9ydCB7IFBvcHVwIH0gZnJvbSAnLi9wb3B1cCc7XG5pbXBvcnQgeyBEYXRlVXRpbHMgfSBmcm9tICcuL3V0aWxzL2RhdGUtdXRpbHMnO1xuaW1wb3J0IHsgJCwgY3JlYXRlU1ZHIH0gZnJvbSAnLi91dGlscy9zdmctdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgR2FudHQge1xuICAgIHB1YmxpYyBvcHRpb25zOiBPcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucyB9IGFzIE9wdGlvbnM7XG4gICAgcHVibGljIHRhc2tzPzogRW5yaWNoZWRUYXNrW107XG4gICAgcHVibGljIGRlcGVuZGVuY3lfbWFwOiBhbnk7XG4gICAgcHVibGljIGRhdGVzPzogRGF0ZVtdO1xuICAgIHB1YmxpYyBsYXllcnM6IGFueTtcbiAgICBwdWJsaWMgYmFycz86IEJhcltdO1xuICAgIHB1YmxpYyBhcnJvd3M/OiBBcnJvd1tdO1xuICAgIHB1YmxpYyBiYXJfYmVpbmdfZHJhZ2dlZDogYW55O1xuICAgIHB1YmxpYyAkc3ZnOiBhbnk7XG4gICAgcHVibGljICRjb250YWluZXI/OiBIVE1MRGl2RWxlbWVudDtcbiAgICBwdWJsaWMgcG9wdXBfd3JhcHBlcj86IEhUTUxEaXZFbGVtZW50O1xuICAgIHB1YmxpYyBwb3B1cDogUG9wdXAgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgX21pbkRhdGU/OiBEYXRlO1xuICAgIHByaXZhdGUgX21heERhdGU/OiBEYXRlO1xuXG4gICAgY29uc3RydWN0b3Iod3JhcHBlcjogYW55LCB0YXNrczogVGFza1tdLCBvcHRpb25zPzogUGFydGlhbDxPcHRpb25zPikge1xuICAgICAgICB0aGlzLl9zZXR1cE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX3NldHVwV3JhcHBlcih3cmFwcGVyKTtcbiAgICAgICAgdGhpcy5zZXR1cF90YXNrcyh0YXNrcyk7XG4gICAgICAgIC8vIGluaXRpYWxpemUgd2l0aCBkZWZhdWx0IHZpZXcgbW9kZVxuICAgICAgICB0aGlzLmNoYW5nZV92aWV3X21vZGUoKTtcbiAgICAgICAgdGhpcy5fYmluZEV2ZW50cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0dXBfdGFza3ModGFza3M6IGFueSkge1xuICAgICAgICAvLyBwcmVwYXJlIHRhc2tzXG4gICAgICAgIHRoaXMudGFza3MgPSB0YXNrcy5tYXAoKHRhc2s6IGFueSwgaTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyBzdGFuZGFyZCBjb2xvcnMgaWYgbmVlZGVkXG4gICAgICAgICAgICB0YXNrLmNvbG9yID0gdGFzay5jb2xvciB8fCAnIzc4OTJBMSc7XG5cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gRGF0ZSBvYmplY3RzXG4gICAgICAgICAgICB0YXNrLl9zdGFydCA9IERhdGVVdGlscy5wYXJzZSh0YXNrLnN0YXJ0KTtcbiAgICAgICAgICAgIHRhc2suX2VuZCA9IERhdGVVdGlscy5wYXJzZSh0YXNrLmVuZCk7XG5cbiAgICAgICAgICAgIC8vIG1ha2UgdGFzayBpbnZhbGlkIGlmIGR1cmF0aW9uIHRvbyBsYXJnZVxuICAgICAgICAgICAgaWYgKERhdGVVdGlscy5kaWZmKHRhc2suX2VuZCwgdGFzay5fc3RhcnQsICd5ZWFyJykgPiAxMCkge1xuICAgICAgICAgICAgICAgIHRhc2suZW5kID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FjaGUgaW5kZXhcbiAgICAgICAgICAgIHRhc2suX2luZGV4ID0gaTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXNrLl9yb3dfaWQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgdGFzay5faW5kZXggPSB0YXNrLl9yb3dfaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGludmFsaWQgZGF0ZXNcbiAgICAgICAgICAgIGlmICghdGFzay5zdGFydCAmJiAhdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b2RheSA9IERhdGVVdGlscy50b2RheSgpO1xuICAgICAgICAgICAgICAgIHRhc2suX3N0YXJ0ID0gdG9kYXk7XG4gICAgICAgICAgICAgICAgdGFzay5fZW5kID0gRGF0ZVV0aWxzLmFkZCh0b2RheSwgMiwgJ2RheScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRhc2suc3RhcnQgJiYgdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLl9zdGFydCA9IERhdGVVdGlscy5hZGQodGFzay5fZW5kLCAtMiwgJ2RheScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFzay5zdGFydCAmJiAhdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLl9lbmQgPSBEYXRlVXRpbHMuYWRkKHRhc2suX3N0YXJ0LCAyLCAnZGF5Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIGhvdXJzIGlzIG5vdCBzZXQsIGFzc3VtZSB0aGUgbGFzdCBkYXkgaXMgZnVsbCBkYXlcbiAgICAgICAgICAgIC8vIGUuZzogMjAxOC0wOS0wOSBiZWNvbWVzIDIwMTgtMDktMDkgMjM6NTk6NTlcbiAgICAgICAgICAgIGNvbnN0IHRhc2tFbmRWYWx1ZXMgPSBEYXRlVXRpbHMuZ2V0RGF0ZVZhbHVlcyh0YXNrLl9lbmQpO1xuICAgICAgICAgICAgaWYgKHRhc2tFbmRWYWx1ZXMuc2xpY2UoMykuZXZlcnkoKGQpID0+IGQgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgdGFzay5fZW5kID0gRGF0ZVV0aWxzLmFkZCh0YXNrLl9lbmQsIDI0LCAnaG91cicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpbnZhbGlkIGZsYWdcbiAgICAgICAgICAgIGlmICghdGFzay5zdGFydCB8fCAhdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLmludmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGFzay5kZXBlbmRlbmNpZXMgPT09ICdzdHJpbmcnIHx8ICF0YXNrLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgICAgIGxldCBkZXBzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHRhc2suZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcHMgPSB0YXNrLmRlcGVuZGVuY2llc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGQ6IGFueSkgPT4gZC50cmltKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChkOiBhbnkpID0+IGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXNrLmRlcGVuZGVuY2llcyA9IGRlcHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHVpZHNcbiAgICAgICAgICAgIGlmICghdGFzay5pZCkge1xuICAgICAgICAgICAgICAgIHRhc2suaWQgPSBnZW5lcmF0ZV9pZCh0YXNrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRhc2s7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NldHVwRGVwZW5kZW5jaWVzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZnJlc2godGFza3M6IFRhc2tbXSkge1xuICAgICAgICB0aGlzLnNldHVwX3Rhc2tzKHRhc2tzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2Vfdmlld19tb2RlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZV92aWV3X21vZGUobW9kZSA9IHRoaXMub3B0aW9ucz8udmlld01vZGUpIHtcbiAgICAgICAgdGhpcy5fc2V0dXBHYW50dERhdGVzKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdTY2FsZShtb2RlKTtcbiAgICAgICAgdGhpcy5fc2V0dXBEYXRlcygpO1xuICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgLy8gZmlyZSB2aWV3bW9kZV9jaGFuZ2UgZXZlbnRcbiAgICAgICAgdGhpcy50cmlnZ2VyX2V2ZW50KCdvblZpZXdDaGFuZ2UnLCBbbW9kZV0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYWtlX2dyaWRfaGlnaGxpZ2h0cygpIHtcbiAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5EYXkpKSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPVxuICAgICAgICAgICAgICAgICgodGhpcy5vcHRpb25zPy5iYXJIZWlnaHQgPz8gMCkgKyAodGhpcy5vcHRpb25zPy5wYWRkaW5nID8/IDApKSAqICh0aGlzLnRhc2tzPy5sZW5ndGggPz8gMCkgK1xuICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSArXG4gICAgICAgICAgICAgICAgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSAvIDI7XG5cbiAgICAgICAgICAgIGxldCB4ID0gMDtcblxuICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZGF0ZXMpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZGF0ZSBvZiB0aGlzLmRhdGVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHkgPSAoKHRoaXMub3B0aW9ucz8uaGVhZGVySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSkgLyAyO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNUb2RheSA9IGRhdGUgPT09IERhdGVVdGlscy50b2RheSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzV2Vla2VuZCA9IGRhdGUuZ2V0RGF5KCkgPT09IDAgfHwgZGF0ZS5nZXREYXkoKSA9PT0gNjtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzVG9kYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gJ3RvZGF5LWhpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgIHkgPSAoKHRoaXMub3B0aW9ucz8uaGVhZGVySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSkgLyAyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNXZWVrZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICd3ZWVrZW5kLWhpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcnggPSAzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ5ID0gMztcblxuICAgICAgICAgICAgICAgIGlmIChpc1RvZGF5IHx8IGlzV2Vla2VuZCkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVTVkcoJ3JlY3QnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ4LFxuICAgICAgICAgICAgICAgICAgICAgICAgcnksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHggKz0gdGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHVuc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgWy4uLnRoaXMuJHN2Zy5xdWVyeVNlbGVjdG9yQWxsKCcuYmFyLXdyYXBwZXInKV0uZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmlld19pcyhtb2RlczogVmlld01vZGUgfCBWaWV3TW9kZVtdKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVzLnNvbWUoKG1vZGUpID0+IHRoaXMub3B0aW9ucz8udmlld01vZGUgPT09IG1vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucz8udmlld01vZGUgPT09IG1vZGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfYmFyKGlkOiBhbnkpOiBCYXIgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXJzPy5maW5kKChiYXI6IGFueSkgPT4gYmFyLnRhc2suaWQgPT09IGlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd19wb3B1cChvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwID0gbmV3IFBvcHVwKHRoaXMucG9wdXBfd3JhcHBlciwgdGhpcy5vcHRpb25zPy5jdXN0b21Qb3B1cEh0bWwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wdXAuc2hvdyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZV9wb3B1cCgpIHtcbiAgICAgICAgdGhpcy5wb3B1cD8uaGlkZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyX2V2ZW50KGV2ZW50OiBrZXlvZiBPcHRpb25zLCBhcmdzOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8uW2V2ZW50XSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zW2V2ZW50XS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwV3JhcHBlcihlbGVtZW50OiBhbnkpIHtcbiAgICAgICAgbGV0IHN2Z0VsZW1lbnQsIHdyYXBwZXJFbGVtZW50O1xuXG4gICAgICAgIC8vIENTUyBTZWxlY3RvciBpcyBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgdGhlIFNWR0VsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgc3ZnRWxlbWVudCA9IGVsZW1lbnQucXVlcnlTZWxlY3Rvcignc3ZnJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHN2Z0VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgICAgIFwiRnJhcHDDqSBHYW50dCBvbmx5IHN1cHBvcnRzIHVzYWdlIG9mIGEgc3RyaW5nIENTUyBzZWxlY3RvciwgSFRNTCBET00gZWxlbWVudCBvciBTVkcgRE9NIGVsZW1lbnQgZm9yIHRoZSAnZWxlbWVudCcgcGFyYW1ldGVyXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3ZnIGVsZW1lbnRcbiAgICAgICAgaWYgKCFzdmdFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyBjcmVhdGUgaXRcbiAgICAgICAgICAgIHRoaXMuJHN2ZyA9IGNyZWF0ZVNWRygnc3ZnJywge1xuICAgICAgICAgICAgICAgIGFwcGVuZF90bzogd3JhcHBlckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgY2xhc3M6ICdnYW50dCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJHN2ZyA9IHN2Z0VsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLiRzdmcuY2xhc3NMaXN0LmFkZCgnZ2FudHQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdyYXBwZXIgZWxlbWVudFxuICAgICAgICB0aGlzLiRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy4kY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2dhbnR0LWNvbnRhaW5lcicpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zPy5jb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy4kY29udGFpbmVyLnN0eWxlLndpZHRoID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcldpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0aGlzLiRzdmcucGFyZW50RWxlbWVudDtcbiAgICAgICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLiRjb250YWluZXIpO1xuICAgICAgICB0aGlzLiRjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy4kc3ZnKTtcblxuICAgICAgICAvLyBwb3B1cCB3cmFwcGVyXG4gICAgICAgIHRoaXMucG9wdXBfd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLnBvcHVwX3dyYXBwZXIuY2xhc3NMaXN0LmFkZCgncG9wdXAtd3JhcHBlcicpO1xuICAgICAgICB0aGlzLiRjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wb3B1cF93cmFwcGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXR1cE9wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXR1cERlcGVuZGVuY2llcygpIHtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcCA9IHt9O1xuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy50YXNrcykpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMudGFza3MpIHtcbiAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0LmRlcGVuZGVuY2llcykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkIG9mIHQuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcFtkXSA9IHRoaXMuZGVwZW5kZW5jeV9tYXBbZF0gfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcFtkXS5wdXNoKHQuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlVmlld1NjYWxlKHZpZXdfbW9kZTogYW55KSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLm9wdGlvbnMpKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5vcHRpb25zLnZpZXdNb2RlID0gdmlld19tb2RlO1xuICAgICAgICBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5RdWFydGVySG91cikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAvIDI0IC8gNDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuSG91cikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAvIDI0O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5EYXkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQ7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSA1MDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLkhhbGZEYXkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgLyAyO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5RdWFydGVyRGF5KSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0IC8gNDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuV2Vlaykge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAqIDc7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSAxNDA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5Nb250aCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAqIDMwO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gMTIwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAqIDM2NTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDEyMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwRGF0ZXMoKSB7XG4gICAgICAgIHRoaXMuX3NldHVwRGF0ZVZhbHVlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwR2FudHREYXRlcygpIHtcbiAgICAgICAgdGhpcy5fbWluRGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudGFza3MpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgdGhpcy50YXNrcykge1xuICAgICAgICAgICAgICAgIC8vIHNldCBnbG9iYWwgc3RhcnQgYW5kIGVuZCBkYXRlXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1pbkRhdGUgfHwgdGFzay5zdGFydCA8IHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLnN0YXJ0T2YodGFzay5zdGFydCwgJ2RheScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF4RGF0ZSB8fCB0YXNrLmVuZCA+IHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gdGFzay5lbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMubWluRGF0ZSkgfHwgaXNOdWxsT3JVbmRlZmluZWQodGhpcy5tYXhEYXRlKSkgcmV0dXJuO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zPy52aWV3TW9kZSkge1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5RdWFydGVySG91cjpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDE1KSwgJ21pbnV0ZXMnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxNSwgJ21pbnV0ZXMnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuSG91cjpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDEpLCAnaG91cicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsICdob3VyJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLlF1YXJ0ZXJEYXk6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyA2KSwgJ2hvdXInKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyA2LCAnaG91cicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5IYWxmRGF5OlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMTIpLCAnaG91cicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEyLCAnaG91cicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5EYXk6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgJ2RheScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsICdkYXknKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuV2VlazpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDEpLCAnd2VlaycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsICd3ZWVrJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLk1vbnRoOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMSksICdtb250aCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsICdtb250aCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5ZZWFyOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMSksICd5ZWFyJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgJ3llYXInKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwRGF0ZVZhbHVlcygpIHtcbiAgICAgICAgdGhpcy5kYXRlcyA9IFtdO1xuICAgICAgICBsZXQgY3VyRGF0ZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLm1pbkRhdGUpICYmICFpc051bGxPclVuZGVmaW5lZCh0aGlzLm1heERhdGUpKSB7XG4gICAgICAgICAgICB3aGlsZSAoY3VyRGF0ZSA9PT0gbnVsbCB8fCBjdXJEYXRlIDwgdGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXJEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1ckRhdGUgPSBEYXRlVXRpbHMuY2xvbmUodGhpcy5taW5EYXRlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLlllYXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJEYXRlID0gRGF0ZVV0aWxzLmFkZChjdXJEYXRlLCAxLCAneWVhcicpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckRhdGUgPSBEYXRlVXRpbHMuYWRkKGN1ckRhdGUsIDEsICdtb250aCcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyRGF0ZSA9IERhdGVVdGlscy5hZGQoY3VyRGF0ZSwgdGhpcy5vcHRpb25zPy5zdGVwLCAnaG91cicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZXMucHVzaChjdXJEYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnM/LmNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9ICh0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGggLSAxKSAvIHRoaXMuZGF0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gY29sdW1uV2lkdGggPCA0NSA/IDQ1IDogY29sdW1uV2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9iaW5kRXZlbnRzKCkge1xuICAgICAgICB0aGlzLl9iaW5kR3JpZENsaWNrKCk7XG4gICAgICAgIHRoaXMuX2JpbmRCYXJFdmVudHMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuX2NsZWFyKCk7XG4gICAgICAgIHRoaXMuX3NldHVwTGF5ZXJzKCk7XG4gICAgICAgIHRoaXMuX21ha2VHcmlkKCk7XG4gICAgICAgIHRoaXMuX21ha2VEYXRlcygpO1xuICAgICAgICB0aGlzLl9tYWtlQmFycygpO1xuICAgICAgICB0aGlzLl9tYWtlQXJyb3dzKCk7XG4gICAgICAgIHRoaXMuX21hcEFycm93c09uQmFycygpO1xuICAgICAgICB0aGlzLl9zZXRXaWR0aCgpO1xuICAgICAgICB0aGlzLl9zZXRTY3JvbGxQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwTGF5ZXJzKCkge1xuICAgICAgICB0aGlzLmxheWVycyA9IHt9O1xuICAgICAgICBjb25zdCBsYXllcnMgPSBbJ2dyaWQnLCAnZGF0ZScsICdhcnJvdycsICdwcm9ncmVzcycsICdiYXInLCAnZGV0YWlscyddO1xuICAgICAgICAvLyBtYWtlIGdyb3VwIGxheWVyc1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICAgICAgdGhpcy5sYXllcnNbbGF5ZXJdID0gY3JlYXRlU1ZHKCdnJywge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBsYXllcixcbiAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMuJHN2ZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFrZUdyaWQoKSB7XG4gICAgICAgIHRoaXMuX21ha2VHcmlkQmFja2dyb3VuZCgpO1xuICAgICAgICB0aGlzLl9tYWtlR3JpZFJvd3MoKTtcbiAgICAgICAgdGhpcy5fbWFrZUdyaWRIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5tYWtlX2dyaWRfaGlnaGxpZ2h0cygpO1xuICAgICAgICB0aGlzLl9tYWtlR3JpZFRpY2tzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFrZUdyaWRCYWNrZ3JvdW5kKCkge1xuICAgICAgICBsZXQgZ3JpZFdpZHRoID0gKHRoaXMuZGF0ZXM/Lmxlbmd0aCA/PyAwKSAqICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnM/LmNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICBncmlkV2lkdGggPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXN0aW5jdFJvd3MgPSBbLi4ubmV3IFNldCh0aGlzLnRhc2tzPy5tYXAoKHg6IGFueSkgPT4geC5fcm93X2lkKSldO1xuICAgICAgICBjb25zdCBncmlkSGVpZ2h0ID1cbiAgICAgICAgICAgICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSArXG4gICAgICAgICAgICAodGhpcy5vcHRpb25zPy5wYWRkaW5nID8/IDApIC8gMiArXG4gICAgICAgICAgICAoKHRoaXMub3B0aW9ucz8uYmFySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSkgKiBkaXN0aW5jdFJvd3MubGVuZ3RoO1xuXG4gICAgICAgIGNyZWF0ZVNWRygncmVjdCcsIHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgd2lkdGg6IGdyaWRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogZ3JpZEhlaWdodCxcbiAgICAgICAgICAgIGNsYXNzOiAnZ3JpZC1iYWNrZ3JvdW5kJyxcbiAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC5hdHRyKFxuICAgICAgICAgICAgdGhpcy4kc3ZnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhlaWdodDogZ3JpZEhlaWdodCxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFrZUdyaWRSb3dzKCkge1xuICAgICAgICBjb25zdCByb3dzTGF5ZXIgPSBjcmVhdGVTVkcoJ2cnLCB7IGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCB9KTtcbiAgICAgICAgY29uc3QgbGluZXNMYXllciA9IGNyZWF0ZVNWRygnZycsIHsgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkIH0pO1xuXG4gICAgICAgIGNvbnN0IHJvd1dpZHRoID0gKHRoaXMuZGF0ZXM/Lmxlbmd0aCA/PyAwKSAqICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApO1xuICAgICAgICBjb25zdCByb3dIZWlnaHQgPSAodGhpcy5vcHRpb25zPy5iYXJIZWlnaHQgPz8gMCkgKyAodGhpcy5vcHRpb25zPy5wYWRkaW5nID8/IDApO1xuICAgICAgICBsZXQgcm93WSA9ICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSArICh0aGlzLm9wdGlvbnM/LnBhZGRpbmcgPz8gMCkgLyAyO1xuXG4gICAgICAgIHRoaXMudGFza3M/LmZvckVhY2goKF8pID0+IHtcbiAgICAgICAgICAgIGNyZWF0ZVNWRygncmVjdCcsIHtcbiAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgIHk6IHJvd1ksXG4gICAgICAgICAgICAgICAgd2lkdGg6IHJvd1dpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogcm93SGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNsYXNzOiAnZ3JpZC1yb3cnLFxuICAgICAgICAgICAgICAgIGFwcGVuZF90bzogcm93c0xheWVyLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRygnbGluZScsIHtcbiAgICAgICAgICAgICAgICB4MTogMCxcbiAgICAgICAgICAgICAgICB5MTogcm93WSArIHJvd0hlaWdodCxcbiAgICAgICAgICAgICAgICB4Mjogcm93V2lkdGgsXG4gICAgICAgICAgICAgICAgeTI6IHJvd1kgKyByb3dIZWlnaHQsXG4gICAgICAgICAgICAgICAgY2xhc3M6ICdyb3ctbGluZScsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiBsaW5lc0xheWVyLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJvd1kgKz0gKHRoaXMub3B0aW9ucz8uYmFySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFrZUdyaWRIZWFkZXIoKSB7XG4gICAgICAgIC8vIGNvbnN0IGFkZElzSG91clZpZXcgPSB0aGlzLmlzSG91clZpZXcgPyAyNSA6IDEwXG4gICAgICAgIGNvbnN0IGhlYWRlcldpZHRoID0gKHRoaXMuZGF0ZXM/Lmxlbmd0aCA/PyAwKSAqICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApO1xuICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSAodGhpcy5vcHRpb25zPy5oZWFkZXJIZWlnaHQgPz8gMCkgKyAxMDtcbiAgICAgICAgY3JlYXRlU1ZHKCdyZWN0Jywge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICB3aWR0aDogaGVhZGVyV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGhlYWRlckhlaWdodCxcbiAgICAgICAgICAgIGNsYXNzOiAnZ3JpZC1oZWFkZXInLFxuICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYWtlR3JpZFRpY2tzKCkge1xuICAgICAgICBsZXQgdGlja1ggPSAwO1xuICAgICAgICBjb25zdCB0aWNrWSA9ICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSArICh0aGlzLm9wdGlvbnM/LnBhZGRpbmcgPz8gMCkgLyAyO1xuICAgICAgICBjb25zdCB0aWNrSGVpZ2h0ID0gKCh0aGlzLm9wdGlvbnM/LmJhckhlaWdodCA/PyAwKSArICh0aGlzLm9wdGlvbnM/LnBhZGRpbmcgPz8gMCkpICogKHRoaXMudGFza3M/Lmxlbmd0aCA/PyAwKTtcblxuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy5kYXRlcykpIHJldHVybjtcblxuICAgICAgICBmb3IgKGNvbnN0IGRhdGUgb2YgdGhpcy5kYXRlcykge1xuICAgICAgICAgICAgbGV0IHRpY2tDbGFzcyA9ICd0aWNrJztcblxuICAgICAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5RdWFydGVySG91cikgJiYgZGF0ZS5nZXRIb3VycygpID09PSAwICYmIGRhdGUuZ2V0TWludXRlcygpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpY2sgdGljayBmb3IgZmlyc3QgaG91ciBvZiBkYXkuXG4gICAgICAgICAgICAgICAgdGlja0NsYXNzICs9ICcgdGhpY2snO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoW1ZpZXdNb2RlLkhvdXIsIFZpZXdNb2RlLlF1YXJ0ZXJEYXksIFZpZXdNb2RlLkhhbGZEYXldKSAmJiBkYXRlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyB0aGljayB0aWNrIGZvciBmaXJzdCBob3VyIG9mIGRheS5cbiAgICAgICAgICAgICAgICB0aWNrQ2xhc3MgKz0gJyB0aGljayc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5EYXkpICYmIGRhdGUuZ2V0RGF0ZSgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpY2sgdGljayBmb3IgbW9uZGF5XG4gICAgICAgICAgICAgICAgdGlja0NsYXNzICs9ICcgdGhpY2snO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuV2VlaykgJiYgZGF0ZS5nZXREYXRlKCkgPj0gMSAmJiBkYXRlLmdldERhdGUoKSA8IDgpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGljayB0aWNrIGZvciBmaXJzdCB3ZWVrXG4gICAgICAgICAgICAgICAgdGlja0NsYXNzICs9ICcgdGhpY2snO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpICYmIGRhdGUuZ2V0TW9udGgoKSAlIDMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyB0aGljayB0aWNrcyBmb3IgcXVhcnRlcnNcbiAgICAgICAgICAgICAgICB0aWNrQ2xhc3MgKz0gJyB0aGljayc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRygncGF0aCcsIHtcbiAgICAgICAgICAgICAgICBkOiBgTSAke3RpY2tYfSAke3RpY2tZfSB2ICR7dGlja0hlaWdodH1gLFxuICAgICAgICAgICAgICAgIGNsYXNzOiB0aWNrQ2xhc3MsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpKSB7XG4gICAgICAgICAgICAgICAgdGlja1ggKz0gKERhdGVVdGlscy5nZXREYXlzSW5Nb250aChkYXRlKSAqICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApKSAvIDMwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aWNrWCArPSB0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYWtlRGF0ZXMoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5fZ2V0RGF0ZXNUb0RyYXcoKTtcblxuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoZGF0ZXMpKSByZXR1cm47XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGRhdGVzW2ldO1xuXG4gICAgICAgICAgICBjcmVhdGVTVkcoJ3RleHQnLCB7XG4gICAgICAgICAgICAgICAgeDogZGF0ZS5sb3dlcl94LFxuICAgICAgICAgICAgICAgIHk6IGRhdGUubG93ZXJfeSArIDIwLFxuICAgICAgICAgICAgICAgIGlubmVySFRNTDogZGF0ZS5sb3dlcl90ZXh0LFxuICAgICAgICAgICAgICAgIGNsYXNzOiAndGl0bGUtMicsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5kYXRlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRlLm1pZGRsZV90ZXh0KSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlU1ZHKCd0ZXh0Jywge1xuICAgICAgICAgICAgICAgICAgICB4OiBkYXRlLm1pZGRsZV94LFxuICAgICAgICAgICAgICAgICAgICB5OiBkYXRlLm1pZGRsZV95LFxuICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IGRhdGUubWlkZGxlX3RleHQsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiAnbWlkZGxlLXRleHQnLFxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmRhdGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRlLnVwcGVyX3RleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkdXBwZXJUZXh0ID0gY3JlYXRlU1ZHKCd0ZXh0Jywge1xuICAgICAgICAgICAgICAgICAgICB4OiBkYXRlLnVwcGVyX3gsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRhdGUudXBwZXJfeSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBkYXRlLnVwcGVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiAndXBwZXItdGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZGF0ZSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBvdXQtb2YtYm91bmQgZGF0ZXNcbiAgICAgICAgICAgICAgICBpZiAoJHVwcGVyVGV4dC5nZXRCQm94KCkueDIgPiB0aGlzLmxheWVycy5ncmlkLmdldEJCb3goKS53aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAkdXBwZXJUZXh0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2dldERhdGVzVG9EcmF3KCkge1xuICAgICAgICBsZXQgbGFzdERhdGU6IGFueSA9IG51bGw7XG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5kYXRlcz8ubWFwKChkYXRlOiBhbnksIGk6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZCA9IHRoaXMuX2dldERhdGVJbmZvKGRhdGUsIGxhc3REYXRlLCBpKTtcbiAgICAgICAgICAgIGxhc3REYXRlID0gZGF0ZTtcbiAgICAgICAgICAgIHJldHVybiBkO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRhdGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldERhdGVJbmZvKGRhdGU6IERhdGUsIGxhc3RfZGF0ZTogRGF0ZSwgaTogYW55KSB7XG4gICAgICAgIGlmICghbGFzdF9kYXRlKSB7XG4gICAgICAgICAgICBsYXN0X2RhdGUgPSBEYXRlVXRpbHMuYWRkKGRhdGUsIDEsICd5ZWFyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRlVGV4dDogYW55ID0ge1xuICAgICAgICAgICAgLy8gcXVhcnRlciBob3VyXG4gICAgICAgICAgICBxdWFydGVySG91clVwcGVyOiBkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKSA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0QgTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSkgOiAnJyxcblxuICAgICAgICAgICAgcXVhcnRlckhvdXJMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnSEg6bW0nLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSxcblxuICAgICAgICAgICAgLy8gaG91clxuICAgICAgICAgICAgaG91clVwcGVyOiBkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKSA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0QgTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSkgOiAnJyxcblxuICAgICAgICAgICAgaG91ckxvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdISDptbScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyBxdWFydGVyIGRheVxuICAgICAgICAgICAgcXVhcnRlckRheVVwcGVyOiBkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKSA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0QgTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSkgOiAnJyxcblxuICAgICAgICAgICAgcXVhcnRlckRheUxvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdISDptbScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyBoYWxmIGRheVxuICAgICAgICAgICAgaGFsZkRheVVwcGVyOlxuICAgICAgICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpICE9PSBsYXN0X2RhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgID8gZGF0ZS5nZXRNb250aCgpICE9PSBsYXN0X2RhdGUuZ2V0TW9udGgoKSB8fCBpIDwgMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdEIE1NTScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0QnLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuXG4gICAgICAgICAgICBoYWxmRGF5TG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0hIOm1tJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIC8vIGRheVxuICAgICAgICAgICAgZGF5VXBwZXI6IGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKCkgfHwgaSA9PT0gMCA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ01NTU0nLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSA6ICcnLFxuXG4gICAgICAgICAgICBkYXlNaWRkbGU6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ2RkZCcsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICBkYXlMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnRCcsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyB3ZWVrXG4gICAgICAgICAgICB3ZWVrVXBwZXI6IGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKCkgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdNTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSkgOiAnJyxcblxuICAgICAgICAgICAgd2Vla0xvd2VyOlxuICAgICAgICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdEIE1NTScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgICAgIDogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnRCcsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyBtb250aFxuICAgICAgICAgICAgbW9udGhVcHBlcjogZGF0ZS5nZXRGdWxsWWVhcigpICE9PSBsYXN0X2RhdGUuZ2V0RnVsbFllYXIoKSA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ1lZWVknLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSA6ICcnLFxuXG4gICAgICAgICAgICBtb250aExvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdNTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIC8vIHllYXJcbiAgICAgICAgICAgIHllYXJVcHBlcjogZGF0ZS5nZXRGdWxsWWVhcigpICE9PSBsYXN0X2RhdGUuZ2V0RnVsbFllYXIoKSA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ1lZWVknLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSA6ICcnLFxuXG4gICAgICAgICAgICB5ZWFyTG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ1lZWVknLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBEZXNjb250YW5kbyAyMCBwYXJhIGFkY2lvbmFyIHVtYSBzZWd1bmRhIGxpbmhhIGRlIGluZm9ybWHDp8OjbyBubyBjYWJlw6dhbGhvXG4gICAgICAgIGNvbnN0IGJhc2VQb3MgPSB7XG4gICAgICAgICAgICB4OiBpICogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCksXG4gICAgICAgICAgICB1cHBlcl95OiAodGhpcy5vcHRpb25zPy5oZWFkZXJIZWlnaHQgPz8gMCkgLSAyMCAtIDI1LFxuICAgICAgICAgICAgbWlkZGxlX3k6ICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSAtIDIwLFxuICAgICAgICAgICAgbG93ZXJfeTogKHRoaXMub3B0aW9ucz8uaGVhZGVySGVpZ2h0ID8/IDApIC0gMjAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHhQb3M6IGFueSA9IHtcbiAgICAgICAgICAgIHF1YXJ0ZXJIb3VyVXBwZXI6ICh0aGlzLmRhdGVzPy5sZW5ndGggPz8gMCkgPCAxNCA/ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIDogKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApICogMjQpIC8gMixcbiAgICAgICAgICAgIHF1YXJ0ZXJIb3VyTWlkZGxlOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG4gICAgICAgICAgICBxdWFydGVySG91ckxvd2VyOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG5cbiAgICAgICAgICAgIGhvdXJVcHBlcjogKHRoaXMuZGF0ZXM/Lmxlbmd0aCA/PyAwKSA8IDE0ID8gKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgOiAoKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgKiAyNCkgLyAyLFxuICAgICAgICAgICAgaG91ck1pZGRsZTogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAyLFxuICAgICAgICAgICAgaG91ckxvd2VyOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG5cbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlVcHBlcjogKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApICogNCkgLyAyLFxuICAgICAgICAgICAgcXVhcnRlckRheU1pZGRsZTogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAyLFxuICAgICAgICAgICAgcXVhcnRlckRheUxvd2VyOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG5cbiAgICAgICAgICAgIGhhbGZEYXlVcHBlcjogKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApICogMikgLyAyLFxuICAgICAgICAgICAgaGFsZkRheU1pZGRsZTogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAyLFxuICAgICAgICAgICAgaGFsZkRheUxvd2VyOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG5cbiAgICAgICAgICAgIGRheVVwcGVyOiAodGhpcy5kYXRlcz8ubGVuZ3RoID8/IDApIDwgMTUgPyAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSA6ICgodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAqIDMwKSAvIDIsXG4gICAgICAgICAgICBkYXlNaWRkbGU6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMiAtIDEyLFxuICAgICAgICAgICAgZGF5TG93ZXI6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMixcblxuICAgICAgICAgICAgd2Vla1VwcGVyOiAoKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgKiA0KSAvIDIsXG4gICAgICAgICAgICB3ZWVrTWlkZGxlOiAwLFxuICAgICAgICAgICAgd2Vla0xvd2VyOiAwLFxuXG4gICAgICAgICAgICBtb250aFVwcGVyOiAodGhpcy5kYXRlcz8ubGVuZ3RoID8/IDApIDwgMTUgPyAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSA6ICgodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAqIDEyKSAvIDIsXG4gICAgICAgICAgICBtb250aE1pZGRsZTogMCxcbiAgICAgICAgICAgIG1vbnRoTG93ZXI6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMixcblxuICAgICAgICAgICAgeWVhclVwcGVyOiAoKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgKiAzMCkgLyAyLFxuICAgICAgICAgICAgeWVhck1pZGRsZTogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAyLFxuICAgICAgICAgICAgeWVhckxvd2VyOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVwcGVyX3RleHQ6IGRhdGVUZXh0W2Ake3RoaXMub3B0aW9ucz8udmlld01vZGUgPz8gJ2RheSd9VXBwZXJgXSxcbiAgICAgICAgICAgIG1pZGRsZV90ZXh0OiBkYXRlVGV4dFtgJHt0aGlzLm9wdGlvbnM/LnZpZXdNb2RlID8/ICdkYXknfU1pZGRsZWBdLFxuICAgICAgICAgICAgbG93ZXJfdGV4dDogZGF0ZVRleHRbYCR7dGhpcy5vcHRpb25zPy52aWV3TW9kZSA/PyAnZGF5J31Mb3dlcmBdLFxuICAgICAgICAgICAgdXBwZXJfeDogYmFzZVBvcy54ICsgeFBvc1tgJHt0aGlzLm9wdGlvbnM/LnZpZXdNb2RlID8/ICdkYXknfVVwcGVyYF0sXG4gICAgICAgICAgICB1cHBlcl95OiBiYXNlUG9zLnVwcGVyX3ksXG4gICAgICAgICAgICBtaWRkbGVfeDogYmFzZVBvcy54ICsgeFBvc1tgJHt0aGlzLm9wdGlvbnM/LnZpZXdNb2RlID8/ICdkYXknfU1pZGRsZWBdLFxuICAgICAgICAgICAgbWlkZGxlX3k6IGJhc2VQb3MubWlkZGxlX3ksXG4gICAgICAgICAgICBsb3dlcl94OiBiYXNlUG9zLnggKyB4UG9zW2Ake3RoaXMub3B0aW9ucz8udmlld01vZGUgPz8gJ2RheSd9TG93ZXJgXSxcbiAgICAgICAgICAgIGxvd2VyX3k6IGJhc2VQb3MubG93ZXJfeSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFrZUJhcnMoKSB7XG4gICAgICAgIHRoaXMuYmFycyA9IHRoaXMudGFza3M/Lm1hcCgodGFzazogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXIgPSBuZXcgQmFyKHRoaXMsIHRhc2spO1xuICAgICAgICAgICAgdGhpcy5sYXllcnMuYmFyLmFwcGVuZENoaWxkKGJhci5ncm91cCk7XG4gICAgICAgICAgICByZXR1cm4gYmFyO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYWtlQXJyb3dzKCkge1xuICAgICAgICB0aGlzLmFycm93cyA9IFtdO1xuXG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLnRhc2tzKSkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgdGFzayBvZiB0aGlzLnRhc2tzKSB7XG4gICAgICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGFzay5kZXBlbmRlbmNpZXMpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBhcnJvd3M6IEFycm93W10gPSBbXTtcbiAgICAgICAgICAgIGFycm93cyA9IHRhc2suZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAgICAgLm1hcCgodGFza19pZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSB0aGlzLl9nZXRUYXNrKHRhc2tfaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRlcGVuZGVuY3kgfHwgIXRoaXMuYmFycykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyb3cgPSBuZXcgQXJyb3coXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJzW2RlcGVuZGVuY3kuX2luZGV4XSwgLy8gZnJvbV90YXNrXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhcnNbdGFzay5faW5kZXhdLCAvLyB0b190YXNrXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXJzLmFycm93LmFwcGVuZENoaWxkKGFycm93LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyb3c7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChhcnJvdyk6IGFycm93IGlzIEFycm93ID0+IGFycm93ICE9PSB1bmRlZmluZWQpOyAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgICAgICAgdGhpcy5hcnJvd3MgPSB0aGlzLmFycm93cy5jb25jYXQoYXJyb3dzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX21hcEFycm93c09uQmFycygpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuYmFycykpIHJldHVybjtcblxuICAgICAgICBmb3IgKGNvbnN0IGJhciBvZiB0aGlzLmJhcnMpIHtcbiAgICAgICAgICAgIGJhci5hcnJvd3MgPSB0aGlzLmFycm93cz8uZmlsdGVyKChhcnJvdzogQXJyb3cpID0+IGFycm93LmZyb21UYXNrLnRhc2s/LmlkID09PSBiYXIudGFzaz8uaWQgfHwgYXJyb3cudG9UYXNrLnRhc2s/LmlkID09PSBiYXIudGFzaz8uaWQpID8/IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0V2lkdGgoKSB7XG4gICAgICAgIGNvbnN0IGN1cldpZHRoID0gdGhpcy4kc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBjb25zdCBhY3R1YWxXaWR0aCA9IHRoaXMuJHN2Zy5xdWVyeVNlbGVjdG9yKCcuZ3JpZCAuZ3JpZC1yb3cnKS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyk7XG4gICAgICAgIGlmIChjdXJXaWR0aCA8IGFjdHVhbFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLiRzdmcuc2V0QXR0cmlidXRlKCd3aWR0aCcsIGFjdHVhbFdpZHRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NldFNjcm9sbFBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGhpcy4kc3ZnLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmICghcGFyZW50RWxlbWVudCB8fCAhdGhpcy5taW5EYXRlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgaG91cnNCZWZvcmVGaXJzdFRhc2sgPSBEYXRlVXRpbHMuZGlmZih0aGlzLl9nZXRPbGRlc3RTdGFydGluZ0RhdGUoKSwgdGhpcy5taW5EYXRlLCAnaG91cicpO1xuXG4gICAgICAgIGNvbnN0IHNjcm9sbFBvcyA9IChob3Vyc0JlZm9yZUZpcnN0VGFzayAvICh0aGlzLm9wdGlvbnM/LnN0ZXAgPz8gMCkpICogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLSAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKTtcblxuICAgICAgICBwYXJlbnRFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxQb3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmluZEdyaWRDbGljaygpIHtcbiAgICAgICAgJC5vbih0aGlzLiRzdmcsIHRoaXMub3B0aW9ucz8ucG9wdXBUcmlnZ2VyLCAnLmdyaWQtcm93LCAuZ3JpZC1oZWFkZXInLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0X2FsbCgpO1xuICAgICAgICAgICAgdGhpcy5oaWRlX3BvcHVwKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2JpbmRCYXJFdmVudHMoKSB7XG4gICAgICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIGxldCB4T25TdGFydCA9IDA7XG4gICAgICAgIGxldCBpc1Jlc2l6aW5nTGVmdCA9IGZhbHNlO1xuICAgICAgICBsZXQgaXNSZXNpemluZ1JpZ2h0ID0gZmFsc2U7XG4gICAgICAgIGxldCBwYXJlbnRCYXJJZDogYW55ID0gbnVsbDtcbiAgICAgICAgbGV0IGJhcnM6IEJhcltdID0gW107XG4gICAgICAgIHRoaXMuYmFyX2JlaW5nX2RyYWdnZWQgPSBudWxsO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFjdGlvbl9pbl9wcm9ncmVzcygpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0RyYWdnaW5nIHx8IGlzUmVzaXppbmdMZWZ0IHx8IGlzUmVzaXppbmdSaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgICQub24odGhpcy4kc3ZnLCAnbW91c2Vkb3duJywgJy5iYXItd3JhcHBlciwgLmhhbmRsZScsIChlOiBhbnksIGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmFyV3JhcHBlciA9ICQuY2xvc2VzdCgnLmJhci13cmFwcGVyJywgZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbGVmdCcpKSB7XG4gICAgICAgICAgICAgICAgaXNSZXNpemluZ0xlZnQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygncmlnaHQnKSkge1xuICAgICAgICAgICAgICAgIGlzUmVzaXppbmdSaWdodCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdiYXItd3JhcHBlcicpICYmIHRoaXMub3B0aW9ucz8uYWxsb3dNb3ZlbWVudCkge1xuICAgICAgICAgICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBiYXJXcmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcblxuICAgICAgICAgICAgeE9uU3RhcnQgPSBlLm9mZnNldFg7XG5cbiAgICAgICAgICAgIHBhcmVudEJhcklkID0gYmFyV3JhcHBlcj8uZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyk7XG4gICAgICAgICAgICBjb25zdCBpZHMgPSBbcGFyZW50QmFySWQsIC4uLnRoaXMuX2dldEFsbERlcGVuZGVudFRhc2tzKHBhcmVudEJhcklkKV07XG4gICAgICAgICAgICBiYXJzID0gaWRzLm1hcCgoaWQpID0+IHRoaXMuZ2V0X2JhcihpZCkpLmZpbHRlcigoYmFyKTogYmFyIGlzIEJhciA9PiBiYXIgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgIHRoaXMuYmFyX2JlaW5nX2RyYWdnZWQgPSBwYXJlbnRCYXJJZDtcblxuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgJGJhci5veCA9ICRiYXIuZ2V0WCgpO1xuICAgICAgICAgICAgICAgICRiYXIub3kgPSAkYmFyLmdldFkoKTtcbiAgICAgICAgICAgICAgICAkYmFyLm93aWR0aCA9ICRiYXIuZ2V0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICAkYmFyLmZpbmFsZHggPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQub24oXG4gICAgICAgICAgICB0aGlzLiRzdmcsXG4gICAgICAgICAgICAnbW91c2Vtb3ZlJyxcbiAgICAgICAgICAgIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGlvbl9pbl9wcm9ncmVzcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkeCA9IGUub2Zmc2V0WCAtIHhPblN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJGJhciA9IGJhci5lbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAkYmFyLmZpbmFsZHggPSB0aGlzLl9nZXRTbmFwUG9zaXRpb24oZHgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVfcG9wdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVzaXppbmdMZWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50QmFySWQgPT09IGJhci50YXNrPy5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhci51cGRhdGVCYXJQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICRiYXIub3ggKyAkYmFyLmZpbmFsZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkYmFyLm93aWR0aCAtICRiYXIuZmluYWxkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyLnVwZGF0ZUJhclBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogJGJhci5veCArICRiYXIuZmluYWxkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1Jlc2l6aW5nUmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRCYXJJZCA9PT0gYmFyLnRhc2s/LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyLnVwZGF0ZUJhclBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICRiYXIub3dpZHRoICsgJGJhci5maW5hbGR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzRHJhZ2dpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhci51cGRhdGVCYXJQb3NpdGlvbih7IHg6ICRiYXIub3ggKyAkYmFyLmZpbmFsZHggfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICApO1xuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNEcmFnZ2luZyB8fCBpc1Jlc2l6aW5nTGVmdCB8fCBpc1Jlc2l6aW5nUmlnaHQgfHwgIXRoaXMub3B0aW9ucz8uYWxsb3dNb3ZlbWVudCkge1xuICAgICAgICAgICAgICAgIGJhcnMuZm9yRWFjaCgoYmFyKSA9PiBiYXIuZ3JvdXAuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpc1Jlc2l6aW5nTGVmdCA9IGZhbHNlO1xuICAgICAgICAgICAgaXNSZXNpemluZ1JpZ2h0ID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQub24oXG4gICAgICAgICAgICB0aGlzLiRzdmcsXG4gICAgICAgICAgICAnbW91c2V1cCcsXG4gICAgICAgICAgICAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJfYmVpbmdfZHJhZ2dlZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJGJhciA9IGJhci5lbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoISRiYXIuZmluYWxkeCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBiYXIuZGF0ZUNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgYmFyLnNldEFjdGlvbkNvbXBsZXRlZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0QWxsRGVwZW5kZW50VGFza3ModGFza19pZDogYW55KSB7XG4gICAgICAgIGxldCBvdXQ6IGFueVtdID0gW107XG4gICAgICAgIGxldCB0b1Byb2Nlc3MgPSBbdGFza19pZF07XG4gICAgICAgIHdoaWxlICh0b1Byb2Nlc3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkZXBzID0gdG9Qcm9jZXNzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjID0gYWNjLmNvbmNhdCh0aGlzLmRlcGVuZGVuY3lfbWFwW2N1cnJdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwgW10pO1xuXG4gICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KGRlcHMpO1xuICAgICAgICAgICAgdG9Qcm9jZXNzID0gZGVwcy5maWx0ZXIoKGQ6IGFueSkgPT4gIXRvUHJvY2Vzcy5pbmNsdWRlcyhkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3V0LmZpbHRlcihCb29sZWFuKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRTbmFwUG9zaXRpb24oZHg6IGFueSkge1xuICAgICAgICBjb25zdCBvZHggPSBkeDtcbiAgICAgICAgbGV0IHJlbTtcbiAgICAgICAgbGV0IHBvc2l0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuSG91cikpIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gNik7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IG9keCAtIHJlbSArIChyZW0gPCAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDEyID8gMCA6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gNik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLldlZWspKSB7XG4gICAgICAgICAgICByZW0gPSBkeCAlICgodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDcpO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBvZHggLSByZW0gKyAocmVtIDwgKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAxNCA/IDAgOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkpIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMzApO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBvZHggLSByZW0gKyAocmVtIDwgKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyA2MCA/IDAgOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDMwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCk7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IG9keCAtIHJlbSArIChyZW0gPCAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIgPyAwIDogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRUYXNrKGlkOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza3M/LmZpbmQoKHRhc2s6IGFueSkgPT4gdGFzay5pZCA9PT0gaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldE9sZGVzdFN0YXJ0aW5nRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza3M/Lm1hcCgodGFzazogYW55KSA9PiB0YXNrLl9zdGFydCkucmVkdWNlKChwcmV2X2RhdGU6IGFueSwgY3VyX2RhdGU6IGFueSkgPT4gKGN1cl9kYXRlIDw9IHByZXZfZGF0ZSA/IGN1cl9kYXRlIDogcHJldl9kYXRlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuJHN2Zy5pbm5lckhUTUwgPSAnJztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlX2lkKHRhc2s6IGFueSkge1xuICAgIHJldHVybiB0YXNrLm5hbWUgKyAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMik7XG59XG4iXX0=