@sumaris-net/ngx-components 2.0.0-rc9 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/README.md +3 -1
  2. package/esm2020/public_api.mjs +35 -22
  3. package/esm2020/src/app/admin/admin-routing.module.mjs +6 -6
  4. package/esm2020/src/app/admin/admin.module.mjs +6 -6
  5. package/esm2020/src/app/admin/services/person.service.mjs +3 -3
  6. package/esm2020/src/app/admin/services/validator/person.validator.mjs +3 -3
  7. package/esm2020/src/app/admin/users/users.mjs +233 -0
  8. package/esm2020/src/app/admin/users/users.module.mjs +54 -0
  9. package/esm2020/src/app/core/about/about.modal.mjs +71 -0
  10. package/esm2020/src/app/core/about/about.module.mjs +34 -0
  11. package/esm2020/src/app/core/account/account.module.mjs +43 -0
  12. package/esm2020/src/app/core/account/account.page.mjs +239 -0
  13. package/esm2020/src/app/core/auth/auth.form.mjs +131 -0
  14. package/esm2020/src/app/core/auth/auth.modal.mjs +72 -0
  15. package/esm2020/src/app/core/auth/auth.module.mjs +47 -0
  16. package/esm2020/src/app/core/core.module.mjs +86 -125
  17. package/esm2020/src/app/core/core.testing.module.mjs +7 -7
  18. package/esm2020/src/app/core/form/{form-buttons-bar.component.mjs → buttons/form-buttons-bar.component.mjs} +7 -7
  19. package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +35 -0
  20. package/esm2020/src/app/core/form/entity/editor.class.mjs +675 -0
  21. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +421 -0
  22. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +646 -0
  23. package/esm2020/src/app/core/form/{entity-metadata.component.mjs → entity/entity-metadata.component.mjs} +6 -6
  24. package/esm2020/src/app/core/form/entity/entity.module.mjs +38 -0
  25. package/esm2020/src/app/core/form/form.class.mjs +4 -4
  26. package/esm2020/src/app/core/form/form.module.mjs +66 -0
  27. package/esm2020/src/app/core/form/list/list.form.mjs +222 -0
  28. package/esm2020/src/app/core/form/list/list.module.mjs +35 -0
  29. package/esm2020/src/app/core/form/properties/properties.form.mjs +3 -3
  30. package/esm2020/src/app/core/form/properties/properties.module.mjs +35 -0
  31. package/esm2020/src/app/core/form/properties/property.validator.mjs +4 -4
  32. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +3 -3
  33. package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +4 -4
  34. package/esm2020/src/app/core/{text-popover → form/text-popover}/testing/text-popover.testing.mjs +4 -4
  35. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +45 -0
  36. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +89 -0
  37. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +105 -0
  38. package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +40 -0
  39. package/esm2020/src/app/core/graphql/graphql.module.mjs +4 -4
  40. package/esm2020/src/app/core/graphql/graphql.service.mjs +12 -7
  41. package/esm2020/src/app/core/graphql/graphql.utils.mjs +2 -2
  42. package/esm2020/src/app/core/home/home.mjs +8 -8
  43. package/esm2020/src/app/core/home/home.module.mjs +48 -0
  44. package/esm2020/src/app/core/icon/icon.component.mjs +3 -3
  45. package/esm2020/src/app/core/icon/icon.module.mjs +4 -4
  46. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +3 -3
  47. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +17 -15
  48. package/esm2020/src/app/core/menu/menu.component.mjs +5 -5
  49. package/esm2020/src/app/core/menu/menu.module.mjs +9 -10
  50. package/esm2020/src/app/core/menu/menu.service.mjs +3 -3
  51. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +3 -3
  52. package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +35 -0
  53. package/esm2020/src/app/core/peer/select-peer.modal.mjs +55 -11
  54. package/esm2020/src/app/core/peer/select-peer.module.mjs +17 -10
  55. package/esm2020/src/app/core/register/register-confirm.page.mjs +81 -0
  56. package/esm2020/src/app/core/register/register.form.mjs +181 -0
  57. package/esm2020/src/app/core/register/register.modal.mjs +52 -0
  58. package/esm2020/src/app/core/register/register.module.mjs +17 -15
  59. package/esm2020/src/app/core/services/account.service.mjs +22 -23
  60. package/esm2020/src/app/core/services/auth-guard.service.mjs +6 -6
  61. package/esm2020/src/app/core/services/base-entity-service.class.mjs +3 -3
  62. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +8 -8
  63. package/esm2020/src/app/core/services/base58.mjs +2 -2
  64. package/esm2020/src/app/core/services/config.service.mjs +4 -4
  65. package/esm2020/src/app/core/services/crypto.service.mjs +82 -97
  66. package/esm2020/src/app/core/services/local-settings.service.mjs +8 -10
  67. package/esm2020/src/app/core/services/model/entity.decorators.mjs +44 -54
  68. package/esm2020/src/app/core/services/model/peer.model.mjs +3 -3
  69. package/esm2020/src/app/core/services/network.service.mjs +7 -7
  70. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +8 -8
  71. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +4 -4
  72. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +4 -4
  73. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +8 -8
  74. package/esm2020/src/app/core/services/platform.service.mjs +9 -10
  75. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +3 -3
  76. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +4 -4
  77. package/esm2020/src/app/core/services/testing/referential.validator.mjs +3 -3
  78. package/esm2020/src/app/core/services/validator/account.validator.mjs +3 -3
  79. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +3 -3
  80. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +3 -3
  81. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +3 -3
  82. package/esm2020/src/app/core/settings/settings.module.mjs +34 -0
  83. package/esm2020/src/app/core/settings/settings.page.mjs +12 -9
  84. package/esm2020/src/app/core/table/actions-column.component.mjs +3 -3
  85. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +13 -8
  86. package/esm2020/src/app/core/table/memory-table.class.mjs +3 -3
  87. package/esm2020/src/app/core/table/table-select-columns.component.mjs +3 -3
  88. package/esm2020/src/app/core/table/table.class.mjs +11 -16
  89. package/esm2020/src/app/core/table/table.module.mjs +40 -0
  90. package/esm2020/src/app/core/table/testing/table.testing.mjs +8 -8
  91. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +4 -4
  92. package/esm2020/src/app/shared/audio/audio.mjs +3 -3
  93. package/esm2020/src/app/shared/audio/audio.testing.mjs +3 -3
  94. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +4 -4
  95. package/esm2020/src/app/shared/capacitor/keyboard.mjs +3 -3
  96. package/esm2020/src/app/shared/constants.mjs +4 -2
  97. package/esm2020/src/app/shared/dates.mjs +20 -14
  98. package/esm2020/src/app/shared/debug/debug.component.mjs +3 -3
  99. package/esm2020/src/app/shared/debug/debug.module.mjs +4 -4
  100. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +3 -3
  101. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +3 -3
  102. package/esm2020/src/app/shared/directives/directives.module.mjs +4 -4
  103. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +3 -3
  104. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +3 -3
  105. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +3 -3
  106. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +3 -3
  107. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
  108. package/esm2020/src/app/shared/file/file.service.mjs +5 -5
  109. package/esm2020/src/app/shared/form/field.component.mjs +3 -3
  110. package/esm2020/src/app/shared/form/loading-spinner.mjs +3 -3
  111. package/esm2020/src/app/shared/gesture/gesture-config.mjs +3 -3
  112. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +3 -3
  113. package/esm2020/src/app/shared/help/help.modal.mjs +3 -3
  114. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +3 -3
  115. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +3 -3
  116. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +4 -4
  117. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +134 -60
  118. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +19 -7
  119. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +3 -3
  120. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +13 -7
  121. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +4 -4
  122. package/esm2020/src/app/shared/image/image.module.mjs +5 -5
  123. package/esm2020/src/app/shared/image/image.service.mjs +3 -3
  124. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +7 -6
  125. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +4 -4
  126. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +3 -3
  127. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +3 -3
  128. package/esm2020/src/app/shared/material/badge/badge.module.mjs +4 -4
  129. package/esm2020/src/app/shared/material/badge/badge.test.mjs +3 -3
  130. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +4 -4
  131. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +5 -5
  132. package/esm2020/src/app/shared/material/chips/chips.module.mjs +4 -4
  133. package/esm2020/src/app/shared/material/chips/material.chips.mjs +5 -5
  134. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +3 -3
  135. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +4 -4
  136. package/esm2020/src/app/shared/material/datetime/material.date.mjs +7 -8
  137. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +6 -6
  138. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +7 -8
  139. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +5 -7
  140. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +7 -8
  141. package/esm2020/src/app/shared/material/duration/duration.module.mjs +4 -4
  142. package/esm2020/src/app/shared/material/duration/material.duration.mjs +3 -3
  143. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +3 -3
  144. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +4 -4
  145. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +3 -3
  146. package/esm2020/src/app/shared/material/material.module.mjs +4 -4
  147. package/esm2020/src/app/shared/material/material.testing.module.mjs +4 -4
  148. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +3 -3
  149. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +3 -3
  150. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +3 -3
  151. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +3 -3
  152. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +3 -3
  153. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +3 -3
  154. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +4 -4
  155. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +3 -3
  156. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +3 -3
  157. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +3 -3
  158. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +3 -3
  159. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +4 -4
  160. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +11 -12
  161. package/esm2020/src/app/shared/modules.mjs +11 -0
  162. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +24 -24
  163. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +4 -4
  164. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +8 -9
  165. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +38 -14
  166. package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +4 -4
  167. package/esm2020/src/app/shared/pipes/duration.pipe.mjs +4 -4
  168. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +3 -3
  169. package/esm2020/src/app/shared/pipes/form.pipes.mjs +18 -18
  170. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +4 -4
  171. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +9 -9
  172. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +12 -12
  173. package/esm2020/src/app/shared/pipes/math.pipes.mjs +12 -12
  174. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +3 -3
  175. package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +4 -4
  176. package/esm2020/src/app/shared/pipes/pipes.module.mjs +14 -6
  177. package/esm2020/src/app/shared/pipes/property.pipes.mjs +9 -12
  178. package/esm2020/src/app/shared/pipes/string.pipes.mjs +43 -17
  179. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +8 -8
  180. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +3 -3
  181. package/esm2020/src/app/shared/services/progress-bar.service.mjs +3 -3
  182. package/esm2020/src/app/shared/services/storage/storage.service.mjs +3 -3
  183. package/esm2020/src/app/shared/services/translate-context.service.mjs +3 -3
  184. package/esm2020/src/app/shared/shared-routing.module.mjs +7 -7
  185. package/esm2020/src/app/shared/shared.module.mjs +11 -7
  186. package/esm2020/src/app/shared/shared.testing.module.mjs +4 -4
  187. package/esm2020/src/app/shared/testing/observable.test.mjs +6 -7
  188. package/esm2020/src/app/shared/testing/tests.page.mjs +3 -3
  189. package/esm2020/src/app/shared/toast/toast.testing.mjs +3 -3
  190. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +4 -4
  191. package/esm2020/src/app/shared/toast/toasts.mjs +1 -1
  192. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +3 -3
  193. package/esm2020/src/app/shared/toolbar/toolbar.mjs +3 -3
  194. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +4 -4
  195. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +3 -3
  196. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +4 -4
  197. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +5 -5
  198. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +3 -3
  199. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +3 -3
  200. package/esm2020/src/app/shared/validator/validators.mjs +4 -5
  201. package/esm2020/src/app/social/job/job.module.mjs +4 -4
  202. package/esm2020/src/app/social/job/job.service.mjs +3 -3
  203. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +3 -3
  204. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +4 -4
  205. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +3 -3
  206. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +3 -3
  207. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +4 -4
  208. package/esm2020/src/app/social/message/message.form.mjs +3 -3
  209. package/esm2020/src/app/social/message/message.modal.mjs +3 -3
  210. package/esm2020/src/app/social/message/message.module.mjs +4 -4
  211. package/esm2020/src/app/social/message/message.service.mjs +3 -3
  212. package/esm2020/src/app/social/social.module.mjs +4 -4
  213. package/esm2020/src/app/social/social.testing.module.mjs +4 -4
  214. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +3 -3
  215. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +7 -7
  216. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +13 -12
  217. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +4 -4
  218. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +3 -3
  219. package/esm2020/src/app/social/user-event/user-event.module.mjs +4 -4
  220. package/esm2020/src/app/social/user-event/user-event.service.mjs +6 -8
  221. package/fesm2015/sumaris-net.ngx-components.mjs +10176 -9570
  222. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
  223. package/fesm2020/sumaris-net.ngx-components.mjs +10390 -9791
  224. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
  225. package/package.json +2 -1
  226. package/plugins/clovelced-plugin-audiomanagement/README.md +66 -0
  227. package/plugins/cordova-plugin-camera/README.md +703 -0
  228. package/plugins/cordova-plugin-device/README.md +309 -0
  229. package/plugins/cordova-plugin-file/README.md +848 -0
  230. package/plugins/cordova-plugin-file-transfer/README.md +598 -0
  231. package/plugins/cordova-plugin-file-transfer/doc/de/README.md +311 -0
  232. package/plugins/cordova-plugin-file-transfer/doc/es/README.md +311 -0
  233. package/plugins/cordova-plugin-file-transfer/doc/fr/README.md +270 -0
  234. package/plugins/cordova-plugin-file-transfer/doc/it/README.md +311 -0
  235. package/plugins/cordova-plugin-file-transfer/doc/ja/README.md +311 -0
  236. package/plugins/cordova-plugin-file-transfer/doc/ko/README.md +311 -0
  237. package/plugins/cordova-plugin-file-transfer/doc/pl/README.md +311 -0
  238. package/plugins/cordova-plugin-file-transfer/doc/zh/README.md +311 -0
  239. package/plugins/cordova-plugin-ionic-keyboard/README.md +220 -0
  240. package/plugins/cordova-plugin-ionic-webview/README.md +181 -0
  241. package/plugins/cordova-plugin-media-capture/README.md +626 -0
  242. package/plugins/cordova-plugin-splashscreen/README.md +387 -0
  243. package/plugins/cordova-plugin-statusbar/README.md +341 -0
  244. package/plugins/cordova-plugin-telerik-imagepicker/README.md +155 -0
  245. package/plugins/cordova-plugin-whitelist/README.md +185 -0
  246. package/plugins/cordova-sqlite-storage/README.md +1848 -0
  247. package/plugins/integrator-cordova-plugin-downloader/README.md +49 -0
  248. package/public_api.d.ts +34 -21
  249. package/src/app/admin/admin.module.d.ts +1 -1
  250. package/src/app/admin/users/{list/users.d.ts → users.d.ts} +11 -11
  251. package/src/app/admin/users/users.module.d.ts +13 -0
  252. package/src/app/core/about/{modal-about.d.ts → about.modal.d.ts} +1 -1
  253. package/src/app/core/about/about.module.d.ts +10 -0
  254. package/src/app/core/account/account.module.d.ts +11 -0
  255. package/src/app/core/account/{account.d.ts → account.page.d.ts} +5 -1
  256. package/src/app/core/auth/{form/form-auth.d.ts → auth.form.d.ts} +9 -9
  257. package/src/app/core/auth/{modal/modal-auth.d.ts → auth.modal.d.ts} +4 -4
  258. package/src/app/core/auth/auth.module.d.ts +11 -0
  259. package/src/app/core/core.module.d.ts +20 -29
  260. package/src/app/core/core.testing.module.d.ts +1 -1
  261. package/src/app/core/form/{form-buttons-bar.component.d.ts → buttons/form-buttons-bar.component.d.ts} +2 -2
  262. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +9 -0
  263. package/src/app/core/form/{editor.class.d.ts → entity/editor.class.d.ts} +9 -9
  264. package/src/app/core/form/{entity-editor-modal.class.d.ts → entity/entity-editor-modal.class.d.ts} +8 -8
  265. package/src/app/core/form/{entity-editor.class.d.ts → entity/entity-editor.class.d.ts} +11 -11
  266. package/src/app/core/form/{entity-metadata.component.d.ts → entity/entity-metadata.component.d.ts} +1 -1
  267. package/src/app/core/form/entity/entity.module.d.ts +10 -0
  268. package/src/app/core/form/form.module.d.ts +13 -0
  269. package/src/app/core/form/{list.form.d.ts → list/list.form.d.ts} +3 -3
  270. package/src/app/core/form/list/list.module.d.ts +9 -0
  271. package/src/app/core/form/properties/properties.module.d.ts +9 -0
  272. package/src/app/core/{text-popover → form/text-popover}/testing/text-popover.testing.d.ts +0 -0
  273. package/src/app/core/{text-popover → form/text-popover}/testing/text-popover.testing.module.d.ts +0 -0
  274. package/src/app/core/{text-popover → form/text-popover}/text-form.component.d.ts +4 -3
  275. package/src/app/core/{text-popover → form/text-popover}/text-popover.component.d.ts +7 -2
  276. package/src/app/core/form/text-popover/text-popover.module.d.ts +10 -0
  277. package/src/app/core/home/home.module.d.ts +12 -0
  278. package/src/app/core/install/install-upgrade-card.module.d.ts +6 -7
  279. package/src/app/core/menu/menu.component.d.ts +1 -1
  280. package/src/app/core/offline/update-offline-mode-card.module.d.ts +9 -0
  281. package/src/app/core/peer/select-peer.modal.d.ts +19 -5
  282. package/src/app/core/peer/select-peer.module.d.ts +6 -4
  283. package/src/app/core/register/{confirm/confirm.d.ts → register-confirm.page.d.ts} +4 -4
  284. package/src/app/core/register/{form/form-register.d.ts → register.form.d.ts} +7 -7
  285. package/src/app/core/register/{modal/modal-register.d.ts → register.modal.d.ts} +2 -2
  286. package/src/app/core/register/register.module.d.ts +6 -6
  287. package/src/app/core/services/account.service.d.ts +8 -9
  288. package/src/app/core/services/base-graphql-service.class.d.ts +9 -8
  289. package/src/app/core/services/crypto.service.d.ts +23 -18
  290. package/src/app/core/services/model/entity.decorators.d.ts +1 -9
  291. package/src/app/core/services/network.service.d.ts +3 -4
  292. package/src/app/core/settings/settings.module.d.ts +10 -0
  293. package/src/app/core/settings/settings.page.d.ts +2 -4
  294. package/src/app/core/table/entities-table-datasource.class.d.ts +1 -0
  295. package/src/app/core/table/table.class.d.ts +2 -6
  296. package/src/app/core/table/table.module.d.ts +10 -0
  297. package/src/app/shared/constants.d.ts +1 -1
  298. package/src/app/shared/dates.d.ts +5 -3
  299. package/src/app/shared/image/gallery/image-gallery.component.d.ts +39 -17
  300. package/src/app/shared/image/gallery/image-gallery.module.d.ts +6 -4
  301. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +1 -0
  302. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +1 -0
  303. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +5 -6
  304. package/src/app/shared/modules.d.ts +8 -0
  305. package/src/app/shared/pipes/date-format.pipe.d.ts +22 -11
  306. package/src/app/shared/pipes/pipes.module.d.ts +1 -1
  307. package/src/app/shared/pipes/property.pipes.d.ts +4 -6
  308. package/src/app/shared/pipes/string.pipes.d.ts +10 -0
  309. package/src/app/shared/shared.module.d.ts +2 -1
  310. package/src/assets/i18n/en-US.json +20 -5
  311. package/src/assets/i18n/en.json +18 -4
  312. package/src/assets/i18n/fr.json +17 -6
  313. package/src/theme/_ngx-components.scss +22 -4
  314. package/esm2020/src/app/admin/users/list/users.mjs +0 -233
  315. package/esm2020/src/app/admin/users/list/users.module.mjs +0 -58
  316. package/esm2020/src/app/core/about/modal-about.mjs +0 -71
  317. package/esm2020/src/app/core/account/account.mjs +0 -230
  318. package/esm2020/src/app/core/auth/form/form-auth.mjs +0 -131
  319. package/esm2020/src/app/core/auth/modal/modal-auth.mjs +0 -72
  320. package/esm2020/src/app/core/form/editor.class.mjs +0 -675
  321. package/esm2020/src/app/core/form/entity-editor-modal.class.mjs +0 -421
  322. package/esm2020/src/app/core/form/entity-editor.class.mjs +0 -646
  323. package/esm2020/src/app/core/form/list.form.mjs +0 -222
  324. package/esm2020/src/app/core/register/confirm/confirm.mjs +0 -81
  325. package/esm2020/src/app/core/register/form/form-register.mjs +0 -181
  326. package/esm2020/src/app/core/register/modal/modal-register.mjs +0 -52
  327. package/esm2020/src/app/core/text-popover/testing/text-popover.testing.module.mjs +0 -45
  328. package/esm2020/src/app/core/text-popover/text-form.component.mjs +0 -84
  329. package/esm2020/src/app/core/text-popover/text-popover.component.mjs +0 -92
  330. package/esm2020/src/app/vendor.mjs +0 -16
  331. package/src/app/admin/users/list/users.module.d.ts +0 -14
  332. package/src/app/vendor.d.ts +0 -11
