ca-components 1.3.33 → 1.3.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. package/assets/scss/background.scss +44 -0
  2. package/assets/scss/border-radius.scss +17 -0
  3. package/assets/scss/filters.scss +151 -0
  4. package/assets/scss/icons.scss +39 -0
  5. package/assets/scss/spacing.scss +59 -0
  6. package/assets/scss/styles.scss +22 -1
  7. package/assets/scss/text-selection.scss +15 -0
  8. package/assets/theme/variables.scss +1 -1
  9. package/esm2022/lib/ca-components.module.mjs +35 -5
  10. package/esm2022/lib/components/ca-activity-log-list/ca-activity-log-list.component.mjs +3 -3
  11. package/esm2022/lib/components/ca-autoclose-popover/ca-autoclose-popover.component.mjs +6 -3
  12. package/esm2022/lib/components/ca-chart/ca-chart.component.mjs +12 -11
  13. package/esm2022/lib/components/ca-checkbox/ca-checkbox.component.mjs +134 -0
  14. package/esm2022/lib/components/ca-checkbox/interfaces/column-check-action.interface.mjs +2 -0
  15. package/esm2022/lib/components/ca-checkbox/interfaces/index.mjs +2 -0
  16. package/esm2022/lib/components/ca-checkbox/utils/svg-routes/checkbox-svg-routes.mjs +7 -0
  17. package/esm2022/lib/components/ca-checkbox/utils/svg-routes/index.mjs +2 -0
  18. package/esm2022/lib/components/ca-collapsible-filter/ca-collapsible-filter.component.mjs +2 -2
  19. package/esm2022/lib/components/ca-comment/ca-comment.component.mjs +2 -2
  20. package/esm2022/lib/components/ca-comment/modals/comment-modal/comment-modal.component.mjs +3 -3
  21. package/esm2022/lib/components/ca-custom-scrollbar/ca-custom-scrollbar.component.mjs +3 -3
  22. package/esm2022/lib/components/ca-details-dropdown/ca-details-dropdown.component.mjs +2 -2
  23. package/esm2022/lib/components/ca-dropdown-menu/ca-dropdown-menu.component.mjs +95 -24
  24. package/esm2022/lib/components/ca-dropdown-menu/enums/dropdown-menu.enum.mjs +19 -0
  25. package/esm2022/lib/components/ca-dropdown-menu/enums/index.mjs +2 -2
  26. package/esm2022/lib/components/ca-dropdown-menu/interfaces/dropdown-menu-item.interface.mjs +2 -0
  27. package/esm2022/lib/components/ca-dropdown-menu/interfaces/dropdown-menu-option-emit.interface.mjs +2 -0
  28. package/esm2022/lib/components/ca-dropdown-menu/interfaces/index.mjs +3 -0
  29. package/esm2022/lib/components/ca-dropdown-menu/pipes/dropdown-menu-placement-class.pipe.mjs +4 -4
  30. package/esm2022/lib/components/ca-dropdown-menu/pipes/group-item-checked-state.pipe.mjs +21 -0
  31. package/esm2022/lib/components/ca-dropdown-menu/pipes/index.mjs +2 -1
  32. package/esm2022/lib/components/ca-filters/ca-filter.component.mjs +4 -4
  33. package/esm2022/lib/components/ca-filters/components/ca-dispatcher-filter/ca-dispatcher-filter.component.mjs +3 -3
  34. package/esm2022/lib/components/ca-filters/components/ca-location-filter/ca-location-filter.component.mjs +2 -2
  35. package/esm2022/lib/components/ca-filters/components/ca-money-filter/ca-money-filter.component.mjs +2 -2
  36. package/esm2022/lib/components/ca-filters/components/ca-pm-filter/ca-pm-filter.component.mjs +2 -2
  37. package/esm2022/lib/components/ca-filters/components/ca-state-filter/ca-state-filter.component.mjs +2 -2
  38. package/esm2022/lib/components/ca-filters/components/ca-status-filter/ca-status-filter.component.mjs +2 -2
  39. package/esm2022/lib/components/ca-filters/components/ca-time-filter/ca-time-filter.component.mjs +4 -4
  40. package/esm2022/lib/components/ca-filters/components/ca-trailer-type-filter/ca-trailer-type-filter.component.mjs +2 -2
  41. package/esm2022/lib/components/ca-filters/components/ca-truck-type-filter/ca-truck-type-filter.component.mjs +2 -2
  42. package/esm2022/lib/components/ca-filters/components/ca-user-filter/ca-user-filter.component.mjs +2 -2
  43. package/esm2022/lib/components/ca-filters/components/ca-violation-filter/ca-violation-filter.component.mjs +2 -2
  44. package/esm2022/lib/components/ca-filters/pipes/index.mjs +7 -0
  45. package/esm2022/lib/components/ca-filters/utils/helpers/index.mjs +2 -1
  46. package/esm2022/lib/components/ca-filters/utils/helpers/time-filter.helper.mjs +117 -0
  47. package/esm2022/lib/components/ca-filters/utils/svg-routes/index.mjs +2 -0
  48. package/esm2022/lib/components/ca-input/ca-input.component.mjs +2 -2
  49. package/esm2022/lib/components/ca-input/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.mjs +3 -3
  50. package/esm2022/lib/components/ca-input/directives/command-visible.directive.mjs +48 -0
  51. package/esm2022/lib/components/ca-input/input-test/input-test.component.mjs +266 -0
  52. package/esm2022/lib/components/ca-input/mixins/input-command.mixin.mjs +127 -0
  53. package/esm2022/lib/components/ca-input/mixins/input-helper.mixin.mjs +49 -0
  54. package/esm2022/lib/components/ca-input/models/base.model.mjs +2 -0
  55. package/esm2022/lib/components/ca-input-address-dropdown/ca-input-address-dropdown.component.mjs +2 -2
  56. package/esm2022/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs +2 -2
  57. package/esm2022/lib/components/ca-input-dropdown/ca-input-dropdown.component.mjs +2 -2
  58. package/esm2022/lib/components/ca-input-note/ca-input-note.component.mjs +2 -2
  59. package/esm2022/lib/components/ca-logo-change/ca-logo-change.component.mjs +3 -3
  60. package/esm2022/lib/components/ca-main-table/ca-main-table.component.mjs +5 -3
  61. package/esm2022/lib/components/ca-map/ca-map.component.mjs +2 -2
  62. package/esm2022/lib/components/ca-map-dropdown/ca-map-dropdown.component.mjs +2 -2
  63. package/esm2022/lib/components/ca-modal/ca-modal.component.mjs +2 -2
  64. package/esm2022/lib/components/ca-modal-button/ca-modal-button.component.mjs +3 -3
  65. package/esm2022/lib/components/ca-new-filter/ca-filter-dropdown.component.mjs +98 -0
  66. package/esm2022/lib/components/ca-new-filter/components/ca-filter-list-dropdown/ca-filter-list-dropdown.component.mjs +142 -0
  67. package/esm2022/lib/components/ca-new-filter/components/ca-filter-state-dropdown/ca-filter-state-dropdown.component.mjs +131 -0
  68. package/esm2022/lib/components/ca-new-filter/components/ca-filter-time-dropdown/ca-filter-time-dropdown.component.mjs +131 -0
  69. package/esm2022/lib/components/ca-new-filter/constant/filter-dropdown-icons.constant.mjs +87 -0
  70. package/esm2022/lib/components/ca-new-filter/constant/index.mjs +2 -0
  71. package/esm2022/lib/components/ca-new-filter/enums/filter-dropdown-types.enum.mjs +15 -0
  72. package/esm2022/lib/components/ca-new-filter/enums/filter-sorting-key.enum.mjs +6 -0
  73. package/esm2022/lib/components/ca-new-filter/enums/filter-time.enum.mjs +37 -0
  74. package/esm2022/lib/components/ca-new-filter/enums/index.mjs +4 -0
  75. package/esm2022/lib/components/ca-new-filter/interface/country.interface.mjs +2 -0
  76. package/esm2022/lib/components/ca-new-filter/interface/filter-action.interface.mjs +2 -0
  77. package/esm2022/lib/components/ca-new-filter/interface/filter-dropdown-configuration.interface.mjs +2 -0
  78. package/esm2022/lib/components/ca-new-filter/interface/filter-dropdown-list.mjs +2 -0
  79. package/esm2022/lib/components/ca-new-filter/interface/index.mjs +7 -0
  80. package/esm2022/lib/components/ca-new-filter/interface/sorting-emmiter.interface.mjs +2 -0
  81. package/esm2022/lib/components/ca-new-filter/interface/time-options.interface.mjs +2 -0
  82. package/esm2022/lib/components/ca-new-filter/pipes/filter-search.pipe.mjs +31 -0
  83. package/esm2022/lib/components/ca-new-filter/types/filter-dropdown.types.mjs +2 -0
  84. package/esm2022/lib/components/ca-new-filter/types/filter-sorting-key.type.mjs +2 -0
  85. package/esm2022/lib/components/ca-new-filter/types/filter-time.types.mjs +2 -0
  86. package/esm2022/lib/components/ca-new-filter/types/index.mjs +4 -0
  87. package/esm2022/lib/components/ca-new-filter/utils/configs/filter-dropdown-fields.config.mjs +37 -0
  88. package/esm2022/lib/components/ca-new-filter/utils/configs/index.mjs +2 -0
  89. package/esm2022/lib/components/ca-new-filter/utils/helpers/index.mjs +2 -0
  90. package/esm2022/lib/components/ca-new-filter/utils/helpers/time-filter.helper.mjs +133 -0
  91. package/esm2022/lib/components/ca-ngx-slider/ca-ngx-slider.component.mjs +2 -2
  92. package/esm2022/lib/components/ca-note/ca-note.component.mjs +2 -2
  93. package/esm2022/lib/components/ca-note-container/ca-note-container.component.mjs +2 -2
  94. package/esm2022/lib/components/ca-payroll-list-summary-overview/ca-payroll-list-summary-overview.component.mjs +2 -2
  95. package/esm2022/lib/components/ca-period-content/ca-period-content.component.mjs +2 -2
  96. package/esm2022/lib/components/ca-period-content/components/ca-period-content-extra-info/ca-period-content-extra-info.component.mjs +3 -3
  97. package/esm2022/lib/components/ca-period-content/components/ca-period-content-payment/ca-period-content-payment.component.mjs +3 -3
  98. package/esm2022/lib/components/ca-period-content/components/ca-period-content-user-info/ca-period-content-user-info.component.mjs +3 -3
  99. package/esm2022/lib/components/ca-pickup-delivery-block/ca-pickup-delivery-block.component.mjs +3 -3
  100. package/esm2022/lib/components/ca-pickup-delivery-block/components/ca-load/ca-load.component.mjs +3 -3
  101. package/esm2022/lib/components/ca-pickup-delivery-block/components/ca-load/components/ca-load-list/ca-load-list.component.mjs +3 -3
  102. package/esm2022/lib/components/ca-pickup-delivery-block/components/ca-load/components/ca-load-single/ca-load-single.component.mjs +3 -3
  103. package/esm2022/lib/components/ca-profile-image/ca-profile-image.component.mjs +3 -3
  104. package/esm2022/lib/components/ca-progress-bar/ca-progress-bar.component.mjs +2 -2
  105. package/esm2022/lib/components/ca-progress-expiration/ca-progress-expiration.component.mjs +2 -2
  106. package/esm2022/lib/components/ca-rating-review/ca-rating-review.component.mjs +2 -2
  107. package/esm2022/lib/components/ca-rating-review/components/ca-rating-review-user/ca-rating-review-user.component.mjs +2 -2
  108. package/esm2022/lib/components/ca-rating-review/components/ca-ratings-reviews-popup/ca-ratings-reviews-popup.component.mjs +2 -2
  109. package/esm2022/lib/components/ca-right-side-panel/components/ca-right-side-panel-company/ca-right-side-panel-company.component.mjs +3 -3
  110. package/esm2022/lib/components/ca-right-side-panel/components/ca-right-side-panel-menu/ca-right-side-panel-menu.component.mjs +3 -3
  111. package/esm2022/lib/components/ca-right-side-panel/components/ca-right-side-panel-top-bar/ca-right-side-panel-top-bar.component.mjs +3 -3
  112. package/esm2022/lib/components/ca-search-multiple-states/ca-search-multiple-states.component.mjs +3 -3
  113. package/esm2022/lib/components/ca-search-multiple-states/models/tab-data.model.mjs +1 -1
  114. package/esm2022/lib/components/ca-sort-dropdown/ca-sort-dropdown.component.mjs +21 -8
  115. package/esm2022/lib/components/ca-sort-dropdown/types/index.mjs +2 -0
  116. package/esm2022/lib/components/ca-sort-dropdown/types/sort-directions.type.mjs +2 -0
  117. package/esm2022/lib/components/ca-sort-dropdown/utils/svg-routes/ca-sort-dropdown-svg-routes.mjs +3 -2
  118. package/esm2022/lib/components/ca-spinner/ca-spinner.component.mjs +2 -2
  119. package/esm2022/lib/components/ca-tab-switch/ca-tab-switch.component.mjs +3 -3
  120. package/esm2022/lib/components/ca-todo/ca-todo.component.mjs +3 -3
  121. package/esm2022/lib/components/ca-todo/components/ca-todo-card.component.mjs +3 -3
  122. package/esm2022/lib/components/ca-tooltip-list/ca-tooltip-list.component.mjs +3 -3
  123. package/esm2022/lib/components/ca-truck-trailer-progress-bar/ca-truck-trailer-progress-bar.component.mjs +2 -2
  124. package/esm2022/lib/components/ca-upload-files/ca-upload-files.component.mjs +3 -3
  125. package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/ca-upload-dropzone.component.mjs +3 -3
  126. package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/ca-upload-file.component.mjs +2 -2
  127. package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/ca-upload-files-carousel.component.mjs +3 -3
  128. package/esm2022/lib/enums/dropdown-menu.enum.mjs +20 -0
  129. package/esm2022/lib/pipes/row-class.pipe.mjs +26 -0
  130. package/esm2022/lib/utils/constants/dropdown-menu-content.constants.mjs +26 -26
  131. package/esm2022/lib/utils/helpers/dropdown-menu-content-conditional-items.helper.mjs +4 -4
  132. package/esm2022/lib/utils/helpers/dropdown-menu-content.helper.mjs +6 -6
  133. package/esm2022/public-api.mjs +10 -4
  134. package/fesm2022/ca-components.mjs +2725 -6173
  135. package/fesm2022/ca-components.mjs.map +1 -1
  136. package/lib/ca-components.module.d.ts +38 -33
  137. package/lib/components/ca-autoclose-popover/ca-autoclose-popover.component.d.ts +2 -1
  138. package/lib/components/ca-checkbox/ca-checkbox.component.d.ts +39 -0
  139. package/lib/components/ca-checkbox/interfaces/column-check-action.interface.d.ts +6 -0
  140. package/lib/components/ca-checkbox/interfaces/index.d.ts +1 -0
  141. package/lib/components/ca-checkbox/utils/svg-routes/checkbox-svg-routes.d.ts +6 -0
  142. package/lib/components/ca-checkbox/utils/svg-routes/index.d.ts +1 -0
  143. package/lib/components/ca-dropdown-menu/ca-dropdown-menu.component.d.ts +16 -7
  144. package/lib/components/ca-dropdown-menu/enums/{dropdown-menu-string.enum.d.ts → dropdown-menu.enum.d.ts} +5 -2
  145. package/lib/components/ca-dropdown-menu/enums/index.d.ts +1 -1
  146. package/lib/components/ca-dropdown-menu/{models/dropdown-menu-item.model.d.ts → interfaces/dropdown-menu-item.interface.d.ts} +7 -1
  147. package/lib/components/ca-dropdown-menu/{models/dropdown-menu-option-emit.model.d.ts → interfaces/dropdown-menu-option-emit.interface.d.ts} +1 -1
  148. package/lib/components/ca-dropdown-menu/interfaces/index.d.ts +2 -0
  149. package/lib/components/ca-dropdown-menu/pipes/group-item-checked-state.pipe.d.ts +8 -0
  150. package/lib/components/ca-dropdown-menu/pipes/index.d.ts +1 -0
  151. package/lib/components/ca-filters/ca-filter.component.d.ts +2 -2
  152. package/lib/components/ca-filters/pipes/index.d.ts +6 -0
  153. package/lib/components/ca-filters/utils/helpers/index.d.ts +1 -0
  154. package/lib/components/ca-filters/utils/{constants/time-filter.constants.d.ts → helpers/time-filter.helper.d.ts} +14 -2
  155. package/lib/components/ca-filters/utils/svg-routes/index.d.ts +1 -0
  156. package/lib/components/{ca-input-test → ca-input/input-test}/input-test.component.d.ts +12 -13
  157. package/lib/components/ca-new-filter/ca-filter-dropdown.component.d.ts +35 -0
  158. package/lib/components/ca-new-filter/components/ca-filter-list-dropdown/ca-filter-list-dropdown.component.d.ts +43 -0
  159. package/lib/components/ca-new-filter/components/ca-filter-state-dropdown/ca-filter-state-dropdown.component.d.ts +35 -0
  160. package/lib/components/ca-new-filter/components/ca-filter-time-dropdown/ca-filter-time-dropdown.component.d.ts +43 -0
  161. package/lib/components/ca-new-filter/constant/filter-dropdown-icons.constant.d.ts +3 -0
  162. package/lib/components/ca-new-filter/constant/index.d.ts +1 -0
  163. package/lib/components/ca-new-filter/enums/filter-dropdown-types.enum.d.ts +13 -0
  164. package/lib/components/ca-new-filter/enums/filter-sorting-key.enum.d.ts +4 -0
  165. package/lib/components/ca-new-filter/enums/filter-time.enum.d.ts +35 -0
  166. package/lib/components/ca-new-filter/enums/index.d.ts +3 -0
  167. package/lib/components/ca-new-filter/interface/country.interface.d.ts +13 -0
  168. package/lib/components/ca-new-filter/interface/filter-action.interface.d.ts +18 -0
  169. package/lib/components/ca-new-filter/interface/filter-dropdown-configuration.interface.d.ts +13 -0
  170. package/lib/components/ca-new-filter/interface/filter-dropdown-list.d.ts +17 -0
  171. package/lib/components/ca-new-filter/interface/index.d.ts +6 -0
  172. package/lib/components/ca-new-filter/interface/sorting-emmiter.interface.d.ts +5 -0
  173. package/lib/components/ca-new-filter/interface/time-options.interface.d.ts +9 -0
  174. package/lib/components/ca-new-filter/pipes/filter-search.pipe.d.ts +8 -0
  175. package/lib/components/ca-new-filter/types/filter-dropdown.types.d.ts +2 -0
  176. package/lib/components/ca-new-filter/types/filter-sorting-key.type.d.ts +2 -0
  177. package/lib/components/ca-new-filter/types/filter-time.types.d.ts +2 -0
  178. package/lib/components/ca-new-filter/types/index.d.ts +3 -0
  179. package/lib/components/ca-new-filter/utils/configs/filter-dropdown-fields.config.d.ts +7 -0
  180. package/lib/components/ca-new-filter/utils/configs/index.d.ts +1 -0
  181. package/lib/components/ca-new-filter/utils/helpers/index.d.ts +1 -0
  182. package/lib/components/ca-new-filter/utils/helpers/time-filter.helper.d.ts +6 -0
  183. package/lib/components/ca-period-content/components/ca-period-content-payment/ca-period-content-payment.component.d.ts +4 -4
  184. package/lib/components/ca-pickup-delivery-block/components/ca-load/components/ca-load-single/ca-load-single.component.d.ts +3 -3
  185. package/lib/components/ca-search-multiple-states/ca-search-multiple-states.component.d.ts +2 -2
  186. package/lib/components/ca-search-multiple-states/models/tab-data.model.d.ts +11 -11
  187. package/lib/components/ca-sort-dropdown/ca-sort-dropdown.component.d.ts +12 -5
  188. package/lib/components/ca-sort-dropdown/types/index.d.ts +1 -0
  189. package/lib/components/ca-sort-dropdown/types/sort-directions.type.d.ts +5 -0
  190. package/lib/components/ca-sort-dropdown/utils/svg-routes/ca-sort-dropdown-svg-routes.d.ts +2 -1
  191. package/lib/enums/{dropdown-menu-string.enum.d.ts → dropdown-menu.enum.d.ts} +1 -1
  192. package/lib/pipes/row-class.pipe.d.ts +7 -0
  193. package/lib/utils/constants/dropdown-menu-content.constants.d.ts +3 -3
  194. package/lib/utils/helpers/dropdown-menu-content-conditional-items.helper.d.ts +3 -3
  195. package/lib/utils/helpers/dropdown-menu-content.helper.d.ts +3 -3
  196. package/package.json +1 -1
  197. package/public-api.d.ts +9 -3
  198. package/src/assets/ca-components/svg/common/ic_arrow_desc.svg +3 -0
  199. package/src/assets/ca-components/svg/common/ic_carriera-logo-active.svg +4 -0
  200. package/src/assets/ca-components/svg/common/ic_carriera-logo-inactive.svg +4 -0
  201. package/src/assets/ca-components/svg/common/ic_columns.svg +8 -0
  202. package/src/assets/ca-components/svg/common/ic_disable.svg +3 -0
  203. package/assets/scss/input-dropdown-test.scss +0 -2030
  204. package/esm2022/lib/components/ca-dropdown-menu/enums/dropdown-menu-string.enum.mjs +0 -14
  205. package/esm2022/lib/components/ca-dropdown-menu/models/dropdown-menu-item.model.mjs +0 -2
  206. package/esm2022/lib/components/ca-dropdown-menu/models/dropdown-menu-option-emit.model.mjs +0 -2
  207. package/esm2022/lib/components/ca-dropdown-menu/models/index.mjs +0 -3
  208. package/esm2022/lib/components/ca-filters/utils/constants/time-filter.constants.mjs +0 -102
  209. package/esm2022/lib/components/ca-input-address-dropdown-test/ca-input-address-dropdown-test.component.mjs +0 -351
  210. package/esm2022/lib/components/ca-input-address-dropdown-test/enums/input-address-basic-string.enum.mjs +0 -6
  211. package/esm2022/lib/components/ca-input-address-dropdown-test/enums/input-address-commands-string.enum.mjs +0 -8
  212. package/esm2022/lib/components/ca-input-address-dropdown-test/enums/input-address-layers-string.enum.mjs +0 -6
  213. package/esm2022/lib/components/ca-input-address-dropdown-test/enums/input-address-stop-types-string.enum.mjs +0 -6
  214. package/esm2022/lib/components/ca-input-address-dropdown-test/enums/input-address-type-string.enum.mjs +0 -7
  215. package/esm2022/lib/components/ca-input-address-dropdown-test/models/address-data.model.mjs +0 -2
  216. package/esm2022/lib/components/ca-input-address-dropdown-test/models/address-list.model.mjs +0 -2
  217. package/esm2022/lib/components/ca-input-address-dropdown-test/models/command-properties.model.mjs +0 -2
  218. package/esm2022/lib/components/ca-input-address-dropdown-test/models/commands-handler.model.mjs +0 -2
  219. package/esm2022/lib/components/ca-input-address-dropdown-test/models/input-address-commands-string.model.mjs +0 -2
  220. package/esm2022/lib/components/ca-input-address-dropdown-test/models/long-lat.model.mjs +0 -2
  221. package/esm2022/lib/components/ca-input-address-dropdown-test/models/sent-address-data.model.mjs +0 -2
  222. package/esm2022/lib/components/ca-input-address-dropdown-test/validators/ca-input-address-value.validations.mjs +0 -11
  223. package/esm2022/lib/components/ca-input-dropdown-test/animations/index.mjs +0 -2
  224. package/esm2022/lib/components/ca-input-dropdown-test/animations/input-dropdown.animation.mjs +0 -11
  225. package/esm2022/lib/components/ca-input-dropdown-test/ca-input-dropdown-test.component.mjs +0 -692
  226. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-default-template/ca-input-dropdown-default-template.component.mjs +0 -62
  227. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-details-template/ca-input-dropdown-details-template.component.mjs +0 -72
  228. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-dispatch/ca-input-dropdown-dispatch.component.mjs +0 -60
  229. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-double-text-template/ca-input-dropdown-double-text-template.component.mjs +0 -62
  230. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-fuel-franchise/ca-input-dropdown-fuel-franchise.component.mjs +0 -76
  231. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-groups/ca-input-dropdown-groups.component.mjs +0 -58
  232. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-labels/ca-input-dropdown-labels.component.mjs +0 -76
  233. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker-item/ca-input-dropdown-load-broker-item.component.mjs +0 -41
  234. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker.component.mjs +0 -64
  235. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact-item/ca-input-dropdown-load-broker-contact-item.component.mjs +0 -38
  236. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact.component.mjs +0 -62
  237. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper-item/ca-input-dropdown-load-broker-shipper-item.component.mjs +0 -37
  238. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper.component.mjs +0 -61
  239. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher-item/ca-input-dropdown-load-dispatcher-item.component.mjs +0 -49
  240. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher.component.mjs +0 -60
  241. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd-item/ca-input-dropdown-load-dispatches-ttd-item.mjs +0 -49
  242. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd.component.mjs +0 -65
  243. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-multiselect/ca-input-dropdown-multiselect.component.mjs +0 -58
  244. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-payroll-trucks/ca-input-dropdown-payroll-trucks.component.mjs +0 -62
  245. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svg-template/ca-input-dropdown-svg-template.component.mjs +0 -63
  246. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-dispatch-template/ca-input-dropdown-svgtext-dispatch-template.component.mjs +0 -72
  247. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template-item/ca-input-dropdown-svgtext-template-item.component.mjs +0 -56
  248. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template.component.mjs +0 -77
  249. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-text-counter/ca-input-dropdown-text-counter.component.mjs +0 -58
  250. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-triple-text-template/ca-input-dropdown-triple-text-template.component.mjs +0 -62
  251. package/esm2022/lib/components/ca-input-dropdown-test/enums/dropdown-string.enum.mjs +0 -6
  252. package/esm2022/lib/components/ca-input-dropdown-test/enums/dropdown-template-type.enum.mjs +0 -23
  253. package/esm2022/lib/components/ca-input-dropdown-test/enums/index.mjs +0 -3
  254. package/esm2022/lib/components/ca-input-dropdown-test/models/index.mjs +0 -4
  255. package/esm2022/lib/components/ca-input-dropdown-test/models/input-dropdown-option.model.mjs +0 -2
  256. package/esm2022/lib/components/ca-input-dropdown-test/models/load-modal-status.model.mjs +0 -2
  257. package/esm2022/lib/components/ca-input-dropdown-test/models/status-order.model.mjs +0 -2
  258. package/esm2022/lib/components/ca-input-dropdown-test/pipes/dropdown-count.pipe.mjs +0 -29
  259. package/esm2022/lib/components/ca-input-dropdown-test/pipes/dropdown-options.pipe.mjs +0 -73
  260. package/esm2022/lib/components/ca-input-dropdown-test/pipes/index.mjs +0 -10
  261. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-default-template-class.pipe.mjs +0 -27
  262. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-fuel-franchise-class.pipe.mjs +0 -22
  263. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-get-icon.pipe.mjs +0 -18
  264. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-label-class.pipe.mjs +0 -27
  265. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-load-broker-container.pipe.mjs +0 -25
  266. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-multiselect-class.pipe.mjs +0 -23
  267. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-container.pipe.mjs +0 -25
  268. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-icon.pipe.mjs +0 -23
  269. package/esm2022/lib/components/ca-input-dropdown-test/utils/svg-routes/index.mjs +0 -2
  270. package/esm2022/lib/components/ca-input-dropdown-test/utils/svg-routes/input-dropdown-svg-routes.mjs +0 -13
  271. package/esm2022/lib/components/ca-input-test/base-classes/ca-input-event-manager.mjs +0 -24
  272. package/esm2022/lib/components/ca-input-test/components/ca-input-clear/ca-input-clear.component.mjs +0 -66
  273. package/esm2022/lib/components/ca-input-test/components/ca-input-commands/ca-input-commands.component.mjs +0 -48
  274. package/esm2022/lib/components/ca-input-test/components/ca-input-password/ca-input-password.component.mjs +0 -63
  275. package/esm2022/lib/components/ca-input-test/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.mjs +0 -85
  276. package/esm2022/lib/components/ca-input-test/config/ca-input.config.mjs +0 -2
  277. package/esm2022/lib/components/ca-input-test/config/index.mjs +0 -2
  278. package/esm2022/lib/components/ca-input-test/directives/caps-lock.directive.mjs +0 -50
  279. package/esm2022/lib/components/ca-input-test/directives/command-visible.directive.mjs +0 -48
  280. package/esm2022/lib/components/ca-input-test/directives/index.mjs +0 -6
  281. package/esm2022/lib/components/ca-input-test/directives/input-max-value.directive.mjs +0 -53
  282. package/esm2022/lib/components/ca-input-test/directives/min-max-value.directive.mjs +0 -41
  283. package/esm2022/lib/components/ca-input-test/directives/price_format.directive.mjs +0 -41
  284. package/esm2022/lib/components/ca-input-test/directives/restrict-input.directive.mjs +0 -94
  285. package/esm2022/lib/components/ca-input-test/enums/index.mjs +0 -5
  286. package/esm2022/lib/components/ca-input-test/enums/input-commands-action.enum.mjs +0 -11
  287. package/esm2022/lib/components/ca-input-test/enums/input-commands-type.enum.mjs +0 -8
  288. package/esm2022/lib/components/ca-input-test/enums/input-config-name-string.enum.mjs +0 -9
  289. package/esm2022/lib/components/ca-input-test/enums/input-string.enum.mjs +0 -114
  290. package/esm2022/lib/components/ca-input-test/enums/input-text-transform.enum.mjs +0 -9
  291. package/esm2022/lib/components/ca-input-test/input-test.component.mjs +0 -273
  292. package/esm2022/lib/components/ca-input-test/mixins/input-command.mixin.mjs +0 -127
  293. package/esm2022/lib/components/ca-input-test/mixins/input-helper.mixin.mjs +0 -49
  294. package/esm2022/lib/components/ca-input-test/mixins/restriction-pipe.mixin.mjs +0 -34
  295. package/esm2022/lib/components/ca-input-test/models/base.model.mjs +0 -2
  296. package/esm2022/lib/components/ca-input-test/models/command-click.model.mjs +0 -2
  297. package/esm2022/lib/components/ca-input-test/models/commands-event.model.mjs +0 -2
  298. package/esm2022/lib/components/ca-input-test/models/index.mjs +0 -4
  299. package/esm2022/lib/components/ca-input-test/models/label-color.model.mjs +0 -2
  300. package/esm2022/lib/components/ca-input-test/pipes/color-finder.pipe.mjs +0 -62
  301. package/esm2022/lib/components/ca-input-test/pipes/form-control.pipe.mjs +0 -17
  302. package/esm2022/lib/components/ca-input-test/pipes/index.mjs +0 -20
  303. package/esm2022/lib/components/ca-input-test/pipes/input-class.pipe.mjs +0 -155
  304. package/esm2022/lib/components/ca-input-test/pipes/input-clear-class.pipe.mjs +0 -87
  305. package/esm2022/lib/components/ca-input-test/pipes/input-container-class.pipe.mjs +0 -58
  306. package/esm2022/lib/components/ca-input-test/pipes/input-datetime-picker-class.pipe.mjs +0 -77
  307. package/esm2022/lib/components/ca-input-test/pipes/input-dropdown-arrow-class.pipe.mjs +0 -61
  308. package/esm2022/lib/components/ca-input-test/pipes/input-error.pipe.mjs +0 -88
  309. package/esm2022/lib/components/ca-input-test/pipes/input-password-eye-class.pipe.mjs +0 -37
  310. package/esm2022/lib/components/ca-input-test/pipes/input-pattern.pipe.mjs +0 -326
  311. package/esm2022/lib/components/ca-input-test/pipes/input-placeholder-icon-right.pipe.mjs +0 -46
  312. package/esm2022/lib/components/ca-input-test/pipes/input-placeholder-icon.class.pipe.mjs +0 -58
  313. package/esm2022/lib/components/ca-input-test/pipes/input-placeholder-text-class.pipe.mjs +0 -45
  314. package/esm2022/lib/components/ca-input-test/pipes/input-type.pipe.mjs +0 -25
  315. package/esm2022/lib/components/ca-input-test/pipes/label-class.pipe.mjs +0 -38
  316. package/esm2022/lib/components/ca-input-test/pipes/show-clear.pipe.mjs +0 -22
  317. package/esm2022/lib/components/ca-input-test/pipes/show-dropdown-arrow.pipe.mjs +0 -26
  318. package/esm2022/lib/components/ca-input-test/pipes/show-invalid-danger-mark.pipe.mjs +0 -27
  319. package/esm2022/lib/components/ca-input-test/pipes/show-placeholder-text.pipe.mjs +0 -24
  320. package/esm2022/lib/components/ca-input-test/pipes/show-valid-check.pipe.mjs +0 -27
  321. package/esm2022/lib/components/ca-input-test/utils/index.mjs +0 -3
  322. package/esm2022/lib/components/ca-input-test/utils/input-change-value.type.mjs +0 -2
  323. package/esm2022/lib/components/ca-input-test/utils/input-svg-routes.mjs +0 -17
  324. package/esm2022/lib/enums/dropdown-menu-string.enum.mjs +0 -20
  325. package/lib/components/ca-dropdown-menu/models/index.d.ts +0 -2
  326. package/lib/components/ca-input-address-dropdown-test/ca-input-address-dropdown-test.component.d.ts +0 -74
  327. package/lib/components/ca-input-address-dropdown-test/enums/input-address-basic-string.enum.d.ts +0 -4
  328. package/lib/components/ca-input-address-dropdown-test/enums/input-address-commands-string.enum.d.ts +0 -6
  329. package/lib/components/ca-input-address-dropdown-test/enums/input-address-layers-string.enum.d.ts +0 -4
  330. package/lib/components/ca-input-address-dropdown-test/enums/input-address-stop-types-string.enum.d.ts +0 -4
  331. package/lib/components/ca-input-address-dropdown-test/enums/input-address-type-string.enum.d.ts +0 -5
  332. package/lib/components/ca-input-address-dropdown-test/models/address-data.model.d.ts +0 -10
  333. package/lib/components/ca-input-address-dropdown-test/models/address-list.model.d.ts +0 -5
  334. package/lib/components/ca-input-address-dropdown-test/models/command-properties.model.d.ts +0 -7
  335. package/lib/components/ca-input-address-dropdown-test/models/commands-handler.model.d.ts +0 -7
  336. package/lib/components/ca-input-address-dropdown-test/models/input-address-commands-string.model.d.ts +0 -1
  337. package/lib/components/ca-input-address-dropdown-test/models/long-lat.model.d.ts +0 -4
  338. package/lib/components/ca-input-address-dropdown-test/models/sent-address-data.model.d.ts +0 -6
  339. package/lib/components/ca-input-address-dropdown-test/validators/ca-input-address-value.validations.d.ts +0 -2
  340. package/lib/components/ca-input-dropdown-test/animations/index.d.ts +0 -1
  341. package/lib/components/ca-input-dropdown-test/animations/input-dropdown.animation.d.ts +0 -1
  342. package/lib/components/ca-input-dropdown-test/ca-input-dropdown-test.component.d.ts +0 -125
  343. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-default-template/ca-input-dropdown-default-template.component.d.ts +0 -20
  344. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-details-template/ca-input-dropdown-details-template.component.d.ts +0 -22
  345. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-dispatch/ca-input-dropdown-dispatch.component.d.ts +0 -19
  346. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-double-text-template/ca-input-dropdown-double-text-template.component.d.ts +0 -20
  347. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-fuel-franchise/ca-input-dropdown-fuel-franchise.component.d.ts +0 -27
  348. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-groups/ca-input-dropdown-groups.component.d.ts +0 -18
  349. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-labels/ca-input-dropdown-labels.component.d.ts +0 -24
  350. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker-item/ca-input-dropdown-load-broker-item.component.d.ts +0 -10
  351. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker.component.d.ts +0 -18
  352. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact-item/ca-input-dropdown-load-broker-contact-item.component.d.ts +0 -11
  353. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact.component.d.ts +0 -18
  354. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper-item/ca-input-dropdown-load-broker-shipper-item.component.d.ts +0 -11
  355. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper.component.d.ts +0 -18
  356. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher-item/ca-input-dropdown-load-dispatcher-item.component.d.ts +0 -14
  357. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher.component.d.ts +0 -20
  358. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd-item/ca-input-dropdown-load-dispatches-ttd-item.d.ts +0 -14
  359. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd.component.d.ts +0 -20
  360. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-multiselect/ca-input-dropdown-multiselect.component.d.ts +0 -18
  361. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-payroll-trucks/ca-input-dropdown-payroll-trucks.component.d.ts +0 -20
  362. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svg-template/ca-input-dropdown-svg-template.component.d.ts +0 -20
  363. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-dispatch-template/ca-input-dropdown-svgtext-dispatch-template.component.d.ts +0 -22
  364. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template-item/ca-input-dropdown-svgtext-template-item.component.d.ts +0 -15
  365. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template.component.d.ts +0 -22
  366. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-text-counter/ca-input-dropdown-text-counter.component.d.ts +0 -18
  367. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-triple-text-template/ca-input-dropdown-triple-text-template.component.d.ts +0 -20
  368. package/lib/components/ca-input-dropdown-test/enums/dropdown-string.enum.d.ts +0 -4
  369. package/lib/components/ca-input-dropdown-test/enums/dropdown-template-type.enum.d.ts +0 -21
  370. package/lib/components/ca-input-dropdown-test/enums/index.d.ts +0 -2
  371. package/lib/components/ca-input-dropdown-test/models/index.d.ts +0 -3
  372. package/lib/components/ca-input-dropdown-test/models/input-dropdown-option.model.d.ts +0 -95
  373. package/lib/components/ca-input-dropdown-test/models/load-modal-status.model.d.ts +0 -5
  374. package/lib/components/ca-input-dropdown-test/models/status-order.model.d.ts +0 -4
  375. package/lib/components/ca-input-dropdown-test/pipes/dropdown-count.pipe.d.ts +0 -7
  376. package/lib/components/ca-input-dropdown-test/pipes/dropdown-options.pipe.d.ts +0 -10
  377. package/lib/components/ca-input-dropdown-test/pipes/index.d.ts +0 -9
  378. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-default-template-class.pipe.d.ts +0 -11
  379. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-fuel-franchise-class.pipe.d.ts +0 -10
  380. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-get-icon.pipe.d.ts +0 -9
  381. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-label-class.pipe.d.ts +0 -11
  382. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-load-broker-container.pipe.d.ts +0 -10
  383. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-multiselect-class.pipe.d.ts +0 -11
  384. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-container.pipe.d.ts +0 -10
  385. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-icon.pipe.d.ts +0 -11
  386. package/lib/components/ca-input-dropdown-test/utils/svg-routes/index.d.ts +0 -1
  387. package/lib/components/ca-input-dropdown-test/utils/svg-routes/input-dropdown-svg-routes.d.ts +0 -12
  388. package/lib/components/ca-input-test/base-classes/ca-input-event-manager.d.ts +0 -16
  389. package/lib/components/ca-input-test/components/ca-input-clear/ca-input-clear.component.d.ts +0 -20
  390. package/lib/components/ca-input-test/components/ca-input-commands/ca-input-commands.component.d.ts +0 -16
  391. package/lib/components/ca-input-test/components/ca-input-password/ca-input-password.component.d.ts +0 -20
  392. package/lib/components/ca-input-test/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.d.ts +0 -26
  393. package/lib/components/ca-input-test/config/ca-input.config.d.ts +0 -168
  394. package/lib/components/ca-input-test/config/index.d.ts +0 -1
  395. package/lib/components/ca-input-test/directives/caps-lock.directive.d.ts +0 -14
  396. package/lib/components/ca-input-test/directives/index.d.ts +0 -5
  397. package/lib/components/ca-input-test/directives/input-max-value.directive.d.ts +0 -12
  398. package/lib/components/ca-input-test/directives/min-max-value.directive.d.ts +0 -13
  399. package/lib/components/ca-input-test/directives/price_format.directive.d.ts +0 -11
  400. package/lib/components/ca-input-test/directives/restrict-input.directive.d.ts +0 -27
  401. package/lib/components/ca-input-test/enums/index.d.ts +0 -4
  402. package/lib/components/ca-input-test/enums/input-commands-action.enum.d.ts +0 -9
  403. package/lib/components/ca-input-test/enums/input-commands-type.enum.d.ts +0 -6
  404. package/lib/components/ca-input-test/enums/input-config-name-string.enum.d.ts +0 -7
  405. package/lib/components/ca-input-test/enums/input-string.enum.d.ts +0 -112
  406. package/lib/components/ca-input-test/enums/input-text-transform.enum.d.ts +0 -6
  407. package/lib/components/ca-input-test/mixins/restriction-pipe.mixin.d.ts +0 -12
  408. package/lib/components/ca-input-test/models/command-click.model.d.ts +0 -5
  409. package/lib/components/ca-input-test/models/commands-event.model.d.ts +0 -5
  410. package/lib/components/ca-input-test/models/index.d.ts +0 -3
  411. package/lib/components/ca-input-test/models/label-color.model.d.ts +0 -11
  412. package/lib/components/ca-input-test/pipes/color-finder.pipe.d.ts +0 -7
  413. package/lib/components/ca-input-test/pipes/form-control.pipe.d.ts +0 -8
  414. package/lib/components/ca-input-test/pipes/index.d.ts +0 -19
  415. package/lib/components/ca-input-test/pipes/input-class.pipe.d.ts +0 -13
  416. package/lib/components/ca-input-test/pipes/input-clear-class.pipe.d.ts +0 -11
  417. package/lib/components/ca-input-test/pipes/input-container-class.pipe.d.ts +0 -11
  418. package/lib/components/ca-input-test/pipes/input-datetime-picker-class.pipe.d.ts +0 -11
  419. package/lib/components/ca-input-test/pipes/input-dropdown-arrow-class.pipe.d.ts +0 -11
  420. package/lib/components/ca-input-test/pipes/input-error.pipe.d.ts +0 -7
  421. package/lib/components/ca-input-test/pipes/input-password-eye-class.pipe.d.ts +0 -11
  422. package/lib/components/ca-input-test/pipes/input-pattern.pipe.d.ts +0 -38
  423. package/lib/components/ca-input-test/pipes/input-placeholder-icon-right.pipe.d.ts +0 -11
  424. package/lib/components/ca-input-test/pipes/input-placeholder-icon.class.pipe.d.ts +0 -12
  425. package/lib/components/ca-input-test/pipes/input-placeholder-text-class.pipe.d.ts +0 -11
  426. package/lib/components/ca-input-test/pipes/input-type.pipe.d.ts +0 -7
  427. package/lib/components/ca-input-test/pipes/label-class.pipe.d.ts +0 -10
  428. package/lib/components/ca-input-test/pipes/show-clear.pipe.d.ts +0 -8
  429. package/lib/components/ca-input-test/pipes/show-dropdown-arrow.pipe.d.ts +0 -8
  430. package/lib/components/ca-input-test/pipes/show-invalid-danger-mark.pipe.d.ts +0 -9
  431. package/lib/components/ca-input-test/pipes/show-placeholder-text.pipe.d.ts +0 -9
  432. package/lib/components/ca-input-test/pipes/show-valid-check.pipe.d.ts +0 -9
  433. package/lib/components/ca-input-test/utils/index.d.ts +0 -2
  434. package/lib/components/ca-input-test/utils/input-change-value.type.d.ts +0 -1
  435. package/lib/components/ca-input-test/utils/input-svg-routes.d.ts +0 -16
  436. /package/lib/components/{ca-input-test → ca-input}/directives/command-visible.directive.d.ts +0 -0
  437. /package/lib/components/{ca-input-test → ca-input}/mixins/input-command.mixin.d.ts +0 -0
  438. /package/lib/components/{ca-input-test → ca-input}/mixins/input-helper.mixin.d.ts +0 -0
  439. /package/lib/components/{ca-input-test → ca-input}/models/base.model.d.ts +0 -0
