@sumaris-net/ngx-components 2.6.17 → 4.0.0-rc1

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 (721) hide show
  1. package/esm2022/public_api.mjs +337 -0
  2. package/{esm2020 → esm2022}/src/app/admin/admin-routing.module.mjs +8 -8
  3. package/{esm2020 → esm2022}/src/app/admin/admin.module.mjs +11 -11
  4. package/esm2022/src/app/admin/services/filter/person.filter.mjs +68 -0
  5. package/esm2022/src/app/admin/services/person.service.mjs +174 -0
  6. package/esm2022/src/app/admin/services/validator/person.validator.mjs +72 -0
  7. package/esm2022/src/app/admin/users/users.mjs +273 -0
  8. package/esm2022/src/app/admin/users/users.module.mjs +58 -0
  9. package/esm2022/src/app/core/about/about.modal.mjs +84 -0
  10. package/{esm2020 → esm2022}/src/app/core/about/about.module.mjs +9 -9
  11. package/{esm2020 → esm2022}/src/app/core/account/account.module.mjs +22 -22
  12. package/esm2022/src/app/core/account/account.page.mjs +335 -0
  13. package/esm2022/src/app/core/account/new-token.modal.mjs +125 -0
  14. package/esm2022/src/app/core/account/token.table.mjs +141 -0
  15. package/esm2022/src/app/core/auth/auth.form.mjs +140 -0
  16. package/esm2022/src/app/core/auth/auth.modal.mjs +76 -0
  17. package/{esm2020 → esm2022}/src/app/core/auth/auth.module.mjs +16 -16
  18. package/{esm2020 → esm2022}/src/app/core/core.module.mjs +87 -87
  19. package/esm2022/src/app/core/core.testing.module.mjs +93 -0
  20. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +109 -0
  21. package/{esm2020 → esm2022}/src/app/core/form/buttons/form-buttons-bar.module.mjs +10 -10
  22. package/esm2022/src/app/core/form/entity/editor.class.mjs +713 -0
  23. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +436 -0
  24. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +724 -0
  25. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +24 -0
  26. package/{esm2020 → esm2022}/src/app/core/form/entity/entity.module.mjs +11 -11
  27. package/esm2022/src/app/core/form/form.class.mjs +353 -0
  28. package/{esm2020 → esm2022}/src/app/core/form/form.module.mjs +30 -30
  29. package/{esm2020 → esm2022}/src/app/core/form/form.utils.mjs +69 -60
  30. package/esm2022/src/app/core/form/list/list.form.mjs +233 -0
  31. package/{esm2020 → esm2022}/src/app/core/form/list/list.module.mjs +10 -10
  32. package/esm2022/src/app/core/form/properties/properties.form.mjs +143 -0
  33. package/{esm2020 → esm2022}/src/app/core/form/properties/properties.module.mjs +13 -13
  34. package/esm2022/src/app/core/form/properties/properties.table.mjs +269 -0
  35. package/esm2022/src/app/core/form/properties/property.validator.mjs +24 -0
  36. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +95 -0
  37. package/{esm2020 → esm2022}/src/app/core/form/properties/testing/properties-form.testing.module.mjs +11 -11
  38. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +73 -0
  39. package/{esm2020 → esm2022}/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -10
  40. package/esm2022/src/app/core/form/text-popover/text-form.component.mjs +97 -0
  41. package/{esm2020 → esm2022}/src/app/core/form/text-popover/text-popover.component.mjs +26 -20
  42. package/{esm2020 → esm2022}/src/app/core/form/text-popover/text-popover.module.mjs +12 -12
  43. package/{esm2020 → esm2022}/src/app/core/graphql/graphql.module.mjs +5 -5
  44. package/esm2022/src/app/core/graphql/graphql.service.mjs +787 -0
  45. package/{esm2020 → esm2022}/src/app/core/graphql/graphql.utils.mjs +2 -1
  46. package/esm2022/src/app/core/home/home.mjs +283 -0
  47. package/esm2022/src/app/core/home/home.module.mjs +51 -0
  48. package/esm2022/src/app/core/icon/icon.component.mjs +40 -0
  49. package/{esm2020 → esm2022}/src/app/core/icon/icon.module.mjs +7 -7
  50. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +358 -0
  51. package/{esm2020 → esm2022}/src/app/core/install/install-upgrade-card.module.mjs +10 -10
  52. package/esm2022/src/app/core/menu/menu.component.mjs +260 -0
  53. package/esm2022/src/app/core/menu/menu.model.mjs +268 -0
  54. package/esm2022/src/app/core/menu/menu.module.mjs +52 -0
  55. package/esm2022/src/app/core/menu/menu.service.mjs +665 -0
  56. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +109 -0
  57. package/{esm2020 → esm2022}/src/app/core/menu/testing/menu-other.testing.mjs +4 -4
  58. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +122 -0
  59. package/{esm2020 → esm2022}/src/app/core/menu/testing/menu.testing.module.mjs +12 -12
  60. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +29 -0
  61. package/{esm2020 → esm2022}/src/app/core/offline/update-offline-mode-card.module.mjs +10 -10
  62. package/esm2022/src/app/core/peer/select-peer.modal.mjs +192 -0
  63. package/{esm2020 → esm2022}/src/app/core/peer/select-peer.module.mjs +13 -13
  64. package/esm2022/src/app/core/register/register-confirm.page.mjs +88 -0
  65. package/esm2022/src/app/core/register/register.form.mjs +194 -0
  66. package/esm2022/src/app/core/register/register.modal.mjs +55 -0
  67. package/{esm2020 → esm2022}/src/app/core/register/register.module.mjs +13 -13
  68. package/esm2022/src/app/core/services/account.service.mjs +1217 -0
  69. package/esm2022/src/app/core/services/auth-guard.service.mjs +76 -0
  70. package/esm2022/src/app/core/services/base-entity-service.class.mjs +482 -0
  71. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +224 -0
  72. package/esm2022/src/app/core/services/base58.mjs +79 -0
  73. package/{esm2020 → esm2022}/src/app/core/services/config/core.config.mjs +4 -4
  74. package/esm2022/src/app/core/services/config.service.mjs +365 -0
  75. package/esm2022/src/app/core/services/crypto.service.mjs +107 -0
  76. package/esm2022/src/app/core/services/local-settings.service.mjs +468 -0
  77. package/esm2022/src/app/core/services/model/account.model.mjs +153 -0
  78. package/esm2022/src/app/core/services/model/config.model.mjs +105 -0
  79. package/esm2022/src/app/core/services/model/department.model.mjs +33 -0
  80. package/esm2022/src/app/core/services/model/entity.decorators.mjs +97 -0
  81. package/esm2022/src/app/core/services/model/entity.model.mjs +228 -0
  82. package/esm2022/src/app/core/services/model/peer.model.mjs +82 -0
  83. package/esm2022/src/app/core/services/model/person.model.mjs +109 -0
  84. package/esm2022/src/app/core/services/model/referential.model.mjs +185 -0
  85. package/esm2022/src/app/core/services/model/token.model.mjs +52 -0
  86. package/esm2022/src/app/core/services/network.service.mjs +608 -0
  87. package/{esm2020 → esm2022}/src/app/core/services/pipes/account.pipes.mjs +9 -9
  88. package/{esm2020 → esm2022}/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
  89. package/{esm2020 → esm2022}/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
  90. package/{esm2020 → esm2022}/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
  91. package/esm2022/src/app/core/services/platform.service.mjs +546 -0
  92. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +434 -0
  93. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +458 -0
  94. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +25 -0
  95. package/esm2022/src/app/core/services/testing/referential.validator.mjs +46 -0
  96. package/esm2022/src/app/core/services/validator/account.validator.mjs +45 -0
  97. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +49 -0
  98. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +67 -0
  99. package/{esm2020 → esm2022}/src/app/core/services/validator/user-settings.validator.mjs +4 -4
  100. package/{esm2020 → esm2022}/src/app/core/services/validator/user-token.validator.mjs +4 -4
  101. package/{esm2020 → esm2022}/src/app/core/settings/settings.module.mjs +9 -9
  102. package/esm2022/src/app/core/settings/settings.page.mjs +328 -0
  103. package/esm2022/src/app/core/table/actions-column.component.mjs +115 -0
  104. package/esm2022/src/app/core/table/async-table.class.mjs +1735 -0
  105. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +386 -0
  106. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +401 -0
  107. package/esm2022/src/app/core/table/memory-table.class.mjs +57 -0
  108. package/esm2022/src/app/core/table/table-select-columns.component.mjs +46 -0
  109. package/esm2022/src/app/core/table/table.class.mjs +1771 -0
  110. package/esm2022/src/app/core/table/table.model.mjs +16 -0
  111. package/{esm2020 → esm2022}/src/app/core/table/table.module.mjs +12 -12
  112. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +28 -0
  113. package/esm2022/src/app/core/table/testing/table.testing.mjs +291 -0
  114. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +50 -0
  115. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +25 -0
  116. package/esm2022/src/app/core/table/testing/table2.testing.mjs +250 -0
  117. package/esm2022/src/app/shared/audio/audio.mjs +251 -0
  118. package/esm2022/src/app/shared/audio/audio.testing.mjs +32 -0
  119. package/{esm2020 → esm2022}/src/app/shared/audio/audio.testing.module.mjs +10 -10
  120. package/esm2022/src/app/shared/capacitor/keyboard.mjs +42 -0
  121. package/esm2022/src/app/shared/capacitor/plugins.mjs +9 -0
  122. package/esm2022/src/app/shared/dates.mjs +149 -0
  123. package/esm2022/src/app/shared/debug/debug.component.mjs +40 -0
  124. package/{esm2020 → esm2022}/src/app/shared/debug/debug.module.mjs +14 -14
  125. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +98 -0
  126. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +32 -0
  127. package/{esm2020 → esm2022}/src/app/shared/directives/directives.module.mjs +13 -13
  128. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +52 -0
  129. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +33 -0
  130. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +62 -0
  131. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +45 -0
  132. package/{esm2020 → esm2022}/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
  133. package/esm2022/src/app/shared/file/file.service.mjs +122 -0
  134. package/{esm2020 → esm2022}/src/app/shared/file/file.utils.mjs +2 -2
  135. package/esm2022/src/app/shared/form/field.component.mjs +353 -0
  136. package/{esm2020 → esm2022}/src/app/shared/form/field.model.mjs +1 -1
  137. package/esm2022/src/app/shared/form/loading-spinner.mjs +35 -0
  138. package/{esm2020 → esm2022}/src/app/shared/functions.mjs +5 -4
  139. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +82 -0
  140. package/esm2022/src/app/shared/gesture/gesture-config.mjs +46 -0
  141. package/esm2022/src/app/shared/graph/graph-colors.mjs +219 -0
  142. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +59 -0
  143. package/esm2022/src/app/shared/help/help.modal.mjs +63 -0
  144. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +24 -0
  145. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +85 -0
  146. package/{esm2020 → esm2022}/src/app/shared/hotkeys/shared-hotkeys.module.mjs +13 -13
  147. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +388 -0
  148. package/{esm2020 → esm2022}/src/app/shared/image/gallery/image-gallery.module.mjs +22 -22
  149. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +26 -0
  150. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +90 -0
  151. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +41 -0
  152. package/{esm2020 → esm2022}/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +16 -16
  153. package/{esm2020 → esm2022}/src/app/shared/image/image.module.mjs +11 -11
  154. package/esm2022/src/app/shared/image/image.service.mjs +104 -0
  155. package/esm2022/src/app/shared/inputs.mjs +231 -0
  156. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +28 -0
  157. package/esm2022/src/app/shared/logging/logging-service.class.mjs +128 -0
  158. package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.module.mjs +8 -8
  159. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +49 -0
  160. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +961 -0
  161. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +82 -0
  162. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +217 -0
  163. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +209 -0
  164. package/{esm2020 → esm2022}/src/app/shared/material/badge/badge.module.mjs +9 -9
  165. package/esm2022/src/app/shared/material/badge/badge.test.mjs +42 -0
  166. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +72 -0
  167. package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +266 -0
  168. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +271 -0
  169. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +54 -0
  170. package/esm2022/src/app/shared/material/chips/chips.module.mjs +76 -0
  171. package/esm2022/src/app/shared/material/chips/material.chips.mjs +719 -0
  172. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +148 -0
  173. package/{esm2020 → esm2022}/src/app/shared/material/datetime/datetime.module.mjs +38 -38
  174. package/esm2022/src/app/shared/material/datetime/material.date.mjs +396 -0
  175. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +406 -0
  176. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +523 -0
  177. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +125 -0
  178. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +122 -0
  179. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +115 -0
  180. package/esm2022/src/app/shared/material/duration/duration.module.mjs +70 -0
  181. package/{esm2020 → esm2022}/src/app/shared/material/duration/duration.utils.mjs +2 -2
  182. package/esm2022/src/app/shared/material/duration/material.duration.mjs +273 -0
  183. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +79 -0
  184. package/{esm2020 → esm2022}/src/app/shared/material/latlong/latlong.utils.mjs +3 -3
  185. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +415 -0
  186. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +72 -0
  187. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +113 -0
  188. package/esm2022/src/app/shared/material/material.module.mjs +224 -0
  189. package/esm2022/src/app/shared/material/material.testing.module.mjs +210 -0
  190. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +104 -0
  191. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +83 -0
  192. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +203 -0
  193. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +19 -0
  194. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +168 -0
  195. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +36 -0
  196. package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +16 -0
  197. package/{esm2020 → esm2022}/src/app/shared/material/numpad/numpad.module.mjs +21 -21
  198. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +48 -0
  199. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +48 -0
  200. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +23 -0
  201. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +368 -0
  202. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +56 -0
  203. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +67 -0
  204. package/esm2022/src/app/shared/material/testing/common.test.mjs +105 -0
  205. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +212 -0
  206. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +49 -0
  207. package/{esm2020 → esm2022}/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  208. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +69 -0
  209. package/{esm2020 → esm2022}/src/app/shared/pipes/arrays.pipe.mjs +25 -25
  210. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +27 -0
  211. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +51 -0
  212. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +72 -0
  213. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +28 -0
  214. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +36 -0
  215. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +60 -0
  216. package/esm2022/src/app/shared/pipes/form.pipes.mjs +194 -0
  217. package/{esm2020 → esm2022}/src/app/shared/pipes/highlight.pipe.mjs +5 -5
  218. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +42 -0
  219. package/{esm2020 → esm2022}/src/app/shared/pipes/maps.pipe.mjs +13 -13
  220. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +118 -0
  221. package/{esm2020 → esm2022}/src/app/shared/pipes/math.pipes.mjs +13 -13
  222. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +19 -0
  223. package/{esm2020 → esm2022}/src/app/shared/pipes/number-format.pipe.mjs +5 -5
  224. package/esm2022/src/app/shared/pipes/pipes.module.mjs +256 -0
  225. package/esm2022/src/app/shared/pipes/property.pipes.mjs +97 -0
  226. package/esm2022/src/app/shared/pipes/string.pipes.mjs +135 -0
  227. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +44 -0
  228. package/esm2022/src/app/shared/pipes/types.pipes.mjs +58 -0
  229. package/esm2022/src/app/shared/rx-state.module.mjs +23 -0
  230. package/esm2022/src/app/shared/services/entity-service.class.mjs +7 -0
  231. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +347 -0
  232. package/esm2022/src/app/shared/services/progress-bar.service.mjs +31 -0
  233. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +121 -0
  234. package/esm2022/src/app/shared/services/startable-service.class.mjs +113 -0
  235. package/esm2022/src/app/shared/services/translate-context.service.mjs +104 -0
  236. package/{esm2020 → esm2022}/src/app/shared/shared-routing.module.mjs +11 -11
  237. package/esm2022/src/app/shared/shared.module.mjs +217 -0
  238. package/{esm2020 → esm2022}/src/app/shared/shared.testing.module.mjs +40 -40
  239. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +286 -0
  240. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +46 -0
  241. package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +7 -7
  242. package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing.module.mjs +6 -6
  243. package/esm2022/src/app/shared/storage/storage.service.mjs +134 -0
  244. package/{esm2020 → esm2022}/src/app/shared/storage/storage.utils.mjs +1 -1
  245. package/esm2022/src/app/shared/testing/observable.test.mjs +96 -0
  246. package/esm2022/src/app/shared/testing/tests.page.mjs +37 -0
  247. package/esm2022/src/app/shared/toast/toast.testing.mjs +52 -0
  248. package/{esm2020 → esm2022}/src/app/shared/toast/toast.testing.module.mjs +10 -10
  249. package/esm2022/src/app/shared/toast/toasts.mjs +144 -0
  250. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +60 -0
  251. package/esm2022/src/app/shared/toolbar/toolbar.mjs +264 -0
  252. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +57 -0
  253. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +59 -0
  254. package/{esm2020 → esm2022}/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -10
  255. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +107 -0
  256. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +211 -0
  257. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +27 -0
  258. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +106 -0
  259. package/esm2022/src/app/shared/validator/validators.mjs +580 -0
  260. package/esm2022/src/app/shared/version/versions.mjs +81 -0
  261. package/esm2022/src/app/social/job/job.module.mjs +42 -0
  262. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +35 -0
  263. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +232 -0
  264. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +50 -0
  265. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +28 -0
  266. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +73 -0
  267. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +43 -0
  268. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +53 -0
  269. package/{esm2020 → esm2022}/src/app/social/job/testing/job.testing.module.mjs +9 -9
  270. package/esm2022/src/app/social/message/message.form.mjs +88 -0
  271. package/esm2022/src/app/social/message/message.modal.mjs +102 -0
  272. package/esm2022/src/app/social/message/message.model.mjs +71 -0
  273. package/esm2022/src/app/social/message/message.module.mjs +35 -0
  274. package/esm2022/src/app/social/message/message.service.mjs +88 -0
  275. package/{esm2020 → esm2022}/src/app/social/social.module.mjs +19 -19
  276. package/{esm2020 → esm2022}/src/app/social/social.testing.module.mjs +10 -10
  277. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +123 -0
  278. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +263 -0
  279. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +233 -0
  280. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +128 -0
  281. package/{esm2020 → esm2022}/src/app/social/user-event/testing/user-event.testing.module.mjs +9 -9
  282. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +116 -0
  283. package/esm2022/src/app/social/user-event/user-event.module.mjs +43 -0
  284. package/esm2022/src/app/social/user-event/user-event.service.mjs +498 -0
  285. package/esm2022/src/environments/environment.class.mjs +47 -0
  286. package/esm2022/src/environments/environment.mjs +94 -0
  287. package/{fesm2020 → fesm2022}/sumaris-net.ngx-components.mjs +12191 -10087
  288. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -0
  289. package/package.json +11 -16
  290. package/public_api.d.ts +12 -5
  291. package/src/app/admin/users/users.d.ts +1 -1
  292. package/src/app/admin/users/users.module.d.ts +2 -1
  293. package/src/app/core/about/about.modal.d.ts +1 -1
  294. package/src/app/core/account/account.page.d.ts +3 -4
  295. package/src/app/core/account/new-token.modal.d.ts +1 -1
  296. package/src/app/core/account/token.table.d.ts +1 -1
  297. package/src/app/core/auth/auth.form.d.ts +1 -1
  298. package/src/app/core/auth/auth.modal.d.ts +1 -1
  299. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +2 -2
  300. package/src/app/core/form/entity/editor.class.d.ts +4 -4
  301. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +1 -1
  302. package/src/app/core/form/entity/entity-editor.class.d.ts +6 -10
  303. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  304. package/src/app/core/form/form.class.d.ts +1 -1
  305. package/src/app/core/form/list/list.form.d.ts +1 -1
  306. package/src/app/core/form/properties/properties.form.d.ts +1 -1
  307. package/src/app/core/form/properties/properties.table.d.ts +2 -3
  308. package/src/app/core/form/properties/property.validator.d.ts +1 -1
  309. package/src/app/core/form/properties/testing/properties-form.test.d.ts +1 -1
  310. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +1 -1
  311. package/src/app/core/form/text-popover/text-form.component.d.ts +1 -1
  312. package/src/app/core/form/text-popover/text-popover.component.d.ts +1 -1
  313. package/src/app/core/home/home.d.ts +1 -1
  314. package/src/app/core/home/home.module.d.ts +4 -3
  315. package/src/app/core/icon/icon.component.d.ts +1 -1
  316. package/src/app/core/install/install-upgrade-card.component.d.ts +1 -1
  317. package/src/app/core/menu/menu.component.d.ts +4 -8
  318. package/src/app/core/menu/menu.model.d.ts +0 -1
  319. package/src/app/core/menu/menu.module.d.ts +3 -5
  320. package/src/app/core/menu/menu.service.d.ts +1 -3
  321. package/src/app/core/menu/sub-menu-tab.directive.d.ts +1 -1
  322. package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
  323. package/src/app/core/menu/testing/menu.testing.d.ts +1 -1
  324. package/src/app/core/offline/update-offline-mode-card.component.d.ts +1 -1
  325. package/src/app/core/peer/select-peer.modal.d.ts +1 -1
  326. package/src/app/core/register/register-confirm.page.d.ts +1 -1
  327. package/src/app/core/register/register.form.d.ts +1 -1
  328. package/src/app/core/register/register.modal.d.ts +1 -1
  329. package/src/app/core/services/account.service.d.ts +0 -4
  330. package/src/app/core/services/base-entity-service.class.d.ts +2 -2
  331. package/src/app/core/services/base-graphql-service.class.d.ts +1 -1
  332. package/src/app/core/services/config/core.config.d.ts +1 -1
  333. package/src/app/core/services/model/person.model.d.ts +1 -1
  334. package/src/app/core/services/model/referential.model.d.ts +1 -2
  335. package/src/app/core/services/model/settings.model.d.ts +1 -1
  336. package/src/app/core/services/network.types.d.ts +2 -2
  337. package/src/app/core/services/storage/entity-store.class.d.ts +1 -1
  338. package/src/app/core/services/validator/base.validator.class.d.ts +1 -1
  339. package/src/app/core/settings/settings.page.d.ts +1 -1
  340. package/src/app/core/table/actions-column.component.d.ts +2 -2
  341. package/src/app/core/table/async-table.class.d.ts +1 -1
  342. package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -1
  343. package/src/app/core/table/entities-table-datasource.class.d.ts +1 -1
  344. package/src/app/core/table/memory-table.class.d.ts +3 -3
  345. package/src/app/core/table/table-select-columns.component.d.ts +1 -1
  346. package/src/app/core/table/table.class.d.ts +3 -3
  347. package/src/app/core/table/table.model.d.ts +1 -1
  348. package/src/app/core/table/testing/table.testing.d.ts +5 -4
  349. package/src/app/core/table/testing/table.testing.module.d.ts +8 -5
  350. package/src/app/core/table/testing/table2-validator.service.d.ts +15 -0
  351. package/src/app/core/table/testing/table2.testing.d.ts +45 -0
  352. package/src/app/shared/audio/audio.d.ts +1 -1
  353. package/src/app/shared/audio/audio.testing.d.ts +1 -1
  354. package/src/app/shared/debug/debug.component.d.ts +1 -1
  355. package/src/app/shared/directives/autofocus.directive.d.ts +1 -1
  356. package/src/app/shared/directives/autotitle.directive.d.ts +1 -1
  357. package/src/app/shared/directives/drag-and-drop.directive.d.ts +1 -1
  358. package/src/app/shared/directives/ng-var.directive.d.ts +1 -1
  359. package/src/app/shared/directives/resizable/resizable.component.d.ts +1 -1
  360. package/src/app/shared/directives/resizable/resizable.directive.d.ts +1 -1
  361. package/src/app/shared/events.d.ts +1 -1
  362. package/src/app/shared/form/field.component.d.ts +4 -5
  363. package/src/app/shared/form/field.model.d.ts +2 -0
  364. package/src/app/shared/form/loading-spinner.d.ts +1 -1
  365. package/src/app/shared/functions.d.ts +2 -2
  366. package/src/app/shared/help/help.modal.d.ts +2 -2
  367. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +1 -1
  368. package/src/app/shared/hotkeys/hotkeys.service.d.ts +3 -3
  369. package/src/app/shared/image/gallery/image-gallery.component.d.ts +3 -3
  370. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +2 -2
  371. package/src/app/shared/inputs.d.ts +1 -1
  372. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +9 -9
  373. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +10 -9
  374. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +1 -1
  375. package/src/app/shared/material/badge/badge.directive.d.ts +1 -1
  376. package/src/app/shared/material/badge/badge.test.d.ts +1 -1
  377. package/src/app/shared/material/boolean/boolean.module.d.ts +12 -11
  378. package/src/app/shared/material/boolean/material-boolean2.d.ts +66 -0
  379. package/src/app/shared/material/boolean/material.boolean.d.ts +5 -4
  380. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +21 -0
  381. package/src/app/shared/material/chips/material.chips.d.ts +8 -9
  382. package/src/app/shared/material/chips/testing/chips.test.d.ts +2 -2
  383. package/src/app/shared/material/datetime/datetime.module.d.ts +2 -2
  384. package/src/app/shared/material/datetime/material.date.d.ts +5 -4
  385. package/src/app/shared/material/datetime/material.dateshort.d.ts +8 -7
  386. package/src/app/shared/material/datetime/material.datetime.d.ts +8 -6
  387. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +7 -1
  388. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +3 -1
  389. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +3 -1
  390. package/src/app/shared/material/duration/duration.module.d.ts +6 -5
  391. package/src/app/shared/material/duration/material.duration.d.ts +6 -5
  392. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +22 -0
  393. package/src/app/shared/material/latlong/material.latlong.d.ts +8 -7
  394. package/src/app/shared/material/latlong/material.latlong.module.d.ts +9 -8
  395. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +3 -1
  396. package/src/app/shared/material/material.testing.module.d.ts +22 -18
  397. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +1 -1
  398. package/src/app/shared/material/numpad/numpad.component.d.ts +1 -1
  399. package/src/app/shared/material/numpad/numpad.container.d.ts +1 -1
  400. package/src/app/shared/material/numpad/numpad.content.d.ts +1 -1
  401. package/src/app/shared/material/numpad/numpad.directive.d.ts +1 -1
  402. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -3
  403. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +1 -1
  404. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -3
  405. package/src/app/shared/material/swipe/material.swipe.d.ts +6 -6
  406. package/src/app/shared/material/swipe/swipe.module.d.ts +2 -1
  407. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +1 -1
  408. package/src/app/shared/material/testing/common.test.d.ts +25 -0
  409. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +1 -1
  410. package/src/app/shared/named-filter/named-filter.service.d.ts +1 -1
  411. package/src/app/shared/pipes/maskito.pipe.d.ts +16 -0
  412. package/src/app/shared/pipes/ng-init.pipe.d.ts +1 -1
  413. package/src/app/shared/pipes/pipes.module.d.ts +5 -4
  414. package/src/app/shared/pipes/string.pipes.d.ts +6 -0
  415. package/src/app/shared/pipes/types.pipes.d.ts +7 -0
  416. package/src/app/shared/rx-state.module.d.ts +10 -0
  417. package/src/app/shared/services/entity-service.class.d.ts +1 -1
  418. package/src/app/shared/services/job.utils.d.ts +1 -1
  419. package/src/app/shared/services/memory-entity-service.class.d.ts +1 -1
  420. package/src/app/shared/services/startable-observable-service.class.d.ts +3 -0
  421. package/src/app/shared/services/startable-service.class.d.ts +3 -0
  422. package/src/app/shared/shared.module.d.ts +7 -9
  423. package/src/app/shared/storage/storage-explorer.component.d.ts +1 -1
  424. package/src/app/shared/storage/storage-explorer.module.d.ts +3 -3
  425. package/src/app/shared/storage/storage.service.d.ts +1 -1
  426. package/src/app/shared/storage/storage.utils.d.ts +1 -1
  427. package/src/app/shared/testing/observable.test.d.ts +1 -1
  428. package/src/app/shared/testing/tests.page.d.ts +1 -1
  429. package/src/app/shared/toast/toast.testing.d.ts +1 -1
  430. package/src/app/shared/toolbar/modal-toolbar.d.ts +1 -1
  431. package/src/app/shared/toolbar/toolbar.d.ts +1 -1
  432. package/src/app/shared/toolbar/toolbar.module.d.ts +4 -3
  433. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +1 -1
  434. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +1 -1
  435. package/src/app/shared/upload-file/upload-file.component.d.ts +1 -1
  436. package/src/app/shared/upload-file/upload-file.model.d.ts +2 -2
  437. package/src/app/social/job/progression/job-progression.component.d.ts +17 -3
  438. package/src/app/social/job/progression/job-progression.icon.d.ts +24 -10
  439. package/src/app/social/job/progression/job-progression.list.d.ts +3 -3
  440. package/src/app/social/job/progression/job-progression.model.d.ts +0 -1
  441. package/src/app/social/job/testing/job-progression.testing.d.ts +3 -6
  442. package/src/app/social/message/message.form.d.ts +2 -8
  443. package/src/app/social/message/message.modal.d.ts +1 -5
  444. package/src/app/social/message/message.model.d.ts +0 -2
  445. package/src/app/social/message/message.module.d.ts +1 -2
  446. package/src/app/social/message/message.service.d.ts +3 -8
  447. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -3
  448. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +1 -1
  449. package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -1
  450. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -1
  451. package/src/app/social/user-event/user-event.model.d.ts +2 -2
  452. package/src/app/social/user-event/user-event.module.d.ts +3 -2
  453. package/src/app/social/user-event/user-event.service.d.ts +1 -6
  454. package/src/assets/i18n/en-US.json +17 -15
  455. package/src/assets/i18n/en.json +17 -15
  456. package/src/assets/i18n/fr.json +7 -6
  457. package/src/assets/img/logo/logo-eis.png +0 -0
  458. package/src/assets/manifest.json +1 -1
  459. package/src/environments/environment.class.d.ts +0 -1
  460. package/src/theme/_material.globals.scss +51 -19
  461. package/src/theme/_material.scss +15 -15
  462. package/src/theme/_mixins.scss +3 -3
  463. package/src/theme/_ngx-components.globals.scss +6 -1
  464. package/src/theme/_ngx-components.scss +262 -534
  465. package/src/theme/_ngx-components.table.scss +599 -0
  466. package/src/theme/_theme.scss +1 -0
  467. package/esm2020/public_api.mjs +0 -330
  468. package/esm2020/src/app/admin/services/filter/person.filter.mjs +0 -59
  469. package/esm2020/src/app/admin/services/person.service.mjs +0 -170
  470. package/esm2020/src/app/admin/services/validator/person.validator.mjs +0 -71
  471. package/esm2020/src/app/admin/users/users.mjs +0 -250
  472. package/esm2020/src/app/admin/users/users.module.mjs +0 -54
  473. package/esm2020/src/app/core/about/about.modal.mjs +0 -71
  474. package/esm2020/src/app/core/account/account.page.mjs +0 -319
  475. package/esm2020/src/app/core/account/new-token.modal.mjs +0 -115
  476. package/esm2020/src/app/core/account/token.table.mjs +0 -137
  477. package/esm2020/src/app/core/auth/auth.form.mjs +0 -131
  478. package/esm2020/src/app/core/auth/auth.modal.mjs +0 -72
  479. package/esm2020/src/app/core/core.testing.module.mjs +0 -86
  480. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -107
  481. package/esm2020/src/app/core/form/entity/editor.class.mjs +0 -683
  482. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -422
  483. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +0 -696
  484. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
  485. package/esm2020/src/app/core/form/form.class.mjs +0 -345
  486. package/esm2020/src/app/core/form/list/list.form.mjs +0 -222
  487. package/esm2020/src/app/core/form/properties/properties.form.mjs +0 -132
  488. package/esm2020/src/app/core/form/properties/properties.table.mjs +0 -267
  489. package/esm2020/src/app/core/form/properties/property.validator.mjs +0 -23
  490. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +0 -90
  491. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -70
  492. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +0 -89
  493. package/esm2020/src/app/core/graphql/graphql.service.mjs +0 -778
  494. package/esm2020/src/app/core/home/home.mjs +0 -257
  495. package/esm2020/src/app/core/home/home.module.mjs +0 -48
  496. package/esm2020/src/app/core/icon/icon.component.mjs +0 -41
  497. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +0 -344
  498. package/esm2020/src/app/core/menu/menu.component.mjs +0 -242
  499. package/esm2020/src/app/core/menu/menu.model.mjs +0 -247
  500. package/esm2020/src/app/core/menu/menu.module.mjs +0 -57
  501. package/esm2020/src/app/core/menu/menu.service.mjs +0 -660
  502. package/esm2020/src/app/core/menu/sub-menu-tab.directive.mjs +0 -98
  503. package/esm2020/src/app/core/menu/testing/menu.testing.mjs +0 -121
  504. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +0 -27
  505. package/esm2020/src/app/core/peer/select-peer.modal.mjs +0 -183
  506. package/esm2020/src/app/core/register/register-confirm.page.mjs +0 -81
  507. package/esm2020/src/app/core/register/register.form.mjs +0 -183
  508. package/esm2020/src/app/core/register/register.modal.mjs +0 -52
  509. package/esm2020/src/app/core/services/account.service.mjs +0 -1233
  510. package/esm2020/src/app/core/services/auth-guard.service.mjs +0 -71
  511. package/esm2020/src/app/core/services/base-entity-service.class.mjs +0 -468
  512. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +0 -221
  513. package/esm2020/src/app/core/services/base58.mjs +0 -78
  514. package/esm2020/src/app/core/services/config.service.mjs +0 -355
  515. package/esm2020/src/app/core/services/crypto.service.mjs +0 -107
  516. package/esm2020/src/app/core/services/local-settings.service.mjs +0 -460
  517. package/esm2020/src/app/core/services/model/account.model.mjs +0 -147
  518. package/esm2020/src/app/core/services/model/config.model.mjs +0 -92
  519. package/esm2020/src/app/core/services/model/department.model.mjs +0 -30
  520. package/esm2020/src/app/core/services/model/entity.decorators.mjs +0 -97
  521. package/esm2020/src/app/core/services/model/entity.model.mjs +0 -225
  522. package/esm2020/src/app/core/services/model/peer.model.mjs +0 -68
  523. package/esm2020/src/app/core/services/model/person.model.mjs +0 -97
  524. package/esm2020/src/app/core/services/model/referential.model.mjs +0 -167
  525. package/esm2020/src/app/core/services/model/token.model.mjs +0 -48
  526. package/esm2020/src/app/core/services/network.service.mjs +0 -590
  527. package/esm2020/src/app/core/services/platform.service.mjs +0 -534
  528. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +0 -428
  529. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +0 -449
  530. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +0 -23
  531. package/esm2020/src/app/core/services/testing/referential.validator.mjs +0 -45
  532. package/esm2020/src/app/core/services/validator/account.validator.mjs +0 -41
  533. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +0 -47
  534. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +0 -66
  535. package/esm2020/src/app/core/settings/settings.page.mjs +0 -312
  536. package/esm2020/src/app/core/table/actions-column.component.mjs +0 -102
  537. package/esm2020/src/app/core/table/async-table.class.mjs +0 -1698
  538. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +0 -384
  539. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +0 -399
  540. package/esm2020/src/app/core/table/memory-table.class.mjs +0 -53
  541. package/esm2020/src/app/core/table/table-select-columns.component.mjs +0 -43
  542. package/esm2020/src/app/core/table/table.class.mjs +0 -1733
  543. package/esm2020/src/app/core/table/table.model.mjs +0 -12
  544. package/esm2020/src/app/core/table/testing/table-validator.service.mjs +0 -27
  545. package/esm2020/src/app/core/table/testing/table.testing.mjs +0 -281
  546. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +0 -38
  547. package/esm2020/src/app/shared/audio/audio.mjs +0 -248
  548. package/esm2020/src/app/shared/audio/audio.testing.mjs +0 -31
  549. package/esm2020/src/app/shared/capacitor/keyboard.mjs +0 -40
  550. package/esm2020/src/app/shared/capacitor/plugins.mjs +0 -9
  551. package/esm2020/src/app/shared/dates.mjs +0 -149
  552. package/esm2020/src/app/shared/debug/debug.component.mjs +0 -39
  553. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +0 -93
  554. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +0 -30
  555. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +0 -53
  556. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +0 -31
  557. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +0 -59
  558. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +0 -40
  559. package/esm2020/src/app/shared/file/file.service.mjs +0 -117
  560. package/esm2020/src/app/shared/form/field.component.mjs +0 -332
  561. package/esm2020/src/app/shared/form/loading-spinner.mjs +0 -36
  562. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +0 -80
  563. package/esm2020/src/app/shared/gesture/gesture-config.mjs +0 -49
  564. package/esm2020/src/app/shared/graph/graph-colors.mjs +0 -212
  565. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +0 -57
  566. package/esm2020/src/app/shared/help/help.modal.mjs +0 -53
  567. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  568. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +0 -84
  569. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +0 -368
  570. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -27
  571. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -90
  572. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -39
  573. package/esm2020/src/app/shared/image/image.service.mjs +0 -98
  574. package/esm2020/src/app/shared/inputs.mjs +0 -231
  575. package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  576. package/esm2020/src/app/shared/logging/logging-service.class.mjs +0 -121
  577. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -47
  578. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -920
  579. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -78
  580. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -209
  581. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +0 -199
  582. package/esm2020/src/app/shared/material/badge/badge.test.mjs +0 -41
  583. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +0 -68
  584. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +0 -253
  585. package/esm2020/src/app/shared/material/chips/chips.module.mjs +0 -76
  586. package/esm2020/src/app/shared/material/chips/material.chips.mjs +0 -696
  587. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +0 -143
  588. package/esm2020/src/app/shared/material/datetime/material.date.mjs +0 -376
  589. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +0 -385
  590. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +0 -499
  591. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -108
  592. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -110
  593. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -103
  594. package/esm2020/src/app/shared/material/duration/duration.module.mjs +0 -67
  595. package/esm2020/src/app/shared/material/duration/material.duration.mjs +0 -257
  596. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +0 -382
  597. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +0 -67
  598. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -102
  599. package/esm2020/src/app/shared/material/material.module.mjs +0 -224
  600. package/esm2020/src/app/shared/material/material.testing.module.mjs +0 -168
  601. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -98
  602. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +0 -80
  603. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +0 -190
  604. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +0 -17
  605. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +0 -162
  606. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -37
  607. package/esm2020/src/app/shared/material/numpad/numpad.model.mjs +0 -15
  608. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -46
  609. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -46
  610. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -22
  611. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +0 -344
  612. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +0 -52
  613. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -64
  614. package/esm2020/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -202
  615. package/esm2020/src/app/shared/named-filter/named-filter.model.mjs +0 -45
  616. package/esm2020/src/app/shared/named-filter/named-filter.service.mjs +0 -63
  617. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +0 -25
  618. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -48
  619. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +0 -66
  620. package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +0 -27
  621. package/esm2020/src/app/shared/pipes/duration.pipe.mjs +0 -34
  622. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +0 -62
  623. package/esm2020/src/app/shared/pipes/form.pipes.mjs +0 -187
  624. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +0 -46
  625. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +0 -21
  626. package/esm2020/src/app/shared/pipes/pipes.module.mjs +0 -239
  627. package/esm2020/src/app/shared/pipes/property.pipes.mjs +0 -93
  628. package/esm2020/src/app/shared/pipes/string.pipes.mjs +0 -121
  629. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +0 -43
  630. package/esm2020/src/app/shared/pipes/types.pipes.mjs +0 -45
  631. package/esm2020/src/app/shared/services/entity-service.class.mjs +0 -7
  632. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +0 -339
  633. package/esm2020/src/app/shared/services/progress-bar.service.mjs +0 -33
  634. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +0 -118
  635. package/esm2020/src/app/shared/services/startable-service.class.mjs +0 -110
  636. package/esm2020/src/app/shared/services/translate-context.service.mjs +0 -103
  637. package/esm2020/src/app/shared/shared.module.mjs +0 -231
  638. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +0 -268
  639. package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +0 -47
  640. package/esm2020/src/app/shared/storage/storage.service.mjs +0 -132
  641. package/esm2020/src/app/shared/testing/observable.test.mjs +0 -95
  642. package/esm2020/src/app/shared/testing/tests.page.mjs +0 -33
  643. package/esm2020/src/app/shared/toast/toast.testing.mjs +0 -51
  644. package/esm2020/src/app/shared/toast/toasts.mjs +0 -144
  645. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +0 -58
  646. package/esm2020/src/app/shared/toolbar/toolbar.mjs +0 -251
  647. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +0 -53
  648. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -58
  649. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -97
  650. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +0 -204
  651. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +0 -20
  652. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +0 -104
  653. package/esm2020/src/app/shared/validator/validators.mjs +0 -580
  654. package/esm2020/src/app/shared/version/versions.mjs +0 -81
  655. package/esm2020/src/app/social/job/job.module.mjs +0 -42
  656. package/esm2020/src/app/social/job/progression/job-progression.component.mjs +0 -20
  657. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +0 -216
  658. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +0 -43
  659. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +0 -23
  660. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +0 -71
  661. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +0 -52
  662. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +0 -55
  663. package/esm2020/src/app/social/message/message.form.mjs +0 -136
  664. package/esm2020/src/app/social/message/message.modal.mjs +0 -99
  665. package/esm2020/src/app/social/message/message.model.mjs +0 -67
  666. package/esm2020/src/app/social/message/message.module.mjs +0 -22
  667. package/esm2020/src/app/social/message/message.service.mjs +0 -105
  668. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -114
  669. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -246
  670. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +0 -227
  671. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -112
  672. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -111
  673. package/esm2020/src/app/social/user-event/user-event.module.mjs +0 -39
  674. package/esm2020/src/app/social/user-event/user-event.service.mjs +0 -501
  675. package/esm2020/src/environments/environment.class.mjs +0 -5
  676. package/esm2020/src/environments/environment.loader.mjs +0 -79
  677. package/esm2020/src/environments/environment.mjs +0 -97
  678. package/fesm2015/sumaris-net.ngx-components.mjs +0 -40966
  679. package/fesm2015/sumaris-net.ngx-components.mjs.map +0 -1
  680. package/fesm2020/sumaris-net.ngx-components.mjs.map +0 -1
  681. package/resources/README.md +0 -7
  682. package/src/assets/environments/environment-test.json +0 -6
  683. package/src/environments/environment.loader.d.ts +0 -26
  684. /package/{esm2020 → esm2022}/src/app/core/services/errors.mjs +0 -0
  685. /package/{esm2020 → esm2022}/src/app/core/services/model/filter.model.mjs +0 -0
  686. /package/{esm2020 → esm2022}/src/app/core/services/model/history.model.mjs +0 -0
  687. /package/{esm2020 → esm2022}/src/app/core/services/model/model.enum.mjs +0 -0
  688. /package/{esm2020 → esm2022}/src/app/core/services/model/settings.model.mjs +0 -0
  689. /package/{esm2020 → esm2022}/src/app/core/services/model/tree-item-entity.model.mjs +0 -0
  690. /package/{esm2020 → esm2022}/src/app/core/services/network.types.mjs +0 -0
  691. /package/{esm2020 → esm2022}/src/app/core/services/network.utils.mjs +0 -0
  692. /package/{esm2020 → esm2022}/src/app/core/table/table.utils.mjs +0 -0
  693. /package/{esm2020 → esm2022}/src/app/shared/alerts.mjs +0 -0
  694. /package/{esm2020 → esm2022}/src/app/shared/constants.mjs +0 -0
  695. /package/{esm2020 → esm2022}/src/app/shared/debug/debug-service.class.mjs +0 -0
  696. /package/{esm2020 → esm2022}/src/app/shared/events.mjs +0 -0
  697. /package/{esm2020 → esm2022}/src/app/shared/file/csv.utils.mjs +0 -0
  698. /package/{esm2020 → esm2022}/src/app/shared/file/images.utils.mjs +0 -0
  699. /package/{esm2020 → esm2022}/src/app/shared/file/json.utils.mjs +0 -0
  700. /package/{esm2020 → esm2022}/src/app/shared/file/uri.utils.mjs +0 -0
  701. /package/{esm2020 → esm2022}/src/app/shared/focusable.mjs +0 -0
  702. /package/{esm2020 → esm2022}/src/app/shared/forms.mjs +0 -0
  703. /package/{esm2020 → esm2022}/src/app/shared/gesture/hammer.utils.mjs +0 -0
  704. /package/{esm2020 → esm2022}/src/app/shared/graph/colors.utils.mjs +0 -0
  705. /package/{esm2020 → esm2022}/src/app/shared/http/http.utils.mjs +0 -0
  706. /package/{esm2020 → esm2022}/src/app/shared/image/image.model.mjs +0 -0
  707. /package/{esm2020 → esm2022}/src/app/shared/logging/log-level.model.mjs +0 -0
  708. /package/{esm2020 → esm2022}/src/app/shared/logging/logger.model.mjs +0 -0
  709. /package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.config.mjs +0 -0
  710. /package/{esm2020 → esm2022}/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -0
  711. /package/{esm2020 → esm2022}/src/app/shared/material/material.animations.mjs +0 -0
  712. /package/{esm2020 → esm2022}/src/app/shared/modules.mjs +0 -0
  713. /package/{esm2020 → esm2022}/src/app/shared/observables.mjs +0 -0
  714. /package/{esm2020 → esm2022}/src/app/shared/platforms.mjs +0 -0
  715. /package/{esm2020 → esm2022}/src/app/shared/services/job.utils.mjs +0 -0
  716. /package/{esm2020 → esm2022}/src/app/shared/services/validator-service.class.mjs +0 -0
  717. /package/{esm2020 → esm2022}/src/app/shared/services.mjs +0 -0
  718. /package/{esm2020 → esm2022}/src/app/shared/types.mjs +0 -0
  719. /package/{esm2020 → esm2022}/src/app/social/social.errors.mjs +0 -0
  720. /package/{esm2020 → esm2022}/src/app/social/user-event/user-event.model.mjs +0 -0
  721. /package/{esm2020 → esm2022}/sumaris-net.ngx-components.mjs +0 -0