@@ -33,13 +33,8 @@ export class EntityClasses {
33
33
  EntityClasses.CLASSES_BY_NAME = new Map();
34
34
  // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
35
35
  export function EntityClass(opts) {
36
- opts = {
37
- fromObjectReuseStrategy: 'default',
38
- ...opts
39
- };
40
36
  // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
41
37
  return function (constructor) {
42
- var _a, _b;
43
38
  // Make sure the class extends Entity
44
39
  if (!environment.production) {
45
40
  const obj = new constructor();
@@ -47,61 +42,56 @@ export function EntityClass(opts) {
47
42
  throw new Error(`Class ${constructor.name} must extends <<Entity>> to be able to use @FromObject!`);
48
43
  }
49
44
  }
45
+ const clazz = constructor;
50
46
  const typename = opts.typename || `${constructor.name}VO`;
47
+ // Define static field TYPENAME
48
+ clazz.TYPENAME = typename;
49
+ // Define static fromObject()
51
50
  if (opts.fromObjectReuseStrategy === 'clone') {
52
- const decoratedClass = (_a = class extends constructor {
53
- static fromObject(source, opts) {
54
- if (!source)
55
- return undefined;
56
- if (source instanceof decoratedClass)
57
- return source.clone(opts);
58
- const target = new decoratedClass();
59
- target.fromObject(source, opts);
60
- return target;
61
- }
62
- static asObject(source, opts) {
63
- if (!source)
64
- return undefined;
65
- if (source instanceof decoratedClass)
66
- return source.asObject(opts);
67
- return Object.assign({}, source);
68
- }
69
- },
70
- _a.TYPENAME = typename,
71
- _a);
72
- // Register the entity class
73
- EntityClasses.register(typename, decoratedClass);
74
- return decoratedClass;
51
+ clazz.fromObject = function (source, opts) {
52
+ if (!source)
53
+ return undefined;
54
+ if (source instanceof constructor)
55
+ return source.clone(opts);
56
+ const target = new constructor();
57
+ target.fromObject(source, opts);
58
+ return target;
59
+ };
60
+ clazz.asObject = function (source, opts) {
61
+ if (!source)
62
+ return undefined;
63
+ if (source instanceof constructor)
64
+ return source.asObject(opts);
65
+ return Object.assign({}, source);
66
+ };
75
67
  }
76
- const decoratedClass = (_b = class extends constructor {
77
- static fromObject(source, opts) {
78
- if (!source)
79
- return undefined;
80
- if (source instanceof decoratedClass) {
81
- // DEBUG
82
- //console.debug('@EntityClass() fromObject() => will recycle existing object: ', source);
83
- return source;
84
- }
85
- const target = new decoratedClass();
86
- target.fromObject(source, opts);
87
- return target;
88
- }
89
- static asObject(source, opts) {
90
- if (!source)
91
- return undefined;
92
- if (source instanceof decoratedClass) {
93
- return source.asObject(opts);
94
- }
68
+ else {
69
+ clazz.fromObject = function (source, opts) {
70
+ if (!source)
71
+ return undefined;
72
+ if (source instanceof constructor) {
95
73
  // DEBUG
96
- //console.debug('@EntityClass() asObject() => will recycle existing object: ', source);
74
+ //console.debug('@EntityClass() fromObject() => will recycle existing object: ', source);
97
75
  return source;
98
76
  }
99
- },
100
- _b.TYPENAME = typename,
101
- _b);
77
+ const target = new constructor();
78
+ target.fromObject(source, opts);
79
+ return target;
80
+ };
81
+ clazz.asObject = function (source, opts) {
82
+ if (!source)
83
+ return undefined;
84
+ if (source instanceof constructor) {
85
+ return source.asObject(opts);
86
+ }
87
+ // DEBUG
88
+ //console.debug('@EntityClass() asObject() => will recycle existing object: ', source);
89
+ return source;
90
+ };
91
+ }
102
92
  // Register the entity class
103
- EntityClasses.register(typename, decoratedClass);
104
- return decoratedClass;
93
+ EntityClasses.register(typename, constructor);
94
+ return constructor;
105
95
  };
106
96
  }
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5LmRlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJdEQsTUFBTSxPQUFPLGFBQWE7SUFHeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFnQixFQUFFLFdBQXdCO1FBQ3hELGdDQUFnQztRQUNoQyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLFFBQVE7UUFDUix3RUFBd0U7UUFFeEUsYUFBYTtRQUNiLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBc0IsVUFBa0I7UUFDaEQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixHQUFHLFVBQVUsR0FBRyw2REFBNkQsQ0FBQyxDQUFDO1NBQzlIO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQXNCLEtBQVUsRUFBRSxJQUlsRDtRQUNDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDekIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJ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QkFDekMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2hDLE9BQU8sTUFBVyxDQUFDO2dCQUNyQixDQUFDO2dCQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBVyxFQUFFLElBQVU7b0JBQ3JDLElBQUksQ0FBQyxNQUFNO3dCQUFFLE9BQU8sU0FBUyxDQUFDO29CQUM5QixJQUFJLE1BQU0sWUFBWSxjQUFjLEVBQUU7d0JBQ3BDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDOUI7b0JBQ0QsUUFBUTtvQkFDUix1RkFBdUY7b0JBQ3ZGLE9BQU8sTUFBTSxDQUFDO2dCQUNoQixDQUFDO2FBQ0Y7WUFyQlEsV0FBUSxHQUFHLFFBQVM7ZUFxQjVCLENBQUM7UUFFRiw0QkFBNEI7UUFDNUIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFakQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IHJlbW92ZUVuZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuXG5kZWNsYXJlIHR5cGUgQ29uc3RydWN0b3IgPSBuZXcoLi4uYXJnczogYW55W10pID0+IGFueTtcblxuZXhwb3J0IGNsYXNzIEVudGl0eUNsYXNzZXMge1xuICBzdGF0aWMgQ0xBU1NFU19CWV9OQU1FID0gbmV3IE1hcDxzdHJpbmcsIENvbnN0cnVjdG9yPigpO1xuXG4gIHN0YXRpYyByZWdpc3Rlcih0eXBlbmFtZTogc3RyaW5nLCBlbnRpdHlDbGFzczogQ29uc3RydWN0b3IpIHtcbiAgICAvLyBDb252ZXJ0IHRvIGV4dHJhY3QgZW50aXR5TmFtZVxuICAgIGNvbnN0IGVudGl0eU5hbWUgPSByZW1vdmVFbmQodHlwZW5hbWUsICdWTycpO1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbZW50aXR5LWNsYXNzZXNdIERldGVjdGVkIGVudGl0eSBjbGFzcyAnICsgZW50aXR5TmFtZSk7XG5cbiAgICAvLyBBZGQgdG8gbWFwXG4gICAgRW50aXR5Q2xhc3Nlcy5DTEFTU0VTX0JZX05BTUUuc2V0KGVudGl0eU5hbWUsIGVudGl0eUNsYXNzKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQ8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5TmFtZTogc3RyaW5nKTogQ29uc3RydWN0b3Ige1xuICAgIGNvbnN0IGVudGl0eUNsYXNzID0gRW50aXR5Q2xhc3Nlcy5DTEFTU0VTX0JZX05BTUUuZ2V0KGVudGl0eU5hbWUpO1xuICAgIGlmICghZW50aXR5Q2xhc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZvdW5kIGVudGl0eSBjbGFzcyBcXCcnICsgZW50aXR5TmFtZSArICdcXCcuIE1ha2Ugc3VyZSBpdCBleGlzdHMgYW5kIGhhcyB0aGUgQEVudGl0eUNsYXNzIGRlY29yYXRvci4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudGl0eUNsYXNzO1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3Q8VCBleHRlbmRzIEVudGl0eTxUPj4odmFsdWU6IGFueSwgb3B0cz86IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgdHlwZW5hbWU/OiBzdHJpbmc7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgfSk6IFQge1xuICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICBjb25zdCBlbnRpdHlOYW1lID0gKG9wdHMgJiYgb3B0cy5lbnRpdHlOYW1lKSB8fCByZW1vdmVFbmQodmFsdWUuX190eXBlbmFtZSB8fCBvcHRzPy50eXBlbmFtZSwgJ1ZPJyk7XG4gICAgaWYgKCFlbnRpdHlOYW1lKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgb25lIG9mIFxcJ3ZhbHVlLl9fdHlwZW5hbWVcXCcsIFxcJ29wdHMuZW50aXR5TmFtZVxcJywgb3IgXFwnb3B0cy50eXBlbmFtZVxcJy4nKTtcbiAgICBjb25zdCBlbnRpdHlDbGFzcyA9IEVudGl0eUNsYXNzZXMuZ2V0KGVudGl0eU5hbWUpIGFzIGFueTtcbiAgICBpZiAodHlwZW9mIGVudGl0eUNsYXNzLmZyb21PYmplY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZvdW5kIHRoZSBzdGF0aWMgZnVuY3Rpb24gXFwnJyArIGVudGl0eU5hbWUgKyAnLmZyb21PYmplY3QoKVxcJy4gTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gZGVjbGFyZWQgYW5kIHRoZSBlbnRpdHkgY2xhc3MgaGFzIHRoZSBARW50aXR5Q2xhc3MgZGVjb3JhdG9yJyk7XG4gICAgfVxuICAgIHJldHVybiBlbnRpdHlDbGFzcy5mcm9tT2JqZWN0KHZhbHVlLCBvcHRzKSBhcyBUO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItYXJyb3cvcHJlZmVyLWFycm93LWZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIEVudGl0eUNsYXNzKG9wdHM6IHtcbiAgdHlwZW5hbWU6IHN0cmluZztcbiAgZnJvbU9iamVjdEFsd2F5c05ldz86IGJvb2xlYW47XG4gIGZyb21PYmplY3RSZXVzZVN0cmF0ZWd5PzogJ2RlZmF1bHQnIHwgJ2Nsb25lJztcbn0pIHtcblxuICBvcHRzID0ge1xuICAgIGZyb21PYmplY3RSZXVzZVN0cmF0ZWd5OiAnZGVmYXVsdCcsXG4gICAgLi4ub3B0c1xuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItYXJyb3cvcHJlZmVyLWFycm93LWZ1bmN0aW9uc1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oY29uc3RydWN0b3I6IFQpIHtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgY2xhc3MgZXh0ZW5kcyBFbnRpdHlcbiAgICBpZiAoIWVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgIGNvbnN0IG9iaiA9IG5ldyBjb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRW50aXR5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYXNzICR7Y29uc3RydWN0b3IubmFtZX0gbXVzdCBleHRlbmRzIDw8RW50aXR5Pj4gdG8gYmUgYWJsZSB0byB1c2UgQEZyb21PYmplY3QhYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZW5hbWUgPSBvcHRzLnR5cGVuYW1lIHx8IGAke2NvbnN0cnVjdG9yLm5hbWV9Vk9gO1xuXG4gICAgaWYgKG9wdHMuZnJvbU9iamVjdFJldXNlU3RyYXRlZ3kgPT09ICdjbG9uZScpIHtcbiAgICAgIGNvbnN0IGRlY29yYXRlZENsYXNzID0gY2xhc3MgZXh0ZW5kcyBjb25zdHJ1Y3RvciB7XG4gICAgICAgIHN0YXRpYyBUWVBFTkFNRSA9IHR5cGVuYW1lO1xuICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IFQge1xuICAgICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBkZWNvcmF0ZWRDbGFzcykgcmV0dXJuIChzb3VyY2UgYXMgYW55KS5jbG9uZShvcHRzKSBhcyBUO1xuICAgICAgICAgIGNvbnN0IHRhcmdldDogYW55ID0gbmV3IGRlY29yYXRlZENsYXNzKCk7XG4gICAgICAgICAgdGFyZ2V0LmZyb21PYmplY3Qoc291cmNlLCBvcHRzKTtcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0IGFzIFQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGFzT2JqZWN0KHNvdXJjZTogYW55LCBvcHRzPzogYW55KTogYW55IHtcbiAgICAgICAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgZGVjb3JhdGVkQ2xhc3MpIHJldHVybiBzb3VyY2UuYXNPYmplY3Qob3B0cyk7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBlbnRpdHkgY2xhc3NcbiAgICAgIEVudGl0eUNsYXNzZXMucmVnaXN0ZXIodHlwZW5hbWUsIGRlY29yYXRlZENsYXNzKTtcblxuICAgICAgcmV0dXJuIGRlY29yYXRlZENsYXNzO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY29yYXRlZENsYXNzID0gY2xhc3MgZXh0ZW5kcyBjb25zdHJ1Y3RvciB7XG4gICAgICBzdGF0aWMgVFlQRU5BTUUgPSB0eXBlbmFtZTtcbiAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KHNvdXJjZTogYW55LCBvcHRzPzogYW55KTogVCB7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgZGVjb3JhdGVkQ2xhc3MpIHtcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZygnQEVudGl0eUNsYXNzKCkgZnJvbU9iamVjdCgpID0+IHdpbGwgcmVjeWNsZSBleGlzdGluZyBvYmplY3Q6ICcsIHNvdXJjZSk7XG4gICAgICAgICAgcmV0dXJuIHNvdXJjZSBhcyBUO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldDogYW55ID0gbmV3IGRlY29yYXRlZENsYXNzKCk7XG4gICAgICAgIHRhcmdldC5mcm9tT2JqZWN0KHNvdXJjZSwgb3B0cyk7XG4gICAgICAgIHJldHVybiB0YXJnZXQgYXMgVDtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBhc09iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IGFueSB7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgZGVjb3JhdGVkQ2xhc3MpIHtcbiAgICAgICAgICByZXR1cm4gc291cmNlLmFzT2JqZWN0KG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZygnQEVudGl0eUNsYXNzKCkgYXNPYmplY3QoKSA9PiB3aWxsIHJlY3ljbGUgZXhpc3Rpbmcgb2JqZWN0OiAnLCBzb3VyY2UpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgZW50aXR5IGNsYXNzXG4gICAgRW50aXR5Q2xhc3Nlcy5yZWdpc3Rlcih0eXBlbmFtZSwgZGVjb3JhdGVkQ2xhc3MpO1xuXG4gICAgcmV0dXJuIGRlY29yYXRlZENsYXNzO1xuICB9O1xufVxuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5LmRlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJdEQsTUFBTSxPQUFPLGFBQWE7SUFHeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFnQixFQUFFLFdBQXdCO1FBQ3hELGdDQUFnQztRQUNoQyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLFFBQVE7UUFDUix3RUFBd0U7UUFFeEUsYUFBYTtRQUNiLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBc0IsVUFBa0I7UUFDaEQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixHQUFHLFVBQVUsR0FBRyw2REFBNkQsQ0FBQyxDQUFDO1NBQzlIO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQXNCLEtBQVUsRUFBRSxJQUlsRDtRQUNDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDekIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJ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SUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxTQUFTLENBQUM7Z0JBQzlCLElBQUksTUFBTSxZQUFZLFdBQVcsRUFBRTtvQkFDakMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM5QjtnQkFDRCxRQUFRO2dCQUNSLHVGQUF1RjtnQkFDdkYsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQyxDQUFDO1NBQ0g7UUFFRCw0QkFBNEI7UUFDNUIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFOUMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IHJlbW92ZUVuZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuXG5kZWNsYXJlIHR5cGUgQ29uc3RydWN0b3IgPSBuZXcoLi4uYXJnczogYW55W10pID0+IGFueTtcblxuZXhwb3J0IGNsYXNzIEVudGl0eUNsYXNzZXMge1xuICBzdGF0aWMgQ0xBU1NFU19CWV9OQU1FID0gbmV3IE1hcDxzdHJpbmcsIENvbnN0cnVjdG9yPigpO1xuXG4gIHN0YXRpYyByZWdpc3Rlcih0eXBlbmFtZTogc3RyaW5nLCBlbnRpdHlDbGFzczogQ29uc3RydWN0b3IpIHtcbiAgICAvLyBDb252ZXJ0IHRvIGV4dHJhY3QgZW50aXR5TmFtZVxuICAgIGNvbnN0IGVudGl0eU5hbWUgPSByZW1vdmVFbmQodHlwZW5hbWUsICdWTycpO1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbZW50aXR5LWNsYXNzZXNdIERldGVjdGVkIGVudGl0eSBjbGFzcyAnICsgZW50aXR5TmFtZSk7XG5cbiAgICAvLyBBZGQgdG8gbWFwXG4gICAgRW50aXR5Q2xhc3Nlcy5DTEFTU0VTX0JZX05BTUUuc2V0KGVudGl0eU5hbWUsIGVudGl0eUNsYXNzKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQ8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5TmFtZTogc3RyaW5nKTogQ29uc3RydWN0b3Ige1xuICAgIGNvbnN0IGVudGl0eUNsYXNzID0gRW50aXR5Q2xhc3Nlcy5DTEFTU0VTX0JZX05BTUUuZ2V0KGVudGl0eU5hbWUpO1xuICAgIGlmICghZW50aXR5Q2xhc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZvdW5kIGVudGl0eSBjbGFzcyBcXCcnICsgZW50aXR5TmFtZSArICdcXCcuIE1ha2Ugc3VyZSBpdCBleGlzdHMgYW5kIGhhcyB0aGUgQEVudGl0eUNsYXNzIGRlY29yYXRvci4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudGl0eUNsYXNzO1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3Q8VCBleHRlbmRzIEVudGl0eTxUPj4odmFsdWU6IGFueSwgb3B0cz86IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgdHlwZW5hbWU/OiBzdHJpbmc7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgfSk6IFQge1xuICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICBjb25zdCBlbnRpdHlOYW1lID0gKG9wdHMgJiYgb3B0cy5lbnRpdHlOYW1lKSB8fCByZW1vdmVFbmQodmFsdWUuX190eXBlbmFtZSB8fCBvcHRzPy50eXBlbmFtZSwgJ1ZPJyk7XG4gICAgaWYgKCFlbnRpdHlOYW1lKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgb25lIG9mIFxcJ3ZhbHVlLl9fdHlwZW5hbWVcXCcsIFxcJ29wdHMuZW50aXR5TmFtZVxcJywgb3IgXFwnb3B0cy50eXBlbmFtZVxcJy4nKTtcbiAgICBjb25zdCBlbnRpdHlDbGFzcyA9IEVudGl0eUNsYXNzZXMuZ2V0KGVudGl0eU5hbWUpIGFzIGFueTtcbiAgICBpZiAodHlwZW9mIGVudGl0eUNsYXNzLmZyb21PYmplY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZvdW5kIHRoZSBzdGF0aWMgZnVuY3Rpb24gXFwnJyArIGVudGl0eU5hbWUgKyAnLmZyb21PYmplY3QoKVxcJy4gTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gZGVjbGFyZWQgYW5kIHRoZSBlbnRpdHkgY2xhc3MgaGFzIHRoZSBARW50aXR5Q2xhc3MgZGVjb3JhdG9yJyk7XG4gICAgfVxuICAgIHJldHVybiBlbnRpdHlDbGFzcy5mcm9tT2JqZWN0KHZhbHVlLCBvcHRzKSBhcyBUO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItYXJyb3cvcHJlZmVyLWFycm93LWZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIEVudGl0eUNsYXNzKG9wdHM6IHtcbiAgdHlwZW5hbWU6IHN0cmluZztcbiAgZnJvbU9iamVjdFJldXNlU3RyYXRlZ3k/OiAnZGVmYXVsdCcgfCAnY2xvbmUnO1xufSkge1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItYXJyb3cvcHJlZmVyLWFycm93LWZ1bmN0aW9uc1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oY29uc3RydWN0b3I6IFQpIHtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgY2xhc3MgZXh0ZW5kcyBFbnRpdHlcbiAgICBpZiAoIWVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgIGNvbnN0IG9iaiA9IG5ldyBjb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRW50aXR5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYXNzICR7Y29uc3RydWN0b3IubmFtZX0gbXVzdCBleHRlbmRzIDw8RW50aXR5Pj4gdG8gYmUgYWJsZSB0byB1c2UgQEZyb21PYmplY3QhYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhenogPSAoY29uc3RydWN0b3IgYXMgYW55KVxuICAgIGNvbnN0IHR5cGVuYW1lID0gb3B0cy50eXBlbmFtZSB8fCBgJHtjb25zdHJ1Y3Rvci5uYW1lfVZPYDtcblxuICAgIC8vIERlZmluZSBzdGF0aWMgZmllbGQgVFlQRU5BTUVcbiAgICBjbGF6ei5UWVBFTkFNRSA9IHR5cGVuYW1lO1xuXG4gICAgLy8gRGVmaW5lIHN0YXRpYyBmcm9tT2JqZWN0KClcbiAgICBpZiAob3B0cy5mcm9tT2JqZWN0UmV1c2VTdHJhdGVneSA9PT0gJ2Nsb25lJykge1xuXG4gICAgICBjbGF6ei5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oc291cmNlOiBhbnksIG9wdHM/OiBhbnkpOiBUIHtcbiAgICAgICAgaWYgKCFzb3VyY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvcikgcmV0dXJuIChzb3VyY2UgYXMgYW55KS5jbG9uZShvcHRzKSBhcyBUO1xuICAgICAgICBjb25zdCB0YXJnZXQ6IGFueSA9IG5ldyBjb25zdHJ1Y3RvcigpO1xuICAgICAgICB0YXJnZXQuZnJvbU9iamVjdChzb3VyY2UsIG9wdHMpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0IGFzIFQ7XG4gICAgICB9O1xuICAgICAgY2xhenouYXNPYmplY3QgPSBmdW5jdGlvbihzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IGFueSB7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHJldHVybiBzb3VyY2UuYXNPYmplY3Qob3B0cyk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UpO1xuICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjbGF6ei5mcm9tT2JqZWN0ID0gZnVuY3Rpb24oc291cmNlOiBhbnksIG9wdHM/OiBhbnkpOiBUIHtcbiAgICAgICAgaWYgKCFzb3VyY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdARW50aXR5Q2xhc3MoKSBmcm9tT2JqZWN0KCkgPT4gd2lsbCByZWN5Y2xlIGV4aXN0aW5nIG9iamVjdDogJywgc291cmNlKTtcbiAgICAgICAgICByZXR1cm4gc291cmNlIGFzIFQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0OiBhbnkgPSBuZXcgY29uc3RydWN0b3IoKTtcbiAgICAgICAgdGFyZ2V0LmZyb21PYmplY3Qoc291cmNlLCBvcHRzKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldCBhcyBUO1xuICAgICAgfTtcblxuICAgICAgY2xhenouYXNPYmplY3QgPSBmdW5jdGlvbihzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IGFueSB7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICAgICAgICByZXR1cm4gc291cmNlLmFzT2JqZWN0KG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZygnQEVudGl0eUNsYXNzKCkgYXNPYmplY3QoKSA9PiB3aWxsIHJlY3ljbGUgZXhpc3Rpbmcgb2JqZWN0OiAnLCBzb3VyY2UpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgZW50aXR5IGNsYXNzXG4gICAgRW50aXR5Q2xhc3Nlcy5yZWdpc3Rlcih0eXBlbmFtZSwgY29uc3RydWN0b3IpO1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuICB9O1xufVxuIl19
@@ -11,7 +11,7 @@ let Peer = Peer_1 = class Peer extends Entity {
11
11
  }
12
12
  static parseUrl(peerUrl) {
13
13
  const url = new URL(peerUrl);
14
- return Peer_1.fromObject({
14
+ return this.fromObject({
15
15
  dns: url.hostname,
16
16
  port: isNilOrBlank(url.port) ? undefined : url.port,
17
17
  useSsl: url.protocol && (url.protocol.startsWith('https') || url.protocol.startsWith('wss')),
@@ -29,7 +29,7 @@ let Peer = Peer_1 = class Peer extends Entity {
29
29
  return path.substring(1);
30
30
  return path;
31
31
  }).filter(isNotNilOrBlank);
32
- return [noTrailingSlash(Peer_1.fromObject(peer).url)].concat(...paths).join('/');
32
+ return [noTrailingSlash(this.fromObject(peer).url)].concat(...paths).join('/');
33
33
  }
34
34
  asObject(options) {
35
35
  return super.asObject(options);
@@ -65,4 +65,4 @@ Peer = Peer_1 = __decorate([
65
65
  EntityClass({ typename: 'PeerVO' })
66
66
  ], Peer);
67
67
  export { Peer };
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQjs7O0FBRW5CLE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRyxPQUFPLEVBQVksTUFBTSxFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxXQUFXO0FBRVgsSUFBYSxJQUFJLFlBQWpCLE1BQWEsSUFBSyxTQUFRLE1BQVk7SUF1Q3BDO1FBQ0UsS0FBSyxDQUFDLE1BQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBckNELE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBZTtRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixPQUFPLE1BQUksQ0FBQyxVQUFVLENBQUM7WUFDckIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRO1lBQ2pCLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQ25ELE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUYsSUFBSSxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxD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SSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQztJQUM3QyxDQUFDO0NBQ0YsQ0FBQTtBQTdFWSxJQUFJO0lBRGhCLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUMsQ0FBQztHQUNyQixJQUFJLENBNkVoQjtTQTdFWSxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiLyogLS0gTmV0d29yayAtLSAqL1xuXG5pbXBvcnQge2lzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgbm9UcmFpbGluZ1NsYXNofSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7Q2xvbmVhYmxlLCBFbnRpdHksIEVudGl0eUFzT2JqZWN0T3B0aW9uc30gZnJvbSAnLi9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtFbnRpdHlDbGFzc30gZnJvbSAnLi9lbnRpdHkuZGVjb3JhdG9ycyc7XG5cbi8vIEBkeW5hbWljXG5ARW50aXR5Q2xhc3Moe3R5cGVuYW1lOiAnUGVlclZPJ30pXG5leHBvcnQgY2xhc3MgUGVlciBleHRlbmRzIEVudGl0eTxQZWVyPiBpbXBsZW1lbnRzIENsb25lYWJsZTxQZWVyPiB7XG5cbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gUGVlcjtcblxuICBzdGF0aWMgcGFyc2VVcmwocGVlclVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChwZWVyVXJsKTtcbiAgICByZXR1cm4gUGVlci5mcm9tT2JqZWN0KHtcbiAgICAgIGRuczogdXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogaXNOaWxPckJsYW5rKHVybC5wb3J0KSA/IHVuZGVmaW5lZCA6IHVybC5wb3J0LFxuICAgICAgdXNlU3NsOiB1cmwucHJvdG9jb2wgJiYgKHVybC5wcm90b2NvbC5zdGFydHNXaXRoKCdodHRwcycpIHx8IHVybC5wcm90b2NvbC5zdGFydHNXaXRoKCd3c3MnKSksXG4gICAgICBwYXRoOiBub1RyYWlsaW5nU2xhc2godXJsLnBhdGhuYW1lKVxuICAgIH0pO1xuICB9XG4gIHN0YXRpYyBwYXRoKHBlZXI6IFBlZXIsIC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgaWYgKCFwZWVyKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwncGVlclxcJyEnKTtcbiAgICAvLyBSZW1vdmUgc3RhcnRpbmcgc2xhc2hlc1xuICAgIHBhdGhzID0gKHBhdGhzIHx8IFtdKS5tYXAocGF0aCA9PiB7XG4gICAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcuLycpKSByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMik7XG4gICAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcvJykpIHJldHVybiBwYXRoLnN1YnN0cmluZygxKTtcbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0pLmZpbHRlcihpc05vdE5pbE9yQmxhbmspO1xuICAgIHJldHVybiBbbm9UcmFpbGluZ1NsYXNoKFBlZXIuZnJvbU9iamVjdChwZWVyKS51cmwpXS5jb25jYXQoLi4ucGF0aHMpLmpvaW4oJy8nKTtcbiAgfVxuXG4gIGRuczogc3RyaW5nO1xuICBpcHY0OiBzdHJpbmc7XG4gIGlwdjY6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICB1c2VTc2w6IGJvb2xlYW47XG4gIHB1YmtleTogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIGZhdmljb246IHN0cmluZztcbiAgc3RhdHVzOiAnVVAnIHwgJ0RPV04nO1xuICBzb2Z0d2FyZU5hbWU6IHN0cmluZztcbiAgc29mdHdhcmVWZXJzaW9uOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihQZWVyLlRZUEVOQU1FKTtcbiAgfVxuXG4gIGFzT2JqZWN0KG9wdGlvbnM/OiBFbnRpdHlBc09iamVjdE9wdGlvbnMpOiBhbnkge1xuICAgIHJldHVybiBzdXBlci5hc09iamVjdChvcHRpb25zKTtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnkpIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSk7XG4gICAgdGhpcy5kbnMgPSBzb3VyY2UuZG5zIHx8IHNvdXJjZS5ob3N0O1xuICAgIHRoaXMuaXB2NCA9IHNvdXJjZS5pcHY0O1xuICAgIHRoaXMuaXB2NiA9IHNvdXJjZS5pcHY2O1xuICAgIHRoaXMucG9ydCA9IGlzTm90TmlsKHNvdXJjZS5wb3J0KSA/ICtzb3VyY2UucG9ydCA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnB1YmtleSA9IHNvdXJjZS5wdWJrZXk7XG4gICAgdGhpcy51c2VTc2wgPSBzb3VyY2UudXNlU3NsIHx8ICh0aGlzLnBvcnQgPT09IDQ0Myk7XG4gICAgdGhpcy5wYXRoID0gc291cmNlLnBhdGggfHwgJyc7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IFBlZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuZXF1YWxzKG90aGVyKSAmJiB0aGlzLnB1YmtleSA9PT0gb3RoZXIucHVia2V5ICYmIHRoaXMudXJsID09PSBvdGhlci51cmw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBwZWVyIFVSTCAod2l0aG91dCB0cmFpbGluZyBzbGFzaClcbiAgICovXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMudXNlU3NsID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyB0aGlzLmhvc3RBbmRQb3J0ICsgKHRoaXMucGF0aCB8fCAnJyk7XG4gIH1cblxuICBnZXQgaG9zdEFuZFBvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuZG5zIHx8IHRoaXMuaXB2NCB8fCB0aGlzLmlwdjYpICtcbiAgICAgICgodGhpcy5wb3J0ICYmIHRoaXMucG9ydCAhPT0gODAgJiYgdGhpcy5wb3J0ICE9PSA0NDMpID8gJzonICsgdGhpcy5wb3J0IDogJycpO1xuICB9XG5cbiAgZ2V0IHJlYWNoYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgJiYgdGhpcy5zdGF0dXMgPT09ICdVUCc7XG4gIH1cbn1cbiJdfQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQjs7O0FBRW5CLE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRyxPQUFPLEVBQVksTUFBTSxFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxXQUFXO0FBRVgsSUFBYSxJQUFJLFlBQWpCLE1BQWEsSUFBSyxTQUFRLE1BQVk7SUF1Q3BDO1FBQ0UsS0FBSyxDQUFDLE1BQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBckNELE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBZTtRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDckIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRO1lBQ2pCLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQ25ELE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUYsSUFBSSxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxD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SSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQztJQUM3QyxDQUFDO0NBQ0YsQ0FBQTtBQTdFWSxJQUFJO0lBRGhCLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUMsQ0FBQztHQUNyQixJQUFJLENBNkVoQjtTQTdFWSxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiLyogLS0gTmV0d29yayAtLSAqL1xuXG5pbXBvcnQge2lzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgbm9UcmFpbGluZ1NsYXNofSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7Q2xvbmVhYmxlLCBFbnRpdHksIEVudGl0eUFzT2JqZWN0T3B0aW9uc30gZnJvbSAnLi9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtFbnRpdHlDbGFzc30gZnJvbSAnLi9lbnRpdHkuZGVjb3JhdG9ycyc7XG5cbi8vIEBkeW5hbWljXG5ARW50aXR5Q2xhc3Moe3R5cGVuYW1lOiAnUGVlclZPJ30pXG5leHBvcnQgY2xhc3MgUGVlciBleHRlbmRzIEVudGl0eTxQZWVyPiBpbXBsZW1lbnRzIENsb25lYWJsZTxQZWVyPiB7XG5cbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gUGVlcjtcblxuICBzdGF0aWMgcGFyc2VVcmwocGVlclVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChwZWVyVXJsKTtcbiAgICByZXR1cm4gdGhpcy5mcm9tT2JqZWN0KHtcbiAgICAgIGRuczogdXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogaXNOaWxPckJsYW5rKHVybC5wb3J0KSA/IHVuZGVmaW5lZCA6IHVybC5wb3J0LFxuICAgICAgdXNlU3NsOiB1cmwucHJvdG9jb2wgJiYgKHVybC5wcm90b2NvbC5zdGFydHNXaXRoKCdodHRwcycpIHx8IHVybC5wcm90b2NvbC5zdGFydHNXaXRoKCd3c3MnKSksXG4gICAgICBwYXRoOiBub1RyYWlsaW5nU2xhc2godXJsLnBhdGhuYW1lKVxuICAgIH0pO1xuICB9XG4gIHN0YXRpYyBwYXRoKHBlZXI6IFBlZXIsIC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgaWYgKCFwZWVyKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwncGVlclxcJyEnKTtcbiAgICAvLyBSZW1vdmUgc3RhcnRpbmcgc2xhc2hlc1xuICAgIHBhdGhzID0gKHBhdGhzIHx8IFtdKS5tYXAocGF0aCA9PiB7XG4gICAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcuLycpKSByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMik7XG4gICAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcvJykpIHJldHVybiBwYXRoLnN1YnN0cmluZygxKTtcbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0pLmZpbHRlcihpc05vdE5pbE9yQmxhbmspO1xuICAgIHJldHVybiBbbm9UcmFpbGluZ1NsYXNoKHRoaXMuZnJvbU9iamVjdChwZWVyKS51cmwpXS5jb25jYXQoLi4ucGF0aHMpLmpvaW4oJy8nKTtcbiAgfVxuXG4gIGRuczogc3RyaW5nO1xuICBpcHY0OiBzdHJpbmc7XG4gIGlwdjY6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICB1c2VTc2w6IGJvb2xlYW47XG4gIHB1YmtleTogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIGZhdmljb246IHN0cmluZztcbiAgc3RhdHVzOiAnVVAnIHwgJ0RPV04nO1xuICBzb2Z0d2FyZU5hbWU6IHN0cmluZztcbiAgc29mdHdhcmVWZXJzaW9uOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihQZWVyLlRZUEVOQU1FKTtcbiAgfVxuXG4gIGFzT2JqZWN0KG9wdGlvbnM/OiBFbnRpdHlBc09iamVjdE9wdGlvbnMpOiBhbnkge1xuICAgIHJldHVybiBzdXBlci5hc09iamVjdChvcHRpb25zKTtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnkpIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSk7XG4gICAgdGhpcy5kbnMgPSBzb3VyY2UuZG5zIHx8IHNvdXJjZS5ob3N0O1xuICAgIHRoaXMuaXB2NCA9IHNvdXJjZS5pcHY0O1xuICAgIHRoaXMuaXB2NiA9IHNvdXJjZS5pcHY2O1xuICAgIHRoaXMucG9ydCA9IGlzTm90TmlsKHNvdXJjZS5wb3J0KSA/ICtzb3VyY2UucG9ydCA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnB1YmtleSA9IHNvdXJjZS5wdWJrZXk7XG4gICAgdGhpcy51c2VTc2wgPSBzb3VyY2UudXNlU3NsIHx8ICh0aGlzLnBvcnQgPT09IDQ0Myk7XG4gICAgdGhpcy5wYXRoID0gc291cmNlLnBhdGggfHwgJyc7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IFBlZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuZXF1YWxzKG90aGVyKSAmJiB0aGlzLnB1YmtleSA9PT0gb3RoZXIucHVia2V5ICYmIHRoaXMudXJsID09PSBvdGhlci51cmw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBwZWVyIFVSTCAod2l0aG91dCB0cmFpbGluZyBzbGFzaClcbiAgICovXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMudXNlU3NsID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyB0aGlzLmhvc3RBbmRQb3J0ICsgKHRoaXMucGF0aCB8fCAnJyk7XG4gIH1cblxuICBnZXQgaG9zdEFuZFBvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuZG5zIHx8IHRoaXMuaXB2NCB8fCB0aGlzLmlwdjYpICtcbiAgICAgICgodGhpcy5wb3J0ICYmIHRoaXMucG9ydCAhPT0gODAgJiYgdGhpcy5wb3J0ICE9PSA0NDMpID8gJzonICsgdGhpcy5wb3J0IDogJycpO1xuICB9XG5cbiAgZ2V0IHJlYWNoYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgJiYgdGhpcy5zdGF0dXMgPT09ICdVUCc7XG4gIH1cbn1cbiJdfQ==
@@ -3,7 +3,7 @@ import { Peer } from './model/peer.model';
3
3
  import { SelectPeerModal } from '../peer/select-peer.modal';
4
4
  import { BehaviorSubject, Subscription, timer } from 'rxjs';
5
5
  import { SETTINGS_STORAGE_KEY } from './local-settings.service';
6
- import { SplashScreen } from "@capacitor/splash-screen";
6
+ import { SplashScreen } from '@capacitor/splash-screen';
7
7
  import { isNotEmptyArray, isNotNilOrBlank, sleep, toBoolean } from '../../shared/functions';
8
8
  import { Connection } from '@awesome-cordova-plugins/network/ngx';
9
9
  import { DOCUMENT } from '@angular/common';
@@ -45,6 +45,7 @@ const NetworkRefreshTimerPeriod = {
45
45
  MOBILE: 1000 * 60 * 10 /* every 10 min */,
46
46
  DESKTOP: 1000 * 60 * 5 /* every 5 min */
47
47
  };
48
+ export const PEER_URL_REGEXP = /^(http|https):\/\/[^ "?#@]+$/;
48
49
  /* -- DEV only (to debug refresh timer)
49
50
  const NetworkRefreshTimerPeriod = {
50
51
  MOBILE: 1000,
@@ -351,8 +352,7 @@ export class NetworkService extends StartableObservableService {
351
352
  componentProps: {
352
353
  onRefresh: $onRefresh,
353
354
  peers: peers$,
354
- canCancel: toBoolean(opts.canCancel, true),
355
- allowSelectDownPeer: toBoolean(opts.allowSelectDownPeer, true)
355
+ ...opts
356
356
  },
357
357
  keyboardClose: true,
358
358
  showBackdrop: true
@@ -574,9 +574,9 @@ export class NetworkService extends StartableObservableService {
574
574
  }
575
575
  }
576
576
  }
577
- NetworkService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: NetworkService, deps: [{ token: DOCUMENT }, { token: i1.Platform }, { token: i1.ModalController }, { token: i2.CryptoService }, { token: i3.Storage }, { token: i4.LocalSettingsService }, { token: i5.CacheService }, { token: i6.HttpClient }, { token: ENVIRONMENT }, { token: i7.Network, optional: true }, { token: i8.TranslateService, optional: true }, { token: i1.ToastController, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
578
- NetworkService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: NetworkService, providedIn: 'root' });
579
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: NetworkService, decorators: [{
577
+ NetworkService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: NetworkService, deps: [{ token: DOCUMENT }, { token: i1.Platform }, { token: i1.ModalController }, { token: i2.CryptoService }, { token: i3.Storage }, { token: i4.LocalSettingsService }, { token: i5.CacheService }, { token: i6.HttpClient }, { token: ENVIRONMENT }, { token: i7.Network, optional: true }, { token: i8.TranslateService, optional: true }, { token: i1.ToastController, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
578
+ NetworkService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: NetworkService, providedIn: 'root' });
579
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: NetworkService, decorators: [{
580
580
  type: Injectable,
581
581
  args: [{ providedIn: 'root' }]
582
582
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
@@ -592,4 +592,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
592
592
  }] }, { type: i1.ToastController, decorators: [{
593
593
  type: Optional
594
594
  }] }]; } });
595
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXpFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUd4QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBdUIsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzFGLE9BQU8sRUFBQyxVQUFVLEVBQVUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLDBCQUEwQixF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QUFDLE1BQU0sZUFBZSxDQUFDLENBQUM7WUFFL0YsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3RDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTztnQkFDckIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ0w7SUFDSCxDQUFDOzsyR0ExcEJVLGNBQWMsa0JBNENmLFFBQVEsa05BUVIsV0FBVzsrR0FwRFYsY0FBYyxjQURGLE1BQU07MkZBQ2xCLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkE2QzNCLE1BQU07MkJBQUMsUUFBUTs7MEJBUWYsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQ1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q3J5cHRvU2VydmljZX0gZnJvbSAnLi9jcnlwdG8uc2VydmljZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcbmltcG9ydCB7UGVlcn0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7TG9jYWxTZXR0aW5nc30gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQge01vZGFsQ29udHJvbGxlciwgUGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtTZWxlY3RQZWVyTW9kYWx9IGZyb20gJy4uL3BlZXIvc2VsZWN0LXBlZXIubW9kYWwnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzU2VydmljZSwgU0VUVElOR1NfU1RPUkFHRV9LRVl9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge1N0YXR1c0Jhcn0gZnJvbSBcIkBjYXBhY2l0b3Ivc3RhdHVzLWJhclwiO1xuaW1wb3J0IHtTcGxhc2hTY3JlZW59IGZyb20gXCJAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW5cIjtcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7aXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmssIHNsZWVwLCB0b0Jvb2xlYW59IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtDb25uZWN0aW9uLCBOZXR3b3JrfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvbmV0d29yay9uZ3gnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2FjaGVTZXJ2aWNlfSBmcm9tICdpb25pYy1jYWNoZSc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtPdmVybGF5RXZlbnREZXRhaWx9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7QXBwTWFuaWZlc3QsIE5vZGVJbmZvfSBmcm9tICcuL25ldHdvcmsudXRpbHMnO1xuaW1wb3J0IHtIdHRwVXRpbHN9IGZyb20gJy4uLy4uL3NoYXJlZC9odHRwL2h0dHAudXRpbHMnO1xuaW1wb3J0IHtWZXJzaW9uVXRpbHN9IGZyb20gJy4uLy4uL3NoYXJlZC92ZXJzaW9uL3ZlcnNpb25zJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge1N0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5cbmV4cG9ydCB0eXBlIENvbm5lY3Rpb25UeXBlID0gJ25vbmUnIHwgJ3dpZmknIHwgJ2V0aGVybmV0JyB8ICdjZWxsJyB8ICd1bmtub3duJyA7XG5cbmV4cG9ydCB0eXBlIEF1dGhUb2tlblR5cGUgPSAndG9rZW4nIHwgJ2Jhc2ljJyB8ICdiYXNpYy1hbmQtdG9rZW4nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGlvblR5cGUodHlwZTogQ29ubmVjdGlvbik6IENvbm5lY3Rpb25UeXBlIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBDb25uZWN0aW9uLk5PTkU6XG4gICAgICByZXR1cm4gJ25vbmUnO1xuICAgIGNhc2UgQ29ubmVjdGlvbi5FVEhFUk5FVDpcbiAgICAgIHJldHVybiAnZXRoZXJuZXQnO1xuICAgIGNhc2UgQ29ubmVjdGlvbi5XSUZJOlxuICAgICAgcmV0dXJuICd3aWZpJztcbiAgICBjYXNlIENvbm5lY3Rpb24uQ0VMTDpcbiAgICBjYXNlIENvbm5lY3Rpb24uQ0VMTF8yRzpcbiAgICBjYXNlIENvbm5lY3Rpb24uQ0VMTF8zRzpcbiAgICBjYXNlIENvbm5lY3Rpb24uQ0VMTF80RzpcbiAgICAgIHJldHVybiAnY2VsbCc7XG4gICAgY2FzZSBDb25uZWN0aW9uLlVOS05PV046XG4gICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ2V0aGVybmV0JztcbiAgfVxufVxuXG5leHBvcnQgZGVjbGFyZSB0eXBlIE5ldHdvcmtFdmVudFR5cGUgPSAnc3RhcnQnfCdwZWVyQ2hhbmdlZCd8J3N0YXR1c0NoYW5nZWQnfCdyZXNldENhY2hlJ3wnYmVmb3JlVHJ5T25saW5lRmluaXNoJztcblxuY29uc3QgTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZCA9IHtcbiAgICBNT0JJTEU6ICAxMDAwICogNjAgKiAxMCAvKiBldmVyeSAxMCBtaW4gKi8sXG4gICAgREVTS1RPUDogMTAwMCAqIDYwICogNSAvKiBldmVyeSA1IG1pbiAqL1xufTtcblxuLyogLS0gREVWIG9ubHkgKHRvIGRlYnVnIHJlZnJlc2ggdGltZXIpXG5jb25zdCBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kID0ge1xuICAgIE1PQklMRTogIDEwMDAsXG4gICAgREVTS1RPUDogMTAwMFxufSovXG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5ldHdvcmtTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2U8UGVlciwgUGVlcj4ge1xuXG4gIG9uUGVlckNoYW5nZXMgPSB0aGlzLnN0YXJ0U3ViamVjdC5waXBlKFxuICAgIG1hcChwZWVyID0+IHBlZXI/LnVybCksXG4gICAgZmlsdGVyKGlzTm90TmlsT3JCbGFuayksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8c3RyaW5nPigpXG4gICk7XG4gIG9uTmV0d29ya1N0YXR1c0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbm5lY3Rpb25UeXBlPihudWxsKTtcbiAgb25SZXNldE5ldHdvcmtDYWNoZSA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbW9iaWxlOiBib29sZWFuO1xuICBwcml2YXRlIF90aW1lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lclJlZnJlc2hQZXJpb2Q6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZXJSZWZyZXNoQ29uZGl0aW9uOiAoKSA9PiBib29sZWFuO1xuICBwcml2YXRlIF9kZXZpY2VDb25uZWN0aW9uVHlwZTogQ29ubmVjdGlvblR5cGU7XG4gIHByaXZhdGUgX2ZvcmNlT2ZmbGluZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiB7XG4gICBba2V5OiBzdHJpbmddOiAoKGRhdGE/OiBhbnkpID0+IFByb21pc2U8dm9pZD4pW107XG4gIH0gPSB7fTtcblxuICBnZXQgb25saW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25UeXBlICE9PSAnbm9uZSc7XG4gIH1cblxuICBnZXQgb2ZmbGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25UeXBlKCk6IENvbm5lY3Rpb25UeXBle1xuICAgIC8vIElmIGZvcmNlIG9mZmxpbmU6IHJldHVybiAnbm9uZSdcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VPZmZsaW5lICYmICdub25lJ1xuICAgICAgLy8gRWxzZSwgcmV0dXJuIGRldmljZSBjb25uZWN0aW9uIHR5cGUgKG9yIHVua25vd24pXG4gICAgICB8fCAodGhpcy5zdGFydGVkICYmIHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlIHx8ICd1bmtub3duJyk7XG4gIH1cblxuICBnZXQgcGVlcigpOiBQZWVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC52YWx1ZT8uY2xvbmUoKTtcbiAgfVxuXG4gIHNldCBwZWVyKHBlZXI6IFBlZXIpIHtcbiAgICB0aGlzLnJlc3RhcnQocGVlcik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIG5ldHdvcms6IE5ldHdvcmssXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlclxuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybSk7XG4gICAgdGhpcy5fbW9iaWxlID0gdGhpcy5zZXR0aW5ncy5tb2JpbGU7XG5cbiAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRTtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbiA9ICgpID0+IHRoaXMub25saW5lOyAvLyBDaGVjayBvbmx5IHdoZW4gb25saW5lLCBhbmQgc3RvcCB3aGVuIG9mZmxpbmVcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLkRFU0tUT1A7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24gPSAoKSA9PiB0cnVlOyAvLyBBbHdheXMgY2hlY2tcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0U3ViamVjdC5zdWJzY3JpYmUocGVlciA9PiB0aGlzLm5nT25BZnRlclN0YXJ0KHBlZXIpKTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciB0byBuZXR3b3JrIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFR5cGVcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqL1xuICBvbjxUPSBhbnk+KGV2ZW50VHlwZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTxhbnk+KTogU3Vic2NyaXB0aW9uIHtcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBjYXNlICdwZWVyQ2hhbmdlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uUGVlckNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBjYXNlICdzdGF0dXNDaGFuZ2VkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHR5cGUpID0+IGNhbGxiYWNrKHR5cGUgYXMgdW5rbm93biBhcyBUKSk7XG5cbiAgICAgIGNhc2UgJ3Jlc2V0Q2FjaGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdHJ5T25saW5lKG9wdHM/OiB7XG4gICAgc2hvd09mZmxpbmVUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd09ubGluZVRvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93TG9hZGluZ1RvYXN0PzogYm9vbGVhbjtcbiAgICBhZnRlclJldHJ5RGVsYXk/OiBudW1iZXI7XG4gICAgYWZ0ZXJSZXRyeVByb21pc2U/OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBJZiBvZmZsaW5lIG1vZGUgbm90IGZvcmNlZCwgYW5kIGRldmljZSBzYXlzIHRoZXJlIGlzIG5vIGNvbm5lY3Rpb246IHNraXBcbiAgICBpZiAoIXRoaXMuX2ZvcmNlT2ZmbGluZSB8fCB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBTSG93IGxvYWRpbmcgdG9hc3RcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNob3dMb2FkaW5nVG9hc3QgPSAhb3B0cyB8fCBvcHRzLnNob3dMb2FkaW5nVG9hc3QgIT09IGZhbHNlO1xuICAgIGxldCBsb2FkaW5nVG9hc3Q6IEhUTUxJb25Ub2FzdEVsZW1lbnQ7XG4gICAgaWYgKHNob3dMb2FkaW5nVG9hc3QpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLlJFVFJZX1RPX0NPTk5FQ1QnLFxuICAgICAgICBkdXJhdGlvbjogMTAwMDAsXG4gICAgICAgIG9uV2lsbFByZXNlbnQ6IHQgPT4gbG9hZGluZ1RvYXN0ID0gdH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpO1xuICAgICAgY29uc3Qgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG5cbiAgICAgIGlmICghc2V0dGluZ3MucGVlclVybCkgcmV0dXJuIGZhbHNlOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuXG4gICAgICBjb25zdCBwZWVyID0gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICAgIGNvbnN0IHBlZXJJbmZvID0gYXdhaXQgdGhpcy5jaGVja1BlZXJBbGl2ZShwZWVyKTtcbiAgICAgIGNvbnN0IHBlZXJBbGl2ZUFuZENvbXBhdGlibGUgPSBwZWVySW5mbyAmJiBhd2FpdCB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm8pO1xuICAgICAgaWYgKHBlZXJBbGl2ZUFuZENvbXBhdGlibGUpIHtcblxuICAgICAgICAvLyBEaXNhYmxlIHRoZSBvZmZsaW5lIG1vZGVcbiAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUoZmFsc2UpO1xuXG4gICAgICAgIC8vIFJlc3RhcnRcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN0YXJ0KHBlZXIpO1xuXG4gICAgICAgIC8vIFdhaXQgYSBwcm9taXNlLCBiZWZvcmUgcmVjaGVja1xuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2JlZm9yZVRyeU9ubGluZUZpbmlzaCcsIHRoaXMub25saW5lKTtcblxuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBsb2FkaW5nIHRvYXN0ICh3aXRoIGEgbWluaW1hbCBkaXNwbGF5IGR1cmF0aW9uIG9mIDJzKVxuICAgIGlmIChzaG93TG9hZGluZ1RvYXN0KSB7XG4gICAgICBhd2FpdCBzbGVlcCgyMDAwIC0gKERhdGUubm93KCkgLSBub3cpKTtcbiAgICAgIGlmIChsb2FkaW5nVG9hc3QpIGF3YWl0IGxvYWRpbmdUb2FzdC5kaXNtaXNzKCk7XG4gICAgfVxuXG4gICAgLy8gUmVjaGVjayBuZXR3b3JrIHN0YXR1c1xuICAgIGNvbnN0IG9ubGluZSA9IHRoaXMub25saW5lO1xuXG4gICAgLy8gRGlzcGxheSBhIHRvYXN0IHRvIHVzZXJcbiAgICBpZiAob25saW5lKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93T25saW5lVG9hc3QgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgICAgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdORVRXT1JLLklORk8uT05MSU5FJywgdHlwZTogJ2luZm8nfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdHMgJiYgb3B0cy5zaG93T2ZmbGluZVRvYXN0ID09PSB0cnVlKSB7XG4gICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICByZXR1cm4gdGhpcy5zaG93T2ZmbGluZVRvYXN0KHtzaG93UmV0cnlCdXR0b246IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZCAmJiBvbmxpbmU7XG4gIH1cblxuICBhc3luYyBzaG93T2ZmbGluZVRvYXN0KG9wdHM/OiB7XG4gICAgbWVzc2FnZT86IHN0cmluZztcbiAgICBzaG93Q2xvc2VCdXR0b24/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeUJ1dHRvbj86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5U3VjY2Vzc1RvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlMb2FkaW5nVG9hc3Q/OiBib29sZWFuO1xuICAgIG9uUmV0cnlTdWNjZXNzPzogKCkgPT4gdm9pZDtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLm9ubGluZSkgcmV0dXJuOyAvLyBTa2lwIGlmIG9ubGluZVxuXG4gICAgLy8gVG9hc3Qgd2l0aCBhIHJldHJ5IGJ1dHRvblxuICAgIGlmICghb3B0cyB8fCBvcHRzLnNob3dSZXRyeUJ1dHRvbiAhPT0gZmFsc2UpIHtcblxuICAgICAgY29uc3QgdG9hc3RSZXN1bHQgPSBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IChvcHRzICYmIG9wdHMubWVzc2FnZSB8fCAnRVJST1IuTkVUV09SS19SRVFVSVJFRCcpLFxuICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgZHVyYXRpb246IDEwMDAwMCxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIC8vIHJlY29ubmVjdCBidXR0b25cbiAgICAgICAgICB7XG4gICAgICAgICAgICByb2xlOiAncmVmcmVzaCcsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdORVRXT1JLLkJUTl9DSEVDS19BTElWRScpXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgLy8gVXNlciBkb24ndCBjbGljayByZWNvbm5lY3Q6IHJldHVyblxuICAgICAgaWYgKCF0b2FzdFJlc3VsdCB8fCB0b2FzdFJlc3VsdC5yb2xlICE9PSAncmVmcmVzaCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gaWYgbmV0d29yayBzdGF0ZSBjaGFuZ2VkIHRvIG9ubGluZTogZXhpdCBoZXJlXG4gICAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBUcnkgdG8gcmVjb25uZWN0XG4gICAgICBjb25zdCBvbmxpbmUgPSBhd2FpdCB0aGlzLnRyeU9ubGluZSh7XG4gICAgICAgIHNob3dPZmZsaW5lVG9hc3Q6IGZhbHNlLFxuICAgICAgICBzaG93T25saW5lVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5U3VjY2Vzc1RvYXN0LCB0cnVlKSxcbiAgICAgICAgc2hvd0xvYWRpbmdUb2FzdDogdG9Cb29sZWFuKG9wdHMgJiYgb3B0cy5zaG93UmV0cnlMb2FkaW5nVG9hc3QsIHRydWUpXG4gICAgICB9KTtcbiAgICAgIGlmIChvbmxpbmUpIHtcbiAgICAgICAgLy8gQ2FsbCBzdWNjZXNzIGNhbGxiYWNrIChhc3luYylcbiAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vblJldHJ5U3VjY2Vzcykge1xuICAgICAgICAgIHNldFRpbWVvdXQob3B0cy5vblJldHJ5U3VjY2Vzcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIG9wdHMgPSB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIHNob3dSZXRyeUJ1dHRvbjogZmFsc2UsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTaW1wbGUgdG9hc3QsIHdpdGhvdXQgJ2F3YWl0JywgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0J3MgZGlzbWlzc1xuICAgIHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgIG1lc3NhZ2U6ICdFUlJPUi5ORVRXT1JLX1JFUVVJUkVEJyxcbiAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAuLi5vcHRzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgcGVlciBpcyBhbGl2ZVxuICAgKlxuICAgKiBAcGFyYW0gcGVlclxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgY2hlY2tQZWVyQWxpdmUocGVlcj86IHN0cmluZyB8IFBlZXIsIG9wdHM/OiB7IGNoZWNrQ29tcGF0aWJsZT86IGJvb2xlYW47IGRpc3BsYXlUb2FzdD86IGJvb2xlYW4gfSApOiBQcm9taXNlPE5vZGVJbmZvPiB7XG4gICAgcGVlciA9IHBlZXIgfHwgdGhpcy5wZWVyO1xuICAgIGlmICghcGVlcikge1xuICAgICAgY29uc3Qgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG4gICAgICBpZiAoIXNldHRpbmdzLnBlZXJVcmwpIHJldHVybiB1bmRlZmluZWQ7IC8vIE5vIHBlZXIgZGVmaW5lLiBTa2lwXG4gICAgICBwZWVyID0gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0Tm9kZUluZm8ocGVlcik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbmV0d29ya10gQ2Fubm90IGdldCAvYXBpL25vZGUvaW5mbyBmcm9tIHBlZXI6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciksIGVycik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm86IE5vZGVJbmZvLCBvcHRzPzogeyBzaG93VG9hc3Q/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb24pIHJldHVybiB0cnVlOyAvLyBTa2lwIGNvbXBhdGliaWxpdHkgY2hlY2tcblxuICAgIC8vIENoZWNrIHRoZSBtaW4gcG9kIHZlcnNpb24sIGRlZmluZWQgYnkgdGhlIGFwcFxuICAgIGNvbnN0IGlzQ29tcGF0aWJsZSA9IHBlZXJJbmZvICYmIHBlZXJJbmZvLnNvZnR3YXJlVmVyc2lvbiAmJiBWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb24sIHBlZXJJbmZvLnNvZnR3YXJlVmVyc2lvbik7XG5cbiAgICAvLyBEaXNwbGF5IHRvYXN0LCBpZiBub3QgY29tcGF0aWJsZVxuICAgIGlmICghaXNDb21wYXRpYmxlICYmICghb3B0cyB8fCBvcHRzLnNob3dUb2FzdCAhPT0gZmFsc2UpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdORVRXT1JLLkVSUk9SLk5PVF9DT01QQVRJQkxFX1BFRVInLFxuICAgICAgICBtZXNzYWdlUGFyYW1zOiB7XG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5lbnZpcm9ubWVudC5wZWVyTWluVmVyc2lvblxuICAgICAgICB9LFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaXNDb21wYXRpYmxlO1xuICB9XG5cbiAgZ2V0Tm9kZUluZm8ocGVlcj86IHN0cmluZyB8IFBlZXIpOiBQcm9taXNlPE5vZGVJbmZvPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICcvYXBpL25vZGUvaW5mbycpO1xuICAgIHJldHVybiB0aGlzLmdldChwYXRoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEFwcE1hbmlmZXN0KHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzPzoge25vY2FjaGU/OiBib29sZWFufSk6IFByb21pc2U8QXBwTWFuaWZlc3R8dW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJ21hbmlmZXN0Lmpzb24nKTtcbiAgICAgIGlmIChvcHRzPy5ub2NhY2hlKSB7XG4gICAgICAgIHBhdGggKz0gJz90PScgKyBEYXRlLm5vdygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0KHBhdGgsIG9wdHMpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSBjb25zb2xlLmVycm9yKCdbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSBcXCdtYW5pZmVzdC5qc29uXFwnLiBQbGVhc2UgbWFrZSBzdXJlIHdlYnNlcnZlciBjb25maWcgYWxsb3cgQ09SUyBhY2Nlc3MnLCBlcnIpO1xuICAgICAgZWxzZSBjb25zb2xlLmVycm9yKCdbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSBcXCdtYW5pZmVzdC5qc29uXFwnLicsIGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFwcFZlcnNpb24ocGVlcj86IHN0cmluZyB8IFBlZXIsIG9wdHMgPSB7bm9jYWNoZTogdHJ1ZX0pOiBQcm9taXNlPHN0cmluZ3x1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHBhdGggPSB0aGlzLmNvbXB1dGVQZWVyUGF0aChwZWVyLCAndmVyc2lvbi5hcHB1cCcpO1xuICAgICAgaWYgKG9wdHMubm9jYWNoZSkge1xuICAgICAgICBwYXRoICs9ICc/dD0nICsgRGF0ZS5ub3coKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwcFZlcnNpb246IHN0cmluZyA9IGF3YWl0IHRoaXMuZ2V0VGV4dChwYXRoLCBvcHRzKTtcbiAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsoYXBwVmVyc2lvbikpIHJldHVybiBhcHBWZXJzaW9uO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSBjb25zb2xlLmVycm9yKCdbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSBcXCd2ZXJzaW9uLmFwcHVwXFwnLiBQbGVhc2UgbWFrZSBzdXJlIHdlYnNlcnZlciBjb25maWcgYWxsb3cgQ09SUyBhY2Nlc3MnKTtcbiAgICAgIGVsc2UgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwndmVyc2lvbi5hcHB1cFxcJy4nLCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICAvLyBUcnkgbG9hZGluZyBtYW5pZmVzdC5qc29uXG4gICAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEFwcE1hbmlmZXN0KHBlZXIsIG9wdHMpO1xuICAgIHJldHVybiBtYW5pZmVzdD8udmVyc2lvbjtcbiAgfVxuXG4gIGNvbXB1dGVQZWVyUGF0aChwZWVyOiBzdHJpbmcgfCBQZWVyIHwgdW5kZWZpbmVkLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHBlZXIgPSBwZWVyIHx8IHRoaXMucGVlcjtcbiAgICBpZiAoIXBlZXIpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgcGVlclVybCA9IChwZWVyIGluc3RhbmNlb2YgUGVlcikgPyBwZWVyLnVybCA6IChwZWVyIGFzIHN0cmluZyk7XG5cbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICBpZiAocGVlclVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICBwZWVyVXJsID0gcGVlclVybC5zdWJzdHIoMCwgcGVlclVybC5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZmlyc3QgcGF0aFxuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICAgIH1cblxuICAgIC8vIENvbmNhdCBwZWVyIFVSTCBhbmQgcGF0aFxuICAgIHJldHVybiBwZWVyVXJsICsgcGF0aDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgKi9cbiAgc2V0Rm9yY2VPZmZsaW5lKHZhbHVlPzogYm9vbGVhbiwgb3B0cz86IHtcbiAgICBzaG93VG9hc3Q/OiBib29sZWFuOyAvLyBEaXNwbGF5IGEgdG9hc3QsIHdoZW4gb2ZmbGluZSA/XG4gIH0pIHtcbiAgICB2YWx1ZSA9IHRvQm9vbGVhbih2YWx1ZSwgdHJ1ZSk7XG4gICAgaWYgKHRoaXMuX2ZvcmNlT2ZmbGluZSAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzQ29ubmVjdGlvblR5cGUgPSB0aGlzLmNvbm5lY3Rpb25UeXBlO1xuICAgICAgdGhpcy5fZm9yY2VPZmZsaW5lID0gdmFsdWU7XG4gICAgICBjb25zdCBjdXJyZW50Q29ubmVjdGlvblR5cGUgPSB0aGlzLmNvbm5lY3Rpb25UeXBlO1xuXG4gICAgICBpZiAocHJldmlvdXNDb25uZWN0aW9uVHlwZSAhPT0gY3VycmVudENvbm5lY3Rpb25UeXBlKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIENvbm5lY3Rpb24gY2hhbmdlZCB0byB7JHtjdXJyZW50Q29ubmVjdGlvblR5cGV9fWApO1xuICAgICAgICB0aGlzLm9uTmV0d29ya1N0YXR1c0NoYW5nZXMubmV4dChjdXJyZW50Q29ubmVjdGlvblR5cGUpO1xuXG4gICAgICAgIC8vIE9mZmxpbmUgbW9kZTogYWxlcnQgdGhlIHVzZXJcbiAgICAgICAgaWYgKGN1cnJlbnRDb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnICYmICghb3B0cyB8fCBvcHRzLnNob3dUb2FzdCAhPT0gZmFsc2UpKSB7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJywgdHlwZTogJ3dhcm5pbmcnfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzaG93U2VsZWN0UGVlck1vZGFsKG9wdHM/OiB7YWxsb3dTZWxlY3REb3duUGVlcj86IGJvb2xlYW47IGNhbkNhbmNlbD86IGJvb2xlYW59KTogUHJvbWlzZTxQZWVyIHwgdW5kZWZpbmVkPiB7XG5cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIGNvbnN0ICRvblJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIGNvbnN0IHBlZXJzJCA9ICRvblJlZnJlc2gucGlwZShcbiAgICAgIG1lcmdlTWFwKChfKSA9PiB0aGlzLmdldERlZmF1bHRQZWVycygpKSxcbiAgICAgIG1hcChwZWVycyA9PiBwZWVycyB8fCBbXSlcbiAgICApO1xuXG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBTZWxlY3RQZWVyTW9kYWwsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBvblJlZnJlc2g6ICRvblJlZnJlc2gsXG4gICAgICAgIHBlZXJzOiBwZWVycyQsXG4gICAgICAgIGNhbkNhbmNlbDogdG9Cb29sZWFuKG9wdHMuY2FuQ2FuY2VsLCB0cnVlKSxcbiAgICAgICAgYWxsb3dTZWxlY3REb3duUGVlcjogdG9Cb29sZWFuKG9wdHMuYWxsb3dTZWxlY3REb3duUGVlciwgdHJ1ZSlcbiAgICAgIH0sXG4gICAgICBrZXlib2FyZENsb3NlOiB0cnVlLFxuICAgICAgc2hvd0JhY2tkcm9wOiB0cnVlXG4gICAgfSk7XG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuICAgICRvblJlZnJlc2guZW1pdCgpO1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbldpbGxEaXNtaXNzKCk7XG4gICAgJG9uUmVmcmVzaC5jb21wbGV0ZSgpO1xuXG4gICAgcmV0dXJuIGRhdGEgJiYgKGRhdGEgYXMgUGVlcikgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIGNvbnN0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBDbGVhcmluZyBhbGwgY2FjaGVzLi4uJyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuY2xlYXJBbGwoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBFbWl0IGV2ZW50XG4gICAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UgJiYgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLmVtaXQoKTtcblxuICAgICAgICAgIC8vIFdhaXQgb2JzZXJ2ZXJzIGNsZWFuIHRoZWlyIGNhY2hlcywgaWYgbmVlZFxuICAgICAgICAgIHJldHVybiBzbGVlcCg1MDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBBbGwgY2FjaGUgY2xlYXJlZCwgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KHBlZXI/OiBQZWVyKTogUHJvbWlzZTxQZWVyPiB7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBTdGFydGluZyBuZXR3b3JrLi4uJyk7XG5cbiAgICAvLyBSZXN0b3JpbmcgbG9jYWwgc2V0dGluZ3NcbiAgICBwZWVyID0gcGVlciB8fCAoYXdhaXQgdGhpcy5yZXN0b3JlTG9jYWxseSgpKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0byBoaWRlIHRoZSBzcGxhc2hzY3JlZW4sIGJlZm9yZSBvcGVuIHRoZSBtb2RhbFxuICAgIGlmICghcGVlcikgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgIC8vIE5vIHBlZXIgaW4gc2V0dGluZ3M6IGFzayB1c2VyIHRvIGNob29zZVxuICAgIHdoaWxlICghcGVlcikge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIE5vIHBlZXIgZGVmaW5lZC4gQXNraW5nIHVzZXIgdG8gY2hvb3NlIGEgcGVlci4nKTtcbiAgICAgIHBlZXIgPSBhd2FpdCB0aGlzLnNob3dTZWxlY3RQZWVyTW9kYWwoe2FsbG93U2VsZWN0RG93blBlZXI6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gU3RhcnRpbmcgc2VydmljZSBbT0tdIHtwZWVyOiAnJHtwZWVyLnVybH0nLCBvbmxpbmU6ICR7dGhpcy5vbmxpbmV9fWApO1xuXG4gICAgcmV0dXJuIHBlZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPbkFmdGVyU3RhcnQocGVlcjogUGVlcikge1xuXG4gICAgLy8gV2FpdCBzZXR0aW5ncyBzdGFydHMsIHRoZW4gc2F2ZSBwZWVyIGluIHNldHRpbmdzXG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5hcHBseSh7cGVlclVybDogcGVlci51cmx9KTtcblxuICAgIHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCh0aGlzLm5ldHdvcms/LnR5cGUgfHwgJ3Vua25vd24nKTtcblxuICAgIC8vIFN0YXJ0IHRoZSByZWZyZXNoIHRpbWVyXG4gICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuXG4gICAgLy8gTGlzdGVuIGZvciBkZXZpY2UgbmV0d29yayBjaGFuZ2VzXG4gICAgaWYgKHRoaXMubmV0d29yaykge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLm5ldHdvcmsub25EaXNjb25uZWN0KCkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCgnbm9uZScpKSk7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMubmV0d29yay5vbkNvbm5lY3QoKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKHRoaXMubmV0d29yay50eXBlKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RvcCgpIHtcbiAgICAvLyBTdG9wIHRpbWVyLCBpZiBjYW5ub3QgcmVmcmVzaCBhbnltb3JlXG4gICAgaWYgKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbigpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXN0b3JlIHBlZXIgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8UGVlciB8IHVuZGVmaW5lZD4ge1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCBzZXR0aW5nc1N0ciA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuICAgIGNvbnN0IHNldHRpbmdzID0gc2V0dGluZ3NTdHIgJiYgSlNPTi5wYXJzZShzZXR0aW5nc1N0cikgfHwgdW5kZWZpbmVkO1xuICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy5wZWVyVXJsKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gVXNlIHBlZXIgeyR7c2V0dGluZ3MucGVlclVybH19IChmb3VuZCBpbiB0aGUgbG9jYWwgc3RvcmFnZSlgKTtcbiAgICAgIHJldHVybiBQZWVyLnBhcnNlVXJsKHNldHRpbmdzLnBlZXJVcmwpO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHVzZSBkZWZhdWx0IHBlZXIgaW4gZW52LCBpZiBleGlzdHNcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlcikge1xuICAgICAgcmV0dXJuIFBlZXIuZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKTtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCBpZiBBcHAgaXMgaG9zdGVkLCB0cnkgdGhlIHdlYiBzaXRlIGFzIGEgcGVlclxuICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5fZG9jdW1lbnQgJiYgdGhpcy5fZG9jdW1lbnQubG9jYXRpb247XG4gICAgaWYgKGxvY2F0aW9uICYmIGxvY2F0aW9uLnByb3RvY29sICYmIGxvY2F0aW9uLnByb3RvY29sLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgY29uc3QgaG9zdG5hbWUgPSB0aGlzLl9kb2N1bWVudC5sb2NhdGlvbi5ob3N0O1xuICAgICAgY29uc3QgZGV0ZWN0ZWRQZWVyID0gUGVlci5wYXJzZVVybChgJHt0aGlzLl9kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbH0ke2hvc3RuYW1lfSR7dGhpcy5lbnZpcm9ubWVudC5iYXNlVXJsfWApO1xuICAgICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tQZWVyQWxpdmUoZGV0ZWN0ZWRQZWVyKSkge1xuICAgICAgICByZXR1cm4gZGV0ZWN0ZWRQZWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0byBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdG9wUmVmcmVzaFRpbWVyKCkge1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdGFydFJlZnJlc2hUaW1lcigpe1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBBbHJlYWR5IHJ1bm5pbmc6IHNraXBcblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHJlZnJlc2ggdGltZXIsIGV2ZXJ5ICR7dGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kfW1zLi4uYCk7XG5cbiAgICBsZXQgbGFzdEluZm86IE5vZGVJbmZvO1xuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kLCB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QpXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gU2tpcCBzb21lIHRpbWVyIGV2ZW50IChzZWUgY29uc3RydWN0b3IpXG4gICAgICAgIGZpbHRlcih0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24pLFxuXG4gICAgICAgIC8vIENoZWNraW4gaWYgcGVlciBhbGl2ZVxuICAgICAgICB0YXAoKCkgPT4gIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5jaGVja1BlZXJBbGl2ZSh0aGlzLnBlZXIpKSxcblxuICAgICAgICAvLyBGaWx0ZXIgdG8ga2VlcCBvbmx5IGNoYW5nZXNcbiAgICAgICAgZmlsdGVyKGluZm8gPT4gISFpbmZvICE9PSAhIWxhc3RJbmZvKSxcbiAgICAgICAgdGFwKGluZm8gPT4gbGFzdEluZm8gPSBpbmZvKSxcblxuICAgICAgICAvLyBDaGVjayBjb21wYXRpYmlsaXR5XG4gICAgICAgIG1lcmdlTWFwKChpbmZvKSA9PiB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUoaW5mbywge3Nob3dUb2FzdDogdHJ1ZX0pKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYWxpdmUgPT4ge1xuICAgICAgICAgIGlmIChhbGl2ZSAmJiB0aGlzLm9mZmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAgICAgLy8gUmVzdGFydCB0aGUgc2VydmljZSAodG8gZm9yY2UgcmUgYXV0aClcbiAgICAgICAgICAgIHRoaXMucmVzdGFydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICghYWxpdmUgJiYgdGhpcy5vbmxpbmUpe1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUodHJ1ZSk7XG5cbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHNlcnZpY2VcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIFJlZnJlc2ggdGltZXIgc3RvcHBlZCcpKTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFRleHQocGF0aDogc3RyaW5nLCBvcHRzPzoge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVzcG9uc2VUeXBlPzogJ3RleHQnO1xuICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIGxldCB1cmkgPSB0aGlzLmdldFVyaShwYXRoKTtcbiAgICByZXR1cm4gSHR0cFV0aWxzLmdldFRleHQodGhpcy5odHRwLCB1cmksIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldDxUPihwYXRoOiBzdHJpbmcsIG9wdHM/OiB7XG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgfTtcbiAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgbm9jYWNoZT86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFQ+IHtcblxuICAgIGxldCB1cmkgPSB0aGlzLmdldFVyaShwYXRoKTtcbiAgICByZXR1cm4gSHR0cFV0aWxzLmdldEpzb248VD4odGhpcy5odHRwLCB1cmksIG9wdHMpO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgZ2V0VXJpKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHVyaSA9IHBhdGg7XG5cbiAgICAvLyBJZiBwYXRoIGlzIG5vdCBhbiBVUkk6IHByZXBlbmQgd2l0aCBwZWVyIFVSTFxuICAgIGlmICghdXJpLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhdXJpLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgIGxldCBwZWVyVXJsID0gKHRoaXMucGVlciAmJiB0aGlzLnBlZXIudXJsKTtcblxuICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gICAgICBpZiAocGVlclVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBlZXJVcmwgPSBwZWVyVXJsLnN1YnN0cigwLCBwZWVyVXJsLmxlbmd0aCAtIDEgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGZpcnN0IHBhdGhcbiAgICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9ICcvJyArIHBhdGg7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgVVJJOiBjb25jYXQgcGVlciBVUkwgYW5kIHBhdGhcbiAgICAgIHVyaSA9IHBlZXJVcmwgKyBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gdXJpO1xuICB9XG4gIHByb3RlY3RlZCBvbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKGNvbm5lY3Rpb25UeXBlPzogc3RyaW5nKSB7XG4gICAgY29ubmVjdGlvblR5cGUgPSAoY29ubmVjdGlvblR5cGUgfHwgJ3Vua25vd24nKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjb25uZWN0aW9uVHlwZS5zdGFydHNXaXRoKCdjZWxsJykpIGNvbm5lY3Rpb25UeXBlID0gJ2NlbGwnO1xuICAgIGlmIChjb25uZWN0aW9uVHlwZSAhPT0gdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUpIHtcbiAgICAgIHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlID0gY29ubmVjdGlvblR5cGUgYXMgQ29ubmVjdGlvblR5cGU7XG5cbiAgICAgIC8vIElmIE5PVCAgYWxyZWFkeSBmb3JjZWQgYXMgb2ZmbGluZSwgZW1pdCBldmVudFxuICAgICAgaWYgKCF0aGlzLl9mb3JjZU9mZmxpbmUpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gQ29ubmVjdGlvbiBjaGFuZ2VkIHRvIHske3RoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlfX1gKTtcbiAgICAgICAgdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLm5leHQodGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUpO1xuXG4gICAgICAgIC8vIENoYW5nZSB0byBvZmZsaW5lXG4gICAgICAgIGlmICh0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX21vYmlsZSkge1xuICAgICAgICAgICAgLy8gRm9yY2Ugb2ZmbGluZSBtb2RlXG4gICAgICAgICAgICB0aGlzLl9mb3JjZU9mZmxpbmUgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBBbGVydCB0aGUgdXNlclxuICAgICAgICAgICAgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJywgdHlwZTogJ3dhcm5pbmcnfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQWxlcnQgdGhlIHVzZXJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkUnLCB0eXBlOiAnd2FybmluZyd9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdG9wIHRoZSBuZXR3b3JrIHNlcnZpY2VcbiAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVmYXVsdCBwZWVycywgZnJvbSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldERlZmF1bHRQZWVycygpOiBQcm9taXNlPFBlZXJbXT4ge1xuICAgIGNvbnN0IHBlZXJzID0gKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXJzIHx8IFtdKS5tYXAoUGVlci5mcm9tT2JqZWN0KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBlZXJzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Q8VCA9IGFueT4ob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8T3ZlcmxheUV2ZW50RGV0YWlsPFQ+PiB7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTGlzdGVuZXI8VD0gYW55PihuYW1lOiBOZXR3b3JrRXZlbnRUeXBlLCBjYWxsYmFjazogKGRhdGE/OiBUKSA9PiBQcm9taXNlPHZvaWQ+KTogU3Vic2NyaXB0aW9uIHtcbiAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0gPSB0aGlzLl9saXN0ZW5lcnNbbmFtZV0gfHwgW107XG4gICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdLnB1c2goY2FsbGJhY2spO1xuXG4gICAgLy8gV2hlbiB1bnN1YnNjcmliZSwgcmVtb3ZlIGZyb20gdGhlIGxpc3RlbmVyXG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oKCkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnNbbmFtZV0uaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGVtaXQ8VD0gYW55PihuYW1lOiBOZXR3b3JrRXZlbnRUeXBlLCBkYXRhPzogVCkge1xuICAgIGNvbnN0IGhvb2tzID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoaG9va3MpKSB7XG4gICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrLXNlcnZpY2VdIFRyaWdnZXIgJHtuYW1lfSBob29rOiBFeGVjdXRpbmcgJHtob29rcy5sZW5ndGh9IGNhbGxiYWNrcy4uLmApO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoaG9va3MubWFwKGNhbGxiYWNrID0+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IGNhbGxiYWNrKGRhdGEpO1xuICAgICAgICBpZiAoIXByb21pc2UpIHJldHVybjtcbiAgICAgICAgcmV0dXJuIHByb21pc2UuY2F0Y2goZXJyID0+IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGV4ZWN1dGluZyBob29rICcgKyBuYW1lLCBlcnIpKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
595
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXpFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUd4QyxPQUFPLEVBQTBCLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQXVCLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRixPQUFPLEVBQUMsVUFBVSxFQUFVLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBbUIsTUFBTSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR2hGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BFLE9BQU8sRUFBQywwQkFBMEIs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QUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxPQUFPO29CQUFFLE9BQU87Z0JBQ3JCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDeEYsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNMO0lBQ0gsQ0FBQzs7MkdBenBCVSxjQUFjLGtCQTRDZixRQUFRLGtOQVFSLFdBQVc7K0dBcERWLGNBQWMsY0FERixNQUFNOzJGQUNsQixjQUFjO2tCQUQxQixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7MEJBNkMzQixNQUFNOzJCQUFDLFFBQVE7OzBCQVFmLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NyeXB0b1NlcnZpY2V9IGZyb20gJy4vY3J5cHRvLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5pbXBvcnQge1BlZXJ9IGZyb20gJy4vbW9kZWwvcGVlci5tb2RlbCc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3N9IGZyb20gJy4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHtNb2RhbENvbnRyb2xsZXIsIFBsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnMsIFNlbGVjdFBlZXJNb2RhbH0gZnJvbSAnLi4vcGVlci9zZWxlY3QtcGVlci5tb2RhbCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlLCBTRVRUSU5HU19TVE9SQUdFX0tFWX0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7U3BsYXNoU2NyZWVufSBmcm9tICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsT3JCbGFuaywgc2xlZXAsIHRvQm9vbGVhbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0Nvbm5lY3Rpb24sIE5ldHdvcmt9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9uZXR3b3JrL25neCc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDYWNoZVNlcnZpY2V9IGZyb20gJ2lvbmljLWNhY2hlJztcbmltcG9ydCB7U2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge092ZXJsYXlFdmVudERldGFpbH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtBcHBNYW5pZmVzdCwgTm9kZUluZm99IGZyb20gJy4vbmV0d29yay51dGlscyc7XG5pbXBvcnQge0h0dHBVdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL2h0dHAvaHR0cC51dGlscyc7XG5pbXBvcnQge1ZlcnNpb25VdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7U3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtb2JzZXJ2YWJsZS1zZXJ2aWNlLmNsYXNzJztcblxuZXhwb3J0IHR5cGUgQ29ubmVjdGlvblR5cGUgPSAnbm9uZScgfCAnd2lmaScgfCAnZXRoZXJuZXQnIHwgJ2NlbGwnIHwgJ3Vua25vd24nIDtcblxuZXhwb3J0IHR5cGUgQXV0aFRva2VuVHlwZSA9ICd0b2tlbicgfCAnYmFzaWMnIHwgJ2Jhc2ljLWFuZC10b2tlbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25uZWN0aW9uVHlwZSh0eXBlOiBDb25uZWN0aW9uKTogQ29ubmVjdGlvblR5cGUge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIENvbm5lY3Rpb24uTk9ORTpcbiAgICAgIHJldHVybiAnbm9uZSc7XG4gICAgY2FzZSBDb25uZWN0aW9uLkVUSEVSTkVUOlxuICAgICAgcmV0dXJuICdldGhlcm5ldCc7XG4gICAgY2FzZSBDb25uZWN0aW9uLldJRkk6XG4gICAgICByZXR1cm4gJ3dpZmknO1xuICAgIGNhc2UgQ29ubmVjdGlvbi5DRUxMOlxuICAgIGNhc2UgQ29ubmVjdGlvbi5DRUxMXzJHOlxuICAgIGNhc2UgQ29ubmVjdGlvbi5DRUxMXzNHOlxuICAgIGNhc2UgQ29ubmVjdGlvbi5DRUxMXzRHOlxuICAgICAgcmV0dXJuICdjZWxsJztcbiAgICBjYXNlIENvbm5lY3Rpb24uVU5LTk9XTjpcbiAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnZXRoZXJuZXQnO1xuICB9XG59XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgTmV0d29ya0V2ZW50VHlwZSA9ICdzdGFydCd8J3BlZXJDaGFuZ2VkJ3wnc3RhdHVzQ2hhbmdlZCd8J3Jlc2V0Q2FjaGUnfCdiZWZvcmVUcnlPbmxpbmVGaW5pc2gnO1xuXG5jb25zdCBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kID0ge1xuICAgIE1PQklMRTogIDEwMDAgKiA2MCAqIDEwIC8qIGV2ZXJ5IDEwIG1pbiAqLyxcbiAgICBERVNLVE9QOiAxMDAwICogNjAgKiA1IC8qIGV2ZXJ5IDUgbWluICovXG59O1xuXG5leHBvcnQgY29uc3QgUEVFUl9VUkxfUkVHRVhQID0gL14oaHR0cHxodHRwcyk6XFwvXFwvW14gXCI/I0BdKyQvO1xuXG4vKiAtLSBERVYgb25seSAodG8gZGVidWcgcmVmcmVzaCB0aW1lcilcbmNvbnN0IE5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QgPSB7XG4gICAgTU9CSUxFOiAgMTAwMCxcbiAgICBERVNLVE9QOiAxMDAwXG59Ki9cblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmV0d29ya1NlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZTxQZWVyLCBQZWVyPiB7XG5cbiAgb25QZWVyQ2hhbmdlcyA9IHRoaXMuc3RhcnRTdWJqZWN0LnBpcGUoXG4gICAgbWFwKHBlZXIgPT4gcGVlcj8udXJsKSxcbiAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxzdHJpbmc+KClcbiAgKTtcbiAgb25OZXR3b3JrU3RhdHVzQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29ubmVjdGlvblR5cGU+KG51bGwpO1xuICBvblJlc2V0TmV0d29ya0NhY2hlID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgX3RpbWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVyUmVmcmVzaFBlcmlvZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lclJlZnJlc2hDb25kaXRpb246ICgpID0+IGJvb2xlYW47XG4gIHByaXZhdGUgX2RldmljZUNvbm5lY3Rpb25UeXBlOiBDb25uZWN0aW9uVHlwZTtcbiAgcHJpdmF0ZSBfZm9yY2VPZmZsaW5lOiBib29sZWFuO1xuICBwcml2YXRlIF9saXN0ZW5lcnM6IHtcbiAgIFtrZXk6IHN0cmluZ106ICgoZGF0YT86IGFueSkgPT4gUHJvbWlzZTx2b2lkPilbXTtcbiAgfSA9IHt9O1xuXG4gIGdldCBvbmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblR5cGUgIT09ICdub25lJztcbiAgfVxuXG4gIGdldCBvZmZsaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25UeXBlID09PSAnbm9uZSc7XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblR5cGUoKTogQ29ubmVjdGlvblR5cGV7XG4gICAgLy8gSWYgZm9yY2Ugb2ZmbGluZTogcmV0dXJuICdub25lJ1xuICAgIHJldHVybiB0aGlzLl9mb3JjZU9mZmxpbmUgJiYgJ25vbmUnXG4gICAgICAvLyBFbHNlLCByZXR1cm4gZGV2aWNlIGNvbm5lY3Rpb24gdHlwZSAob3IgdW5rbm93bilcbiAgICAgIHx8ICh0aGlzLnN0YXJ0ZWQgJiYgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgfHwgJ3Vua25vd24nKTtcbiAgfVxuXG4gIGdldCBwZWVyKCk6IFBlZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGFTdWJqZWN0LnZhbHVlPy5jbG9uZSgpO1xuICB9XG5cbiAgc2V0IHBlZXIocGVlcjogUGVlcikge1xuICAgIHRoaXMucmVzdGFydChwZWVyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcml2YXRlIGNyeXB0b1NlcnZpY2U6IENyeXB0b1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FjaGU6IENhY2hlU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbmV0d29yazogTmV0d29yayxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLl9tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcblxuICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZCA9IE5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QuTU9CSUxFO1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uID0gKCkgPT4gdGhpcy5vbmxpbmU7IC8vIENoZWNrIG9ubHkgd2hlbiBvbmxpbmUsIGFuZCBzdG9wIHdoZW4gb2ZmbGluZVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZCA9IE5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QuREVTS1RPUDtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbiA9ICgpID0+IHRydWU7IC8vIEFsd2F5cyBjaGVja1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRTdWJqZWN0LnN1YnNjcmliZShwZWVyID0+IHRoaXMubmdPbkFmdGVyU3RhcnQocGVlcikpO1xuXG4gICAgLy8gRm9yIERFViBvbmx5XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcblxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHRvIG5ldHdvcmsgZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50VHlwZVxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICovXG4gIG9uPFQ9IGFueT4oZXZlbnRUeXBlOiBOZXR3b3JrRXZlbnRUeXBlLCBjYWxsYmFjazogKGRhdGE/OiBUKSA9PiBQcm9taXNlPGFueT4pOiBTdWJzY3JpcHRpb24ge1xuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0U3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3BlZXJDaGFuZ2VkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25QZWVyQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3N0YXR1c0NoYW5nZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgodHlwZSkgPT4gY2FsbGJhY2sodHlwZSBhcyB1bmtub3duIGFzIFQpKTtcblxuICAgICAgY2FzZSAncmVzZXRDYWNoZSc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uUmVzZXROZXR3b3JrQ2FjaGUuc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcihldmVudFR5cGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB0cnlPbmxpbmUob3B0cz86IHtcbiAgICBzaG93T2ZmbGluZVRvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93T25saW5lVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dMb2FkaW5nVG9hc3Q/OiBib29sZWFuO1xuICAgIGFmdGVyUmV0cnlEZWxheT86IG51bWJlcjtcbiAgICBhZnRlclJldHJ5UHJvbWlzZT86ICgpID0+IFByb21pc2U8YW55PjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIElmIG9mZmxpbmUgbW9kZSBub3QgZm9yY2VkLCBhbmQgZGV2aWNlIHNheXMgdGhlcmUgaXMgbm8gY29ubmVjdGlvbjogc2tpcFxuICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lIHx8IHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlID09PSAnbm9uZScpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFNIb3cgbG9hZGluZyB0b2FzdFxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2hvd0xvYWRpbmdUb2FzdCA9ICFvcHRzIHx8IG9wdHMuc2hvd0xvYWRpbmdUb2FzdCAhPT0gZmFsc2U7XG4gICAgbGV0IGxvYWRpbmdUb2FzdDogSFRNTElvblRvYXN0RWxlbWVudDtcbiAgICBpZiAoc2hvd0xvYWRpbmdUb2FzdCkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdORVRXT1JLLklORk8uUkVUUllfVE9fQ09OTkVDVCcsXG4gICAgICAgIGR1cmF0aW9uOiAxMDAwMCxcbiAgICAgICAgb25XaWxsUHJlc2VudDogdCA9PiBsb2FkaW5nVG9hc3QgPSB0fSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIENoZWNraW5nIGNvbm5lY3Rpb24gdG8gcG9kLi4uJyk7XG4gICAgICBjb25zdCBzZXR0aW5nczogTG9jYWxTZXR0aW5ncyA9IGF3YWl0IHRoaXMuc2V0dGluZ3MucmVhZHkoKTtcblxuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gZmFsc2U7IC8vIE5vIHBlZXIgZGVmaW5lLiBTa2lwXG5cbiAgICAgIGNvbnN0IHBlZXIgPSBQZWVyLnBhcnNlVXJsKHNldHRpbmdzLnBlZXJVcmwpO1xuICAgICAgY29uc3QgcGVlckluZm8gPSBhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpO1xuICAgICAgY29uc3QgcGVlckFsaXZlQW5kQ29tcGF0aWJsZSA9IHBlZXJJbmZvICYmIGF3YWl0IHRoaXMuY2hlY2tQZWVyQ29tcGF0aWJsZShwZWVySW5mbyk7XG4gICAgICBpZiAocGVlckFsaXZlQW5kQ29tcGF0aWJsZSkge1xuXG4gICAgICAgIC8vIERpc2FibGUgdGhlIG9mZmxpbmUgbW9kZVxuICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZShmYWxzZSk7XG5cbiAgICAgICAgLy8gUmVzdGFydFxuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnQocGVlcik7XG5cbiAgICAgICAgLy8gV2FpdCBhIHByb21pc2UsIGJlZm9yZSByZWNoZWNrXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnYmVmb3JlVHJ5T25saW5lRmluaXNoJywgdGhpcy5vbmxpbmUpO1xuXG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cblxuICAgIC8vIENsb3NlIGxvYWRpbmcgdG9hc3QgKHdpdGggYSBtaW5pbWFsIGRpc3BsYXkgZHVyYXRpb24gb2YgMnMpXG4gICAgaWYgKHNob3dMb2FkaW5nVG9hc3QpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDIwMDAgLSAoRGF0ZS5ub3coKSAtIG5vdykpO1xuICAgICAgaWYgKGxvYWRpbmdUb2FzdCkgYXdhaXQgbG9hZGluZ1RvYXN0LmRpc21pc3MoKTtcbiAgICB9XG5cbiAgICAvLyBSZWNoZWNrIG5ldHdvcmsgc3RhdHVzXG4gICAgY29uc3Qgb25saW5lID0gdGhpcy5vbmxpbmU7XG5cbiAgICAvLyBEaXNwbGF5IGEgdG9hc3QgdG8gdXNlclxuICAgIGlmIChvbmxpbmUpIHtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLnNob3dPbmxpbmVUb2FzdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgLy8gRGlzcGxheSB0b2FzdCAod2l0aG91dCBhd2FpdCwgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0IGNsb3NlIGV2ZW50KVxuICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5PTkxJTkUnLCB0eXBlOiAnaW5mbyd9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAob3B0cyAmJiBvcHRzLnNob3dPZmZsaW5lVG9hc3QgPT09IHRydWUpIHtcbiAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgIHJldHVybiB0aGlzLnNob3dPZmZsaW5lVG9hc3Qoe3Nob3dSZXRyeUJ1dHRvbjogZmFsc2V9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydGVkICYmIG9ubGluZTtcbiAgfVxuXG4gIGFzeW5jIHNob3dPZmZsaW5lVG9hc3Qob3B0cz86IHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIHNob3dDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5QnV0dG9uPzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlTdWNjZXNzVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeUxvYWRpbmdUb2FzdD86IGJvb2xlYW47XG4gICAgb25SZXRyeVN1Y2Nlc3M/OiAoKSA9PiB2b2lkO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMub25saW5lKSByZXR1cm47IC8vIFNraXAgaWYgb25saW5lXG5cbiAgICAvLyBUb2FzdCB3aXRoIGEgcmV0cnkgYnV0dG9uXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuc2hvd1JldHJ5QnV0dG9uICE9PSBmYWxzZSkge1xuXG4gICAgICBjb25zdCB0b2FzdFJlc3VsdCA9IGF3YWl0IHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogKG9wdHMgJiYgb3B0cy5tZXNzYWdlIHx8ICdFUlJPUi5ORVRXT1JLX1JFUVVJUkVEJyksXG4gICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICBkdXJhdGlvbjogMTAwMDAwLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgLy8gcmVjb25uZWN0IGJ1dHRvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJvbGU6ICdyZWZyZXNoJyxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ05FVFdPUksuQlROX0NIRUNLX0FMSVZFJylcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBVc2VyIGRvbid0IGNsaWNrIHJlY29ubmVjdDogcmV0dXJuXG4gICAgICBpZiAoIXRvYXN0UmVzdWx0IHx8IHRvYXN0UmVzdWx0LnJvbGUgIT09ICdyZWZyZXNoJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBpZiBuZXR3b3JrIHN0YXRlIGNoYW5nZWQgdG8gb25saW5lOiBleGl0IGhlcmVcbiAgICAgIGlmICh0aGlzLm9ubGluZSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFRyeSB0byByZWNvbm5lY3RcbiAgICAgIGNvbnN0IG9ubGluZSA9IGF3YWl0IHRoaXMudHJ5T25saW5lKHtcbiAgICAgICAgc2hvd09mZmxpbmVUb2FzdDogZmFsc2UsXG4gICAgICAgIHNob3dPbmxpbmVUb2FzdDogdG9Cb29sZWFuKG9wdHMgJiYgb3B0cy5zaG93UmV0cnlTdWNjZXNzVG9hc3QsIHRydWUpLFxuICAgICAgICBzaG93TG9hZGluZ1RvYXN0OiB0b0Jvb2xlYW4ob3B0cyAmJiBvcHRzLnNob3dSZXRyeUxvYWRpbmdUb2FzdCwgdHJ1ZSlcbiAgICAgIH0pO1xuICAgICAgaWYgKG9ubGluZSkge1xuICAgICAgICAvLyBDYWxsIHN1Y2Nlc3MgY2FsbGJhY2sgKGFzeW5jKVxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uUmV0cnlTdWNjZXNzKSB7XG4gICAgICAgICAgc2V0VGltZW91dChvcHRzLm9uUmV0cnlTdWNjZXNzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgb3B0cyA9IHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgc2hvd1JldHJ5QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNpbXBsZSB0b2FzdCwgd2l0aG91dCAnYXdhaXQnLCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QncyBkaXNtaXNzXG4gICAgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgbWVzc2FnZTogJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnLFxuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIC4uLm9wdHNcbiAgICB9KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBwZWVyIGlzIGFsaXZlXG4gICAqXG4gICAqIEBwYXJhbSBwZWVyXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBjaGVja1BlZXJBbGl2ZShwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cz86IHsgY2hlY2tDb21wYXRpYmxlPzogYm9vbGVhbjsgZGlzcGxheVRvYXN0PzogYm9vbGVhbiB9ICk6IFByb21pc2U8Tm9kZUluZm8+IHtcbiAgICBwZWVyID0gcGVlciB8fCB0aGlzLnBlZXI7XG4gICAgaWYgKCFwZWVyKSB7XG4gICAgICBjb25zdCBzZXR0aW5nczogTG9jYWxTZXR0aW5ncyA9IGF3YWl0IHRoaXMuc2V0dGluZ3MucmVhZHkoKTtcbiAgICAgIGlmICghc2V0dGluZ3MucGVlclVybCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gTm8gcGVlciBkZWZpbmUuIFNraXBcbiAgICAgIHBlZXIgPSBQZWVyLnBhcnNlVXJsKHNldHRpbmdzLnBlZXJVcmwpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXROb2RlSW5mbyhwZWVyKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBDYW5ub3QgZ2V0IC9hcGkvbm9kZS9pbmZvIGZyb20gcGVlcjogJyArIChlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKSwgZXJyKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tQZWVyQ29tcGF0aWJsZShwZWVySW5mbzogTm9kZUluZm8sIG9wdHM/OiB7IHNob3dUb2FzdD86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5lbnZpcm9ubWVudC5wZWVyTWluVmVyc2lvbikgcmV0dXJuIHRydWU7IC8vIFNraXAgY29tcGF0aWJpbGl0eSBjaGVja1xuXG4gICAgLy8gQ2hlY2sgdGhlIG1pbiBwb2QgdmVyc2lvbiwgZGVmaW5lZCBieSB0aGUgYXBwXG4gICAgY29uc3QgaXNDb21wYXRpYmxlID0gcGVlckluZm8gJiYgcGVlckluZm8uc29mdHdhcmVWZXJzaW9uICYmIFZlcnNpb25VdGlscy5pc0NvbXBhdGlibGUodGhpcy5lbnZpcm9ubWVudC5wZWVyTWluVmVyc2lvbiwgcGVlckluZm8uc29mdHdhcmVWZXJzaW9uKTtcblxuICAgIC8vIERpc3BsYXkgdG9hc3QsIGlmIG5vdCBjb21wYXRpYmxlXG4gICAgaWYgKCFpc0NvbXBhdGlibGUgJiYgKCFvcHRzIHx8IG9wdHMuc2hvd1RvYXN0ICE9PSBmYWxzZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgbWVzc2FnZTogJ05FVFdPUksuRVJST1IuTk9UX0NPTVBBVElCTEVfUEVFUicsXG4gICAgICAgIG1lc3NhZ2VQYXJhbXM6IHtcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uXG4gICAgICAgIH0sXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpc0NvbXBhdGlibGU7XG4gIH1cblxuICBnZXROb2RlSW5mbyhwZWVyPzogc3RyaW5nIHwgUGVlcik6IFByb21pc2U8Tm9kZUluZm8+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJy9hcGkvbm9kZS9pbmZvJyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KHBhdGgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXBwTWFuaWZlc3QocGVlcj86IHN0cmluZyB8IFBlZXIsIG9wdHM/OiB7bm9jYWNoZT86IGJvb2xlYW59KTogUHJvbWlzZTxBcHBNYW5pZmVzdHx1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHBhdGggPSB0aGlzLmNvbXB1dGVQZWVyUGF0aChwZWVyLCAnbWFuaWZlc3QuanNvbicpO1xuICAgICAgaWYgKG9wdHM/Lm5vY2FjaGUpIHtcbiAgICAgICAgcGF0aCArPSAnP3Q9JyArIERhdGUubm93KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXQocGF0aCwgb3B0cyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ21hbmlmZXN0Lmpzb25cXCcuIFBsZWFzZSBtYWtlIHN1cmUgd2Vic2VydmVyIGNvbmZpZyBhbGxvdyBDT1JTIGFjY2VzcycsIGVycik7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ21hbmlmZXN0Lmpzb25cXCcuJywgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXBwVmVyc2lvbihwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cyA9IHtub2NhY2hlOiB0cnVlfSk6IFByb21pc2U8c3RyaW5nfHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICd2ZXJzaW9uLmFwcHVwJyk7XG4gICAgICBpZiAob3B0cy5ub2NhY2hlKSB7XG4gICAgICAgIHBhdGggKz0gJz90PScgKyBEYXRlLm5vdygpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwVmVyc2lvbjogc3RyaW5nID0gYXdhaXQgdGhpcy5nZXRUZXh0KHBhdGgsIG9wdHMpO1xuICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhhcHBWZXJzaW9uKSkgcmV0dXJuIGFwcFZlcnNpb247XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ3ZlcnNpb24uYXBwdXBcXCcuIFBsZWFzZSBtYWtlIHN1cmUgd2Vic2VydmVyIGNvbmZpZyBhbGxvdyBDT1JTIGFjY2VzcycpO1xuICAgICAgZWxzZSBjb25zb2xlLmVycm9yKCdbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSBcXCd2ZXJzaW9uLmFwcHVwXFwnLicsIGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cblxuICAgIC8vIFRyeSBsb2FkaW5nIG1hbmlmZXN0Lmpzb25cbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuZ2V0QXBwTWFuaWZlc3QocGVlciwgb3B0cyk7XG4gICAgcmV0dXJuIG1hbmlmZXN0Py52ZXJzaW9uO1xuICB9XG5cbiAgY29tcHV0ZVBlZXJQYXRoKHBlZXI6IHN0cmluZyB8IFBlZXIgfCB1bmRlZmluZWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcGVlciA9IHBlZXIgfHwgdGhpcy5wZWVyO1xuICAgIGlmICghcGVlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBwZWVyVXJsID0gKHBlZXIgaW5zdGFuY2VvZiBQZWVyKSA/IHBlZXIudXJsIDogKHBlZXIgYXMgc3RyaW5nKTtcblxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHBlZXJVcmwgPSBwZWVyVXJsLnN1YnN0cigwLCBwZWVyVXJsLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIC8vIEFkZCBmaXJzdCBwYXRoXG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcGF0aCA9ICcvJyArIHBhdGg7XG4gICAgfVxuXG4gICAgLy8gQ29uY2F0IHBlZXIgVVJMIGFuZCBwYXRoXG4gICAgcmV0dXJuIHBlZXJVcmwgKyBwYXRoO1xuICB9XG5cblxuICAvKipcbiAgICogQWxsb3cgdG8gZm9yY2Ugb2ZmbGluZSBtb2RlXG4gICAqL1xuICBzZXRGb3JjZU9mZmxpbmUodmFsdWU/OiBib29sZWFuLCBvcHRzPzoge1xuICAgIHNob3dUb2FzdD86IGJvb2xlYW47IC8vIERpc3BsYXkgYSB0b2FzdCwgd2hlbiBvZmZsaW5lID9cbiAgfSkge1xuICAgIHZhbHVlID0gdG9Cb29sZWFuKHZhbHVlLCB0cnVlKTtcbiAgICBpZiAodGhpcy5fZm9yY2VPZmZsaW5lICE9PSB2YWx1ZSkge1xuICAgICAgY29uc3QgcHJldmlvdXNDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG4gICAgICB0aGlzLl9mb3JjZU9mZmxpbmUgPSB2YWx1ZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG5cbiAgICAgIGlmIChwcmV2aW91c0Nvbm5lY3Rpb25UeXBlICE9PSBjdXJyZW50Q29ubmVjdGlvblR5cGUpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gQ29ubmVjdGlvbiBjaGFuZ2VkIHRvIHske2N1cnJlbnRDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KGN1cnJlbnRDb25uZWN0aW9uVHlwZSk7XG5cbiAgICAgICAgLy8gT2ZmbGluZSBtb2RlOiBhbGVydCB0aGUgdXNlclxuICAgICAgICBpZiAoY3VycmVudENvbm5lY3Rpb25UeXBlID09PSAnbm9uZScgJiYgKCFvcHRzIHx8IG9wdHMuc2hvd1RvYXN0ICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FX0hFTFAnLCB0eXBlOiAnd2FybmluZyd9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNob3dTZWxlY3RQZWVyTW9kYWwob3B0cz86IFBhcnRpYWw8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+KTogUHJvbWlzZTxQZWVyIHwgdW5kZWZpbmVkPiB7XG5cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIGNvbnN0ICRvblJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIGNvbnN0IHBlZXJzJCA9ICRvblJlZnJlc2gucGlwZShcbiAgICAgIG1lcmdlTWFwKChfKSA9PiB0aGlzLmdldERlZmF1bHRQZWVycygpKSxcbiAgICAgIG1hcChwZWVycyA9PiBwZWVycyB8fCBbXSlcbiAgICApO1xuXG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBTZWxlY3RQZWVyTW9kYWwsXG4gICAgICBjb21wb25lbnRQcm9wczogPElTZWxlY3RQZWVyTW9kYWxPcHRpb25zPntcbiAgICAgICAgb25SZWZyZXNoOiAkb25SZWZyZXNoLFxuICAgICAgICBwZWVyczogcGVlcnMkLFxuICAgICAgICAuLi5vcHRzXG4gICAgICB9LFxuICAgICAga2V5Ym9hcmRDbG9zZTogdHJ1ZSxcbiAgICAgIHNob3dCYWNrZHJvcDogdHJ1ZVxuICAgIH0pO1xuICAgIGF3YWl0IG1vZGFsLnByZXNlbnQoKTtcbiAgICAkb25SZWZyZXNoLmVtaXQoKTtcblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgbW9kYWwub25XaWxsRGlzbWlzcygpO1xuICAgICRvblJlZnJlc2guY29tcGxldGUoKTtcblxuICAgIHJldHVybiBkYXRhICYmIChkYXRhIGFzIFBlZXIpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQ2FjaGUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuXG4gICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gQ2xlYXJpbmcgYWxsIGNhY2hlcy4uLicpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmNsZWFyQWxsKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gRW1pdCBldmVudFxuICAgICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlICYmIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5lbWl0KCk7XG5cbiAgICAgICAgICAvLyBXYWl0IG9ic2VydmVycyBjbGVhbiB0aGVpciBjYWNoZXMsIGlmIG5lZWRcbiAgICAgICAgICByZXR1cm4gc2xlZXAoNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gQWxsIGNhY2hlIGNsZWFyZWQsIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgfSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgZnVuY3Rpb25zIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydChwZWVyPzogUGVlcik6IFByb21pc2U8UGVlcj4ge1xuXG4gICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gU3RhcnRpbmcgbmV0d29yay4uLicpO1xuXG4gICAgLy8gUmVzdG9yaW5nIGxvY2FsIHNldHRpbmdzXG4gICAgcGVlciA9IHBlZXIgfHwgKGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKSk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdG8gaGlkZSB0aGUgc3BsYXNoc2NyZWVuLCBiZWZvcmUgb3BlbiB0aGUgbW9kYWxcbiAgICBpZiAoIXBlZXIpIGF3YWl0IFNwbGFzaFNjcmVlbi5oaWRlKCk7XG5cbiAgICAvLyBObyBwZWVyIGluIHNldHRpbmdzOiBhc2sgdXNlciB0byBjaG9vc2VcbiAgICB3aGlsZSAoIXBlZXIpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBObyBwZWVyIGRlZmluZWQuIEFza2luZyB1c2VyIHRvIGNob29zZSBhIHBlZXIuJyk7XG4gICAgICBwZWVyID0gYXdhaXQgdGhpcy5zaG93U2VsZWN0UGVlck1vZGFsKHthbGxvd1NlbGVjdERvd25QZWVyOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHNlcnZpY2UgW09LXSB7cGVlcjogJyR7cGVlci51cmx9Jywgb25saW5lOiAke3RoaXMub25saW5lfX1gKTtcblxuICAgIHJldHVybiBwZWVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25BZnRlclN0YXJ0KHBlZXI6IFBlZXIpIHtcblxuICAgIC8vIFdhaXQgc2V0dGluZ3Mgc3RhcnRzLCB0aGVuIHNhdmUgcGVlciBpbiBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuYXBwbHkoe3BlZXJVcmw6IHBlZXIudXJsfSk7XG5cbiAgICB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQodGhpcy5uZXR3b3JrPy50eXBlIHx8ICd1bmtub3duJyk7XG5cbiAgICAvLyBTdGFydCB0aGUgcmVmcmVzaCB0aW1lclxuICAgIHRoaXMuc3RhcnRSZWZyZXNoVGltZXIoKTtcblxuICAgIC8vIExpc3RlbiBmb3IgZGV2aWNlIG5ldHdvcmsgY2hhbmdlc1xuICAgIGlmICh0aGlzLm5ldHdvcmspIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5uZXR3b3JrLm9uRGlzY29ubmVjdCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoJ25vbmUnKSkpO1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLm5ldHdvcmsub25Db25uZWN0KCkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCh0aGlzLm5ldHdvcmsudHlwZSkpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbmdPblN0b3AoKSB7XG4gICAgLy8gU3RvcCB0aW1lciwgaWYgY2Fubm90IHJlZnJlc2ggYW55bW9yZVxuICAgIGlmICh0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24oKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc3RvcFJlZnJlc2hUaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gcmVzdG9yZSBwZWVyIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyByZXN0b3JlTG9jYWxseSgpOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcblxuICAgIC8vIFJlc3RvcmUgZnJvbSBzdG9yYWdlXG4gICAgY29uc3Qgc2V0dGluZ3NTdHIgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHNldHRpbmdzU3RyICYmIEpTT04ucGFyc2Uoc2V0dGluZ3NTdHIpIHx8IHVuZGVmaW5lZDtcbiAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MucGVlclVybCkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW25ldHdvcmtdIFVzZSBwZWVyIHske3NldHRpbmdzLnBlZXJVcmx9fSAoZm91bmQgaW4gdGhlIGxvY2FsIHN0b3JhZ2UpYCk7XG4gICAgICByZXR1cm4gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCB1c2UgZGVmYXVsdCBwZWVyIGluIGVudiwgaWYgZXhpc3RzXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpIHtcbiAgICAgIHJldHVybiBQZWVyLmZyb21PYmplY3QodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlcik7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgaWYgQXBwIGlzIGhvc3RlZCwgdHJ5IHRoZSB3ZWIgc2l0ZSBhcyBhIHBlZXJcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuX2RvY3VtZW50ICYmIHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uO1xuICAgIGlmIChsb2NhdGlvbiAmJiBsb2NhdGlvbi5wcm90b2NvbCAmJiBsb2NhdGlvbi5wcm90b2NvbC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgIGNvbnN0IGhvc3RuYW1lID0gdGhpcy5fZG9jdW1lbnQubG9jYXRpb24uaG9zdDtcbiAgICAgIGNvbnN0IGRldGVjdGVkUGVlciA9IFBlZXIucGFyc2VVcmwoYCR7dGhpcy5fZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x9JHtob3N0bmFtZX0ke3RoaXMuZW52aXJvbm1lbnQuYmFzZVVybH1gKTtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKGRldGVjdGVkUGVlcikpIHtcbiAgICAgICAgcmV0dXJuIGRldGVjdGVkUGVlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgdG8gbmV0d29yayBzdGF0ZVxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RvcFJlZnJlc2hUaW1lcigpIHtcbiAgICBpZiAodGhpcy5fdGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgbmV0d29yayBzdGF0ZVxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhcnRSZWZyZXNoVGltZXIoKXtcbiAgICBpZiAodGhpcy5fdGltZXJTdWJzY3JpcHRpb24pIHJldHVybjsgLy8gQWxyZWFkeSBydW5uaW5nOiBza2lwXG5cbiAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBTdGFydGluZyByZWZyZXNoIHRpbWVyLCBldmVyeSAke3RoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZH1tcy4uLmApO1xuXG4gICAgbGV0IGxhc3RJbmZvOiBOb2RlSW5mbztcbiAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKHRoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZCwgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kKVxuICAgICAgLnBpcGUoXG4gICAgICAgIC8vIFNraXAgc29tZSB0aW1lciBldmVudCAoc2VlIGNvbnN0cnVjdG9yKVxuICAgICAgICBmaWx0ZXIodGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uKSxcblxuICAgICAgICAvLyBDaGVja2luIGlmIHBlZXIgYWxpdmVcbiAgICAgICAgdGFwKCgpID0+ICBjb25zb2xlLmRlYnVnKCdbbmV0d29ya10gQ2hlY2tpbmcgY29ubmVjdGlvbiB0byBwb2QuLi4nKSksXG4gICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuY2hlY2tQZWVyQWxpdmUodGhpcy5wZWVyKSksXG5cbiAgICAgICAgLy8gRmlsdGVyIHRvIGtlZXAgb25seSBjaGFuZ2VzXG4gICAgICAgIGZpbHRlcihpbmZvID0+ICEhaW5mbyAhPT0gISFsYXN0SW5mbyksXG4gICAgICAgIHRhcChpbmZvID0+IGxhc3RJbmZvID0gaW5mbyksXG5cbiAgICAgICAgLy8gQ2hlY2sgY29tcGF0aWJpbGl0eVxuICAgICAgICBtZXJnZU1hcCgoaW5mbykgPT4gdGhpcy5jaGVja1BlZXJDb21wYXRpYmxlKGluZm8sIHtzaG93VG9hc3Q6IHRydWV9KSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGFsaXZlID0+IHtcbiAgICAgICAgICBpZiAoYWxpdmUgJiYgdGhpcy5vZmZsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZShmYWxzZSk7XG5cbiAgICAgICAgICAgIC8vIFJlc3RhcnQgdGhlIHNlcnZpY2UgKHRvIGZvcmNlIHJlIGF1dGgpXG4gICAgICAgICAgICB0aGlzLnJlc3RhcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoIWFsaXZlICYmIHRoaXMub25saW5lKXtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKHRydWUpO1xuXG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBzZXJ2aWNlXG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24uYWRkKCgpID0+IGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBSZWZyZXNoIHRpbWVyIHN0b3BwZWQnKSk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRUZXh0KHBhdGg6IHN0cmluZywgb3B0cz86IHtcbiAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfCB7XG4gICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICB9O1xuICAgIHJlc3BvbnNlVHlwZT86ICd0ZXh0JztcbiAgICBub2NhY2hlPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICBsZXQgdXJpID0gdGhpcy5nZXRVcmkocGF0aCk7XG4gICAgcmV0dXJuIEh0dHBVdGlscy5nZXRUZXh0KHRoaXMuaHR0cCwgdXJpLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXQ8VD4ocGF0aDogc3RyaW5nLCBvcHRzPzoge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG5cbiAgICBsZXQgdXJpID0gdGhpcy5nZXRVcmkocGF0aCk7XG4gICAgcmV0dXJuIEh0dHBVdGlscy5nZXRKc29uPFQ+KHRoaXMuaHR0cCwgdXJpLCBvcHRzKTtcbiAgfVxuXG4gIC8qIC0tIFByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGdldFVyaShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB1cmkgPSBwYXRoO1xuXG4gICAgLy8gSWYgcGF0aCBpcyBub3QgYW4gVVJJOiBwcmVwZW5kIHdpdGggcGVlciBVUkxcbiAgICBpZiAoIXVyaS5zdGFydHNXaXRoKCdodHRwOi8vJykgJiYgIXVyaS5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICBsZXQgcGVlclVybCA9ICh0aGlzLnBlZXIgJiYgdGhpcy5wZWVyLnVybCk7XG5cbiAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICAgICAgaWYgKHBlZXJVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICBwZWVyVXJsID0gcGVlclVybC5zdWJzdHIoMCwgcGVlclVybC5sZW5ndGggLSAxICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBmaXJzdCBwYXRoXG4gICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgdGhlIFVSSTogY29uY2F0IHBlZXIgVVJMIGFuZCBwYXRoXG4gICAgICB1cmkgPSBwZWVyVXJsICsgcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuICBwcm90ZWN0ZWQgb25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZChjb25uZWN0aW9uVHlwZT86IHN0cmluZykge1xuICAgIGNvbm5lY3Rpb25UeXBlID0gKGNvbm5lY3Rpb25UeXBlIHx8ICd1bmtub3duJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoY29ubmVjdGlvblR5cGUuc3RhcnRzV2l0aCgnY2VsbCcpKSBjb25uZWN0aW9uVHlwZSA9ICdjZWxsJztcbiAgICBpZiAoY29ubmVjdGlvblR5cGUgIT09IHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKSB7XG4gICAgICB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSA9IGNvbm5lY3Rpb25UeXBlIGFzIENvbm5lY3Rpb25UeXBlO1xuXG4gICAgICAvLyBJZiBOT1QgIGFscmVhZHkgZm9yY2VkIGFzIG9mZmxpbmUsIGVtaXQgZXZlbnRcbiAgICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIENvbm5lY3Rpb24gY2hhbmdlZCB0byB7JHt0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBDaGFuZ2UgdG8gb2ZmbGluZVxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgICAgICAgdGhpcy5fZm9yY2VPZmZsaW5lID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQWxlcnQgdGhlIHVzZXJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcsIHR5cGU6ICd3YXJuaW5nJ30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FJywgdHlwZTogJ3dhcm5pbmcnfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgbmV0d29yayBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgcGVlcnMsIGZyb20gZW52aXJvbm1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXREZWZhdWx0UGVlcnMoKTogUHJvbWlzZTxQZWVyW10+IHtcbiAgICBjb25zdCBwZWVycyA9ICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVycyB8fCBbXSkubWFwKFBlZXIuZnJvbU9iamVjdCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwZWVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZExpc3RlbmVyPFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTx2b2lkPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdIHx8IFtdO1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblxuICAgIC8vIFdoZW4gdW5zdWJzY3JpYmUsIHJlbW92ZSBmcm9tIHRoZSBsaXN0ZW5lclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0PFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgZGF0YT86IFQpIHtcbiAgICBjb25zdCBob29rcyA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGhvb2tzKSkge1xuICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29yay1zZXJ2aWNlXSBUcmlnZ2VyICR7bmFtZX0gaG9vazogRXhlY3V0aW5nICR7aG9va3MubGVuZ3RofSBjYWxsYmFja3MuLi5gKTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGhvb2tzLm1hcChjYWxsYmFjayA9PiB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XG4gICAgICAgIHJldHVybiBwcm9taXNlLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBleGVjdXRpbmcgaG9vayAnICsgbmFtZSwgZXJyKSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -6,10 +6,10 @@ export class IsLoginAccountPipe {
6
6
  return value && value.pubkey && true;
7
7
  }
8
8
  }
9
- IsLoginAccountPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: IsLoginAccountPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
- IsLoginAccountPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.5", ngImport: i0, type: IsLoginAccountPipe, name: "isLogin" });
11
- IsLoginAccountPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: IsLoginAccountPipe, providedIn: 'root' });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: IsLoginAccountPipe, decorators: [{
9
+ IsLoginAccountPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: IsLoginAccountPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
+ IsLoginAccountPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.8", ngImport: i0, type: IsLoginAccountPipe, name: "isLogin" });
11
+ IsLoginAccountPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: IsLoginAccountPipe, providedIn: 'root' });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: IsLoginAccountPipe, decorators: [{
13
13
  type: Pipe,
14
14
  args: [{
15
15
  name: 'isLogin'
@@ -23,10 +23,10 @@ export class AccountToStringPipe {
23
23
  return accountToString(value);
24
24
  }
25
25
  }
26
- AccountToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: AccountToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
27
- AccountToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.5", ngImport: i0, type: AccountToStringPipe, name: "accountToString" });
28
- AccountToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: AccountToStringPipe, providedIn: 'root' });
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: AccountToStringPipe, decorators: [{
26
+ AccountToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: AccountToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
27
+ AccountToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.8", ngImport: i0, type: AccountToStringPipe, name: "accountToString" });
28
+ AccountToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: AccountToStringPipe, providedIn: 'root' });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: AccountToStringPipe, decorators: [{
30
30
  type: Pipe,
31
31
  args: [{
32
32
  name: 'accountToString'
@@ -8,10 +8,10 @@ export class DepartmentToStringPipe {
8
8
  return departmentToString(value);
9
9
  }
10
10
  }
11
- DepartmentToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: DepartmentToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
12
- DepartmentToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.5", ngImport: i0, type: DepartmentToStringPipe, name: "departmentToString" });
13
- DepartmentToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: DepartmentToStringPipe, providedIn: 'root' });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: DepartmentToStringPipe, decorators: [{
11
+ DepartmentToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: DepartmentToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
12
+ DepartmentToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.8", ngImport: i0, type: DepartmentToStringPipe, name: "departmentToString" });
13
+ DepartmentToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: DepartmentToStringPipe, providedIn: 'root' });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: DepartmentToStringPipe, decorators: [{
15
15
  type: Pipe,
16
16
  args: [{
17
17
  name: 'departmentToString'
@@ -8,10 +8,10 @@ export class PersonToStringPipe {
8
8
  return PersonUtils.personToString(value);
9
9
  }
10
10
  }
11
- PersonToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: PersonToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
12
- PersonToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.5", ngImport: i0, type: PersonToStringPipe, name: "personToString" });
13
- PersonToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: PersonToStringPipe, providedIn: 'root' });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: PersonToStringPipe, decorators: [{
11
+ PersonToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: PersonToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
12
+ PersonToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.8", ngImport: i0, type: PersonToStringPipe, name: "personToString" });
13
+ PersonToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: PersonToStringPipe, providedIn: 'root' });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: PersonToStringPipe, decorators: [{
15
15
  type: Pipe,
16
16
  args: [{
17
17
  name: 'personToString'