@@ -9,6 +9,7 @@ import * as i1 from "@ng-bootstrap/ng-bootstrap";
9
9
  export class CaAutoclosePopoverComponent {
10
10
  constructor(eRef) {
11
11
  this.eRef = eRef;
12
+ this.autoClose = 'outside';
12
13
  this.placement = AutoCloseStringEnum.BOTTOM_RIGHT_PLACEMENT;
13
14
  this.closeFilter = new EventEmitter();
14
15
  this.openFilter = new EventEmitter();
@@ -34,15 +35,17 @@ export class CaAutoclosePopoverComponent {
34
35
  this.tooltip.close();
35
36
  }
36
37
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaAutoclosePopoverComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
37
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CaAutoclosePopoverComponent, isStandalone: true, selector: "[app-ca-autoclose-popover]", inputs: { isDisabled: "isDisabled", customClass: "customClass", placement: "placement" }, outputs: { closeFilter: "closeFilter", openFilter: "openFilter" }, ngImport: i0, template: "<div\n #t2=\"ngbPopover\"\n [ngbPopover]=\"customPopover\"\n [placement]=\"placement\"\n [popoverClass]=\"customClass\"\n triggers=\"'manual'\"\n [autoClose]=\"'outside'\"\n (click)=\"switchTab($event, t2)\"\n [disablePopover]=\"isDisabled\"\n (hidden)=\"onFilterClose()\"\n (shown)=\"onFilterShown()\"\n [container]=\"'body'\"\n>\n <ng-content select=\"[mainContent]\"></ng-content>\n</div>\n<ng-template #customPopover let-data=\"data\">\n <ng-content select=\"[popoverContent]\"></ng-content>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgbModule }, { kind: "directive", type: i1.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
38
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CaAutoclosePopoverComponent, isStandalone: true, selector: "[app-ca-autoclose-popover]", inputs: { isDisabled: "isDisabled", customClass: "customClass", autoClose: "autoClose", placement: "placement" }, outputs: { closeFilter: "closeFilter", openFilter: "openFilter" }, ngImport: i0, template: "<div\n #t2=\"ngbPopover\"\n [ngbPopover]=\"customPopover\"\n [placement]=\"placement\"\n [popoverClass]=\"customClass\"\n triggers=\"'manual'\"\n [autoClose]=\"autoClose\"\n (click)=\"switchTab($event, t2)\"\n [disablePopover]=\"isDisabled\"\n (hidden)=\"onFilterClose()\"\n (shown)=\"onFilterShown()\"\n [container]=\"'body'\"\n>\n <ng-content select=\"[mainContent]\"></ng-content>\n</div>\n<ng-template #customPopover let-data=\"data\">\n <ng-content select=\"[popoverContent]\"></ng-content>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgbModule }, { kind: "directive", type: i1.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
38
39
  }
39
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaAutoclosePopoverComponent, decorators: [{
40
41
  type: Component,
41
- args: [{ selector: '[app-ca-autoclose-popover]', standalone: true, imports: [CommonModule, NgbModule, FormsModule, ReactiveFormsModule], encapsulation: ViewEncapsulation.Emulated, template: "<div\n #t2=\"ngbPopover\"\n [ngbPopover]=\"customPopover\"\n [placement]=\"placement\"\n [popoverClass]=\"customClass\"\n triggers=\"'manual'\"\n [autoClose]=\"'outside'\"\n (click)=\"switchTab($event, t2)\"\n [disablePopover]=\"isDisabled\"\n (hidden)=\"onFilterClose()\"\n (shown)=\"onFilterShown()\"\n [container]=\"'body'\"\n>\n <ng-content select=\"[mainContent]\"></ng-content>\n</div>\n<ng-template #customPopover let-data=\"data\">\n <ng-content select=\"[popoverContent]\"></ng-content>\n</ng-template>\n" }]
42
+ args: [{ selector: '[app-ca-autoclose-popover]', standalone: true, imports: [CommonModule, NgbModule, FormsModule, ReactiveFormsModule], encapsulation: ViewEncapsulation.Emulated, template: "<div\n #t2=\"ngbPopover\"\n [ngbPopover]=\"customPopover\"\n [placement]=\"placement\"\n [popoverClass]=\"customClass\"\n triggers=\"'manual'\"\n [autoClose]=\"autoClose\"\n (click)=\"switchTab($event, t2)\"\n [disablePopover]=\"isDisabled\"\n (hidden)=\"onFilterClose()\"\n (shown)=\"onFilterShown()\"\n [container]=\"'body'\"\n>\n <ng-content select=\"[mainContent]\"></ng-content>\n</div>\n<ng-template #customPopover let-data=\"data\">\n <ng-content select=\"[popoverContent]\"></ng-content>\n</ng-template>\n" }]
42
43
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { isDisabled: [{
43
44
  type: Input
44
45
  }], customClass: [{
45
46
  type: Input
47
+ }], autoClose: [{
48
+ type: Input
46
49
  }], placement: [{
47
50
  type: Input
48
51
  }], closeFilter: [{
@@ -50,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
50
53
  }], openFilter: [{
51
54
  type: Output
52
55
  }] } });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtYXV0b2Nsb3NlLXBvcG92ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtYXV0b2Nsb3NlLXBvcG92ZXIvY2EtYXV0b2Nsb3NlLXBvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtYXV0b2Nsb3NlLXBvcG92ZXIvY2EtYXV0b2Nsb3NlLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsUUFBUTtBQUNSLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7QUFVcEUsTUFBTSxPQUFPLDJCQUEyQjtJQVN0QyxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBTjNCLGNBQVMsR0FBVyxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQztRQUM5RCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdkMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFekMsWUFBTyxHQUFzQixJQUFJLENBQUM7SUFFRixDQUFDO0lBRXhDLFFBQVEsS0FBVSxDQUFDO0lBRVosU0FBUyxDQUFDLEtBQVksRUFBRSxFQUFjO1FBQzNDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWpELElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLGFBQWE7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVNLGFBQWE7UUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDOytHQTlCVSwyQkFBMkI7bUdBQTNCLDJCQUEyQixtUEN4QnhDLGdoQkFrQkEseURER1ksWUFBWSw4QkFBRSxTQUFTLHNYQUFFLFdBQVcsOEJBQUUsbUJBQW1COzs0RkFHeEQsMkJBQTJCO2tCQVJ2QyxTQUFTOytCQUNFLDRCQUE0QixjQUcxQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxpQkFDckQsaUJBQWlCLENBQUMsUUFBUTsrRUFHaEMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nYk1vZHVsZSwgTmdiUG9wb3ZlciB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vLyBlbnVtc1xuaW1wb3J0IHsgQXV0b0Nsb3NlU3RyaW5nRW51bSB9IGZyb20gJy4vZW51bXMvYXV0b2Nsb3NlLXN0cmluZy5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnW2FwcC1jYS1hdXRvY2xvc2UtcG9wb3Zlcl0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY2EtYXV0b2Nsb3NlLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYS1hdXRvY2xvc2UtcG9wb3Zlci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOZ2JNb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG59KVxuZXhwb3J0IGNsYXNzIENhQXV0b2Nsb3NlUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlzRGlzYWJsZWQhOiBib29sZWFuO1xuICBASW5wdXQoKSBjdXN0b21DbGFzcyE6IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2VtZW50OiBzdHJpbmcgPSBBdXRvQ2xvc2VTdHJpbmdFbnVtLkJPVFRPTV9SSUdIVF9QTEFDRU1FTlQ7XG4gIEBPdXRwdXQoKSBjbG9zZUZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9wZW5GaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHVibGljIHRvb2x0aXA6IE5nYlBvcG92ZXIgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIHB1YmxpYyBzd2l0Y2hUYWIoZXZlbnQ6IEV2ZW50LCB0MjogTmdiUG9wb3Zlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnRvb2x0aXA/LmlzT3BlbigpKSB0aGlzLnRvb2x0aXAuY2xvc2UoKTtcblxuICAgIHRoaXMudG9vbHRpcCA9IHQyO1xuICAgIHRoaXMudG9vbHRpcC5vcGVuKCk7XG4gIH1cblxuICBwdWJsaWMgb25GaWx0ZXJDbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbG9zZUZpbHRlcikgdGhpcy5jbG9zZUZpbHRlci5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgb25GaWx0ZXJTaG93bigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuRmlsdGVyKSB0aGlzLm9wZW5GaWx0ZXIuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIGNsb3NlQ3VzdG9tUG9wb3ZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50b29sdGlwKSB0aGlzLnRvb2x0aXAuY2xvc2UoKTtcbiAgfVxufVxuIiwiPGRpdlxuICAjdDI9XCJuZ2JQb3BvdmVyXCJcbiAgW25nYlBvcG92ZXJdPVwiY3VzdG9tUG9wb3ZlclwiXG4gIFtwbGFjZW1lbnRdPVwicGxhY2VtZW50XCJcbiAgW3BvcG92ZXJDbGFzc109XCJjdXN0b21DbGFzc1wiXG4gIHRyaWdnZXJzPVwiJ21hbnVhbCdcIlxuICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gIChjbGljayk9XCJzd2l0Y2hUYWIoJGV2ZW50LCB0MilcIlxuICBbZGlzYWJsZVBvcG92ZXJdPVwiaXNEaXNhYmxlZFwiXG4gIChoaWRkZW4pPVwib25GaWx0ZXJDbG9zZSgpXCJcbiAgKHNob3duKT1cIm9uRmlsdGVyU2hvd24oKVwiXG4gIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21haW5Db250ZW50XVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjdXN0b21Qb3BvdmVyIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbcG9wb3ZlckNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtYXV0b2Nsb3NlLXBvcG92ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtYXV0b2Nsb3NlLXBvcG92ZXIvY2EtYXV0b2Nsb3NlLXBvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtYXV0b2Nsb3NlLXBvcG92ZXIvY2EtYXV0b2Nsb3NlLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsUUFBUTtBQUNSLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7QUFVcEUsTUFBTSxPQUFPLDJCQUEyQjtJQVV0QyxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBUDNCLGNBQVMsR0FBcUIsU0FBUyxDQUFDO1FBQ3hDLGNBQVMsR0FBVyxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQztRQUM5RCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdkMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFekMsWUFBTyxHQUFzQixJQUFJLENBQUM7SUFFRixDQUFDO0lBRXhDLFFBQVEsS0FBVSxDQUFDO0lBRVosU0FBUyxDQUFDLEtBQVksRUFBRSxFQUFjO1FBQzNDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWpELElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLGFBQWE7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVNLGFBQWE7UUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDOytHQS9CVSwyQkFBMkI7bUdBQTNCLDJCQUEyQiwyUUN4QnhDLGdoQkFrQkEseURER1ksWUFBWSw4QkFBRSxTQUFTLHNYQUFFLFdBQVcsOEJBQUUsbUJBQW1COzs0RkFHeEQsMkJBQTJCO2tCQVJ2QyxTQUFTOytCQUNFLDRCQUE0QixjQUcxQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxpQkFDckQsaUJBQWlCLENBQUMsUUFBUTsrRUFHaEMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdiTW9kdWxlLCBOZ2JQb3BvdmVyIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8vIGVudW1zXG5pbXBvcnQgeyBBdXRvQ2xvc2VTdHJpbmdFbnVtIH0gZnJvbSAnLi9lbnVtcy9hdXRvY2xvc2Utc3RyaW5nLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbYXBwLWNhLWF1dG9jbG9zZS1wb3BvdmVyXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYS1hdXRvY2xvc2UtcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhLWF1dG9jbG9zZS1wb3BvdmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE5nYk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbn0pXG5leHBvcnQgY2xhc3MgQ2FBdXRvY2xvc2VQb3BvdmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgaXNEaXNhYmxlZCE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzITogc3RyaW5nO1xuICBASW5wdXQoKSBhdXRvQ2xvc2U6IHN0cmluZyB8IGJvb2xlYW4gPSAnb3V0c2lkZSc7XG4gIEBJbnB1dCgpIHBsYWNlbWVudDogc3RyaW5nID0gQXV0b0Nsb3NlU3RyaW5nRW51bS5CT1RUT01fUklHSFRfUExBQ0VNRU5UO1xuICBAT3V0cHV0KCkgY2xvc2VGaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvcGVuRmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHB1YmxpYyB0b29sdGlwOiBOZ2JQb3BvdmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlUmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBwdWJsaWMgc3dpdGNoVGFiKGV2ZW50OiBFdmVudCwgdDI6IE5nYlBvcG92ZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50b29sdGlwPy5pc09wZW4oKSkgdGhpcy50b29sdGlwLmNsb3NlKCk7XG5cbiAgICB0aGlzLnRvb2x0aXAgPSB0MjtcbiAgICB0aGlzLnRvb2x0aXAub3BlbigpO1xuICB9XG5cbiAgcHVibGljIG9uRmlsdGVyQ2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xvc2VGaWx0ZXIpIHRoaXMuY2xvc2VGaWx0ZXIuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uRmlsdGVyU2hvd24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3BlbkZpbHRlcikgdGhpcy5vcGVuRmlsdGVyLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZUN1c3RvbVBvcG92ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudG9vbHRpcCkgdGhpcy50b29sdGlwLmNsb3NlKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI3QyPVwibmdiUG9wb3ZlclwiXG4gIFtuZ2JQb3BvdmVyXT1cImN1c3RvbVBvcG92ZXJcIlxuICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gIFtwb3BvdmVyQ2xhc3NdPVwiY3VzdG9tQ2xhc3NcIlxuICB0cmlnZ2Vycz1cIidtYW51YWwnXCJcbiAgW2F1dG9DbG9zZV09XCJhdXRvQ2xvc2VcIlxuICAoY2xpY2spPVwic3dpdGNoVGFiKCRldmVudCwgdDIpXCJcbiAgW2Rpc2FibGVQb3BvdmVyXT1cImlzRGlzYWJsZWRcIlxuICAoaGlkZGVuKT1cIm9uRmlsdGVyQ2xvc2UoKVwiXG4gIChzaG93bik9XCJvbkZpbHRlclNob3duKClcIlxuICBbY29udGFpbmVyXT1cIidib2R5J1wiXG4+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYWluQ29udGVudF1cIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tUG9wb3ZlciBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3BvcG92ZXJDb250ZW50XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -25,12 +25,13 @@ export class CaChartComponent {
25
25
  this.updateDatasetBackgroundOnHover(value);
26
26
  }
27
27
  set chartConfig(value) {
28
- this._chartConfig = value;
29
- this.isChartDataAvailable = false;
28
+ this._chartConfig = { ...value };
30
29
  this.isChartDataAvailable =
31
- this._chartConfig?.chartData?.datasets?.some((item) => item.data.some((value) => Array.isArray(value)
32
- ? value[0] !== 0 || value[1] !== 0
33
- : value !== 0)) ?? false;
30
+ (!!this._chartConfig?.chartData?.datasets?.length &&
31
+ this._chartConfig?.chartData?.datasets?.some((item) => item.data.some((value) => Array.isArray(value)
32
+ ? value[0] !== null || value[1] !== null
33
+ : value !== null))) ??
34
+ false;
34
35
  this.changeDetector.detectChanges();
35
36
  if (this.isChartDataAvailable)
36
37
  this.updateChart();
@@ -137,9 +138,9 @@ export class CaChartComponent {
137
138
  if (this._chartConfig.chartType === "doughnut" /* eChartTypesString.DOUGHNUT */)
138
139
  Chart.overrides.doughnut.cutout = '88%';
139
140
  this.chart = new Chart(this.chartContext, {
140
- type: this._chartConfig.chartType,
141
- data: this._chartConfig.chartData,
142
- options: this._chartConfig.chartOptions,
141
+ type: this._chartConfig?.chartType,
142
+ data: this._chartConfig?.chartData,
143
+ options: this._chartConfig?.chartOptions,
143
144
  plugins: this.plugins,
144
145
  });
145
146
  if (!this._chartConfig.isDashboardChart)
@@ -597,7 +598,7 @@ export class CaChartComponent {
597
598
  this.destroy$.complete();
598
599
  }
599
600
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaChartComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ChartManagerService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
600
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CaChartComponent, isStandalone: true, selector: "app-ca-chart", inputs: { legendData: "legendData", chartId: "chartId", chartDatasetHover: "chartDatasetHover", chartConfig: "chartConfig", selectedIndex: "selectedIndex" }, outputs: { hoveredIndex: "hoveredIndex" }, viewQueries: [{ propertyName: "chartCanvas", first: true, predicate: ["chartCanvas"], descendants: true }], ngImport: i0, template: "@if (isChartDataAvailable) {\n <ng-container\n *ngTemplateOutlet=\"\n legend;\n context: {\n config: legendData,\n }\n \"\n ></ng-container>\n <div\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <canvas #chartCanvas></canvas>\n </div>\n} @else {\n <div\n class=\"d-flex justify-content-center align-items-center\"\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <svg-icon\n [src]=\"_chartConfig.noDataImage\"\n alt=\"No data available\"\n class=\"no-data-svg\"\n ></svg-icon>\n </div>\n}\n<ng-template #legend let-config=\"config\">\n @if (config?.data) {\n <div\n [ngClass]=\"config.hasHighlightedBackground && 'colored-background'\"\n >\n @if (config.title) {\n <div class=\"legend-title font-size-14 ta-font-extra-bold\">\n {{ config.title }}\n </div>\n }\n <div class=\"legend-wrapper d-flex\">\n @for (\n item of config.data;\n let index = $index;\n track item.name\n ) {\n <div class=\"w-100\">\n <div\n class=\"d-flex align-content-center text-size-11 ta-font-bold\"\n >\n <span>{{ item?.name }}</span>\n <span\n [ngClass]=\"\n item?.isLineIndicator\n ? 'line-indicator'\n : 'circle-indicator'\n \"\n [ngStyle]=\"{ background: item?.color }\"\n ></span>\n </div>\n <div class=\"text-size-18\">\n {{\n (item?.value !== 0\n ? (item?.value | thousandSeparator)\n : 0\n ) | unitPosition: item?.unit\n }}\n </div>\n </div>\n }\n </div>\n </div>\n }\n</ng-template>\n", styles: ["@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.no-data-svg{width:100%;height:auto;max-width:100%}.legend-title{margin:6px;height:26px;line-height:26px;border-bottom:1px solid #dadada}.legend-wrapper{width:100%;min-height:46px;padding:4px 6px}.legend-wrapper .circle-indicator{height:10px;width:10px;border-radius:50px;margin:2px 4px}.legend-wrapper .line-indicator{height:2px;width:10px;margin:auto 4px}.colored-background{background-color:#eee;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: AngularSvgIconModule }, { kind: "component", type: i3.SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "pipe", type: UnitPositionPipe, name: "unitPosition" }, { kind: "pipe", type: ThousandSeparatorPipe, name: "thousandSeparator" }] }); }
601
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CaChartComponent, isStandalone: true, selector: "app-ca-chart", inputs: { legendData: "legendData", chartId: "chartId", chartDatasetHover: "chartDatasetHover", chartConfig: "chartConfig", selectedIndex: "selectedIndex" }, outputs: { hoveredIndex: "hoveredIndex" }, viewQueries: [{ propertyName: "chartCanvas", first: true, predicate: ["chartCanvas"], descendants: true }], ngImport: i0, template: "@if (isChartDataAvailable) {\n <ng-container\n *ngTemplateOutlet=\"\n legend;\n context: {\n config: legendData,\n }\n \"\n ></ng-container>\n <div\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <canvas #chartCanvas></canvas>\n </div>\n} @else {\n <div\n class=\"d-flex justify-content-center align-items-center\"\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <svg-icon\n [src]=\"_chartConfig.noDataImage\"\n alt=\"No data available\"\n class=\"no-data-svg\"\n ></svg-icon>\n </div>\n}\n<ng-template #legend let-config=\"config\">\n @if (config?.data) {\n <div\n [ngClass]=\"config.hasHighlightedBackground && 'colored-background'\"\n >\n @if (config.title) {\n <div class=\"legend-title font-size-14 ta-font-extra-bold\">\n {{ config.title }}\n </div>\n }\n <div class=\"legend-wrapper d-flex\">\n @for (\n item of config.data;\n let index = $index;\n track $index\n ) {\n <div class=\"w-100\">\n <div\n class=\"d-flex align-content-center text-size-11 ta-font-bold\"\n >\n <span>{{ item?.name }}</span>\n <span\n [ngClass]=\"\n item?.isLineIndicator\n ? 'line-indicator'\n : 'circle-indicator'\n \"\n [ngStyle]=\"{ background: item?.color }\"\n ></span>\n </div>\n <div class=\"text-size-18\">\n {{\n (item?.value !== 0\n ? (item?.value | thousandSeparator)\n : 0\n ) | unitPosition: item?.unit\n }}\n </div>\n </div>\n }\n </div>\n </div>\n }\n</ng-template>\n", styles: ["@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.no-data-svg{width:100%;height:auto;max-width:100%}.legend-title{margin:6px;height:26px;line-height:26px;border-bottom:1px solid #dadada}.legend-wrapper{width:100%;min-height:46px;padding:4px 6px}.legend-wrapper .circle-indicator{height:10px;width:10px;border-radius:50px;margin:2px 4px}.legend-wrapper .line-indicator{height:2px;width:10px;margin:auto 4px}.colored-background{background-color:#eee;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: AngularSvgIconModule }, { kind: "component", type: i3.SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "pipe", type: UnitPositionPipe, name: "unitPosition" }, { kind: "pipe", type: ThousandSeparatorPipe, name: "thousandSeparator" }] }); }
601
602
  }
602
603
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaChartComponent, decorators: [{
603
604
  type: Component,
@@ -606,7 +607,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
606
607
  AngularSvgIconModule,
607
608
  UnitPositionPipe,
608
609
  ThousandSeparatorPipe,
609
- ], template: "@if (isChartDataAvailable) {\n <ng-container\n *ngTemplateOutlet=\"\n legend;\n context: {\n config: legendData,\n }\n \"\n ></ng-container>\n <div\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <canvas #chartCanvas></canvas>\n </div>\n} @else {\n <div\n class=\"d-flex justify-content-center align-items-center\"\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <svg-icon\n [src]=\"_chartConfig.noDataImage\"\n alt=\"No data available\"\n class=\"no-data-svg\"\n ></svg-icon>\n </div>\n}\n<ng-template #legend let-config=\"config\">\n @if (config?.data) {\n <div\n [ngClass]=\"config.hasHighlightedBackground && 'colored-background'\"\n >\n @if (config.title) {\n <div class=\"legend-title font-size-14 ta-font-extra-bold\">\n {{ config.title }}\n </div>\n }\n <div class=\"legend-wrapper d-flex\">\n @for (\n item of config.data;\n let index = $index;\n track item.name\n ) {\n <div class=\"w-100\">\n <div\n class=\"d-flex align-content-center text-size-11 ta-font-bold\"\n >\n <span>{{ item?.name }}</span>\n <span\n [ngClass]=\"\n item?.isLineIndicator\n ? 'line-indicator'\n : 'circle-indicator'\n \"\n [ngStyle]=\"{ background: item?.color }\"\n ></span>\n </div>\n <div class=\"text-size-18\">\n {{\n (item?.value !== 0\n ? (item?.value | thousandSeparator)\n : 0\n ) | unitPosition: item?.unit\n }}\n </div>\n </div>\n }\n </div>\n </div>\n }\n</ng-template>\n", styles: ["@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.no-data-svg{width:100%;height:auto;max-width:100%}.legend-title{margin:6px;height:26px;line-height:26px;border-bottom:1px solid #dadada}.legend-wrapper{width:100%;min-height:46px;padding:4px 6px}.legend-wrapper .circle-indicator{height:10px;width:10px;border-radius:50px;margin:2px 4px}.legend-wrapper .line-indicator{height:2px;width:10px;margin:auto 4px}.colored-background{background-color:#eee;padding:0}\n"] }]
610
+ ], template: "@if (isChartDataAvailable) {\n <ng-container\n *ngTemplateOutlet=\"\n legend;\n context: {\n config: legendData,\n }\n \"\n ></ng-container>\n <div\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <canvas #chartCanvas></canvas>\n </div>\n} @else {\n <div\n class=\"d-flex justify-content-center align-items-center\"\n [ngStyle]=\"{\n height: _chartConfig?.height + 'px',\n width: _chartConfig?.width + '%',\n }\"\n >\n <svg-icon\n [src]=\"_chartConfig.noDataImage\"\n alt=\"No data available\"\n class=\"no-data-svg\"\n ></svg-icon>\n </div>\n}\n<ng-template #legend let-config=\"config\">\n @if (config?.data) {\n <div\n [ngClass]=\"config.hasHighlightedBackground && 'colored-background'\"\n >\n @if (config.title) {\n <div class=\"legend-title font-size-14 ta-font-extra-bold\">\n {{ config.title }}\n </div>\n }\n <div class=\"legend-wrapper d-flex\">\n @for (\n item of config.data;\n let index = $index;\n track $index\n ) {\n <div class=\"w-100\">\n <div\n class=\"d-flex align-content-center text-size-11 ta-font-bold\"\n >\n <span>{{ item?.name }}</span>\n <span\n [ngClass]=\"\n item?.isLineIndicator\n ? 'line-indicator'\n : 'circle-indicator'\n \"\n [ngStyle]=\"{ background: item?.color }\"\n ></span>\n </div>\n <div class=\"text-size-18\">\n {{\n (item?.value !== 0\n ? (item?.value | thousandSeparator)\n : 0\n ) | unitPosition: item?.unit\n }}\n </div>\n </div>\n }\n </div>\n </div>\n }\n</ng-template>\n", styles: ["@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.no-data-svg{width:100%;height:auto;max-width:100%}.legend-title{margin:6px;height:26px;line-height:26px;border-bottom:1px solid #dadada}.legend-wrapper{width:100%;min-height:46px;padding:4px 6px}.legend-wrapper .circle-indicator{height:10px;width:10px;border-radius:50px;margin:2px 4px}.legend-wrapper .line-indicator{height:2px;width:10px;margin:auto 4px}.colored-background{background-color:#eee;padding:0}\n"] }]
610
611
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.ChartManagerService, decorators: [{
611
612
  type: Optional
612
613
  }] }], propDecorators: { chartCanvas: [{
@@ -625,4 +626,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
625
626
  }], hoveredIndex: [{
626
627
  type: Output
627
628
  }] } });