@@ -8,17 +8,15 @@ import { addValueInArray, clearValueInArray, copyEntity2Form, disableControls, g
8
8
  * A form that do nothing
9
9
  */
10
10
  export class AppNullForm {
11
- constructor() {
12
- this.invalid = false;
13
- this.valid = false;
14
- this.dirty = false;
15
- this.empty = true;
16
- this.pending = false;
17
- this.error = null;
18
- this.enabled = false;
19
- this.loading = false;
20
- this.touched = false;
21
- }
11
+ invalid = false;
12
+ valid = false;
13
+ dirty = false;
14
+ empty = true;
15
+ pending = false;
16
+ error = null;
17
+ enabled = false;
18
+ loading = false;
19
+ touched = false;
22
20
  get disabled() {
23
21
  return !this.enabled;
24
22
  }
@@ -43,6 +41,8 @@ export class AppNullForm {
43
41
  }
44
42
  }
45
43
  export class AppFormProvider {
44
+ getterFn;
45
+ static NULL_FORM = new AppNullForm();
46
46
  constructor(getterFn) {
47
47
  this.getterFn = getterFn;
48
48
  }
@@ -127,17 +127,11 @@ export class AppFormProvider {
127
127
  return this.delegate.markAsReady(opts);
128
128
  }
129
129
  }
130
- AppFormProvider.NULL_FORM = new AppNullForm();
131
130
  export class FormArrayHelper {
132
- constructor(_formArray, createControl, equals, isEmpty, options) {
133
- this._formArray = _formArray;
134
- this.createControl = createControl;
135
- this.equals = equals;
136
- this.isEmpty = isEmpty;
137
- this._validators = options && options.validators;
138
- // empty array not allow by default
139
- this.setAllowEmptyArray(toBoolean(options?.allowEmptyArray, false));
140
- }
131
+ _formArray;
132
+ createControl;
133
+ equals;
134
+ isEmpty;
141
135
  static getOrCreateArray(formBuilder, form, arrayName) {
142
136
  const disabled = form.disabled;
143
137
  let arrayControl = form.get(arrayName);
@@ -151,6 +145,8 @@ export class FormArrayHelper {
151
145
  }
152
146
  return arrayControl;
153
147
  }
148
+ _allowEmptyArray;
149
+ _validators;
154
150
  get allowEmptyArray() {
155
151
  return this._allowEmptyArray;
156
152
  }
@@ -160,6 +156,15 @@ export class FormArrayHelper {
160
156
  get formArray() {
161
157
  return this._formArray;
162
158
  }
159
+ constructor(_formArray, createControl, equals, isEmpty, options) {
160
+ this._formArray = _formArray;
161
+ this.createControl = createControl;
162
+ this.equals = equals;
163
+ this.isEmpty = isEmpty;
164
+ this._validators = options && options.validators;
165
+ // empty array not allow by default
166
+ this.setAllowEmptyArray(toBoolean(options?.allowEmptyArray, false));
167
+ }
163
168
  /**
164
169
  * @param value
165
170
  * @param options
@@ -247,6 +252,16 @@ export class FormArrayHelper {
247
252
  }
248
253
  }
249
254
  export class AppFormArray extends UntypedFormArray {
255
+ createControl;
256
+ equals;
257
+ isEmpty;
258
+ options;
259
+ get allowEmptyArray() {
260
+ return this.options.allowEmptyArray;
261
+ }
262
+ set allowEmptyArray(value) {
263
+ this.setAllowEmptyArray(value);
264
+ }
250
265
  constructor(createControl, equals, isEmpty, options) {
251
266
  super([], options);
252
267
  this.createControl = createControl;
@@ -259,12 +274,6 @@ export class AppFormArray extends UntypedFormArray {
259
274
  };
260
275
  this.setAllowEmptyArray(this.options.allowEmptyArray);
261
276
  }
262
- get allowEmptyArray() {
263
- return this.options.allowEmptyArray;
264
- }
265
- set allowEmptyArray(value) {
266
- this.setAllowEmptyArray(value);
267
- }
268
277
  /**
269
278
  * WIll rebuild the array, using the given values
270
279
  *
@@ -420,43 +429,43 @@ export class AppFormArray extends UntypedFormArray {
420
429
  }
421
430
  // TODO continue to use this kind of declaration ?
422
431
  export class AppFormUtils {
432
+ static copyEntity2Form = copyEntity2Form;
433
+ static getFormValueFromEntity = getFormValueFromEntity;
434
+ static logFormErrors = logFormErrors;
435
+ static getControlFromPath = getControlFromPath;
436
+ static filterNumberInput = filterNumberInput;
437
+ static disableControls = disableControls;
438
+ static selectInputContent = selectInputContent;
439
+ /**
440
+ * @deprecated use markAllAsTouched() instead (naming was wrong)
441
+ */
442
+ static markAsTouched = markAllAsTouched;
443
+ /**
444
+ * Marks the control and all its descendant controls as touched.
445
+ * See also:
446
+ * - `markAsTouched()`
447
+ */
448
+ static markAllAsTouched = markAllAsTouched;
449
+ static markAsUntouched = markAsUntouched;
450
+ static waitWhilePending = waitWhilePending;
451
+ static waitIdle = waitIdle;
452
+ static updateValueAndValidity = updateValueAndValidity;
453
+ static getFormErrors = getFormErrors;
423
454
  static isForm(object) {
424
455
  return object instanceof AppFormProvider
425
456
  || 'dirty' in object && 'enabled' in object && 'valid' in object;
426
457
  }
458
+ // ArrayForm
459
+ static addValueInArray = addValueInArray;
460
+ static removeValueInArray = removeValueInArray;
461
+ static resizeArray = resizeArray;
462
+ static clearValueInArray = clearValueInArray;
463
+ // Calculated fields
464
+ static calculatedSuffix = 'Calculated';
465
+ static isControlHasInput = isControlHasInput;
466
+ static setCalculatedValue = setCalculatedValue;
467
+ static resetCalculatedValue = resetCalculatedValue;
427
468
  }
428
- AppFormUtils.copyEntity2Form = copyEntity2Form;
429
- AppFormUtils.getFormValueFromEntity = getFormValueFromEntity;
430
- AppFormUtils.logFormErrors = logFormErrors;
431
- AppFormUtils.getControlFromPath = getControlFromPath;
432
- AppFormUtils.filterNumberInput = filterNumberInput;
433
- AppFormUtils.disableControls = disableControls;
434
- AppFormUtils.selectInputContent = selectInputContent;
435
- /**
436
- * @deprecated use markAllAsTouched() instead (naming was wrong)
437
- */
438
- AppFormUtils.markAsTouched = markAllAsTouched;
439
- /**
440
- * Marks the control and all its descendant controls as touched.
441
- * See also:
442
- * - `markAsTouched()`
443
- */
444
- AppFormUtils.markAllAsTouched = markAllAsTouched;
445
- AppFormUtils.markAsUntouched = markAsUntouched;
446
- AppFormUtils.waitWhilePending = waitWhilePending;
447
- AppFormUtils.waitIdle = waitIdle;
448
- AppFormUtils.updateValueAndValidity = updateValueAndValidity;
449
- AppFormUtils.getFormErrors = getFormErrors;
450
- // ArrayForm
451
- AppFormUtils.addValueInArray = addValueInArray;
452
- AppFormUtils.removeValueInArray = removeValueInArray;
453
- AppFormUtils.resizeArray = resizeArray;
454
- AppFormUtils.clearValueInArray = clearValueInArray;
455
- // Calculated fields
456
- AppFormUtils.calculatedSuffix = 'Calculated';
457
- AppFormUtils.isControlHasInput = isControlHasInput;
458
- AppFormUtils.setCalculatedValue = setCalculatedValue;
459
- AppFormUtils.resetCalculatedValue = resetCalculatedValue;
460
469
  export function isControlHasInput(controls, controlName) {
461
470
  // true if the control has a value and its 'calculated' control has the value 'false'
462
471
  return controls[controlName].value && !toBoolean(controls[controlName + AppFormUtils.calculatedSuffix].value, false);
@@ -473,4 +482,4 @@ export function resetCalculatedValue(controls, controlName) {
473
482
  AppFormUtils.setCalculatedValue(controls, controlName, undefined);
474
483
  }
475
484
  }
476
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2Zvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQyxnQkFBZ0IsRUFBc0IsZ0JBQWdCLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1SSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBQyxPQUFPLEVBQWlCLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUNMLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2pCLE1BQU0sb0JBQW9CLENBQUM7QUF3QzVCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFBeEI7UUFDVyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsVUFBSyxHQUFHLElBQUksQ0FBQztRQUNiLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUFHLElBQUksQ0FBQztRQUNiLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixZQUFPLEdBQUcsS0FBSyxDQUFDO0lBMEIzQixDQUFDO0lBekJDLElBQUksUUFBUTtRQUNW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QixHQUFHLFlBQVksQ0FBQztBQUNoQyw4QkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUN0QywrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUN4QyxpQ0FBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUlyRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBMkMsRUFBRSxXQUFtQjtJQUNoRyxxRkFBcUY7SUFDckYsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZILENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsUUFBMkMsRUFBRSxXQUFtQixFQUFFLEtBQXlCO0lBQzVILHVCQUF1QjtJQUN2QixRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdDLHFDQUFxQztJQUNyQyxRQUFRLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFFBQTJDLEVBQUUsV0FBbUI7SUFDbkcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBRTtRQUM3QyxtREFBbUQ7UUFDbkQsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDbkU7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEFic3RyYWN0Q29udHJvbE9wdGlvbnMsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yRm59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RW50aXR5fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtTaGFyZWRGb3JtQXJyYXlWYWxpZGF0b3JzfSBmcm9tICcuLi8uLi9zaGFyZWQvdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtyb3VuZCwgdG9Cb29sZWFufSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7ZmlsdGVyTnVtYmVySW5wdXQsIHNlbGVjdElucHV0Q29udGVudH0gZnJvbSAnLi4vLi4vc2hhcmVkL2lucHV0cyc7XG5pbXBvcnQge3dhaXRGb3IsIFdhaXRGb3JPcHRpb25zfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtcbiAgYWRkVmFsdWVJbkFycmF5LFxuICBjbGVhclZhbHVlSW5BcnJheSxcbiAgY29weUVudGl0eTJGb3JtLFxuICBkaXNhYmxlQ29udHJvbHMsXG4gIGdldENvbnRyb2xGcm9tUGF0aCxcbiAgZ2V0Rm9ybUVycm9ycyxcbiAgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSxcbiAgbG9nRm9ybUVycm9ycyxcbiAgbWFya0FsbEFzVG91Y2hlZCxcbiAgbWFya0FzVW50b3VjaGVkLFxuICByZW1vdmVWYWx1ZUluQXJyYXksXG4gIHJlc2l6ZUFycmF5LFxuICB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5LFxuICB3YWl0SWRsZSxcbiAgd2FpdFdoaWxlUGVuZGluZ1xufSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybXMnO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIElBcHBGb3JtR2V0dGVyID0gKCkgPT4gSUFwcEZvcm07XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBPblJlYWR5IHtcbiAgbmdPblJlYWR5KCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcEZvcm0gIHtcbiAgLy8gRnJvbSBBbmd1bGFyIGZvcm1cbiAgaW52YWxpZDogYm9vbGVhbjtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIGRpcnR5OiBib29sZWFuO1xuICBwZW5kaW5nOiBib29sZWFuO1xuICBlcnJvcjogc3RyaW5nO1xuICBlbmFibGVkOiBib29sZWFuO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgdG91Y2hlZDogYm9vbGVhbjtcbiAgdW50b3VjaGVkOiBib29sZWFuO1xuXG4gIC8vIFNwZWNpZmljIHRvIElBcHBGb3JtXG4gIGVtcHR5PzogYm9vbGVhbjtcbiAgbG9hZGluZz86IGJvb2xlYW47XG4gIHJlYWR5KCk6IFByb21pc2U8dm9pZD47XG4gIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8YW55PjtcblxuICBkaXNhYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIGVuYWJsZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbn0pO1xuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIG1hcmtBc1VudG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbn0pO1xuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW59KTtcbiAgbWFya0FzTG9hZGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIG1hcmtBc1JlYWR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG59XG5cblxuLyoqXG4gKiBBIGZvcm0gdGhhdCBkbyBub3RoaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBOdWxsRm9ybSBpbXBsZW1lbnRzIElBcHBGb3JtIHtcbiAgcmVhZG9ubHkgaW52YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSB2YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSBkaXJ0eSA9IGZhbHNlO1xuICByZWFkb25seSBlbXB0eSA9IHRydWU7XG4gIHJlYWRvbmx5IHBlbmRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgZXJyb3IgPSBudWxsO1xuICByZWFkb25seSBlbmFibGVkID0gZmFsc2U7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgdG91Y2hlZCA9IGZhbHNlO1xuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmVuYWJsZWQ7XG4gIH1cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudG91Y2hlZDtcbiAgfVxuXG4gIGRpc2FibGUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuICBlbmFibGUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe31cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe31cbiAgbWFya0FzVG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuICBtYXJrQXNEaXJ0eShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuICBtYXJrQXNMb2FkZWQob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuICBtYXJrQXNSZWFkeShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZmFsc2UpO1xuICB9XG4gIHJlYWR5KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRydWUpO1xuICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEFwcEZvcm1Qcm92aWRlcjxGIGV4dGVuZHMgSUFwcEZvcm0gPSBJQXBwRm9ybT4gaW1wbGVtZW50cyBJQXBwRm9ybSB7XG4gIHN0YXRpYyBOVUxMX0ZPUk0gPSBuZXcgQXBwTnVsbEZvcm0oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdldHRlckZuOiAoKSA9PiBGKSB7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWxlZ2F0ZSgpOiBJQXBwRm9ybSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0dGVyRm4oKSB8fCBBcHBGb3JtUHJvdmlkZXIuTlVMTF9GT1JNO1xuICB9XG5cbiAgd2FpdERlbGVnYXRlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8Rj4ge1xuICAgIGxldCBjb250ZW50OiBGO1xuICAgIHJldHVybiB3YWl0Rm9yKCgpID0+IHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmdldHRlckZuKCk7XG4gICAgICByZXR1cm4gISFjb250ZW50O1xuICAgIH0sIG9wdHMpLnRoZW4oXyA9PiBjb250ZW50KTtcbiAgfVxuXG4gIC8qIC0tIGRlbGVnYXRlZCBtZXRob2RzIC0tICovXG5cbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZW5hYmxlZDtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZGlzYWJsZWQ7XG4gIH1cbiAgZ2V0IGVycm9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZXJyb3I7XG4gIH1cbiAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuaW52YWxpZDtcbiAgfVxuICBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudmFsaWQ7XG4gIH1cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRpcnR5O1xuICB9XG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lbXB0eTtcbiAgfVxuICBnZXQgcGVuZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wZW5kaW5nO1xuICB9XG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmxvYWRpbmc7XG4gIH1cbiAgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudG91Y2hlZDtcbiAgfVxuICBnZXQgdW50b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnVudG91Y2hlZDtcbiAgfVxuICByZWFkeSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnJlYWR5KCk7XG4gIH1cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS53YWl0SWRsZSgpO1xuICB9XG4gIGRpc2FibGUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRpc2FibGUob3B0cyk7XG4gIH1cbiAgZW5hYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lbmFibGUob3B0cyk7XG4gIH1cbiAgbWFya0FzUHJpc3RpbmUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1ByaXN0aW5lKG9wdHMpO1xuICB9XG4gIG1hcmtBc1VudG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzVW50b3VjaGVkKG9wdHMpO1xuICB9XG4gIG1hcmtBc1RvdWNoZWQob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1RvdWNoZWQob3B0cyk7XG4gIH1cbiAgbWFya0FsbEFzVG91Y2hlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQWxsQXNUb3VjaGVkKG9wdHMpO1xuICB9XG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuICBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzTG9hZGluZyhvcHRzKTtcbiAgfVxuICBtYXJrQXNMb2FkZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNMb2FkZWQob3B0cyk7XG4gIH1cbiAgbWFya0FzUmVhZHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNSZWFkeShvcHRzKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1BcnJheUhlbHBlck9wdGlvbnMge1xuICBhbGxvd0VtcHR5QXJyYXk6IGJvb2xlYW47IC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgdmFsaWRhdG9ycz86IFZhbGlkYXRvckZuW107XG59XG5cbmV4cG9ydCBjbGFzcyBGb3JtQXJyYXlIZWxwZXI8VCA9IEVudGl0eTxhbnk+LCBDIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sID0gQWJzdHJhY3RDb250cm9sPiB7XG5cbiAgc3RhdGljIGdldE9yQ3JlYXRlQXJyYXkoXG4gICAgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLFxuICAgIGFycmF5TmFtZTogc3RyaW5nKTogVW50eXBlZEZvcm1BcnJheSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSBmb3JtLmRpc2FibGVkO1xuICAgIGxldCBhcnJheUNvbnRyb2wgPSBmb3JtLmdldChhcnJheU5hbWUpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgaWYgKCFhcnJheUNvbnRyb2wpIHtcbiAgICAgIGFycmF5Q29udHJvbCA9IGZvcm1CdWlsZGVyLmFycmF5KFtdKTtcblxuICAgICAgLy8gQXBwbHkgcGFyZW50IGRpc2FibGVkIHN0YXRlLCBiZWZvcmUgdG8gcHVzaCBpdCBpbnRvIHRoZSBhcnJheVxuICAgICAgLy8gVGhpcyBpcyBuZWVkIHRvIGF2b2lkIHBhcmVudCBmb3JtIHRvIGJlIGVuYWJsZWQsIGFmdGVyIGNhbGxpbmcgcmVzaXplQXJyYXkoKVxuICAgICAgaWYgKGRpc2FibGVkICYmIGFycmF5Q29udHJvbC5lbmFibGVkKSBhcnJheUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICBmb3JtLmFkZENvbnRyb2woYXJyYXlOYW1lLCBhcnJheUNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXlDb250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWxsb3dFbXB0eUFycmF5OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF92YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdO1xuXG4gIGdldCBhbGxvd0VtcHR5QXJyYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93RW1wdHlBcnJheTtcbiAgfVxuXG4gIHNldCBhbGxvd0VtcHR5QXJyYXkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEFsbG93RW1wdHlBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZm9ybUFycmF5KCk6IFVudHlwZWRGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtQXJyYXk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtQXJyYXk6IFVudHlwZWRGb3JtQXJyYXksXG4gICAgcHJpdmF0ZSBjcmVhdGVDb250cm9sOiAodmFsdWU/OiBUKSA9PiBDLFxuICAgIHByaXZhdGUgZXF1YWxzOiAodjE6IFQsIHYyOiBUKSA9PiBib29sZWFuLFxuICAgIHByaXZhdGUgaXNFbXB0eTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiBGb3JtQXJyYXlIZWxwZXJPcHRpb25zXG4gICkge1xuICAgIHRoaXMuX3ZhbGlkYXRvcnMgPSBvcHRpb25zICYmIG9wdGlvbnMudmFsaWRhdG9ycztcblxuICAgIC8vIGVtcHR5IGFycmF5IG5vdCBhbGxvdyBieSBkZWZhdWx0XG4gICAgdGhpcy5zZXRBbGxvd0VtcHR5QXJyYXkodG9Cb29sZWFuKG9wdGlvbnM/LmFsbG93RW1wdHlBcnJheSwgZmFsc2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIGFkZCh2YWx1ZT86IFQsIG9wdGlvbnM/OiB7IGVtaXRFdmVudDogYm9vbGVhbjsgaW5zZXJ0QXQ/OiBudW1iZXIgfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhZGRWYWx1ZUluQXJyYXkodGhpcy5fZm9ybUFycmF5LCB0aGlzLmNyZWF0ZUNvbnRyb2wsIHRoaXMuZXF1YWxzLCB0aGlzLmlzRW1wdHksIHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUF0KGluZGV4OiBudW1iZXIpIHtcbiAgICAvLyBEbyBub3QgcmVtb3ZlIGlmIGxhc3QgY3JpdGVyaW9uXG4gICAgaWYgKCF0aGlzLl9hbGxvd0VtcHR5QXJyYXkgJiYgdGhpcy5fZm9ybUFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGNsZWFyVmFsdWVJbkFycmF5KHRoaXMuX2Zvcm1BcnJheSwgdGhpcy5pc0VtcHR5LCBpbmRleCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHJlbW92ZVZhbHVlSW5BcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuaXNFbXB0eSwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2l6ZShsZW5ndGg6IG51bWJlciwgb3B0aW9ucz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZXNpemVBcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuY3JlYXRlQ29udHJvbCwgbGVuZ3RoLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNsZWFyQXQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjbGVhclZhbHVlSW5BcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuaXNFbXB0eSwgaW5kZXgpO1xuICB9XG5cbiAgaXNMYXN0KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2Zvcm1BcnJheS5sZW5ndGggLSAxKSA9PT0gaW5kZXg7XG4gIH1cblxuICByZW1vdmVBbGxFbXB0eSgpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KGMgPT4gdGhpcy5pc0VtcHR5KGMudmFsdWUpKTtcbiAgICB3aGlsZShpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgaW5kZXggPSB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KGMgPT4gdGhpcy5pc0VtcHR5KGMudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1BcnJheS5sZW5ndGg7XG4gIH1cblxuICBhdChpbmRleDogbnVtYmVyKTogQyB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1BcnJheS5hdChpbmRleCkgYXMgQztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNpemUgdGhlIEZvcm1BcnJheSwgdGhlbiBzZXQgdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZXNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHNldFZhbHVlKHZhbHVlczogVFtdLCBvcHRpb25zPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemUodmFsdWVzPy5sZW5ndGh8fDApO1xuICAgIHRoaXMuX2Zvcm1BcnJheS5zZXRWYWx1ZSh2YWx1ZXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2l6ZSB0aGUgRm9ybUFycmF5LCB0aGVuIHBhdGNoIHZhbHVlc1xuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVzXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBwYXRjaFZhbHVlKHZhbHVlczogVFtdLCBvcHRpb25zPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemUodmFsdWVzPy5sZW5ndGh8fDApO1xuICAgIHRoaXMuX2Zvcm1BcnJheS5wYXRjaFZhbHVlKHZhbHVlcywgb3B0aW9ucyk7XG4gIH1cblxuICBkaXNhYmxlKG9wdHM/OiB7XG4gICAgb25seVNlbGY/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pIHtcbiAgICB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaChjID0+IGMuZGlzYWJsZShvcHRzKSk7XG4gIH1cblxuICBlbmFibGUob3B0cz86IHtcbiAgICBvbmx5U2VsZj86IGJvb2xlYW47XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHRoaXMuX2Zvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKGMgPT4gYy5lbmFibGUob3B0cykpO1xuICB9XG5cbiAgZm9yRWFjaChpdGU6IChjb250cm9sOiBDKSA9PiB2b2lkICkge1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemUoKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5fZm9ybUFycmF5LmF0KGkpIGFzIEM7XG4gICAgICBpZiAoY29udHJvbCkgaXRlKGNvbnRyb2wpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIGludGVybmFsIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgc2V0QWxsb3dFbXB0eUFycmF5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX2FsbG93RW1wdHlBcnJheSA9PT0gdmFsdWUpIHJldHVybjsgLy8gU2tpcCBpZiBzYW1lXG5cbiAgICB0aGlzLl9hbGxvd0VtcHR5QXJyYXkgPSB2YWx1ZTtcblxuICAgIC8vIFNldCByZXF1aXJlZCAob3IgcmVzdGUpIG1pbiBsZW5ndGggdmFsaWRhdG9yXG4gICAgaWYgKHRoaXMuX2FsbG93RW1wdHlBcnJheSkge1xuICAgICAgdGhpcy5fZm9ybUFycmF5LnNldFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyB8fCBudWxsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9mb3JtQXJyYXkuc2V0VmFsaWRhdG9ycygodGhpcy5fdmFsaWRhdG9ycyB8fCBbXSkuY29uY2F0KFNoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMucmVxdWlyZWRBcnJheU1pbkxlbmd0aCgxKSkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQXBwRm9ybUFycmF5T3B0aW9ucyBleHRlbmRzIEFic3RyYWN0Q29udHJvbE9wdGlvbnMge1xuICBhbGxvd0VtcHR5QXJyYXk/OiBib29sZWFuOyAvLyB0cnVlIGJ5IGRlZmF1bHRcbiAgYWxsb3dSZXVzZUNvbnRyb2xzPzogYm9vbGVhbjsgLy8gdHJ1ZSBieSBkZWZhdWx0XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBGb3JtQXJyYXk8VCBleHRlbmRzIEVudGl0eTxUPiwgQyBleHRlbmRzIEFic3RyYWN0Q29udHJvbD4gZXh0ZW5kcyBVbnR5cGVkRm9ybUFycmF5IHtcblxuICBwcml2YXRlIG9wdGlvbnM/OiBBcHBGb3JtQXJyYXlPcHRpb25zO1xuXG4gIGdldCBhbGxvd0VtcHR5QXJyYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hbGxvd0VtcHR5QXJyYXk7XG4gIH1cblxuICBzZXQgYWxsb3dFbXB0eUFycmF5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRBbGxvd0VtcHR5QXJyYXkodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNyZWF0ZUNvbnRyb2w6ICh2YWx1ZT86IFQpID0+IEMsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXF1YWxzOiAodjE6IFQsIHYyOiBUKSA9PiBib29sZWFuLFxuICAgICAgICAgICAgICBwcml2YXRlIGlzRW1wdHk6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbixcbiAgICAgICAgICAgICAgb3B0aW9ucz86IEFwcEZvcm1BcnJheU9wdGlvbnMgfCB1bmRlZmluZWQgfCBudWxsXG4gICkge1xuICAgIHN1cGVyKFtdLCBvcHRpb25zKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBhbGxvd0VtcHR5QXJyYXk6IHRydWUsXG4gICAgICBhbGxvd1JldXNlQ29udHJvbHM6IHRydWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcbiAgICB0aGlzLnNldEFsbG93RW1wdHlBcnJheSh0aGlzLm9wdGlvbnMuYWxsb3dFbXB0eUFycmF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXSWxsIHJlYnVpbGQgdGhlIGFycmF5LCB1c2luZyB0aGUgZ2l2ZW4gdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZXNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHNldFZhbHVlKHZhbHVlczogYW55W10sIG9wdGlvbnM/OiB7XG4gICAgb25seVNlbGY/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignXFwndW5kZWZpbmVkXFwnIHZhbHVlIG5vdCBhbGxvd2VkIGluIEFwcEZvcm1BcnJheS5zZXRWYWx1ZSgpLiBVc2UgXFwnbnVsbFxcJyBvciBcXCdbXVxcJyB0byBjbGVhciB0aGUgYXJyYXknKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dSZXVzZUNvbnRyb2xzID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuXG4gICAgICAvLyBDbGVhbiBhbGxcbiAgICAgIHRoaXMucmVzaXplKDAsIHtlbWl0RXZlbnQ6IG9wdGlvbnM/LmVtaXRFdmVudH0pO1xuXG4gICAgICAvLyBSZWNyZWF0ZSBlYWNoIGNvbnRyb2wsIHdpdGggYSBkZWZhdWx0IHZhbHVlXG4gICAgICAodmFsdWVzIHx8IFtdKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbCh2YWx1ZSk7XG5cbiAgICAgICAgLy8gQXBwbHkgcGFyZW50IGRpc2FibGVkIHN0YXRlLCBiZWZvcmUgdG8gcHVzaCBpdCBpbnRvIHRoZSBhcnJheVxuICAgICAgICAvLyBUaGlzIGlzIG5lZWQgdG8gYXZvaWQgcGFyZW50IGZvcm0gdG8gYmUgZW5hYmxlZCwgYWZ0ZXIgY2FsbGluZyBBcHBGb3JtQXJyYXkucGF0Y2hWYWx1ZSgpIChlLmcuIGluIHRhYmxlJ3Mgcm93IHZhbGlkYXRvcilcbiAgICAgICAgaWYgKGRpc2FibGVkICYmIGNvbnRyb2wuZW5hYmxlZCkgY29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgIGVsc2UgaWYgKCFkaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICAgIHRoaXMucHVzaChjb250cm9sLCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucmVzaXplKHZhbHVlcz8ubGVuZ3RoIHx8IDAsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHBhdGNoVmFsdWUodmFsdWVzOiBhbnlbXXxudWxsfHVuZGVmaW5lZCwgb3B0aW9ucz86IHtcbiAgICBvbmx5U2VsZj86IGJvb2xlYW47XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IHZvaWQge1xuICAgIC8vIC0tLSAvIVxcIEZyb20gb2ZmaWNpYWwgQW5ndWxhciBkb2Mgb2YgJ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKCknIDpcbiAgICAvLyAgIEV2ZW4gdGhvdWdoIHRoZSBgdmFsdWVgIGFyZ3VtZW50IHR5cGUgZG9lc24ndCBhbGxvdyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIHZhbHVlcywgdGhlXG4gICAgLy8gICBgcGF0Y2hWYWx1ZWAgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSBhbmQgaW5uZXIgZGF0YSBzdHJ1Y3R1cmVzIG1pZ2h0IGhhdmUgdGhlc2UgdmFsdWVzLCBzb1xuICAgIC8vICAgd2UganVzdCBpZ25vcmUgc3VjaCBjYXNlcyB3aGVuIGEgZmllbGQgY29udGFpbmluZyBGb3JtR3JvdXAgaW5zdGFuY2UgcmVjZWl2ZXMgYG51bGxgIG9yXG4gICAgLy8gICBgdW5kZWZpbmVkYCBhcyBhIHZhbHVlLlxuICAgIC8vIC0tLVxuICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgcmV0dXJuOyAvLyBJZ25vcmVcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dSZXVzZUNvbnRyb2xzID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuXG4gICAgICAvLyBDbGVhbiBhbGxcbiAgICAgIHRoaXMucmVzaXplKDAsIHtlbWl0RXZlbnQ6IG9wdGlvbnM/LmVtaXRFdmVudH0pO1xuXG4gICAgICAvLyBSZWNyZWF0ZSBlYWNoIGNvbnRyb2wsIHdpdGggYSBkZWZhdWx0IHZhbHVlXG4gICAgICAodmFsdWVzIHx8IFtdKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbCh2YWx1ZSk7XG5cbiAgICAgICAgLy8gQXBwbHkgcGFyZW50IGRpc2FibGVkIHN0YXRlLCBiZWZvcmUgdG8gcHVzaCBpdCBpbnRvIHRoZSBhcnJheVxuICAgICAgICAvLyBUaGlzIGlzIG5lZWQgdG8gYXZvaWQgcGFyZW50IGZvcm0gdG8gYmUgZW5hYmxlZCwgYWZ0ZXIgY2FsbGluZyBBcHBGb3JtQXJyYXkucGF0Y2hWYWx1ZSgpIChlLmcuIGluIHRhYmxlJ3Mgcm93IHZhbGlkYXRvcilcbiAgICAgICAgaWYgKGRpc2FibGVkICYmIGNvbnRyb2wuZW5hYmxlZCkgY29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgIGVsc2UgaWYgKCFkaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICAgIHRoaXMucHVzaChjb250cm9sLCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucmVzaXplKHZhbHVlcz8ubGVuZ3RoIHx8IDAsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICBzdXBlci5wYXRjaFZhbHVlKHZhbHVlcywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcmVzaXplKGxlbmd0aDogbnVtYmVyLCBvcHRpb25zPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IGxlbmd0aCkgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXG5cbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7IC8vIFNhdmUgZW5hYmxlZCBoZXJlLCBiZWNhdXNlIHVwZGF0ZSBjYW4gb2NjdXIgZnJvbSByZXNpemVBcnJheSgpXG5cbiAgICAvLyBSZWR1Y2VcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXQodGhpcy5sZW5ndGggLSAxLCB7ZW1pdEV2ZW50OiBvcHRpb25zPy5lbWl0RXZlbnR9KTtcbiAgICB9XG5cbiAgICAvLyBPciBpbmNyZWFzZSBzaXplXG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sKCk7XG5cbiAgICAgIC8vIEFwcGx5IHBhcmVudCBkaXNhYmxlZCBzdGF0ZSwgYmVmb3JlIHRvIHB1c2ggaXQgaW50byB0aGUgYXJyYXlcbiAgICAgIC8vIFRoaXMgaXMgbmVlZCB0byBhdm9pZCBwYXJlbnQgZm9ybSB0byBiZSBlbmFibGVkLCBhZnRlciBjYWxsaW5nIEFwcEZvcm1BcnJheS5wYXRjaFZhbHVlKCkgKGUuZy4gaW4gdGFibGUncyByb3cgdmFsaWRhdG9yKVxuICAgICAgaWYgKGRpc2FibGVkICYmIGNvbnRyb2wuZW5hYmxlZCkgY29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICBlbHNlIGlmICghZGlzYWJsZWQgJiYgY29udHJvbC5kaXNhYmxlZCkgY29udHJvbC5lbmFibGUoe2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgICAgdGhpcy5wdXNoKGNvbnRyb2wsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGUob3B0cz86IHtcbiAgICBvbmx5U2VsZj86IGJvb2xlYW47XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHN1cGVyLmRpc2FibGUob3B0cyk7XG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKGMgPT4gYy5kaXNhYmxlKG9wdHMpKTtcbiAgfVxuXG4gIGVuYWJsZShvcHRzPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KSB7XG4gICAgc3VwZXIuZW5hYmxlKG9wdHMpO1xuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaChjID0+IGMuZW5hYmxlKG9wdHMpKTtcbiAgfVxuXG4gIGZvckVhY2goaXRlOiAoY29udHJvbDogQykgPT4gdm9pZCApIHtcbiAgICBjb25zdCBzaXplID0gdGhpcy5sZW5ndGg7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuYXQoaSkgYXMgQztcbiAgICAgIGlmIChjb250cm9sKSBpdGUoY29udHJvbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgYWRkKHZhbHVlPzogVCwgb3B0aW9ucz86IHsgZW1pdEV2ZW50OiBib29sZWFuOyBpbnNlcnRBdD86IG51bWJlciB9KSB7XG4gICAgYWRkVmFsdWVJbkFycmF5KHRoaXMsIHRoaXMuY3JlYXRlQ29udHJvbCwgdGhpcy5lcXVhbHMsIHRoaXMuaXNFbXB0eSwgdmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlQXQoaW5kZXg6IG51bWJlciwgb3B0aW9ucz86IHtlbWl0RXZlbnQ6IGJvb2xlYW4gfSkge1xuICAgIC8vIERvIG5vdCByZW1vdmUgaWYgbGFzdCBjcml0ZXJpb25cbiAgICBpZiAodGhpcy5vcHRpb25zLmFsbG93RW1wdHlBcnJheSA9PT0gZmFsc2UgJiYgdGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuY2xlYXJBdChpbmRleCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgc3VwZXIucmVtb3ZlQXQoaW5kZXgsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQXQoaW5kZXg6IG51bWJlciwgb3B0aW9ucz86IHtlbWl0RXZlbnQ6IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmF0KGluZGV4KTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KGNvbnRyb2wudmFsdWUpKSByZXR1cm47IC8vIHNraXAgKG5vdCBuZWVkIHRvIGNsZWFyKVxuXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgICBjb3B5RW50aXR5MkZvcm0oe30sIGNvbnRyb2wsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShbXSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShudWxsLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgaXNMYXN0KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMubGVuZ3RoIC0gMSkgPT09IGluZGV4O1xuICB9XG5cbiAgcmVtb3ZlQWxsRW1wdHkoKSB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jb250cm9scy5maW5kSW5kZXgoYyA9PiB0aGlzLmlzRW1wdHkoYy52YWx1ZSkpO1xuICAgIHdoaWxlKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5yZW1vdmVBdChpbmRleCk7XG4gICAgICBpbmRleCA9IHRoaXMuY29udHJvbHMuZmluZEluZGV4KGMgPT4gdGhpcy5pc0VtcHR5KGMudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBpbnRlcm5hbCAtLSAqL1xuXG4gIHByb3RlY3RlZCBzZXRBbGxvd0VtcHR5QXJyYXkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmFsbG93RW1wdHlBcnJheSA9PT0gdmFsdWUpIHJldHVybjsgLy8gU2tpcCBpZiBzYW1lXG5cbiAgICB0aGlzLm9wdGlvbnMuYWxsb3dFbXB0eUFycmF5ID0gdmFsdWU7XG5cbiAgICAvLyBTZXQgcmVxdWlyZWQgKG9yIHJlc3RlKSBtaW4gbGVuZ3RoIHZhbGlkYXRvclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dFbXB0eUFycmF5KSB7XG4gICAgICB0aGlzLnNldFZhbGlkYXRvcnModGhpcy5vcHRpb25zLnZhbGlkYXRvcnMgfHwgbnVsbCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMub3B0aW9ucz8udmFsaWRhdG9ycyB8fCBbXTtcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9ycyhcbiAgICAgICAgKEFycmF5LmlzQXJyYXkodmFsaWRhdG9ycykgPyB2YWxpZGF0b3JzIDogW3ZhbGlkYXRvcnNdKVxuICAgICAgICAgIC5jb25jYXQoU2hhcmVkRm9ybUFycmF5VmFsaWRhdG9ycy5yZXF1aXJlZEFycmF5TWluTGVuZ3RoKDEpKSk7XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE8gY29udGludWUgdG8gdXNlIHRoaXMga2luZCBvZiBkZWNsYXJhdGlvbiA/XG5leHBvcnQgY2xhc3MgQXBwRm9ybVV0aWxzIHtcbiAgc3RhdGljIGNvcHlFbnRpdHkyRm9ybSA9IGNvcHlFbnRpdHkyRm9ybTtcbiAgc3RhdGljIGdldEZvcm1WYWx1ZUZyb21FbnRpdHkgPSBnZXRGb3JtVmFsdWVGcm9tRW50aXR5O1xuICBzdGF0aWMgbG9nRm9ybUVycm9ycyA9IGxvZ0Zvcm1FcnJvcnM7XG4gIHN0YXRpYyBnZXRDb250cm9sRnJvbVBhdGggPSBnZXRDb250cm9sRnJvbVBhdGg7XG4gIHN0YXRpYyBmaWx0ZXJOdW1iZXJJbnB1dCA9IGZpbHRlck51bWJlcklucHV0O1xuICBzdGF0aWMgZGlzYWJsZUNvbnRyb2xzID0gZGlzYWJsZUNvbnRyb2xzO1xuICBzdGF0aWMgc2VsZWN0SW5wdXRDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIG1hcmtBbGxBc1RvdWNoZWQoKSBpbnN0ZWFkIChuYW1pbmcgd2FzIHdyb25nKVxuICAgKi9cbiAgc3RhdGljIG1hcmtBc1RvdWNoZWQgPSBtYXJrQWxsQXNUb3VjaGVkO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgY29udHJvbCBhbmQgYWxsIGl0cyBkZXNjZW5kYW50IGNvbnRyb2xzIGFzIHRvdWNoZWQuXG4gICAqIFNlZSBhbHNvOlxuICAgKiAtIGBtYXJrQXNUb3VjaGVkKClgXG4gICAqL1xuICBzdGF0aWMgbWFya0FsbEFzVG91Y2hlZCA9IG1hcmtBbGxBc1RvdWNoZWQ7XG4gIHN0YXRpYyBtYXJrQXNVbnRvdWNoZWQgPSBtYXJrQXNVbnRvdWNoZWQ7XG4gIHN0YXRpYyB3YWl0V2hpbGVQZW5kaW5nID0gd2FpdFdoaWxlUGVuZGluZztcbiAgc3RhdGljIHdhaXRJZGxlID0gd2FpdElkbGU7XG4gIHN0YXRpYyB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5ID0gdXBkYXRlVmFsdWVBbmRWYWxpZGl0eTtcblxuICBzdGF0aWMgZ2V0Rm9ybUVycm9ycyA9IGdldEZvcm1FcnJvcnM7XG5cbiAgc3RhdGljIGlzRm9ybShvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBJQXBwRm9ybSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIEFwcEZvcm1Qcm92aWRlclxuICAgICAgfHwgJ2RpcnR5JyBpbiBvYmplY3QgJiYgJ2VuYWJsZWQnIGluIG9iamVjdCAmJiAndmFsaWQnIGluIG9iamVjdDtcbiAgfVxuXG4gIC8vIEFycmF5Rm9ybVxuICBzdGF0aWMgYWRkVmFsdWVJbkFycmF5ID0gYWRkVmFsdWVJbkFycmF5O1xuICBzdGF0aWMgcmVtb3ZlVmFsdWVJbkFycmF5ID0gcmVtb3ZlVmFsdWVJbkFycmF5O1xuICBzdGF0aWMgcmVzaXplQXJyYXkgPSByZXNpemVBcnJheTtcbiAgc3RhdGljIGNsZWFyVmFsdWVJbkFycmF5ID0gY2xlYXJWYWx1ZUluQXJyYXk7XG5cbiAgLy8gQ2FsY3VsYXRlZCBmaWVsZHNcbiAgc3RhdGljIGNhbGN1bGF0ZWRTdWZmaXggPSAnQ2FsY3VsYXRlZCc7XG4gIHN0YXRpYyBpc0NvbnRyb2xIYXNJbnB1dCA9IGlzQ29udHJvbEhhc0lucHV0O1xuICBzdGF0aWMgc2V0Q2FsY3VsYXRlZFZhbHVlID0gc2V0Q2FsY3VsYXRlZFZhbHVlO1xuICBzdGF0aWMgcmVzZXRDYWxjdWxhdGVkVmFsdWUgPSByZXNldENhbGN1bGF0ZWRWYWx1ZTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb250cm9sSGFzSW5wdXQoY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sfSwgY29udHJvbE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyB0cnVlIGlmIHRoZSBjb250cm9sIGhhcyBhIHZhbHVlIGFuZCBpdHMgJ2NhbGN1bGF0ZWQnIGNvbnRyb2wgaGFzIHRoZSB2YWx1ZSAnZmFsc2UnXG4gIHJldHVybiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUgJiYgIXRvQm9vbGVhbihjb250cm9sc1tjb250cm9sTmFtZSArIEFwcEZvcm1VdGlscy5jYWxjdWxhdGVkU3VmZml4XS52YWx1ZSwgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXRlZFZhbHVlKGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbH0sIGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgLy8gc2V0IHZhbHVlIHRvIGNvbnRyb2xcbiAgY29udHJvbHNbY29udHJvbE5hbWVdLnNldFZhbHVlKHJvdW5kKHZhbHVlKSk7XG4gIC8vIHNldCAnY2FsY3VsYXRlZCcgY29udHJvbCB0byAndHJ1ZSdcbiAgY29udHJvbHNbY29udHJvbE5hbWUgKyBBcHBGb3JtVXRpbHMuY2FsY3VsYXRlZFN1ZmZpeF0uc2V0VmFsdWUodHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldENhbGN1bGF0ZWRWYWx1ZShjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2x9LCBjb250cm9sTmFtZTogc3RyaW5nKSB7XG4gIGlmICghaXNDb250cm9sSGFzSW5wdXQoY29udHJvbHMsIGNvbnRyb2xOYW1lKSkge1xuICAgIC8vIHNldCB1bmRlZmluZWQgb25seSBpZiBjb250cm9sIGFscmVhZHkgY2FsY3VsYXRlZFxuICAgIEFwcEZvcm1VdGlscy5zZXRDYWxjdWxhdGVkVmFsdWUoY29udHJvbHMsIGNvbnRyb2xOYW1lLCB1bmRlZmluZWQpO1xuICB9XG59XG5cbiJdfQ==
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2Zvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQyxnQkFBZ0IsRUFBc0IsZ0JBQWdCLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1SSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBQyxPQUFPLEVBQWlCLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUNMLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2pCLE1BQU0sb0JBQW9CLENBQUM7QUF3QzVCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFDYixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNiLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNiLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENB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QUFpQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBRTtRQUM3QyxtREFBbUQ7UUFDbkQsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDbkU7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEFic3RyYWN0Q29udHJvbE9wdGlvbnMsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yRm59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RW50aXR5fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtTaGFyZWRGb3JtQXJyYXlWYWxpZGF0b3JzfSBmcm9tICcuLi8uLi9zaGFyZWQvdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtyb3VuZCwgdG9Cb29sZWFufSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7ZmlsdGVyTnVtYmVySW5wdXQsIHNlbGVjdElucHV0Q29udGVudH0gZnJvbSAnLi4vLi4vc2hhcmVkL2lucHV0cyc7XG5pbXBvcnQge3dhaXRGb3IsIFdhaXRGb3JPcHRpb25zfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtcbiAgYWRkVmFsdWVJbkFycmF5LFxuICBjbGVhclZhbHVlSW5BcnJheSxcbiAgY29weUVudGl0eTJGb3JtLFxuICBkaXNhYmxlQ29udHJvbHMsXG4gIGdldENvbnRyb2xGcm9tUGF0aCxcbiAgZ2V0Rm9ybUVycm9ycyxcbiAgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSxcbiAgbG9nRm9ybUVycm9ycyxcbiAgbWFya0FsbEFzVG91Y2hlZCxcbiAgbWFya0FzVW50b3VjaGVkLFxuICByZW1vdmVWYWx1ZUluQXJyYXksXG4gIHJlc2l6ZUFycmF5LFxuICB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5LFxuICB3YWl0SWRsZSxcbiAgd2FpdFdoaWxlUGVuZGluZ1xufSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybXMnO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIElBcHBGb3JtR2V0dGVyID0gKCkgPT4gSUFwcEZvcm07XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBPblJlYWR5IHtcbiAgbmdPblJlYWR5KCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcEZvcm0gIHtcbiAgLy8gRnJvbSBBbmd1bGFyIGZvcm1cbiAgaW52YWxpZDogYm9vbGVhbjtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIGRpcnR5OiBib29sZWFuO1xuICBwZW5kaW5nOiBib29sZWFuO1xuICBlcnJvcjogc3RyaW5nO1xuICBlbmFibGVkOiBib29sZWFuO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgdG91Y2hlZDogYm9vbGVhbjtcbiAgdW50b3VjaGVkOiBib29sZWFuO1xuXG4gIC8vIFNwZWNpZmljIHRvIElBcHBGb3JtXG4gIGVtcHR5PzogYm9vbGVhbjtcbiAgbG9hZGluZz86IGJvb2xlYW47XG4gIHJlYWR5KCk6IFByb21pc2U8dm9pZD47XG4gIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8YW55PjtcblxuICBkaXNhYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIGVuYWJsZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbn0pO1xuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIG1hcmtBc1VudG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbn0pO1xuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW59KTtcbiAgbWFya0FzTG9hZGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIG1hcmtBc1JlYWR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFufSk7XG59XG5cblxuLyoqXG4gKiBBIGZvcm0gdGhhdCBkbyBub3RoaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBOdWxsRm9ybSBpbXBsZW1lbnRzIElBcHBGb3JtIHtcbiAgcmVhZG9ubHkgaW52YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSB2YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSBkaXJ0eSA9IGZhbHNlO1xuICByZWFkb25seSBlbXB0eSA9IHRydWU7XG4gIHJlYWRvbmx5IHBlbmRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgZXJyb3IgPSBudWxsO1xuICByZWFkb25seSBlbmFibGVkID0gZmFsc2U7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgdG91Y2hlZCA9IGZhbHNlO1xuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmVuYWJsZWQ7XG4gIH1cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudG91Y2hlZDtcbiAgfVxuXG4gIGRpc2FibGUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuICBlbmFibGUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe31cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe31cbiAgbWFya0FzVG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuICBtYXJrQXNEaXJ0eShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuICBtYXJrQXNMb2FkZWQob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuICBtYXJrQXNSZWFkeShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZmFsc2UpO1xuICB9XG4gIHJlYWR5KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRydWUpO1xuICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEFwcEZvcm1Qcm92aWRlcjxGIGV4dGVuZHMgSUFwcEZvcm0gPSBJQXBwRm9ybT4gaW1wbGVtZW50cyBJQXBwRm9ybSB7XG4gIHN0YXRpYyBOVUxMX0ZPUk0gPSBuZXcgQXBwTnVsbEZvcm0oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdldHRlckZuOiAoKSA9PiBGKSB7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWxlZ2F0ZSgpOiBJQXBwRm9ybSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0dGVyRm4oKSB8fCBBcHBGb3JtUHJvdmlkZXIuTlVMTF9GT1JNO1xuICB9XG5cbiAgd2FpdERlbGVnYXRlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8Rj4ge1xuICAgIGxldCBjb250ZW50OiBGO1xuICAgIHJldHVybiB3YWl0Rm9yKCgpID0+IHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmdldHRlckZuKCk7XG4gICAgICByZXR1cm4gISFjb250ZW50O1xuICAgIH0sIG9wdHMpLnRoZW4oXyA9PiBjb250ZW50KTtcbiAgfVxuXG4gIC8qIC0tIGRlbGVnYXRlZCBtZXRob2RzIC0tICovXG5cbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZW5hYmxlZDtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZGlzYWJsZWQ7XG4gIH1cbiAgZ2V0IGVycm9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZXJyb3I7XG4gIH1cbiAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuaW52YWxpZDtcbiAgfVxuICBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudmFsaWQ7XG4gIH1cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRpcnR5O1xuICB9XG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lbXB0eTtcbiAgfVxuICBnZXQgcGVuZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wZW5kaW5nO1xuICB9XG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmxvYWRpbmc7XG4gIH1cbiAgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudG91Y2hlZDtcbiAgfVxuICBnZXQgdW50b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnVudG91Y2hlZDtcbiAgfVxuICByZWFkeSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnJlYWR5KCk7XG4gIH1cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS53YWl0SWRsZSgpO1xuICB9XG4gIGRpc2FibGUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRpc2FibGUob3B0cyk7XG4gIH1cbiAgZW5hYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lbmFibGUob3B0cyk7XG4gIH1cbiAgbWFya0FzUHJpc3RpbmUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1ByaXN0aW5lKG9wdHMpO1xuICB9XG4gIG1hcmtBc1VudG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzVW50b3VjaGVkKG9wdHMpO1xuICB9XG4gIG1hcmtBc1RvdWNoZWQob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1RvdWNoZWQob3B0cyk7XG4gIH1cbiAgbWFya0FsbEFzVG91Y2hlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQWxsQXNUb3VjaGVkKG9wdHMpO1xuICB9XG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuICBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzTG9hZGluZyhvcHRzKTtcbiAgfVxuICBtYXJrQXNMb2FkZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNMb2FkZWQob3B0cyk7XG4gIH1cbiAgbWFya0FzUmVhZHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNSZWFkeShvcHRzKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1BcnJheUhlbHBlck9wdGlvbnMge1xuICBhbGxvd0VtcHR5QXJyYXk6IGJvb2xlYW47IC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgdmFsaWRhdG9ycz86IFZhbGlkYXRvckZuW107XG59XG5cbmV4cG9ydCBjbGFzcyBGb3JtQXJyYXlIZWxwZXI8VCA9IEVudGl0eTxhbnk+LCBDIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sID0gQWJzdHJhY3RDb250cm9sPiB7XG5cbiAgc3RhdGljIGdldE9yQ3JlYXRlQXJyYXkoXG4gICAgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLFxuICAgIGFycmF5TmFtZTogc3RyaW5nKTogVW50eXBlZEZvcm1BcnJheSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSBmb3JtLmRpc2FibGVkO1xuICAgIGxldCBhcnJheUNvbnRyb2wgPSBmb3JtLmdldChhcnJheU5hbWUpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgaWYgKCFhcnJheUNvbnRyb2wpIHtcbiAgICAgIGFycmF5Q29udHJvbCA9IGZvcm1CdWlsZGVyLmFycmF5KFtdKTtcblxuICAgICAgLy8gQXBwbHkgcGFyZW50IGRpc2FibGVkIHN0YXRlLCBiZWZvcmUgdG8gcHVzaCBpdCBpbnRvIHRoZSBhcnJheVxuICAgICAgLy8gVGhpcyBpcyBuZWVkIHRvIGF2b2lkIHBhcmVudCBmb3JtIHRvIGJlIGVuYWJsZWQsIGFmdGVyIGNhbGxpbmcgcmVzaXplQXJyYXkoKVxuICAgICAgaWYgKGRpc2FibGVkICYmIGFycmF5Q29udHJvbC5lbmFibGVkKSBhcnJheUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICBmb3JtLmFkZENvbnRyb2woYXJyYXlOYW1lLCBhcnJheUNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXlDb250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWxsb3dFbXB0eUFycmF5OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF92YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdO1xuXG4gIGdldCBhbGxvd0VtcHR5QXJyYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93RW1wdHlBcnJheTtcbiAgfVxuXG4gIHNldCBhbGxvd0VtcHR5QXJyYXkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEFsbG93RW1wdHlBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZm9ybUFycmF5KCk6IFVudHlwZWRGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtQXJyYXk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtQXJyYXk6IFVudHlwZWRGb3JtQXJyYXksXG4gICAgcHJpdmF0ZSBjcmVhdGVDb250cm9sOiAodmFsdWU/OiBUKSA9PiBDLFxuICAgIHByaXZhdGUgZXF1YWxzOiAodjE6IFQsIHYyOiBUKSA9PiBib29sZWFuLFxuICAgIHByaXZhdGUgaXNFbXB0eTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiBGb3JtQXJyYXlIZWxwZXJPcHRpb25zXG4gICkge1xuICAgIHRoaXMuX3ZhbGlkYXRvcnMgPSBvcHRpb25zICYmIG9wdGlvbnMudmFsaWRhdG9ycztcblxuICAgIC8vIGVtcHR5IGFycmF5IG5vdCBhbGxvdyBieSBkZWZhdWx0XG4gICAgdGhpcy5zZXRBbGxvd0VtcHR5QXJyYXkodG9Cb29sZWFuKG9wdGlvbnM/LmFsbG93RW1wdHlBcnJheSwgZmFsc2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIGFkZCh2YWx1ZT86IFQsIG9wdGlvbnM/OiB7IGVtaXRFdmVudDogYm9vbGVhbjsgaW5zZXJ0QXQ/OiBudW1iZXIgfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhZGRWYWx1ZUluQXJyYXkodGhpcy5fZm9ybUFycmF5LCB0aGlzLmNyZWF0ZUNvbnRyb2wsIHRoaXMuZXF1YWxzLCB0aGlzLmlzRW1wdHksIHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUF0KGluZGV4OiBudW1iZXIpIHtcbiAgICAvLyBEbyBub3QgcmVtb3ZlIGlmIGxhc3QgY3JpdGVyaW9uXG4gICAgaWYgKCF0aGlzLl9hbGxvd0VtcHR5QXJyYXkgJiYgdGhpcy5fZm9ybUFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGNsZWFyVmFsdWVJbkFycmF5KHRoaXMuX2Zvcm1BcnJheSwgdGhpcy5pc0VtcHR5LCBpbmRleCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHJlbW92ZVZhbHVlSW5BcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuaXNFbXB0eSwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2l6ZShsZW5ndGg6IG51bWJlciwgb3B0aW9ucz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZXNpemVBcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuY3JlYXRlQ29udHJvbCwgbGVuZ3RoLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNsZWFyQXQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjbGVhclZhbHVlSW5BcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuaXNFbXB0eSwgaW5kZXgpO1xuICB9XG5cbiAgaXNMYXN0KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2Zvcm1BcnJheS5sZW5ndGggLSAxKSA9PT0gaW5kZXg7XG4gIH1cblxuICByZW1vdmVBbGxFbXB0eSgpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KGMgPT4gdGhpcy5pc0VtcHR5KGMudmFsdWUpKTtcbiAgICB3aGlsZShpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgaW5kZXggPSB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KGMgPT4gdGhpcy5pc0VtcHR5KGMudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1BcnJheS5sZW5ndGg7XG4gIH1cblxuICBhdChpbmRleDogbnVtYmVyKTogQyB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1BcnJheS5hdChpbmRleCkgYXMgQztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNpemUgdGhlIEZvcm1BcnJheSwgdGhlbiBzZXQgdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZXNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHNldFZhbHVlKHZhbHVlczogVFtdLCBvcHRpb25zPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemUodmFsdWVzPy5sZW5ndGh8fDApO1xuICAgIHRoaXMuX2Zvcm1BcnJheS5zZXRWYWx1ZSh2YWx1ZXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2l6ZSB0aGUgRm9ybUFycmF5LCB0aGVuIHBhdGNoIHZhbHVlc1xuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVzXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBwYXRjaFZhbHVlKHZhbHVlczogVFtdLCBvcHRpb25zPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemUodmFsdWVzPy5sZW5ndGh8fDApO1xuICAgIHRoaXMuX2Zvcm1BcnJheS5wYXRjaFZhbHVlKHZhbHVlcywgb3B0aW9ucyk7XG4gIH1cblxuICBkaXNhYmxlKG9wdHM/OiB7XG4gICAgb25seVNlbGY/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pIHtcbiAgICB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaChjID0+IGMuZGlzYWJsZShvcHRzKSk7XG4gIH1cblxuICBlbmFibGUob3B0cz86IHtcbiAgICBvbmx5U2VsZj86IGJvb2xlYW47XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHRoaXMuX2Zvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKGMgPT4gYy5lbmFibGUob3B0cykpO1xuICB9XG5cbiAgZm9yRWFjaChpdGU6IChjb250cm9sOiBDKSA9PiB2b2lkICkge1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemUoKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5fZm9ybUFycmF5LmF0KGkpIGFzIEM7XG4gICAgICBpZiAoY29udHJvbCkgaXRlKGNvbnRyb2wpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIGludGVybmFsIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgc2V0QWxsb3dFbXB0eUFycmF5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX2FsbG93RW1wdHlBcnJheSA9PT0gdmFsdWUpIHJldHVybjsgLy8gU2tpcCBpZiBzYW1lXG5cbiAgICB0aGlzLl9hbGxvd0VtcHR5QXJyYXkgPSB2YWx1ZTtcblxuICAgIC8vIFNldCByZXF1aXJlZCAob3IgcmVzdGUpIG1pbiBsZW5ndGggdmFsaWRhdG9yXG4gICAgaWYgKHRoaXMuX2FsbG93RW1wdHlBcnJheSkge1xuICAgICAgdGhpcy5fZm9ybUFycmF5LnNldFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyB8fCBudWxsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9mb3JtQXJyYXkuc2V0VmFsaWRhdG9ycygodGhpcy5fdmFsaWRhdG9ycyB8fCBbXSkuY29uY2F0KFNoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMucmVxdWlyZWRBcnJheU1pbkxlbmd0aCgxKSkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQXBwRm9ybUFycmF5T3B0aW9ucyBleHRlbmRzIEFic3RyYWN0Q29udHJvbE9wdGlvbnMge1xuICBhbGxvd0VtcHR5QXJyYXk/OiBib29sZWFuOyAvLyB0cnVlIGJ5IGRlZmF1bHRcbiAgYWxsb3dSZXVzZUNvbnRyb2xzPzogYm9vbGVhbjsgLy8gdHJ1ZSBieSBkZWZhdWx0XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBGb3JtQXJyYXk8VCBleHRlbmRzIEVudGl0eTxUPiwgQyBleHRlbmRzIEFic3RyYWN0Q29udHJvbD4gZXh0ZW5kcyBVbnR5cGVkRm9ybUFycmF5IHtcblxuICBwcml2YXRlIG9wdGlvbnM/OiBBcHBGb3JtQXJyYXlPcHRpb25zO1xuXG4gIGdldCBhbGxvd0VtcHR5QXJyYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hbGxvd0VtcHR5QXJyYXk7XG4gIH1cblxuICBzZXQgYWxsb3dFbXB0eUFycmF5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRBbGxvd0VtcHR5QXJyYXkodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNyZWF0ZUNvbnRyb2w6ICh2YWx1ZT86IFQpID0+IEMsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXF1YWxzOiAodjE6IFQsIHYyOiBUKSA9PiBib29sZWFuLFxuICAgICAgICAgICAgICBwcml2YXRlIGlzRW1wdHk6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbixcbiAgICAgICAgICAgICAgb3B0aW9ucz86IEFwcEZvcm1BcnJheU9wdGlvbnMgfCB1bmRlZmluZWQgfCBudWxsXG4gICkge1xuICAgIHN1cGVyKFtdLCBvcHRpb25zKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBhbGxvd0VtcHR5QXJyYXk6IHRydWUsXG4gICAgICBhbGxvd1JldXNlQ29udHJvbHM6IHRydWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcbiAgICB0aGlzLnNldEFsbG93RW1wdHlBcnJheSh0aGlzLm9wdGlvbnMuYWxsb3dFbXB0eUFycmF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXSWxsIHJlYnVpbGQgdGhlIGFycmF5LCB1c2luZyB0aGUgZ2l2ZW4gdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZXNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHNldFZhbHVlKHZhbHVlczogYW55W10sIG9wdGlvbnM/OiB7XG4gICAgb25seVNlbGY/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignXFwndW5kZWZpbmVkXFwnIHZhbHVlIG5vdCBhbGxvd2VkIGluIEFwcEZvcm1BcnJheS5zZXRWYWx1ZSgpLiBVc2UgXFwnbnVsbFxcJyBvciBcXCdbXVxcJyB0byBjbGVhciB0aGUgYXJyYXknKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dSZXVzZUNvbnRyb2xzID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuXG4gICAgICAvLyBDbGVhbiBhbGxcbiAgICAgIHRoaXMucmVzaXplKDAsIHtlbWl0RXZlbnQ6IG9wdGlvbnM/LmVtaXRFdmVudH0pO1xuXG4gICAgICAvLyBSZWNyZWF0ZSBlYWNoIGNvbnRyb2wsIHdpdGggYSBkZWZhdWx0IHZhbHVlXG4gICAgICAodmFsdWVzIHx8IFtdKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbCh2YWx1ZSk7XG5cbiAgICAgICAgLy8gQXBwbHkgcGFyZW50IGRpc2FibGVkIHN0YXRlLCBiZWZvcmUgdG8gcHVzaCBpdCBpbnRvIHRoZSBhcnJheVxuICAgICAgICAvLyBUaGlzIGlzIG5lZWQgdG8gYXZvaWQgcGFyZW50IGZvcm0gdG8gYmUgZW5hYmxlZCwgYWZ0ZXIgY2FsbGluZyBBcHBGb3JtQXJyYXkucGF0Y2hWYWx1ZSgpIChlLmcuIGluIHRhYmxlJ3Mgcm93IHZhbGlkYXRvcilcbiAgICAgICAgaWYgKGRpc2FibGVkICYmIGNvbnRyb2wuZW5hYmxlZCkgY29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgIGVsc2UgaWYgKCFkaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICAgIHRoaXMucHVzaChjb250cm9sLCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucmVzaXplKHZhbHVlcz8ubGVuZ3RoIHx8IDAsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHBhdGNoVmFsdWUodmFsdWVzOiBhbnlbXXxudWxsfHVuZGVmaW5lZCwgb3B0aW9ucz86IHtcbiAgICBvbmx5U2VsZj86IGJvb2xlYW47XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IHZvaWQge1xuICAgIC8vIC0tLSAvIVxcIEZyb20gb2ZmaWNpYWwgQW5ndWxhciBkb2Mgb2YgJ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKCknIDpcbiAgICAvLyAgIEV2ZW4gdGhvdWdoIHRoZSBgdmFsdWVgIGFyZ3VtZW50IHR5cGUgZG9lc24ndCBhbGxvdyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIHZhbHVlcywgdGhlXG4gICAgLy8gICBgcGF0Y2hWYWx1ZWAgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSBhbmQgaW5uZXIgZGF0YSBzdHJ1Y3R1cmVzIG1pZ2h0IGhhdmUgdGhlc2UgdmFsdWVzLCBzb1xuICAgIC8vICAgd2UganVzdCBpZ25vcmUgc3VjaCBjYXNlcyB3aGVuIGEgZmllbGQgY29udGFpbmluZyBGb3JtR3JvdXAgaW5zdGFuY2UgcmVjZWl2ZXMgYG51bGxgIG9yXG4gICAgLy8gICBgdW5kZWZpbmVkYCBhcyBhIHZhbHVlLlxuICAgIC8vIC0tLVxuICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgcmV0dXJuOyAvLyBJZ25vcmVcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dSZXVzZUNvbnRyb2xzID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuXG4gICAgICAvLyBDbGVhbiBhbGxcbiAgICAgIHRoaXMucmVzaXplKDAsIHtlbWl0RXZlbnQ6IG9wdGlvbnM/LmVtaXRFdmVudH0pO1xuXG4gICAgICAvLyBSZWNyZWF0ZSBlYWNoIGNvbnRyb2wsIHdpdGggYSBkZWZhdWx0IHZhbHVlXG4gICAgICAodmFsdWVzIHx8IFtdKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbCh2YWx1ZSk7XG5cbiAgICAgICAgLy8gQXBwbHkgcGFyZW50IGRpc2FibGVkIHN0YXRlLCBiZWZvcmUgdG8gcHVzaCBpdCBpbnRvIHRoZSBhcnJheVxuICAgICAgICAvLyBUaGlzIGlzIG5lZWQgdG8gYXZvaWQgcGFyZW50IGZvcm0gdG8gYmUgZW5hYmxlZCwgYWZ0ZXIgY2FsbGluZyBBcHBGb3JtQXJyYXkucGF0Y2hWYWx1ZSgpIChlLmcuIGluIHRhYmxlJ3Mgcm93IHZhbGlkYXRvcilcbiAgICAgICAgaWYgKGRpc2FibGVkICYmIGNvbnRyb2wuZW5hYmxlZCkgY29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgIGVsc2UgaWYgKCFkaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICAgIHRoaXMucHVzaChjb250cm9sLCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucmVzaXplKHZhbHVlcz8ubGVuZ3RoIHx8IDAsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICBzdXBlci5wYXRjaFZhbHVlKHZhbHVlcywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcmVzaXplKGxlbmd0aDogbnVtYmVyLCBvcHRpb25zPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IGxlbmd0aCkgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXG5cbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7IC8vIFNhdmUgZW5hYmxlZCBoZXJlLCBiZWNhdXNlIHVwZGF0ZSBjYW4gb2NjdXIgZnJvbSByZXNpemVBcnJheSgpXG5cbiAgICAvLyBSZWR1Y2VcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXQodGhpcy5sZW5ndGggLSAxLCB7ZW1pdEV2ZW50OiBvcHRpb25zPy5lbWl0RXZlbnR9KTtcbiAgICB9XG5cbiAgICAvLyBPciBpbmNyZWFzZSBzaXplXG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sKCk7XG5cbiAgICAgIC8vIEFwcGx5IHBhcmVudCBkaXNhYmxlZCBzdGF0ZSwgYmVmb3JlIHRvIHB1c2ggaXQgaW50byB0aGUgYXJyYXlcbiAgICAgIC8vIFRoaXMgaXMgbmVlZCB0byBhdm9pZCBwYXJlbnQgZm9ybSB0byBiZSBlbmFibGVkLCBhZnRlciBjYWxsaW5nIEFwcEZvcm1BcnJheS5wYXRjaFZhbHVlKCkgKGUuZy4gaW4gdGFibGUncyByb3cgdmFsaWRhdG9yKVxuICAgICAgaWYgKGRpc2FibGVkICYmIGNvbnRyb2wuZW5hYmxlZCkgY29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICBlbHNlIGlmICghZGlzYWJsZWQgJiYgY29udHJvbC5kaXNhYmxlZCkgY29udHJvbC5lbmFibGUoe2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgICAgdGhpcy5wdXNoKGNvbnRyb2wsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGUob3B0cz86IHtcbiAgICBvbmx5U2VsZj86IGJvb2xlYW47XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHN1cGVyLmRpc2FibGUob3B0cyk7XG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKGMgPT4gYy5kaXNhYmxlKG9wdHMpKTtcbiAgfVxuXG4gIGVuYWJsZShvcHRzPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KSB7XG4gICAgc3VwZXIuZW5hYmxlKG9wdHMpO1xuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaChjID0+IGMuZW5hYmxlKG9wdHMpKTtcbiAgfVxuXG4gIGZvckVhY2goaXRlOiAoY29udHJvbDogQykgPT4gdm9pZCApIHtcbiAgICBjb25zdCBzaXplID0gdGhpcy5sZW5ndGg7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuYXQoaSkgYXMgQztcbiAgICAgIGlmIChjb250cm9sKSBpdGUoY29udHJvbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgYWRkKHZhbHVlPzogVCwgb3B0aW9ucz86IHsgZW1pdEV2ZW50OiBib29sZWFuOyBpbnNlcnRBdD86IG51bWJlciB9KSB7XG4gICAgYWRkVmFsdWVJbkFycmF5KHRoaXMsIHRoaXMuY3JlYXRlQ29udHJvbCwgdGhpcy5lcXVhbHMsIHRoaXMuaXNFbXB0eSwgdmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlQXQoaW5kZXg6IG51bWJlciwgb3B0aW9ucz86IHtlbWl0RXZlbnQ6IGJvb2xlYW4gfSkge1xuICAgIC8vIERvIG5vdCByZW1vdmUgaWYgbGFzdCBjcml0ZXJpb25cbiAgICBpZiAodGhpcy5vcHRpb25zLmFsbG93RW1wdHlBcnJheSA9PT0gZmFsc2UgJiYgdGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuY2xlYXJBdChpbmRleCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgc3VwZXIucmVtb3ZlQXQoaW5kZXgsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQXQoaW5kZXg6IG51bWJlciwgb3B0aW9ucz86IHtlbWl0RXZlbnQ6IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmF0KGluZGV4KTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KGNvbnRyb2wudmFsdWUpKSByZXR1cm47IC8vIHNraXAgKG5vdCBuZWVkIHRvIGNsZWFyKVxuXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgICBjb3B5RW50aXR5MkZvcm0oe30sIGNvbnRyb2wsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShbXSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShudWxsLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgaXNMYXN0KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMubGVuZ3RoIC0gMSkgPT09IGluZGV4O1xuICB9XG5cbiAgcmVtb3ZlQWxsRW1wdHkoKSB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jb250cm9scy5maW5kSW5kZXgoYyA9PiB0aGlzLmlzRW1wdHkoYy52YWx1ZSkpO1xuICAgIHdoaWxlKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5yZW1vdmVBdChpbmRleCk7XG4gICAgICBpbmRleCA9IHRoaXMuY29udHJvbHMuZmluZEluZGV4KGMgPT4gdGhpcy5pc0VtcHR5KGMudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBpbnRlcm5hbCAtLSAqL1xuXG4gIHByb3RlY3RlZCBzZXRBbGxvd0VtcHR5QXJyYXkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmFsbG93RW1wdHlBcnJheSA9PT0gdmFsdWUpIHJldHVybjsgLy8gU2tpcCBpZiBzYW1lXG5cbiAgICB0aGlzLm9wdGlvbnMuYWxsb3dFbXB0eUFycmF5ID0gdmFsdWU7XG5cbiAgICAvLyBTZXQgcmVxdWlyZWQgKG9yIHJlc3RlKSBtaW4gbGVuZ3RoIHZhbGlkYXRvclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dFbXB0eUFycmF5KSB7XG4gICAgICB0aGlzLnNldFZhbGlkYXRvcnModGhpcy5vcHRpb25zLnZhbGlkYXRvcnMgfHwgbnVsbCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMub3B0aW9ucz8udmFsaWRhdG9ycyB8fCBbXTtcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9ycyhcbiAgICAgICAgKEFycmF5LmlzQXJyYXkodmFsaWRhdG9ycykgPyB2YWxpZGF0b3JzIDogW3ZhbGlkYXRvcnNdKVxuICAgICAgICAgIC5jb25jYXQoU2hhcmVkRm9ybUFycmF5VmFsaWRhdG9ycy5yZXF1aXJlZEFycmF5TWluTGVuZ3RoKDEpKSk7XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE8gY29udGludWUgdG8gdXNlIHRoaXMga2luZCBvZiBkZWNsYXJhdGlvbiA/XG5leHBvcnQgY2xhc3MgQXBwRm9ybVV0aWxzIHtcbiAgc3RhdGljIGNvcHlFbnRpdHkyRm9ybSA9IGNvcHlFbnRpdHkyRm9ybTtcbiAgc3RhdGljIGdldEZvcm1WYWx1ZUZyb21FbnRpdHkgPSBnZXRGb3JtVmFsdWVGcm9tRW50aXR5O1xuICBzdGF0aWMgbG9nRm9ybUVycm9ycyA9IGxvZ0Zvcm1FcnJvcnM7XG4gIHN0YXRpYyBnZXRDb250cm9sRnJvbVBhdGggPSBnZXRDb250cm9sRnJvbVBhdGg7XG4gIHN0YXRpYyBmaWx0ZXJOdW1iZXJJbnB1dCA9IGZpbHRlck51bWJlcklucHV0O1xuICBzdGF0aWMgZGlzYWJsZUNvbnRyb2xzID0gZGlzYWJsZUNvbnRyb2xzO1xuICBzdGF0aWMgc2VsZWN0SW5wdXRDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIG1hcmtBbGxBc1RvdWNoZWQoKSBpbnN0ZWFkIChuYW1pbmcgd2FzIHdyb25nKVxuICAgKi9cbiAgc3RhdGljIG1hcmtBc1RvdWNoZWQgPSBtYXJrQWxsQXNUb3VjaGVkO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgY29udHJvbCBhbmQgYWxsIGl0cyBkZXNjZW5kYW50IGNvbnRyb2xzIGFzIHRvdWNoZWQuXG4gICAqIFNlZSBhbHNvOlxuICAgKiAtIGBtYXJrQXNUb3VjaGVkKClgXG4gICAqL1xuICBzdGF0aWMgbWFya0FsbEFzVG91Y2hlZCA9IG1hcmtBbGxBc1RvdWNoZWQ7XG4gIHN0YXRpYyBtYXJrQXNVbnRvdWNoZWQgPSBtYXJrQXNVbnRvdWNoZWQ7XG4gIHN0YXRpYyB3YWl0V2hpbGVQZW5kaW5nID0gd2FpdFdoaWxlUGVuZGluZztcbiAgc3RhdGljIHdhaXRJZGxlID0gd2FpdElkbGU7XG4gIHN0YXRpYyB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5ID0gdXBkYXRlVmFsdWVBbmRWYWxpZGl0eTtcblxuICBzdGF0aWMgZ2V0Rm9ybUVycm9ycyA9IGdldEZvcm1FcnJvcnM7XG5cbiAgc3RhdGljIGlzRm9ybShvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBJQXBwRm9ybSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIEFwcEZvcm1Qcm92aWRlclxuICAgICAgfHwgJ2RpcnR5JyBpbiBvYmplY3QgJiYgJ2VuYWJsZWQnIGluIG9iamVjdCAmJiAndmFsaWQnIGluIG9iamVjdDtcbiAgfVxuXG4gIC8vIEFycmF5Rm9ybVxuICBzdGF0aWMgYWRkVmFsdWVJbkFycmF5ID0gYWRkVmFsdWVJbkFycmF5O1xuICBzdGF0aWMgcmVtb3ZlVmFsdWVJbkFycmF5ID0gcmVtb3ZlVmFsdWVJbkFycmF5O1xuICBzdGF0aWMgcmVzaXplQXJyYXkgPSByZXNpemVBcnJheTtcbiAgc3RhdGljIGNsZWFyVmFsdWVJbkFycmF5ID0gY2xlYXJWYWx1ZUluQXJyYXk7XG5cbiAgLy8gQ2FsY3VsYXRlZCBmaWVsZHNcbiAgc3RhdGljIGNhbGN1bGF0ZWRTdWZmaXggPSAnQ2FsY3VsYXRlZCc7XG4gIHN0YXRpYyBpc0NvbnRyb2xIYXNJbnB1dCA9IGlzQ29udHJvbEhhc0lucHV0O1xuICBzdGF0aWMgc2V0Q2FsY3VsYXRlZFZhbHVlID0gc2V0Q2FsY3VsYXRlZFZhbHVlO1xuICBzdGF0aWMgcmVzZXRDYWxjdWxhdGVkVmFsdWUgPSByZXNldENhbGN1bGF0ZWRWYWx1ZTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb250cm9sSGFzSW5wdXQoY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sfSwgY29udHJvbE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyB0cnVlIGlmIHRoZSBjb250cm9sIGhhcyBhIHZhbHVlIGFuZCBpdHMgJ2NhbGN1bGF0ZWQnIGNvbnRyb2wgaGFzIHRoZSB2YWx1ZSAnZmFsc2UnXG4gIHJldHVybiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUgJiYgIXRvQm9vbGVhbihjb250cm9sc1tjb250cm9sTmFtZSArIEFwcEZvcm1VdGlscy5jYWxjdWxhdGVkU3VmZml4XS52YWx1ZSwgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXRlZFZhbHVlKGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbH0sIGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgLy8gc2V0IHZhbHVlIHRvIGNvbnRyb2xcbiAgY29udHJvbHNbY29udHJvbE5hbWVdLnNldFZhbHVlKHJvdW5kKHZhbHVlKSk7XG4gIC8vIHNldCAnY2FsY3VsYXRlZCcgY29udHJvbCB0byAndHJ1ZSdcbiAgY29udHJvbHNbY29udHJvbE5hbWUgKyBBcHBGb3JtVXRpbHMuY2FsY3VsYXRlZFN1ZmZpeF0uc2V0VmFsdWUodHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldENhbGN1bGF0ZWRWYWx1ZShjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2x9LCBjb250cm9sTmFtZTogc3RyaW5nKSB7XG4gIGlmICghaXNDb250cm9sSGFzSW5wdXQoY29udHJvbHMsIGNvbnRyb2xOYW1lKSkge1xuICAgIC8vIHNldCB1bmRlZmluZWQgb25seSBpZiBjb250cm9sIGFscmVhZHkgY2FsY3VsYXRlZFxuICAgIEFwcEZvcm1VdGlscy5zZXRDYWxjdWxhdGVkVmFsdWUoY29udHJvbHMsIGNvbnRyb2xOYW1lLCB1bmRlZmluZWQpO1xuICB9XG59XG5cbiJdfQ==