628
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxTQUFTO0FBQ1QsT0FBTyxFQUVILEtBQUssR0FJUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLGdCQUFnQixNQUFNLDJCQUEyQixDQUFDO0FBR3pELFFBQVE7QUFDUixPQUFPLEVBRUgscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUV4Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3QixnQkFBZ0IsR0FDbkIsTUFBTSxTQUFTLENBQUM7QUFFakIsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxTQUFTO0FBQ1QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBa0JoRCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTW5ELFFBQVE7QUFDUixPQUFPLEVB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aUJBQWlCO3NCQURwQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBZ0JPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBU0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0NoaWxkLFxuICAgIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy9iYXNpYyc7XG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8vIENoYXJ0c1xuaW1wb3J0IHtcbiAgICBDYXRlZ29yeVNjYWxlLFxuICAgIENoYXJ0LFxuICAgIENoYXJ0RXZlbnQsXG4gICAgTGluZWFyU2NhbGUsXG4gICAgUGx1Z2luLFxufSBmcm9tICdjaGFydC5qcy9hdXRvJztcbmltcG9ydCBhbm5vdGF0aW9uUGx1Z2luIGZyb20gJ2NoYXJ0anMtcGx1Z2luLWFubm90YXRpb24nO1xuaW1wb3J0IHsgQWN0aXZlRGF0YVBvaW50LCBDaGFydFR5cGUgfSBmcm9tICdjaGFydC5qcyc7XG5cbi8vIEVudW1zXG5pbXBvcnQge1xuICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMsXG4gICAgQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLFxuICAgIGVDaGFydFR5cGVzU3RyaW5nLFxuICAgIEN1YmljSW50ZXJwb2xhdGlvblN0cmluZ0VudW0sXG4gICAgQ2hhcnRFdmVudFR5cGVzU3RyaW5nRW51bSxcbiAgICBDaGFydEZvbnRQcm9wZXJ0aWVzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRBbm5vdGF0aW9uLFxufSBmcm9tICcuL2VudW1zJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgQ2hhcnRIZWxwZXIgfSBmcm9tICcuL3V0aWxzL2hlbHBlcnMnO1xuXG4vLyBHdWFyZHNcbmltcG9ydCB7IENoYXJ0VHlwZUd1YXJkIH0gZnJvbSAnLi91dGlscy9ndWFyZHMnO1xuXG4vL01vZGVsc1xuaW1wb3J0IHtcbiAgICBJQ2hhcnREYXRhLFxuICAgIElMaW5lRGF0YXNldCxcbiAgICBJQ2hhcnRDb25maWd1cmF0aW9uLFxuICAgIElCYXNlRGF0YXNldCxcbiAgICBJQ2hhcnRBbm5vdGF0aW9uLFxuICAgIElDaGFydERhdGFzZXRIb3ZlcixcbiAgICBJQ2hhcnRDZW50ZXJMYWJlbCxcbiAgICBJQ2hhcnRMZWdlbmRDb25maWcsXG59IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICdjaGFydC5qcy9kaXN0L3BsdWdpbnMvcGx1Z2luLnRvb2x0aXAnO1xuXG4vL1NlcnZpY2VzXG5pbXBvcnQgeyBDaGFydE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2EtY2hhcnQtbWFuYWdlci9zZXJ2aWNlcyc7XG5cbi8vIENvbnN0YW50c1xuaW1wb3J0IHsgQ2hhcnRDb25zdGFudHMgfSBmcm9tICcuL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIF9EZWVwUGFydGlhbEFycmF5LFxuICAgIF9EZWVwUGFydGlhbE9iamVjdCxcbn0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy91dGlscyc7XG5cbi8vIFBpcGVzXG5pbXBvcnQgeyBUaG91c2FuZFNlcGFyYXRvclBpcGUsIFVuaXRQb3NpdGlvblBpcGUgfSBmcm9tICcuLi8uLi9waXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNhLWNoYXJ0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQW5ndWxhclN2Z0ljb25Nb2R1bGUsXG4gICAgICAgIFVuaXRQb3NpdGlvblBpcGUsXG4gICAgICAgIFRob3VzYW5kU2VwYXJhdG9yUGlwZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDYUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnY2hhcnRDYW52YXMnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hhcnRDYW52YXMhOiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KCkgbGVnZW5kRGF0YSE6IElDaGFydExlZ2VuZENvbmZpZztcbiAgICBASW5wdXQoKSBjaGFydElkITogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNoYXJ0RGF0YXNldEhvdmVyKHZhbHVlOiBJQ2hhcnREYXRhc2V0SG92ZXIgfCBudWxsKSB7XG4gICAgICAgIGlmICh2YWx1ZSkgdGhpcy51cGRhdGVEYXRhc2V0QmFja2dyb3VuZE9uSG92ZXIodmFsdWUpO1xuICAgIH1cbiAgICBASW5wdXQoKSBzZXQgY2hhcnRDb25maWcodmFsdWU6IElDaGFydENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUgPVxuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0RGF0YT8uZGF0YXNldHM/LnNvbWUoKGl0ZW06IElCYXNlRGF0YXNldCkgPT5cbiAgICAgICAgICAgICAgICBpdGVtLmRhdGEuc29tZSgodmFsdWU6IG51bWJlciB8IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVswXSAhPT0gMCB8fCB2YWx1ZVsxXSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlKSB0aGlzLnVwZGF0ZUNoYXJ0KCk7XG4gICAgfVxuICAgIEBJbnB1dCgpIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0IHx8ICF0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB0aGlzLmZvY3VzRG91Z2hudXRBcmModmFsdWUpO1xuICAgICAgICBlbHNlIHRoaXMuc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIGhvdmVyZWRJbmRleDogRXZlbnRFbWl0dGVyPG51bWJlciB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGNoYXJ0ITogQ2hhcnQ7XG4gICAgcHJpdmF0ZSBjaGFydENvbnRleHQhOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgcHJpdmF0ZSBwbHVnaW5zPzogUGx1Z2luPENoYXJ0VHlwZSwgQW55T2JqZWN0PltdO1xuICAgIHByaXZhdGUgYXJlQW5pbWF0aW9uc0NvbXBsZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9ob3ZlcmVkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgbGFzdEhvdmVyZWRJbmRleDogbnVtYmVyID0gLTE7XG5cbiAgICBwdWJsaWMgX2NoYXJ0Q29uZmlnITogSUNoYXJ0Q29uZmlndXJhdGlvbjtcbiAgICBwdWJsaWMgaXNDaGFydERhdGFBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjaGFydE1hbmFnZXJTZXJ2aWNlPzogQ2hhcnRNYW5hZ2VyU2VydmljZVxuICAgICkge31cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVDaGFydE1hbmFnZXJTZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQ2hhcnRNYW5hZ2VyU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2UpIHJldHVybjtcblxuICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2UuaG92ZXJTdGF0ZSRcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgaW5kZXgsIGNoYXJ0SWQgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGFydElkICE9PSB0aGlzLmNoYXJ0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0KSB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVBbm5vdGF0aW9uUGx1Z2luKCk6IHZvaWQge1xuICAgICAgICBDaGFydC5yZWdpc3Rlcihhbm5vdGF0aW9uUGx1Z2luKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlRGF0YXNldEJhY2tncm91bmRPbkhvdmVyKFxuICAgICAgICBjaGFydERhdGFzZXRIb3ZlcjogSUNoYXJ0RGF0YXNldEhvdmVyXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jaGFydCB8fCAhdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGNoYXJ0RGF0YXNldEhvdmVyLmlzSG92ZXJkKSB7XG4gICAgICAgICAgICBjb25zdCBncmFkaWVudCA9IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDYW52YXMsXG4gICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgMC42LFxuICAgICAgICAgICAgICAgIDAuMSxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID0gdGhpcy5jaGFydD8uZGF0YT8uZGF0YXNldHM/Lm1hcChcbiAgICAgICAgICAgICAgICAoZGF0YXNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YXNldC5oaWRkZW4pIHJldHVybiBkYXRhc2V0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ/LmxhYmVsPy50b1VwcGVyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXI/LmxhYmVsPy50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaG92ZXJkRGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBncmFkaWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZERhdGFTZXQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJDb2xvcldpdGhPcGFjaXR5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFydEhlbHBlci5jaGFuZ2VPcGFjaXR5T2ZSZ2JPclJnYmEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBib3JkZXJDb2xvcldpdGhPcGFjaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzLm1hcChcbiAgICAgICAgICAgICAgICAoZGF0YXNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFzZXQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbENvbG9yID0gZGF0YXNldC5ib3JkZXJDb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ2hhcnRIZWxwZXIuY2hhbmdlT3BhY2l0eU9mUmdiT3JSZ2JhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENoYXJ0Q29uc3RhbnRzLlNUUklOR19FTVBUWTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBvcmlnaW5hbENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHJldHVybiBkYXRhc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDaGFydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFydENvbnRleHQgPSB0aGlzLmNoYXJ0Q2FudmFzPy5uYXRpdmVFbGVtZW50Py5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgIHRoaXMuc2V0Q2hhcnRPcHRpb25zUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLnNldENoYXJ0RGF0YVByb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy5zZXRDaGFydFBsdWdpbnNQcm9wZXJ0aWVzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVQpXG4gICAgICAgICAgICBDaGFydC5vdmVycmlkZXMuZG91Z2hudXQuY3V0b3V0ID0gJzg4JSc7XG5cbiAgICAgICAgdGhpcy5jaGFydCA9IG5ldyBDaGFydCh0aGlzLmNoYXJ0Q29udGV4dCwge1xuICAgICAgICAgICAgdHlwZTogdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLFxuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLFxuICAgICAgICAgICAgcGx1Z2luczogdGhpcy5wbHVnaW5zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuX2NoYXJ0Q29uZmlnLmlzRGFzaGJvYXJkQ2hhcnQpXG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmNvbmZpZy5kYXRhLmRhdGFzZXRzID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydERhdGE/LmRhdGFzZXRzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChpdGVtOiBJQmFzZURhdGFzZXQsIGluZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9pbnRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRCYWNrZ3JvdW5kQ29sb3I6IENoYXJ0Q29sb3JzU3RyaW5nRW51bS5XSElURSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludEJvcmRlcldpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50UmFkaXVzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDaGFydEFubm90YXRpb25zKGl0ZW0sIGluZHgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5U2NhbGUgPSB0aGlzLmNoYXJ0LnNjYWxlc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMuWV9BWElTXzBcbiAgICAgICAgICAgICAgICAgICAgICAgIF0gYXMgQ2F0ZWdvcnlTY2FsZSB8IExpbmVhclNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yICYmIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydENhbnZhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5jb2xvcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Qm9yZGVyQ29sb3I6IGl0ZW0uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucG9pbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGl0ZW0/LmZpbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YXNldENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpdGVtLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uc2hpZnRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvciAhPT0gaXRlbT8uY29sb3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDaGFydEhlbHBlci5jcmVhdGVHcmFkaWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRWYWx1ZVB4OiBudW1iZXIgPSB5U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNoaWZ0VmFsdWUgfHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoaWZ0VmFsdWVBZGp1c3RlZDogbnVtYmVyID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFZhbHVlUHggLyB5U2NhbGUubWF4SGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvcjE6IHN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb2xvciB8fCBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvcjI6IHN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb2xvcjIgfHwgQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJDb2xvcjogQ2FudmFzR3JhZGllbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50V2l0aFNoaWZ0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5U2NhbGUubWF4SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRWYWx1ZUFkanVzdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBvaW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Qm9yZGVyQ29sb3I6IGJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnRXaXRoU2hpZnRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeVNjYWxlLm1heEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0VmFsdWVBZGp1c3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDaGFydCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENoYXJ0T3B0aW9uc1Byb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YS5sYWJlbHM7XG5cbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zID0ge1xuICAgICAgICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgICAgICAgY2xpcDogZmFsc2UsXG4gICAgICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJlQW5pbWF0aW9uc0NvbXBsZWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmVBbmltYXRpb25zQ29tcGxlYXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5CQVIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLnZlcnRpY2FseUFsaWduQmFyQ2hhcnRXaXRoTGluZUNhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5CQVIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLnZlcnRpY2FseUFsaWduQmFyQ2hhcnRXaXRoTGluZUNhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwbHVnaW5zOiB7XG4gICAgICAgICAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNjYWxlczoge1xuICAgICAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBDaGFydENvbG9yc1N0cmluZ0VudW0uWF9BWElTX0xBQkVMX0NPTE9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseTogQ2hhcnRGb250UHJvcGVydGllc1N0cmluZ0VudW0uRk9OVF9GQU1JTFlfTU9OVFNFUlJBVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IENoYXJ0Rm9udFByb3BlcnRpZXNTdHJpbmdFbnVtLkZPTlRfV0VJR0hUX0JPTERFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvU2tpcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Ta2lwUGFkZGluZzogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhSb3RhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pblJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9MYWJlbCB3cml0dGVuIGluIDIgbGluZXMsIHdpbGwgYmUgYWRqdXN0ZWQgd2l0aCBuZXcgZGVzaWduXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gbGFiZWxzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aUxpbmVMYWJlbCA9IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbGFiZWwuc3BsaXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtdWx0aUxpbmVMYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuX2NoYXJ0Q29uZmlnLnNob3dYQXhpc0xhYmVscyxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgICAgIG1heDogQ2hhcnRIZWxwZXIuY2FsY3VsYXRlRGF0YXNldE1heFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLmRhdGFzZXRzIGFzIGFueSAvL2xlYXZlIHRoaXMgYXMgYW55XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkhvdmVyOiAoZXZlbnQ6IENoYXJ0RXZlbnQsIGl0ZW06IEFjdGl2ZUVsZW1lbnRbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5oYXNWZXJ0aWNhbERhc2hlZEFubm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWZXJ0aWNhbERhc2hlZEFubm90YXRpb25MaW5lKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNldE9yaWdpbmFsRG91Z2hudXRBcmNzQ29sb3IoKTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5ET1VHSE5VVFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtWzBdPy5pbmRleCA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZm9jdXNEb3VnaG51dEFyYyhpdGVtWzBdPy5pbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4LmVtaXQoaXRlbVswXT8uaW5kZXggfHwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNEb3VnaG51dEFyYyhpbmRleDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgIT09IGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUIHx8XG4gICAgICAgICAgICBpbmRleCA9PT0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdLmRhdGEubGVuZ3RoIC0gMVxuICAgICAgICApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbG9yczogc3RyaW5nW10gPSB0aGlzLmNoYXJ0Py5kYXRhPy5kYXRhc2V0c1swXVxuICAgICAgICAgICAgPy5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nW107XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb2xvcnM6IHN0cmluZ1tdID0gY29sb3JzLm1hcChcbiAgICAgICAgICAgIChjb2xvcjogc3RyaW5nLCBpbmR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5keCA9PT0gaW5kZXgpIHJldHVybiBjb2xvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZSA9IENoYXJ0SGVscGVyLmNvbnZlcnRSZ2JUb1JnYmEoY29sb3IsIDAuMik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5iYWNrZ3JvdW5kQ29sb3IgPSB1cGRhdGVkQ29sb3JzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVQpIHJldHVybjtcblxuICAgICAgICBjb25zdCBjb2xvcnM6IHN0cmluZ1tdID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdXG4gICAgICAgICAgICAuYmFja2dyb3VuZENvbG9yIGFzIHN0cmluZ1tdO1xuXG4gICAgICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5iYWNrZ3JvdW5kQ29sb3IgPSBbXG4gICAgICAgICAgICAuLi5jb2xvcnMubWFwKChjb2xvcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIENoYXJ0SGVscGVyLnJnYlRvUmdiYShjb2xvciwgMSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIHNldENoYXJ0RGF0YVByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkxJTkUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YXNldC5vcmRlciA9IGRhdGFzZXQub3JkZXI7XG4gICAgICAgICAgICAgICAgaWYgKENoYXJ0VHlwZUd1YXJkLmlzTGluZURhdGFzZXQoZGF0YXNldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC50ZW5zaW9uID0gZGF0YXNldC50ZW5zaW9uID8/IDAuNTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5jdWJpY0ludGVycG9sYXRpb25Nb2RlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgQ3ViaWNJbnRlcnBvbGF0aW9uU3RyaW5nRW51bS5NT05PVE9ORTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEJvcmRlckNvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCb3JkZXJDb2xvciA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLlRSQU5TUEFSRU5UO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50QmFja2dyb3VuZENvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCYWNrZ3JvdW5kQ29sb3IgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5UUkFOU1BBUkVOVDtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEhvdmVyQmFja2dyb3VuZENvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5XSElURTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEhvdmVyQm9yZGVyQ29sb3IgPSBkYXRhc2V0LmJvcmRlckNvbG9yO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50Qm9yZGVyV2lkdGggPSBkYXRhc2V0LnBvaW50Qm9yZGVyV2lkdGggPz8gMztcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEhvdmVyUmFkaXVzID0gNDtcbiAgICAgICAgICAgICAgICAgICAgLy9kYXRhc2V0LnBvaW50SG92ZXJSYWRpdXMgPSA4O1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50SG92ZXJCb3JkZXJXaWR0aCA9IDM7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5zcGFuR2FwcyA9IGRhdGFzZXQuc3BhbkdhcHMgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuc2hvd0xpbmUgPSBkYXRhc2V0LnNob3dMaW5lID8/IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNldE11bHRpcGxlWUF4aXModGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2hhcnRQbHVnaW5zUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uSElHSExJR0hUX1NFR01FTlRfT05fSE9WRVIsXG4gICAgICAgICAgICAgICAgYWZ0ZXJFdmVudDogKGNoYXJ0LCBldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50LmV2ZW50Lm5hdGl2ZSBhcyBNb3VzZUV2ZW50O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50LnR5cGUgPT09IENoYXJ0RXZlbnRUeXBlc1N0cmluZ0VudW0uTU9VU0VfT1VUXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTW91c2VPdXRzaWRlQ2hhcnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggPCBib3VuZGluZ1JlY3QubGVmdCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggPiBib3VuZGluZ1JlY3QucmlnaHQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5jbGllbnRZIDwgYm91bmRpbmdSZWN0LnRvcCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFkgPiBib3VuZGluZ1JlY3QuYm90dG9tO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNb3VzZU91dHNpZGVDaGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydE1hbmFnZXJTZXJ2aWNlPy5zZXRIb3ZlclN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0SWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lQW5kRm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhcnRDb25maWcuc2hvd1Rvb2x0aXBCYWNrZ3JvdW5kKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxlZnQsIHJpZ2h0IH0gPSB0aGlzLmNoYXJ0LmNoYXJ0QXJlYTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlIDwgbGVmdCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA+IHJpZ2h0XG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZT8uc2V0SG92ZXJTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRJZFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeFNjYWxlID0gdGhpcy5jaGFydC5zY2FsZXNbXG4gICAgICAgICAgICAgICAgICAgICAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMuWFxuICAgICAgICAgICAgICAgICAgICBdIGFzIENhdGVnb3J5U2NhbGUgfCBMaW5lYXJTY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aWNrUG9zaXRpb25zID0geFNjYWxlLnRpY2tzLm1hcCgodGljaykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHRpY2sudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudEJvdW5kYXJpZXMgPSB0aWNrUG9zaXRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aWNrUG9zLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRCb3VuZGFyeSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxlZnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4IC0gMV0pIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByaWdodEJvdW5kYXJ5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPT09IHRpY2tQb3NpdGlvbnMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodGlja1BvcyArIHRpY2tQb3NpdGlvbnNbaW5kZXggKyAxXSkgLyAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbGVmdEJvdW5kYXJ5LCByaWdodEJvdW5kYXJ5IH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SG92ZXJlZEluZGV4ID0gc2VnbWVudEJvdW5kYXJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGJvdW5kYXJ5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPj1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkubGVmdEJvdW5kYXJ5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA8IGJvdW5kYXJ5LnJpZ2h0Qm91bmRhcnlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3SG92ZXJlZEluZGV4ICE9PSB0aGlzLl9ob3ZlcmVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SG92ZXJlZEluZGV4ID09PSAtMSA/IG51bGwgOiBuZXdIb3ZlcmVkSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2U/LnNldEhvdmVyU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50Qm91bmRhcmllc1t0aGlzLl9ob3ZlcmVkSW5kZXggYXMgbnVtYmVyXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGJlZm9yZURyYXc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2hvdmVyZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0QXJlYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXM6IHsgeDogeFNjYWxlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gdGhpcy5jaGFydDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuaGlnaGxpZ2h0U2VnbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4U2NhbGUgYXMgQ2F0ZWdvcnlTY2FsZSB8IExpbmVhclNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0QXJlYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVEYXRhID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnREYXRhPy5kYXRhc2V0cz8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldEluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5faG92ZXJlZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuc2V0QWN0aXZlRWxlbWVudHMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlRGF0YSBhcyBBY3RpdmVEYXRhUG9pbnRbXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uQk9SREVSX0JPVFRPTV9MSU5FX0NIQVJULFxuICAgICAgICAgICAgICAgIGJlZm9yZURyYXc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnPy5zaG93Qm90dG9tTGluZU9uTGluZUNoYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRBcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlczogeyB4OiB4U2NhbGUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSB0aGlzLmNoYXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldCA9IGRhdGEuZGF0YXNldHNbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gZGF0YXNldC5kYXRhLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSBkYXRhc2V0LmRhdGFbZmlyc3RJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0VmFsdWUgPSBkYXRhc2V0LmRhdGFbbGFzdEluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4U3RhcnQgPSB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShmaXJzdEluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhFbmQgPSB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShsYXN0SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHlCb3R0b20gPSBjaGFydEFyZWEuYm90dG9tO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFydENvbG9yc1N0cmluZ0VudW0uQk9SREVSX0JPVFRPTV9MSU5FX0NIQVJUX0NPTE9SO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHhTdGFydCwgeUJvdHRvbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4RW5kLCB5Qm90dG9tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUKVxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucGx1Z2lucyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiAnZG91Z2hudXQtbGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBiZWZvcmVEYXRhc2V0RHJhdzogKGNoYXJ0OiBDaGFydCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2VudGVyTGFiZWxzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsOiBJQ2hhcnRDZW50ZXJMYWJlbCwgaW5keDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmRyYXdEb3VnaG51dExlZ2VuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VG9wOiBsYWJlbC5wb3NpdGlvbj8udG9wIHx8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC5mb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLmNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNoYXJ0QW5ub3RhdGlvbnMoaXRlbTogSUJhc2VEYXRhc2V0LCBpbmR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jaGFydENvbmZpZy5hbm5vdGF0aW9ucz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuYW5ub3RhdGlvbnM/LmZvckVhY2goXG4gICAgICAgICAgICAoYW5ub3RhdGlvbjogSUNoYXJ0QW5ub3RhdGlvbiwga2V5OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMucGx1Z2lucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zPy5wbHVnaW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uYW5ub3RhdGlvbj8uYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ake2l0ZW0ubGFiZWx9LSR7aW5keH0tJHtrZXl9YF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLmlkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYW5ub3RhdGlvbi0ke2luZHh9LSR7a2V5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFubm90YXRpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVJRDogYW5ub3RhdGlvbi5heGlzIHx8IGl0ZW0ueUF4aXNJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFubm90YXRpb24udmFsdWUgfHwgaXRlbS5zaGlmdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24uY29sb3IgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5CT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlRfQ09MT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiBhbm5vdGF0aW9uLmJvcmRlcldpZHRoIHx8IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckRhc2g6IGFubm90YXRpb24uYm9yZGVyRGFzaCB8fCBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE11bHRpcGxlWUF4aXMoY2hhcnREYXRhOiBJQ2hhcnREYXRhPElMaW5lRGF0YXNldD4pOiB2b2lkIHtcbiAgICAgICAgY2hhcnREYXRhLmRhdGFzZXRzLmZvckVhY2goKGRhdGFzZXQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YXNldC50eXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5MSU5FIHx8XG4gICAgICAgICAgICAgICAgZGF0YXNldC50eXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5CQVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHlBeGlzSUQgPSB0aGlzLl9jaGFydENvbmZpZy5pc011bHRpWUF4aXNcbiAgICAgICAgICAgICAgICAgICAgPyBgeS1heGlzLSR7aW5kZXh9YFxuICAgICAgICAgICAgICAgICAgICA6IGRhdGFzZXQueUF4aXNJRCB8fCAneS1heGlzLTAnO1xuXG4gICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGlmIHRoZSBkYXRhc2V0IGlzIGFsbCAwXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBbGxaZXJvRGF0YXNldCA9IChkYXRhc2V0LmRhdGEgYXMgbnVtYmVyW10pLmV2ZXJ5KFxuICAgICAgICAgICAgICAgICAgICAodmFsOiBudW1iZXIpID0+IHZhbCA9PT0gMFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbWluVmFsdWUgPSBDaGFydEhlbHBlci5jYWxjdWxhdGVNaW5WYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5kYXRhIGFzIG51bWJlcltdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsZXQgbWF4VmFsdWUgPSBDaGFydEhlbHBlci5jYWxjdWxhdGVNYXhWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5kYXRhIGFzIG51bWJlcltdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gbWF4VmFsdWUgKiAwLjAzO1xuXG4gICAgICAgICAgICAgICAgLy8gQWRqdXN0IHNjYWxpbmcgZm9yIGFsbCAwIGRhdGFzZXRzXG4gICAgICAgICAgICAgICAgaWYgKGlzQWxsWmVyb0RhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluVmFsdWUgPSAwO1xuICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWluVmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWUgPT09IG1pblZhbHVlID8gbWluVmFsdWUgLSAwLjEgOiBtaW5WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWUgPT09IG1pblZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXhWYWx1ZSArIDAuMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWF4VmFsdWUgKyBwYWRkaW5nO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5zY2FsZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5zY2FsZXMsXG4gICAgICAgICAgICAgICAgICAgIFt5QXhpc0lEXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogbWluVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IG1heFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tlZDogdGhpcy5fY2hhcnRDb25maWcuaXNTdGFja2VkLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjaGFydERhdGEuZGF0YXNldHNbaW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICB5QXhpc0lELFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbm5vdGF0aW9ucyA9XG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnRPcHRpb25zPy5wbHVnaW5zPy5hbm5vdGF0aW9uPy5hbm5vdGF0aW9ucztcblxuICAgICAgICBjb25zdCBrZXk6IHN0cmluZyA9IENoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5YX0RBU0hFRDtcblxuICAgICAgICBpZiAoYW5ub3RhdGlvbnMpXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgID8uYW5ub3RhdGlvbnM/LltrZXkgYXMga2V5b2YgdHlwZW9mIGFubm90YXRpb25zXTtcblxuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmVydGljYWxEYXNoZWRBbm5vdGF0aW9uTGluZShcbiAgICAgICAgZXZlbnQ6IENoYXJ0RXZlbnQsXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQgfSA9IHRoaXMuY2hhcnQuY2hhcnRBcmVhO1xuXG4gICAgICAgIGNvbnN0IHhTY2FsZSA9IHRoaXMuY2hhcnQuc2NhbGVzW0VDaGFydEV2ZW50UHJvcGVydGllcy5YXSBhc1xuICAgICAgICAgICAgfCBDYXRlZ29yeVNjYWxlXG4gICAgICAgICAgICB8IExpbmVhclNjYWxlO1xuXG4gICAgICAgIGNvbnN0IHRpY2tQb3NpdGlvbnMgPSB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnREYXRhPy5sYWJlbHM/Lm1hcChcbiAgICAgICAgICAgIChsYWJlbDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc2VnbWVudEJvdW5kYXJpZXMgPSB0aWNrUG9zaXRpb25zLm1hcCgodGlja1BvcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRCb3VuZGFyeSA9XG4gICAgICAgICAgICAgICAgaW5kZXggPT09IDAgPyBsZWZ0IDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4IC0gMV0pIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Qm91bmRhcnkgPVxuICAgICAgICAgICAgICAgIGluZGV4ID09PSB0aWNrUG9zaXRpb25zLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgPyByaWdodFxuICAgICAgICAgICAgICAgICAgICA6ICh0aWNrUG9zICsgdGlja1Bvc2l0aW9uc1tpbmRleCArIDFdKSAvIDI7XG5cbiAgICAgICAgICAgIHJldHVybiB7IGxlZnRCb3VuZGFyeSwgcmlnaHRCb3VuZGFyeSB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50Lm5hdGl2ZSBhcyBNb3VzZUV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdCA9IHRoaXMuY2hhcnQuY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID1cbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDtcblxuICAgICAgICBjb25zdCBuZXdIb3ZlcmVkSW5kZXggPSBzZWdtZW50Qm91bmRhcmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYm91bmRhcnkpID0+XG4gICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA+PSBib3VuZGFyeS5sZWZ0Qm91bmRhcnkgJiZcbiAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlIDwgYm91bmRhcnkucmlnaHRCb3VuZGFyeVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChuZXdIb3ZlcmVkSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMsXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnM/LnBsdWdpbnM/LmFubm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnM/LnBsdWdpbnM/LmFubm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmFubm90YXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgW0NoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5YX0RBU0hFRF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5FQ2hhcnRBbm5vdGF0aW9uLlhfREFTSEVELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuZXdIb3ZlcmVkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5CT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlRfQ09MT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChuZXdIb3ZlcmVkSW5kZXgpO1xuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVWZXJ0aWNhbERhc2hlZExpbmVBbmRGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChudWxsKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmhhc1ZlcnRpY2FsRGFzaGVkQW5ub3RhdGlvbilcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiQGlmIChpc0NoYXJ0RGF0YUF2YWlsYWJsZSkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGxlZ2VuZDtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBjb25maWc6IGxlZ2VuZERhdGEsXG4gICAgICAgICAgICB9XG4gICAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgaGVpZ2h0OiBfY2hhcnRDb25maWc/LmhlaWdodCArICdweCcsXG4gICAgICAgICAgICB3aWR0aDogX2NoYXJ0Q29uZmlnPy53aWR0aCArICclJyxcbiAgICAgICAgfVwiXG4gICAgPlxuICAgICAgICA8Y2FudmFzICNjaGFydENhbnZhcz48L2NhbnZhcz5cbiAgICA8L2Rpdj5cbn0gQGVsc2Uge1xuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICBoZWlnaHQ6IF9jaGFydENvbmZpZz8uaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgIHdpZHRoOiBfY2hhcnRDb25maWc/LndpZHRoICsgJyUnLFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgW3NyY109XCJfY2hhcnRDb25maWcubm9EYXRhSW1hZ2VcIlxuICAgICAgICAgICAgYWx0PVwiTm8gZGF0YSBhdmFpbGFibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJuby1kYXRhLXN2Z1wiXG4gICAgICAgID48L3N2Zy1pY29uPlxuICAgIDwvZGl2PlxufVxuPG5nLXRlbXBsYXRlICNsZWdlbmQgbGV0LWNvbmZpZz1cImNvbmZpZ1wiPlxuICAgIEBpZiAoY29uZmlnPy5kYXRhKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbmZpZy5oYXNIaWdobGlnaHRlZEJhY2tncm91bmQgJiYgJ2NvbG9yZWQtYmFja2dyb3VuZCdcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGNvbmZpZy50aXRsZSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGl0bGUgZm9udC1zaXplLTE0IHRhLWZvbnQtZXh0cmEtYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb25maWcudGl0bGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtd3JhcHBlciBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgaXRlbSBvZiBjb25maWcuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gJGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0cmFjayBpdGVtLm5hbWVcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24tY29udGVudC1jZW50ZXIgdGV4dC1zaXplLTExIHRhLWZvbnQtYm9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbT8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmlzTGluZUluZGljYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2xpbmUtaW5kaWNhdG9yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2NpcmNsZS1pbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgYmFja2dyb3VuZDogaXRlbT8uY29sb3IgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc2l6ZS0xOFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtPy52YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXRlbT8udmFsdWUgfCB0aG91c2FuZFNlcGFyYXRvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgdW5pdFBvc2l0aW9uOiBpdGVtPy51bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
629
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxTQUFTO0FBQ1QsT0FBTyxFQUVILEtBQUssR0FJUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLGdCQUFnQixNQUFNLDJCQUEyQixDQUFDO0FBR3pELFFBQVE7QUFDUixPQUFPLEVBRUgscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUV4Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3QixnQkFBZ0IsR0FDbkIsTUFBTSxTQUFTLENBQUM7QUFFakIsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxTQUFTO0FBQ1QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBa0JoRCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTW5ELFFBQVE7QUFDUixPQUFPLEVB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QkFFbEMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUYsaUJBQWlCO3NCQURwQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBa0JPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBU0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0NoaWxkLFxuICAgIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy9iYXNpYyc7XG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8vIENoYXJ0c1xuaW1wb3J0IHtcbiAgICBDYXRlZ29yeVNjYWxlLFxuICAgIENoYXJ0LFxuICAgIENoYXJ0RXZlbnQsXG4gICAgTGluZWFyU2NhbGUsXG4gICAgUGx1Z2luLFxufSBmcm9tICdjaGFydC5qcy9hdXRvJztcbmltcG9ydCBhbm5vdGF0aW9uUGx1Z2luIGZyb20gJ2NoYXJ0anMtcGx1Z2luLWFubm90YXRpb24nO1xuaW1wb3J0IHsgQWN0aXZlRGF0YVBvaW50LCBDaGFydFR5cGUgfSBmcm9tICdjaGFydC5qcyc7XG5cbi8vIEVudW1zXG5pbXBvcnQge1xuICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMsXG4gICAgQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLFxuICAgIGVDaGFydFR5cGVzU3RyaW5nLFxuICAgIEN1YmljSW50ZXJwb2xhdGlvblN0cmluZ0VudW0sXG4gICAgQ2hhcnRFdmVudFR5cGVzU3RyaW5nRW51bSxcbiAgICBDaGFydEZvbnRQcm9wZXJ0aWVzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRBbm5vdGF0aW9uLFxufSBmcm9tICcuL2VudW1zJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgQ2hhcnRIZWxwZXIgfSBmcm9tICcuL3V0aWxzL2hlbHBlcnMnO1xuXG4vLyBHdWFyZHNcbmltcG9ydCB7IENoYXJ0VHlwZUd1YXJkIH0gZnJvbSAnLi91dGlscy9ndWFyZHMnO1xuXG4vL01vZGVsc1xuaW1wb3J0IHtcbiAgICBJQ2hhcnREYXRhLFxuICAgIElMaW5lRGF0YXNldCxcbiAgICBJQ2hhcnRDb25maWd1cmF0aW9uLFxuICAgIElCYXNlRGF0YXNldCxcbiAgICBJQ2hhcnRBbm5vdGF0aW9uLFxuICAgIElDaGFydERhdGFzZXRIb3ZlcixcbiAgICBJQ2hhcnRDZW50ZXJMYWJlbCxcbiAgICBJQ2hhcnRMZWdlbmRDb25maWcsXG59IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICdjaGFydC5qcy9kaXN0L3BsdWdpbnMvcGx1Z2luLnRvb2x0aXAnO1xuXG4vL1NlcnZpY2VzXG5pbXBvcnQgeyBDaGFydE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2EtY2hhcnQtbWFuYWdlci9zZXJ2aWNlcyc7XG5cbi8vIENvbnN0YW50c1xuaW1wb3J0IHsgQ2hhcnRDb25zdGFudHMgfSBmcm9tICcuL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIF9EZWVwUGFydGlhbEFycmF5LFxuICAgIF9EZWVwUGFydGlhbE9iamVjdCxcbn0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy91dGlscyc7XG5cbi8vIFBpcGVzXG5pbXBvcnQgeyBUaG91c2FuZFNlcGFyYXRvclBpcGUsIFVuaXRQb3NpdGlvblBpcGUgfSBmcm9tICcuLi8uLi9waXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNhLWNoYXJ0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQW5ndWxhclN2Z0ljb25Nb2R1bGUsXG4gICAgICAgIFVuaXRQb3NpdGlvblBpcGUsXG4gICAgICAgIFRob3VzYW5kU2VwYXJhdG9yUGlwZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDYUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnY2hhcnRDYW52YXMnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hhcnRDYW52YXMhOiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KCkgbGVnZW5kRGF0YSE6IElDaGFydExlZ2VuZENvbmZpZztcbiAgICBASW5wdXQoKSBjaGFydElkITogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNoYXJ0RGF0YXNldEhvdmVyKHZhbHVlOiBJQ2hhcnREYXRhc2V0SG92ZXIgfCBudWxsKSB7XG4gICAgICAgIGlmICh2YWx1ZSkgdGhpcy51cGRhdGVEYXRhc2V0QmFja2dyb3VuZE9uSG92ZXIodmFsdWUpO1xuICAgIH1cbiAgICBASW5wdXQoKSBzZXQgY2hhcnRDb25maWcodmFsdWU6IElDaGFydENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcgPSB7IC4uLnZhbHVlIH07XG5cbiAgICAgICAgdGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSA9XG4gICAgICAgICAgICAoISF0aGlzLl9jaGFydENvbmZpZz8uY2hhcnREYXRhPy5kYXRhc2V0cz8ubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0RGF0YT8uZGF0YXNldHM/LnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIChpdGVtOiBJQmFzZURhdGFzZXQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuc29tZSgodmFsdWU6IG51bWJlciB8IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdmFsdWVbMF0gIT09IG51bGwgfHwgdmFsdWVbMV0gIT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZSAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkpID8/XG4gICAgICAgICAgICBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUpIHRoaXMudXBkYXRlQ2hhcnQoKTtcbiAgICB9XG4gICAgQElucHV0KCkgc2V0IHNlbGVjdGVkSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuY2hhcnQgfHwgIXRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUpIHJldHVybjtcblxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHRoaXMuZm9jdXNEb3VnaG51dEFyYyh2YWx1ZSk7XG4gICAgICAgIGVsc2UgdGhpcy5zZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk7XG5cbiAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgaG92ZXJlZEluZGV4OiBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHByaXZhdGUgY2hhcnQhOiBDaGFydDtcbiAgICBwcml2YXRlIGNoYXJ0Q29udGV4dCE6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICBwcml2YXRlIHBsdWdpbnM/OiBQbHVnaW48Q2hhcnRUeXBlLCBBbnlPYmplY3Q+W107XG4gICAgcHJpdmF0ZSBhcmVBbmltYXRpb25zQ29tcGxlYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2hvdmVyZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBsYXN0SG92ZXJlZEluZGV4OiBudW1iZXIgPSAtMTtcblxuICAgIHB1YmxpYyBfY2hhcnRDb25maWchOiBJQ2hhcnRDb25maWd1cmF0aW9uO1xuICAgIHB1YmxpYyBpc0NoYXJ0RGF0YUF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNoYXJ0TWFuYWdlclNlcnZpY2U/OiBDaGFydE1hbmFnZXJTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQW5ub3RhdGlvblBsdWdpbigpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNoYXJ0TWFuYWdlclNlcnZpY2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDaGFydE1hbmFnZXJTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZS5ob3ZlclN0YXRlJFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBpbmRleCwgY2hhcnRJZCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYXJ0SWQgIT09IHRoaXMuY2hhcnRJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTogdm9pZCB7XG4gICAgICAgIENoYXJ0LnJlZ2lzdGVyKGFubm90YXRpb25QbHVnaW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVEYXRhc2V0QmFja2dyb3VuZE9uSG92ZXIoXG4gICAgICAgIGNoYXJ0RGF0YXNldEhvdmVyOiBJQ2hhcnREYXRhc2V0SG92ZXJcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0IHx8ICF0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMpIHJldHVybjtcblxuICAgICAgICBpZiAoY2hhcnREYXRhc2V0SG92ZXIuaXNIb3ZlcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50ID0gQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnQoXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydENhbnZhcyxcbiAgICAgICAgICAgICAgICBjaGFydERhdGFzZXRIb3Zlci5jb2xvcixcbiAgICAgICAgICAgICAgICBjaGFydERhdGFzZXRIb3Zlci5jb2xvcixcbiAgICAgICAgICAgICAgICAwLjYsXG4gICAgICAgICAgICAgICAgMC4xLFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgPSB0aGlzLmNoYXJ0Py5kYXRhPy5kYXRhc2V0cz8ubWFwKFxuICAgICAgICAgICAgICAgIChkYXRhc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhc2V0LmhpZGRlbikgcmV0dXJuIGRhdGFzZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldD8ubGFiZWw/LnRvVXBwZXJDYXNlKCkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFydERhdGFzZXRIb3Zlcj8ubGFiZWw/LnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBob3ZlcmREYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGdyYWRpZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjaGFydERhdGFzZXRIb3Zlci5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG92ZXJkRGF0YVNldDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvcmRlckNvbG9yV2l0aE9wYWNpdHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmNoYW5nZU9wYWNpdHlPZlJnYk9yUmdiYShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5ib3JkZXJDb2xvciBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGJvcmRlckNvbG9yV2l0aE9wYWNpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgPSB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMubWFwKFxuICAgICAgICAgICAgICAgIChkYXRhc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQ29sb3IgPSBkYXRhc2V0LmJvcmRlckNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDaGFydEhlbHBlci5jaGFuZ2VPcGFjaXR5T2ZSZ2JPclJnYmEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5ib3JkZXJDb2xvciBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IG9yaWdpbmFsQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuIGRhdGFzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCA9IHRoaXMuY2hhcnRDYW52YXM/Lm5hdGl2ZUVsZW1lbnQ/LmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAgICAgdGhpcy5zZXRDaGFydE9wdGlvbnNQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMuc2V0Q2hhcnREYXRhUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLnNldENoYXJ0UGx1Z2luc1Byb3BlcnRpZXMoKTtcblxuICAgICAgICBpZiAodGhpcy5jaGFydCkgdGhpcy5jaGFydC5kZXN0cm95KCk7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXplQW5ub3RhdGlvblBsdWdpbigpO1xuICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5ET1VHSE5VVClcbiAgICAgICAgICAgIENoYXJ0Lm92ZXJyaWRlcy5kb3VnaG51dC5jdXRvdXQgPSAnODglJztcblxuICAgICAgICB0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0KHRoaXMuY2hhcnRDb250ZXh0LCB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnRUeXBlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0RGF0YSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydE9wdGlvbnMsXG4gICAgICAgICAgICBwbHVnaW5zOiB0aGlzLnBsdWdpbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5fY2hhcnRDb25maWcuaXNEYXNoYm9hcmRDaGFydClcbiAgICAgICAgICAgIHRoaXMuY2hhcnQuY29uZmlnLmRhdGEuZGF0YXNldHMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0RGF0YT8uZGF0YXNldHM/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW06IElCYXNlRGF0YXNldCwgaW5keDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb2ludENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludEJhY2tncm91bmRDb2xvcjogQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLldISVRFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Qm9yZGVyV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRSYWRpdXM6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNoYXJ0QW5ub3RhdGlvbnMoaXRlbSwgaW5keCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHlTY2FsZSA9IHRoaXMuY2hhcnQuc2NhbGVzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVDaGFydEV2ZW50UHJvcGVydGllcy5ZX0FYSVNfMFxuICAgICAgICAgICAgICAgICAgICAgICAgXSBhcyBDYXRlZ29yeVNjYWxlIHwgTGluZWFyU2NhbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IgJiYgaXRlbT8uY29sb3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0/LmNvbG9yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhc2V0Q29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRCb3JkZXJDb2xvcjogaXRlbS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wb2ludENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogaXRlbT8uZmlsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVRcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGl0ZW0uYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5zaGlmdFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFzZXRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvcjIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yICE9PSBpdGVtPy5jb2xvcjJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDYW52YXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGlmdFZhbHVlUHg6IG51bWJlciA9IHlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2hpZnRWYWx1ZSB8fCAwXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRWYWx1ZUFkanVzdGVkOiBudW1iZXIgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0VmFsdWVQeCAvIHlTY2FsZS5tYXhIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yMTogc3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbG9yIHx8IENoYXJ0Q29uc3RhbnRzLlNUUklOR19FTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yMjogc3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbG9yMiB8fCBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvcmRlckNvbG9yOiBDYW52YXNHcmFkaWVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnRXaXRoU2hpZnRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlTY2FsZS5tYXhIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFZhbHVlQWRqdXN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucG9pbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRCb3JkZXJDb2xvcjogYm9yZGVyQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFydEhlbHBlci5jcmVhdGVHcmFkaWVudFdpdGhTaGlmdFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5U2NhbGUubWF4SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRWYWx1ZUFkanVzdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jaGFydCkgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2hhcnRPcHRpb25zUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLmxhYmVscztcblxuICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMgPSB7XG4gICAgICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWFpbnRhaW5Bc3BlY3RSYXRpbzogZmFsc2UsXG4gICAgICAgICAgICBjbGlwOiBmYWxzZSxcbiAgICAgICAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmVBbmltYXRpb25zQ29tcGxlYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25Qcm9ncmVzczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZUFuaW1hdGlvbnNDb21wbGVhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0b3A6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBlQ2hhcnRUeXBlc1N0cmluZy5ET1VHSE5VVFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gOFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkJBUiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcudmVydGljYWx5QWxpZ25CYXJDaGFydFdpdGhMaW5lQ2FydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkJBUiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcudmVydGljYWx5QWxpZ25CYXJDaGFydFdpdGhMaW5lQ2FydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgICAgICBsZWdlbmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICAgICAgeDoge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxuICAgICAgICAgICAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENoYXJ0Q29sb3JzU3RyaW5nRW51bS5YX0FYSVNfTEFCRUxfQ09MT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogMTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5OiBDaGFydEZvbnRQcm9wZXJ0aWVzU3RyaW5nRW51bS5GT05UX0ZBTUlMWV9NT05UU0VSUkFULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogQ2hhcnRGb250UHJvcGVydGllc1N0cmluZ0VudW0uRk9OVF9XRUlHSFRfQk9MREVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Ta2lwOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1NraXBQYWRkaW5nOiAxMixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluUm90YXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0xhYmVsIHdyaXR0ZW4gaW4gMiBsaW5lcywgd2lsbCBiZSBhZGp1c3RlZCB3aXRoIG5ldyBkZXNpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICApOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBsYWJlbHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpTGluZUxhYmVsID0gbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsYWJlbC5zcGxpdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG11bHRpTGluZUxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogdGhpcy5fY2hhcnRDb25maWcuc2hvd1hBeGlzTGFiZWxzLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeToge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4OiBDaGFydEhlbHBlci5jYWxjdWxhdGVEYXRhc2V0TWF4VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydERhdGEuZGF0YXNldHMgYXMgYW55IC8vbGVhdmUgdGhpcyBhcyBhbnlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uSG92ZXI6IChldmVudDogQ2hhcnRFdmVudCwgaXRlbTogQWN0aXZlRWxlbWVudFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmhhc1ZlcnRpY2FsRGFzaGVkQW5ub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVZlcnRpY2FsRGFzaGVkTGluZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZlcnRpY2FsRGFzaGVkQW5ub3RhdGlvbkxpbmUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1bMF0/LmluZGV4ID49IDBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5mb2N1c0RvdWdobnV0QXJjKGl0ZW1bMF0/LmluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNldE9yaWdpbmFsRG91Z2hudXRBcmNzQ29sb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChpdGVtWzBdPy5pbmRleCB8fCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0RvdWdobnV0QXJjKGluZGV4OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVQgfHxcbiAgICAgICAgICAgIGluZGV4ID09PSB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbMF0uZGF0YS5sZW5ndGggLSAxXG4gICAgICAgIClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgY29sb3JzOiBzdHJpbmdbXSA9IHRoaXMuY2hhcnQ/LmRhdGE/LmRhdGFzZXRzWzBdXG4gICAgICAgICAgICA/LmJhY2tncm91bmRDb2xvciBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgdXBkYXRlZENvbG9yczogc3RyaW5nW10gPSBjb2xvcnMubWFwKFxuICAgICAgICAgICAgKGNvbG9yOiBzdHJpbmcsIGluZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmR4ID09PSBpbmRleCkgcmV0dXJuIGNvbG9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gQ2hhcnRIZWxwZXIuY29udmVydFJnYlRvUmdiYShjb2xvciwgMC4yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVkVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdLmJhY2tncm91bmRDb2xvciA9IHVwZGF0ZWRDb2xvcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSBlQ2hhcnRUeXBlc1N0cmluZy5ET1VHSE5VVCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGNvbG9yczogc3RyaW5nW10gPSB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbMF1cbiAgICAgICAgICAgIC5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nW107XG5cbiAgICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdLmJhY2tncm91bmRDb2xvciA9IFtcbiAgICAgICAgICAgIC4uLmNvbG9ycy5tYXAoKGNvbG9yOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ2hhcnRIZWxwZXIucmdiVG9SZ2JhKGNvbG9yLCAxKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgc2V0Q2hhcnREYXRhUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gZUNoYXJ0VHlwZXNTdHJpbmcuTElORSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLmRhdGFzZXRzLmZvckVhY2goKGRhdGFzZXQpID0+IHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0Lm9yZGVyID0gZGF0YXNldC5vcmRlcjtcbiAgICAgICAgICAgICAgICBpZiAoQ2hhcnRUeXBlR3VhcmQuaXNMaW5lRGF0YXNldChkYXRhc2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnRlbnNpb24gPSBkYXRhc2V0LnRlbnNpb24gPz8gMC41O1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LmN1YmljSW50ZXJwb2xhdGlvbk1vZGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5jdWJpY0ludGVycG9sYXRpb25Nb2RlID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBDdWJpY0ludGVycG9sYXRpb25TdHJpbmdFbnVtLk1PTk9UT05FO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50Qm9yZGVyQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEJvcmRlckNvbG9yID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBDaGFydENvbG9yc1N0cmluZ0VudW0uVFJBTlNQQVJFTlQ7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEJhY2tncm91bmRDb2xvciA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLlRSQU5TUEFSRU5UO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50SG92ZXJCYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLldISVRFO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50SG92ZXJCb3JkZXJDb2xvciA9IGRhdGFzZXQuYm9yZGVyQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCb3JkZXJXaWR0aCA9IGRhdGFzZXQucG9pbnRCb3JkZXJXaWR0aCA/PyAzO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50SG92ZXJSYWRpdXMgPSA0O1xuICAgICAgICAgICAgICAgICAgICAvL2RhdGFzZXQucG9pbnRIb3ZlclJhZGl1cyA9IDg7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRIb3ZlckJvcmRlcldpZHRoID0gMztcblxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnNwYW5HYXBzID0gZGF0YXNldC5zcGFuR2FwcyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5zaG93TGluZSA9IGRhdGFzZXQuc2hvd0xpbmUgPz8gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0TXVsdGlwbGVZQXhpcyh0aGlzLl9jaGFydENvbmZpZy5jaGFydERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDaGFydFBsdWdpbnNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IENoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5ISUdITElHSFRfU0VHTUVOVF9PTl9IT1ZFUixcbiAgICAgICAgICAgICAgICBhZnRlckV2ZW50OiAoY2hhcnQsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQuZXZlbnQubmF0aXZlIGFzIE1vdXNlRXZlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZXZlbnQudHlwZSA9PT0gQ2hhcnRFdmVudFR5cGVzU3RyaW5nRW51bS5NT1VTRV9PVVRcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3QgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNb3VzZU91dHNpZGVDaGFydCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WCA8IGJvdW5kaW5nUmVjdC5sZWZ0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WCA+IGJvdW5kaW5nUmVjdC5yaWdodCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFkgPCBib3VuZGluZ1JlY3QudG9wIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WSA+IGJvdW5kaW5nUmVjdC5ib3R0b207XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01vdXNlT3V0c2lkZUNoYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2U/LnNldEhvdmVyU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmVBbmRGb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFydENvbmZpZy5zaG93VG9vbHRpcEJhY2tncm91bmQpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3QgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WCAtIGJvdW5kaW5nUmVjdC5sZWZ0O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQgfSA9IHRoaXMuY2hhcnQuY2hhcnRBcmVhO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPCBsZWZ0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID4gcmlnaHRcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydE1hbmFnZXJTZXJ2aWNlPy5zZXRIb3ZlclN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydElkXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC5kcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB4U2NhbGUgPSB0aGlzLmNoYXJ0LnNjYWxlc1tcbiAgICAgICAgICAgICAgICAgICAgICAgIEVDaGFydEV2ZW50UHJvcGVydGllcy5YXG4gICAgICAgICAgICAgICAgICAgIF0gYXMgQ2F0ZWdvcnlTY2FsZSB8IExpbmVhclNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpY2tQb3NpdGlvbnMgPSB4U2NhbGUudGlja3MubWFwKCh0aWNrKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgeFNjYWxlLmdldFBpeGVsRm9yVmFsdWUodGljay52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50Qm91bmRhcmllcyA9IHRpY2tQb3NpdGlvbnMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRpY2tQb3MsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdEJvdW5kYXJ5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbGVmdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodGlja1BvcyArIHRpY2tQb3NpdGlvbnNbaW5kZXggLSAxXSkgLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0Qm91bmRhcnkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9PT0gdGlja1Bvc2l0aW9ucy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh0aWNrUG9zICsgdGlja1Bvc2l0aW9uc1tpbmRleCArIDFdKSAvIDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBsZWZ0Qm91bmRhcnksIHJpZ2h0Qm91bmRhcnkgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdIb3ZlcmVkSW5kZXggPSBzZWdtZW50Qm91bmRhcmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAoYm91bmRhcnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA+PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeS5sZWZ0Qm91bmRhcnkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlIDwgYm91bmRhcnkucmlnaHRCb3VuZGFyeVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdIb3ZlcmVkSW5kZXggIT09IHRoaXMuX2hvdmVyZWRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdIb3ZlcmVkSW5kZXggPT09IC0xID8gbnVsbCA6IG5ld0hvdmVyZWRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZT8uc2V0SG92ZXJTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRCb3VuZGFyaWVzW3RoaXMuX2hvdmVyZWRJbmRleCBhcyBudW1iZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC5kcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgYmVmb3JlRHJhdzogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faG92ZXJlZEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRBcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlczogeyB4OiB4U2NhbGUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSB0aGlzLmNoYXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBDaGFydEhlbHBlci5oaWdobGlnaHRTZWdtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhTY2FsZSBhcyBDYXRlZ29yeVNjYWxlIHwgTGluZWFyU2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRBcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZURhdGEgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydERhdGE/LmRhdGFzZXRzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLl9ob3ZlcmVkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC5zZXRBY3RpdmVFbGVtZW50cyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVEYXRhIGFzIEFjdGl2ZURhdGFQb2ludFtdXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IENoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5CT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlQsXG4gICAgICAgICAgICAgICAgYmVmb3JlRHJhdzogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWc/LnNob3dCb3R0b21MaW5lT25MaW5lQ2hhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFydEFyZWEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzOiB7IHg6IHhTY2FsZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9IHRoaXMuY2hhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhc2V0ID0gZGF0YS5kYXRhc2V0c1swXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0SW5kZXggPSBkYXRhc2V0LmRhdGEubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RWYWx1ZSA9IGRhdGFzZXQuZGF0YVtmaXJzdEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGRhdGFzZXQuZGF0YVtsYXN0SW5kZXhdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhTdGFydCA9IHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGZpcnN0SW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeEVuZCA9IHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGxhc3RJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeUJvdHRvbSA9IGNoYXJ0QXJlYS5ib3R0b207XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5CT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlRfQ09MT1I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oeFN0YXJ0LCB5Qm90dG9tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHhFbmQsIHlCb3R0b20pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVQpXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wbHVnaW5zLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICdkb3VnaG51dC1sYWJlbCcsXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZURhdGFzZXREcmF3OiAoY2hhcnQ6IENoYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jZW50ZXJMYWJlbHM/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWw6IElDaGFydENlbnRlckxhYmVsLCBpbmR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuZHJhd0RvdWdobnV0TGVnZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5keCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRUb3A6IGxhYmVsLnBvc2l0aW9uPy50b3AgfHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLmZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwuY29sb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2hhcnRBbm5vdGF0aW9ucyhpdGVtOiBJQmFzZURhdGFzZXQsIGluZHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2NoYXJ0Q29uZmlnLmFubm90YXRpb25zPy5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5hbm5vdGF0aW9ucz8uZm9yRWFjaChcbiAgICAgICAgICAgIChhbm5vdGF0aW9uOiBJQ2hhcnRBbm5vdGF0aW9uLCBrZXk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5wbHVnaW5zID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMucGx1Z2lucyxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zPy5wbHVnaW5zPy5hbm5vdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnM/LnBsdWdpbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5hbm5vdGF0aW9uPy5hbm5vdGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYCR7aXRlbS5sYWJlbH0tJHtpbmR4fS0ke2tleX1gXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24uaWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBhbm5vdGF0aW9uLSR7aW5keH0tJHtrZXl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYW5ub3RhdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZUlEOiBhbm5vdGF0aW9uLmF4aXMgfHwgaXRlbS55QXhpc0lELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYW5ub3RhdGlvbi52YWx1ZSB8fCBpdGVtLnNoaWZ0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5jb2xvciB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLkJPUkRFUl9CT1RUT01fTElORV9DSEFSVF9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IGFubm90YXRpb24uYm9yZGVyV2lkdGggfHwgMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyRGFzaDogYW5ub3RhdGlvbi5ib3JkZXJEYXNoIHx8IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TXVsdGlwbGVZQXhpcyhjaGFydERhdGE6IElDaGFydERhdGE8SUxpbmVEYXRhc2V0Pik6IHZvaWQge1xuICAgICAgICBjaGFydERhdGEuZGF0YXNldHMuZm9yRWFjaCgoZGF0YXNldCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBkYXRhc2V0LnR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkxJTkUgfHxcbiAgICAgICAgICAgICAgICBkYXRhc2V0LnR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkJBUlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeUF4aXNJRCA9IHRoaXMuX2NoYXJ0Q29uZmlnLmlzTXVsdGlZQXhpc1xuICAgICAgICAgICAgICAgICAgICA/IGB5LWF4aXMtJHtpbmRleH1gXG4gICAgICAgICAgICAgICAgICAgIDogZGF0YXNldC55QXhpc0lEIHx8ICd5LWF4aXMtMCc7XG5cbiAgICAgICAgICAgICAgICAvLyBEZXRlY3QgaWYgdGhlIGRhdGFzZXQgaXMgYWxsIDBcbiAgICAgICAgICAgICAgICBjb25zdCBpc0FsbFplcm9EYXRhc2V0ID0gKGRhdGFzZXQuZGF0YSBhcyBudW1iZXJbXSkuZXZlcnkoXG4gICAgICAgICAgICAgICAgICAgICh2YWw6IG51bWJlcikgPT4gdmFsID09PSAwXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGxldCBtaW5WYWx1ZSA9IENoYXJ0SGVscGVyLmNhbGN1bGF0ZU1pblZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LmRhdGEgYXMgbnVtYmVyW11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxldCBtYXhWYWx1ZSA9IENoYXJ0SGVscGVyLmNhbGN1bGF0ZU1heFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LmRhdGEgYXMgbnVtYmVyW11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSBtYXhWYWx1ZSAqIDAuMDM7XG5cbiAgICAgICAgICAgICAgICAvLyBBZGp1c3Qgc2NhbGluZyBmb3IgYWxsIDAgZGF0YXNldHNcbiAgICAgICAgICAgICAgICBpZiAoaXNBbGxaZXJvRGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIG1heFZhbHVlID0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9PT0gbWluVmFsdWUgPyBtaW5WYWx1ZSAtIDAuMSA6IG1pblZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9PT0gbWluVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1heFZhbHVlICsgMC4xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtYXhWYWx1ZSArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnNjYWxlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnNjYWxlcyxcbiAgICAgICAgICAgICAgICAgICAgW3lBeGlzSURdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBtaW5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogbWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja2VkOiB0aGlzLl9jaGFydENvbmZpZy5pc1N0YWNrZWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNoYXJ0RGF0YS5kYXRhc2V0c1tpbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgIHlBeGlzSUQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFubm90YXRpb25zID1cbiAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydE9wdGlvbnM/LnBsdWdpbnM/LmFubm90YXRpb24/LmFubm90YXRpb25zO1xuXG4gICAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLlhfREFTSEVEO1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9ucylcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnRPcHRpb25zPy5wbHVnaW5zPy5hbm5vdGF0aW9uXG4gICAgICAgICAgICAgICAgPy5hbm5vdGF0aW9ucz8uW2tleSBhcyBrZXlvZiB0eXBlb2YgYW5ub3RhdGlvbnNdO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRWZXJ0aWNhbERhc2hlZEFubm90YXRpb25MaW5lKFxuICAgICAgICBldmVudDogQ2hhcnRFdmVudCxcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBsZWZ0LCByaWdodCB9ID0gdGhpcy5jaGFydC5jaGFydEFyZWE7XG5cbiAgICAgICAgY29uc3QgeFNjYWxlID0gdGhpcy5jaGFydC5zY2FsZXNbRUNoYXJ0RXZlbnRQcm9wZXJ0aWVzLlhdIGFzXG4gICAgICAgICAgICB8IENhdGVnb3J5U2NhbGVcbiAgICAgICAgICAgIHwgTGluZWFyU2NhbGU7XG5cbiAgICAgICAgY29uc3QgdGlja1Bvc2l0aW9ucyA9IHRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydERhdGE/LmxhYmVscz8ubWFwKFxuICAgICAgICAgICAgKGxhYmVsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geFNjYWxlLmdldFBpeGVsRm9yVmFsdWUoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzZWdtZW50Qm91bmRhcmllcyA9IHRpY2tQb3NpdGlvbnMubWFwKCh0aWNrUG9zLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGVmdEJvdW5kYXJ5ID1cbiAgICAgICAgICAgICAgICBpbmRleCA9PT0gMCA/IGxlZnQgOiAodGlja1BvcyArIHRpY2tQb3NpdGlvbnNbaW5kZXggLSAxXSkgLyAyO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRCb3VuZGFyeSA9XG4gICAgICAgICAgICAgICAgaW5kZXggPT09IHRpY2tQb3NpdGlvbnMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICA/IHJpZ2h0XG4gICAgICAgICAgICAgICAgICAgIDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4ICsgMV0pIC8gMjtcblxuICAgICAgICAgICAgcmV0dXJuIHsgbGVmdEJvdW5kYXJ5LCByaWdodEJvdW5kYXJ5IH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQubmF0aXZlIGFzIE1vdXNlRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID0gdGhpcy5jaGFydC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPVxuICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WCAtIGJvdW5kaW5nUmVjdC5sZWZ0O1xuXG4gICAgICAgIGNvbnN0IG5ld0hvdmVyZWRJbmRleCA9IHNlZ21lbnRCb3VuZGFyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChib3VuZGFyeSkgPT5cbiAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID49IGJvdW5kYXJ5LmxlZnRCb3VuZGFyeSAmJlxuICAgICAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPCBib3VuZGFyeS5yaWdodEJvdW5kYXJ5XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG5ld0hvdmVyZWRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMucGx1Z2lucyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMucGx1Z2lucyxcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBbQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLlhfREFTSEVEXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLkVDaGFydEFubm90YXRpb24uWF9EQVNIRUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5ld0hvdmVyZWRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLkJPUkRFUl9CT1RUT01fTElORV9DSEFSVF9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleC5lbWl0KG5ld0hvdmVyZWRJbmRleCk7XG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVZlcnRpY2FsRGFzaGVkTGluZUFuZEZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleC5lbWl0KG51bGwpO1xuICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuaGFzVmVydGljYWxEYXNoZWRBbm5vdGF0aW9uKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCJAaWYgKGlzQ2hhcnREYXRhQXZhaWxhYmxlKSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgbGVnZW5kO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIGNvbmZpZzogbGVnZW5kRGF0YSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPGRpdlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICBoZWlnaHQ6IF9jaGFydENvbmZpZz8uaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgIHdpZHRoOiBfY2hhcnRDb25maWc/LndpZHRoICsgJyUnLFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxjYW52YXMgI2NoYXJ0Q2FudmFzPjwvY2FudmFzPlxuICAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgIGhlaWdodDogX2NoYXJ0Q29uZmlnPy5oZWlnaHQgKyAncHgnLFxuICAgICAgICAgICAgd2lkdGg6IF9jaGFydENvbmZpZz8ud2lkdGggKyAnJScsXG4gICAgICAgIH1cIlxuICAgID5cbiAgICAgICAgPHN2Zy1pY29uXG4gICAgICAgICAgICBbc3JjXT1cIl9jaGFydENvbmZpZy5ub0RhdGFJbWFnZVwiXG4gICAgICAgICAgICBhbHQ9XCJObyBkYXRhIGF2YWlsYWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5vLWRhdGEtc3ZnXCJcbiAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgPC9kaXY+XG59XG48bmctdGVtcGxhdGUgI2xlZ2VuZCBsZXQtY29uZmlnPVwiY29uZmlnXCI+XG4gICAgQGlmIChjb25maWc/LmRhdGEpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uZmlnLmhhc0hpZ2hsaWdodGVkQmFja2dyb3VuZCAmJiAnY29sb3JlZC1iYWNrZ3JvdW5kJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoY29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10aXRsZSBmb250LXNpemUtMTQgdGEtZm9udC1leHRyYS1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC13cmFwcGVyIGQtZmxleFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICBpdGVtIG9mIGNvbmZpZy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAkaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1jb250ZW50LWNlbnRlciB0ZXh0LXNpemUtMTEgdGEtZm9udC1ib2xkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtPy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaXNMaW5lSW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbGluZS1pbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnY2lyY2xlLWluZGljYXRvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBiYWNrZ3JvdW5kOiBpdGVtPy5jb2xvciB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zaXplLTE4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0/LnZhbHVlICE9PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpdGVtPy52YWx1ZSB8IHRob3VzYW5kU2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCB1bml0UG9zaXRpb246IGl0ZW0/LnVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19