@alfresco/adf-core 8.1.0-15730481703 → 8.1.0-15822125972

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 (582) hide show
  1. package/esm2022/adf-core.mjs +5 -0
  2. package/esm2022/api/alfresco-adf-core-api.mjs +5 -0
  3. package/esm2022/api/index.mjs +20 -0
  4. package/esm2022/api/lib/adf-http-client.service.mjs +311 -0
  5. package/esm2022/api/lib/alfresco-api/alfresco-api.param-encoder.mjs +33 -0
  6. package/esm2022/api/lib/alfresco-api/alfresco-api.response-error.mjs +25 -0
  7. package/esm2022/api/lib/alfresco-api/alfresco-api.utils.mjs +80 -0
  8. package/esm2022/api/lib/interfaces.mjs +18 -0
  9. package/esm2022/api/lib/types.mjs +18 -0
  10. package/esm2022/auth/alfresco-adf-core-auth.mjs +5 -0
  11. package/esm2022/auth/authentication-interceptor/authentication.interceptor.mjs +56 -0
  12. package/esm2022/auth/authentication.mjs +19 -0
  13. package/esm2022/auth/index.mjs +19 -0
  14. package/esm2022/breadcrumbs/alfresco-adf-core-breadcrumbs.mjs +5 -0
  15. package/esm2022/breadcrumbs/components/breadcrumb/breadcrumb.component.mjs +83 -0
  16. package/esm2022/breadcrumbs/components/breadcrumb-item/breadcrumb-item.component.mjs +42 -0
  17. package/esm2022/breadcrumbs/directives/breadcrumb-focus.directive.mjs +44 -0
  18. package/esm2022/breadcrumbs/index.mjs +19 -0
  19. package/esm2022/feature-flags/alfresco-adf-core-feature-flags.mjs +5 -0
  20. package/esm2022/feature-flags/index.mjs +29 -0
  21. package/esm2022/feature-flags/lib/components/feature-flags-wrapper.mjs +36 -0
  22. package/esm2022/feature-flags/lib/components/feature-override-indicator.component.mjs +56 -0
  23. package/esm2022/feature-flags/lib/components/flags/flags.component.mjs +130 -0
  24. package/esm2022/feature-flags/lib/directives/features.directive.mjs +63 -0
  25. package/esm2022/feature-flags/lib/directives/not-features.directive.mjs +63 -0
  26. package/esm2022/feature-flags/lib/guards/is-feature-off.guard.mjs +38 -0
  27. package/esm2022/feature-flags/lib/guards/is-feature-on.guard.mjs +38 -0
  28. package/esm2022/feature-flags/lib/guards/is-flags-override-on.guard.mjs +40 -0
  29. package/esm2022/feature-flags/lib/interfaces/features.interface.mjs +24 -0
  30. package/esm2022/feature-flags/lib/mocks/features-service-mock.factory.mjs +62 -0
  31. package/esm2022/feature-flags/lib/providers/debug-feature-flags.provider.mjs +51 -0
  32. package/esm2022/feature-flags/lib/providers/dummy-feature-flags.provider.mjs +36 -0
  33. package/esm2022/feature-flags/lib/services/debug-features.service.mjs +94 -0
  34. package/esm2022/feature-flags/lib/services/dummy-features.service.mjs +40 -0
  35. package/esm2022/feature-flags/lib/services/flagset.parser.mjs +38 -0
  36. package/esm2022/feature-flags/lib/services/qa-features.helper.mjs +62 -0
  37. package/esm2022/feature-flags/lib/services/storage-features.service.mjs +126 -0
  38. package/esm2022/lib/about/about-extension-list/about-extension-list.component.mjs +52 -0
  39. package/esm2022/lib/about/about-license-list/about-license-list.component.mjs +52 -0
  40. package/esm2022/lib/about/about-module-list/module-list.component.mjs +52 -0
  41. package/esm2022/lib/about/about-package/package-list.component.mjs +66 -0
  42. package/esm2022/lib/about/about-panel.directive.mjs +37 -0
  43. package/esm2022/lib/about/about-repository-info/about-repository-info.component.mjs +60 -0
  44. package/esm2022/lib/about/about-repository-info/repository-info.interface.mjs +18 -0
  45. package/esm2022/lib/about/about-server-settings/about-server-settings.component.mjs +43 -0
  46. package/esm2022/lib/about/about-status-list/about-status-list.component.mjs +52 -0
  47. package/esm2022/lib/about/about.component.mjs +35 -0
  48. package/esm2022/lib/about/about.module.mjs +75 -0
  49. package/esm2022/lib/about/index.mjs +18 -0
  50. package/esm2022/lib/about/interfaces.mjs +18 -0
  51. package/esm2022/lib/about/public-api.mjs +28 -0
  52. package/esm2022/lib/app-config/app-config-storage-prefix.factory.mjs +51 -0
  53. package/esm2022/lib/app-config/app-config.loader.mjs +41 -0
  54. package/esm2022/lib/app-config/app-config.module.mjs +33 -0
  55. package/esm2022/lib/app-config/app-config.pipe.mjs +38 -0
  56. package/esm2022/lib/app-config/app-config.service.mjs +243 -0
  57. package/esm2022/lib/app-config/debug-app-config.service.mjs +44 -0
  58. package/esm2022/lib/app-config/index.mjs +18 -0
  59. package/esm2022/lib/app-config/public-api.mjs +22 -0
  60. package/esm2022/lib/auth/authentication-interceptor/auth-bearer.interceptor.mjs +67 -0
  61. package/esm2022/lib/auth/basic-auth/basic-alfresco-auth.service.mjs +356 -0
  62. package/esm2022/lib/auth/basic-auth/content-auth.mjs +189 -0
  63. package/esm2022/lib/auth/basic-auth/process-auth.mjs +193 -0
  64. package/esm2022/lib/auth/guard/auth-guard-bpm.service.mjs +31 -0
  65. package/esm2022/lib/auth/guard/auth-guard-ecm.service.mjs +31 -0
  66. package/esm2022/lib/auth/guard/auth-guard-sso-role.service.mjs +57 -0
  67. package/esm2022/lib/auth/guard/auth-guard.mjs +53 -0
  68. package/esm2022/lib/auth/guard/auth-guard.service.mjs +113 -0
  69. package/esm2022/lib/auth/index.mjs +18 -0
  70. package/esm2022/lib/auth/interfaces/authentication-service.interface.mjs +18 -0
  71. package/esm2022/lib/auth/interfaces/authentication.interface.mjs +18 -0
  72. package/esm2022/lib/auth/interfaces/identity-group.interface.mjs +18 -0
  73. package/esm2022/lib/auth/interfaces/identity-user.service.interface.mjs +18 -0
  74. package/esm2022/lib/auth/interfaces/openid-configuration.interface.mjs +18 -0
  75. package/esm2022/lib/auth/models/application-access.model.mjs +18 -0
  76. package/esm2022/lib/auth/models/identity-group.model.mjs +18 -0
  77. package/esm2022/lib/auth/models/identity-role.model.mjs +30 -0
  78. package/esm2022/lib/auth/models/identity-user.model.mjs +18 -0
  79. package/esm2022/lib/auth/models/oauth-config.model.mjs +18 -0
  80. package/esm2022/lib/auth/models/redirection.model.mjs +28 -0
  81. package/esm2022/lib/auth/models/user-access.model.mjs +18 -0
  82. package/esm2022/lib/auth/oidc/auth-config.mjs +19 -0
  83. package/esm2022/lib/auth/oidc/auth-config.service.mjs +110 -0
  84. package/esm2022/lib/auth/oidc/auth-routing.module.mjs +34 -0
  85. package/esm2022/lib/auth/oidc/auth.module.mjs +112 -0
  86. package/esm2022/lib/auth/oidc/auth.service.mjs +22 -0
  87. package/esm2022/lib/auth/oidc/oidc-auth.guard.mjs +37 -0
  88. package/esm2022/lib/auth/oidc/oidc-authentication.service.mjs +202 -0
  89. package/esm2022/lib/auth/oidc/public-api.mjs +24 -0
  90. package/esm2022/lib/auth/oidc/redirect-auth.service.mjs +267 -0
  91. package/esm2022/lib/auth/oidc/retry-login.service.mjs +66 -0
  92. package/esm2022/lib/auth/oidc/token.interceptor.mjs +62 -0
  93. package/esm2022/lib/auth/oidc/view/authentication-confirmation/authentication-confirmation.component.mjs +31 -0
  94. package/esm2022/lib/auth/public-api.mjs +44 -0
  95. package/esm2022/lib/auth/services/authentication.service.mjs +190 -0
  96. package/esm2022/lib/auth/services/base-authentication.service.mjs +99 -0
  97. package/esm2022/lib/auth/services/identity-group.service.mjs +269 -0
  98. package/esm2022/lib/auth/services/identity-role.service.mjs +99 -0
  99. package/esm2022/lib/auth/services/identity-user.service.mjs +443 -0
  100. package/esm2022/lib/auth/services/jwt-helper.service.mjs +205 -0
  101. package/esm2022/lib/auth/services/oauth2.service.mjs +69 -0
  102. package/esm2022/lib/auth/services/time-sync.service.mjs +83 -0
  103. package/esm2022/lib/auth/services/user-access.service.mjs +110 -0
  104. package/esm2022/lib/avatar/avatar.component.mjs +51 -0
  105. package/esm2022/lib/blank-page/blank-page.component.mjs +31 -0
  106. package/esm2022/lib/blank-page/blank-page.module.mjs +33 -0
  107. package/esm2022/lib/blank-page/index.mjs +18 -0
  108. package/esm2022/lib/blank-page/public-api.mjs +19 -0
  109. package/esm2022/lib/button/button.component.mjs +61 -0
  110. package/esm2022/lib/card-view/card-view.module.mjs +80 -0
  111. package/esm2022/lib/card-view/components/base-card-view.mjs +51 -0
  112. package/esm2022/lib/card-view/components/card-view/card-view.component.mjs +66 -0
  113. package/esm2022/lib/card-view/components/card-view-arrayitem/card-view-arrayitem.component.mjs +56 -0
  114. package/esm2022/lib/card-view/components/card-view-boolitem/card-view-boolitem.component.mjs +40 -0
  115. package/esm2022/lib/card-view/components/card-view-dateitem/card-view-dateitem.component.mjs +183 -0
  116. package/esm2022/lib/card-view/components/card-view-item-dispatcher/card-view-item-dispatcher.component.mjs +108 -0
  117. package/esm2022/lib/card-view/components/card-view-keyvaluepairsitem/card-view-keyvaluepairsitem.component.mjs +65 -0
  118. package/esm2022/lib/card-view/components/card-view-mapitem/card-view-mapitem.component.mjs +47 -0
  119. package/esm2022/lib/card-view/components/card-view-selectitem/card-view-selectitem.component.mjs +138 -0
  120. package/esm2022/lib/card-view/components/card-view-selectitem/select-filter-input/select-filter-input.component.mjs +114 -0
  121. package/esm2022/lib/card-view/components/card-view-textitem/card-view-textitem.component.mjs +240 -0
  122. package/esm2022/lib/card-view/components/card-view.components.mjs +28 -0
  123. package/esm2022/lib/card-view/index.mjs +18 -0
  124. package/esm2022/lib/card-view/interfaces/base-card-view-update.interface.mjs +18 -0
  125. package/esm2022/lib/card-view/interfaces/card-view-arrayitem-properties.interface.mjs +18 -0
  126. package/esm2022/lib/card-view/interfaces/card-view-boolitem-properties.interface.mjs +18 -0
  127. package/esm2022/lib/card-view/interfaces/card-view-dateitem-properties.interface.mjs +18 -0
  128. package/esm2022/lib/card-view/interfaces/card-view-item-properties.interface.mjs +18 -0
  129. package/esm2022/lib/card-view/interfaces/card-view-item-validator.interface.mjs +18 -0
  130. package/esm2022/lib/card-view/interfaces/card-view-item.interface.mjs +18 -0
  131. package/esm2022/lib/card-view/interfaces/card-view-keyvaluepairsitem-properties.interface.mjs +18 -0
  132. package/esm2022/lib/card-view/interfaces/card-view-selectitem-properties.interface.mjs +18 -0
  133. package/esm2022/lib/card-view/interfaces/card-view-textitem-pipe-property.interface.mjs +18 -0
  134. package/esm2022/lib/card-view/interfaces/card-view-textitem-properties.interface.mjs +18 -0
  135. package/esm2022/lib/card-view/interfaces/card-view.interfaces.mjs +29 -0
  136. package/esm2022/lib/card-view/interfaces/click-notification.interface.mjs +18 -0
  137. package/esm2022/lib/card-view/interfaces/update-notification.interface.mjs +18 -0
  138. package/esm2022/lib/card-view/models/card-view-arrayitem.model.mjs +28 -0
  139. package/esm2022/lib/card-view/models/card-view-baseitem.model.mjs +64 -0
  140. package/esm2022/lib/card-view/models/card-view-boolitem.model.mjs +36 -0
  141. package/esm2022/lib/card-view/models/card-view-dateitem.model.mjs +58 -0
  142. package/esm2022/lib/card-view/models/card-view-datetimeitem.model.mjs +28 -0
  143. package/esm2022/lib/card-view/models/card-view-floatitem.model.mjs +33 -0
  144. package/esm2022/lib/card-view/models/card-view-intitem.model.mjs +36 -0
  145. package/esm2022/lib/card-view/models/card-view-keyvaluepairs.model.mjs +27 -0
  146. package/esm2022/lib/card-view/models/card-view-longitem.model.mjs +36 -0
  147. package/esm2022/lib/card-view/models/card-view-mapitem.model.mjs +32 -0
  148. package/esm2022/lib/card-view/models/card-view-selectitem.model.mjs +41 -0
  149. package/esm2022/lib/card-view/models/card-view-textitem.model.mjs +40 -0
  150. package/esm2022/lib/card-view/models/card-view.models.mjs +29 -0
  151. package/esm2022/lib/card-view/public-api.mjs +25 -0
  152. package/esm2022/lib/card-view/services/card-item-types.service.mjs +54 -0
  153. package/esm2022/lib/card-view/services/card-view-update.service.mjs +59 -0
  154. package/esm2022/lib/card-view/services/card-view.services.mjs +19 -0
  155. package/esm2022/lib/card-view/validators/card-view-item-float.validator.mjs +31 -0
  156. package/esm2022/lib/card-view/validators/card-view-item-int.validator.mjs +35 -0
  157. package/esm2022/lib/card-view/validators/card-view-item-length.validator.mjs +34 -0
  158. package/esm2022/lib/card-view/validators/card-view-item-long.validator.mjs +35 -0
  159. package/esm2022/lib/card-view/validators/card-view-item-match.validator.mjs +35 -0
  160. package/esm2022/lib/card-view/validators/card-view-item-minmax.validator.mjs +35 -0
  161. package/esm2022/lib/card-view/validators/card-view-item-only-positive-int.validator.mjs +32 -0
  162. package/esm2022/lib/card-view/validators/card-view-item-only-positive-long.validator.mjs +31 -0
  163. package/esm2022/lib/card-view/validators/card-view.validators.mjs +26 -0
  164. package/esm2022/lib/card-view/validators/validators.map.mjs +26 -0
  165. package/esm2022/lib/clipboard/clipboard.directive.mjs +99 -0
  166. package/esm2022/lib/clipboard/clipboard.module.mjs +34 -0
  167. package/esm2022/lib/clipboard/clipboard.service.mjs +103 -0
  168. package/esm2022/lib/clipboard/index.mjs +18 -0
  169. package/esm2022/lib/clipboard/public-api.mjs +21 -0
  170. package/esm2022/lib/comments/comment-list/comment-list.component.mjs +53 -0
  171. package/esm2022/lib/comments/comment-list/comment-list.module.mjs +33 -0
  172. package/esm2022/lib/comments/comment-list/index.mjs +18 -0
  173. package/esm2022/lib/comments/comment-list/public-api.mjs +19 -0
  174. package/esm2022/lib/comments/comments.component.mjs +128 -0
  175. package/esm2022/lib/comments/comments.module.mjs +33 -0
  176. package/esm2022/lib/comments/index.mjs +18 -0
  177. package/esm2022/lib/comments/interfaces/comments-service.interface.mjs +18 -0
  178. package/esm2022/lib/comments/interfaces/comments.token.mjs +19 -0
  179. package/esm2022/lib/comments/public-api.mjs +22 -0
  180. package/esm2022/lib/common/index.mjs +35 -0
  181. package/esm2022/lib/common/interface/search-component.interface.mjs +18 -0
  182. package/esm2022/lib/common/mock/app-config.service.mock.mjs +47 -0
  183. package/esm2022/lib/common/models/default-languages.model.mjs +36 -0
  184. package/esm2022/lib/common/models/log-levels.model.mjs +33 -0
  185. package/esm2022/lib/common/models/user-info-mode.enum.mjs +25 -0
  186. package/esm2022/lib/common/services/cookie.service.mjs +82 -0
  187. package/esm2022/lib/common/services/download.service.mjs +102 -0
  188. package/esm2022/lib/common/services/dynamic-component-mapper.service.mjs +89 -0
  189. package/esm2022/lib/common/services/highlight-transform.service.mjs +61 -0
  190. package/esm2022/lib/common/services/language-item.interface.mjs +18 -0
  191. package/esm2022/lib/common/services/log.service.mjs +171 -0
  192. package/esm2022/lib/common/services/page-title.service.mjs +63 -0
  193. package/esm2022/lib/common/services/sort-by-category.service.mjs +81 -0
  194. package/esm2022/lib/common/services/storage.service.mjs +143 -0
  195. package/esm2022/lib/common/services/thumbnail.service.mjs +194 -0
  196. package/esm2022/lib/common/services/url.service.mjs +45 -0
  197. package/esm2022/lib/common/services/user-preferences.service.mjs +238 -0
  198. package/esm2022/lib/common/utils/date-fns-adapter.mjs +115 -0
  199. package/esm2022/lib/common/utils/date-fns-utils.mjs +222 -0
  200. package/esm2022/lib/common/utils/datetime-fns-adapter.mjs +134 -0
  201. package/esm2022/lib/common/utils/file-utils.mjs +65 -0
  202. package/esm2022/lib/common/utils/index.mjs +18 -0
  203. package/esm2022/lib/common/utils/moment-date-adapter.mjs +202 -0
  204. package/esm2022/lib/common/utils/moment-date-formats.model.mjs +32 -0
  205. package/esm2022/lib/common/utils/object-utils.mjs +107 -0
  206. package/esm2022/lib/common/utils/public-api.mjs +25 -0
  207. package/esm2022/lib/common/utils/string-utils.mjs +45 -0
  208. package/esm2022/lib/context-menu/animations.mjs +33 -0
  209. package/esm2022/lib/context-menu/context-menu-list.component.mjs +92 -0
  210. package/esm2022/lib/context-menu/context-menu-overlay.mjs +25 -0
  211. package/esm2022/lib/context-menu/context-menu-overlay.service.mjs +109 -0
  212. package/esm2022/lib/context-menu/context-menu.directive.mjs +63 -0
  213. package/esm2022/lib/context-menu/context-menu.module.mjs +35 -0
  214. package/esm2022/lib/context-menu/context-menu.tokens.mjs +19 -0
  215. package/esm2022/lib/context-menu/index.mjs +18 -0
  216. package/esm2022/lib/context-menu/interfaces.mjs +18 -0
  217. package/esm2022/lib/context-menu/public-api.mjs +21 -0
  218. package/esm2022/lib/core.module.mjs +314 -0
  219. package/esm2022/lib/datatable/components/amount-cell/amount-cell.component.mjs +45 -0
  220. package/esm2022/lib/datatable/components/boolean-cell/boolean-cell.component.mjs +65 -0
  221. package/esm2022/lib/datatable/components/columns-selector/columns-search-filter.pipe.mjs +55 -0
  222. package/esm2022/lib/datatable/components/columns-selector/columns-selector.component.mjs +114 -0
  223. package/esm2022/lib/datatable/components/data-cell.event.mjs +31 -0
  224. package/esm2022/lib/datatable/components/data-row-action.event.mjs +34 -0
  225. package/esm2022/lib/datatable/components/datatable/datatable.component.mjs +915 -0
  226. package/esm2022/lib/datatable/components/datatable-cell/datatable-cell.component.mjs +126 -0
  227. package/esm2022/lib/datatable/components/datatable-row/datatable-row.component.mjs +98 -0
  228. package/esm2022/lib/datatable/components/date-cell/date-cell.component.mjs +78 -0
  229. package/esm2022/lib/datatable/components/empty-list/empty-list.component.mjs +60 -0
  230. package/esm2022/lib/datatable/components/filesize-cell/filesize-cell.component.mjs +49 -0
  231. package/esm2022/lib/datatable/components/icon-cell/icon-cell.component.mjs +67 -0
  232. package/esm2022/lib/datatable/components/json-cell/json-cell.component.mjs +86 -0
  233. package/esm2022/lib/datatable/components/location-cell/location-cell.component.mjs +69 -0
  234. package/esm2022/lib/datatable/components/mocks/datatable.mock.mjs +153 -0
  235. package/esm2022/lib/datatable/components/number-cell/number-cell.component.mjs +42 -0
  236. package/esm2022/lib/datatable/data/data-column.model.mjs +18 -0
  237. package/esm2022/lib/datatable/data/data-row-event.model.mjs +26 -0
  238. package/esm2022/lib/datatable/data/data-row-update.model.mjs +18 -0
  239. package/esm2022/lib/datatable/data/data-row.model.mjs +18 -0
  240. package/esm2022/lib/datatable/data/data-sorting.model.mjs +24 -0
  241. package/esm2022/lib/datatable/data/data-table.schema.mjs +132 -0
  242. package/esm2022/lib/datatable/data/datatable-adapter.mjs +18 -0
  243. package/esm2022/lib/datatable/data/object-datacolumn.model.mjs +46 -0
  244. package/esm2022/lib/datatable/data/object-datarow.model.mjs +41 -0
  245. package/esm2022/lib/datatable/data/object-datatable-adapter.mjs +134 -0
  246. package/esm2022/lib/datatable/data-column/data-column-header.component.mjs +45 -0
  247. package/esm2022/lib/datatable/data-column/data-column-list.component.mjs +36 -0
  248. package/esm2022/lib/datatable/data-column/data-column.component.mjs +114 -0
  249. package/esm2022/lib/datatable/data-column/index.mjs +18 -0
  250. package/esm2022/lib/datatable/data-column/public-api.mjs +20 -0
  251. package/esm2022/lib/datatable/datatable.module.mjs +161 -0
  252. package/esm2022/lib/datatable/directives/custom-empty-content-template.directive.mjs +35 -0
  253. package/esm2022/lib/datatable/directives/custom-loading-template.directive.mjs +30 -0
  254. package/esm2022/lib/datatable/directives/custom-no-permission-template.directive.mjs +35 -0
  255. package/esm2022/lib/datatable/directives/drop-zone.directive.mjs +89 -0
  256. package/esm2022/lib/datatable/directives/header-filter-template.directive.mjs +43 -0
  257. package/esm2022/lib/datatable/directives/loading-template.directive.mjs +46 -0
  258. package/esm2022/lib/datatable/directives/main-data-table-action-template.directive.mjs +43 -0
  259. package/esm2022/lib/datatable/directives/no-content-template.directive.mjs +46 -0
  260. package/esm2022/lib/datatable/directives/no-permission-template.directive.mjs +46 -0
  261. package/esm2022/lib/datatable/directives/resizable/resizable.directive.mjs +173 -0
  262. package/esm2022/lib/datatable/directives/resizable/resize-handle.directive.mjs +72 -0
  263. package/esm2022/lib/datatable/directives/resizable/types.mjs +18 -0
  264. package/esm2022/lib/datatable/index.mjs +18 -0
  265. package/esm2022/lib/datatable/public-api.mjs +55 -0
  266. package/esm2022/lib/datatable/services/datatable.service.mjs +33 -0
  267. package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.mjs +50 -0
  268. package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.module.mjs +38 -0
  269. package/esm2022/lib/dialogs/dialog/dialog-data.interface.mjs +18 -0
  270. package/esm2022/lib/dialogs/dialog/dialog.component.mjs +71 -0
  271. package/esm2022/lib/dialogs/dialog/dialog.model.mjs +22 -0
  272. package/esm2022/lib/dialogs/dialog/index.mjs +20 -0
  273. package/esm2022/lib/dialogs/edit-json/edit-json.dialog.mjs +51 -0
  274. package/esm2022/lib/dialogs/edit-json/edit-json.dialog.module.mjs +38 -0
  275. package/esm2022/lib/dialogs/index.mjs +18 -0
  276. package/esm2022/lib/dialogs/public-api.mjs +25 -0
  277. package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.component.mjs +74 -0
  278. package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.model.mjs +18 -0
  279. package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.module.mjs +33 -0
  280. package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes.guard.mjs +64 -0
  281. package/esm2022/lib/directives/directive.module.mjs +56 -0
  282. package/esm2022/lib/directives/highlight.directive.mjs +67 -0
  283. package/esm2022/lib/directives/index.mjs +18 -0
  284. package/esm2022/lib/directives/infinite-select-scroll.directive.mjs +67 -0
  285. package/esm2022/lib/directives/logout.directive.mjs +72 -0
  286. package/esm2022/lib/directives/public-api.mjs +24 -0
  287. package/esm2022/lib/directives/tooltip-card/tooltip-card.component.mjs +60 -0
  288. package/esm2022/lib/directives/tooltip-card/tooltip-card.directive.mjs +104 -0
  289. package/esm2022/lib/directives/upload.directive.mjs +241 -0
  290. package/esm2022/lib/dynamic-chip-list/chip.mjs +18 -0
  291. package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.component.mjs +205 -0
  292. package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.module.mjs +33 -0
  293. package/esm2022/lib/dynamic-chip-list/index.mjs +18 -0
  294. package/esm2022/lib/dynamic-chip-list/public-api.mjs +20 -0
  295. package/esm2022/lib/events/base-ui.event.mjs +21 -0
  296. package/esm2022/lib/events/base.event.mjs +29 -0
  297. package/esm2022/lib/events/index.mjs +18 -0
  298. package/esm2022/lib/events/public-api.mjs +19 -0
  299. package/esm2022/lib/form/components/form-base.component.mjs +212 -0
  300. package/esm2022/lib/form/components/form-custom-button.directive.mjs +30 -0
  301. package/esm2022/lib/form/components/form-field/form-field.component.mjs +142 -0
  302. package/esm2022/lib/form/components/form-renderer.component.mjs +162 -0
  303. package/esm2022/lib/form/components/form-section/form-section.component.mjs +46 -0
  304. package/esm2022/lib/form/components/helpers/buttons-visibility.mjs +37 -0
  305. package/esm2022/lib/form/components/inplace-form-input/inplace-form-input.component.mjs +37 -0
  306. package/esm2022/lib/form/components/middlewares/decimal-middleware.service.mjs +48 -0
  307. package/esm2022/lib/form/components/middlewares/middleware.mjs +19 -0
  308. package/esm2022/lib/form/components/widgets/amount/amount.widget.mjs +78 -0
  309. package/esm2022/lib/form/components/widgets/base-viewer/base-viewer.widget.mjs +60 -0
  310. package/esm2022/lib/form/components/widgets/checkbox/checkbox.widget.mjs +53 -0
  311. package/esm2022/lib/form/components/widgets/core/container-column.model.mjs +28 -0
  312. package/esm2022/lib/form/components/widgets/core/container.model.mjs +50 -0
  313. package/esm2022/lib/form/components/widgets/core/content-link.model.mjs +52 -0
  314. package/esm2022/lib/form/components/widgets/core/displayable-cm-properties.model.mjs +18 -0
  315. package/esm2022/lib/form/components/widgets/core/error-message.model.mjs +38 -0
  316. package/esm2022/lib/form/components/widgets/core/external-content-link.mjs +18 -0
  317. package/esm2022/lib/form/components/widgets/core/external-content.mjs +18 -0
  318. package/esm2022/lib/form/components/widgets/core/form-field-file-source.mjs +18 -0
  319. package/esm2022/lib/form/components/widgets/core/form-field-metadata.mjs +18 -0
  320. package/esm2022/lib/form/components/widgets/core/form-field-option.mjs +18 -0
  321. package/esm2022/lib/form/components/widgets/core/form-field-rule.mjs +18 -0
  322. package/esm2022/lib/form/components/widgets/core/form-field-selected-folder.mjs +18 -0
  323. package/esm2022/lib/form/components/widgets/core/form-field-templates.mjs +18 -0
  324. package/esm2022/lib/form/components/widgets/core/form-field-types.mjs +74 -0
  325. package/esm2022/lib/form/components/widgets/core/form-field-utils.mjs +23 -0
  326. package/esm2022/lib/form/components/widgets/core/form-field-validator.mjs +268 -0
  327. package/esm2022/lib/form/components/widgets/core/form-field-variable-options.mjs +18 -0
  328. package/esm2022/lib/form/components/widgets/core/form-field.model.mjs +490 -0
  329. package/esm2022/lib/form/components/widgets/core/form-outcome-event.model.mjs +32 -0
  330. package/esm2022/lib/form/components/widgets/core/form-outcome.model.mjs +38 -0
  331. package/esm2022/lib/form/components/widgets/core/form-values.mjs +18 -0
  332. package/esm2022/lib/form/components/widgets/core/form-variable.model.mjs +18 -0
  333. package/esm2022/lib/form/components/widgets/core/form-widget.model.mjs +33 -0
  334. package/esm2022/lib/form/components/widgets/core/form.model.mjs +387 -0
  335. package/esm2022/lib/form/components/widgets/core/group.model.mjs +18 -0
  336. package/esm2022/lib/form/components/widgets/core/index.mjs +49 -0
  337. package/esm2022/lib/form/components/widgets/core/predefined-theme.mjs +115 -0
  338. package/esm2022/lib/form/components/widgets/core/process-form-model.interface.mjs +18 -0
  339. package/esm2022/lib/form/components/widgets/core/process-variable.model.mjs +18 -0
  340. package/esm2022/lib/form/components/widgets/core/tab.model.mjs +34 -0
  341. package/esm2022/lib/form/components/widgets/core/theme.model.mjs +18 -0
  342. package/esm2022/lib/form/components/widgets/core/upload-widget-content-link.model.mjs +27 -0
  343. package/esm2022/lib/form/components/widgets/core/widget-schema.model.mjs +18 -0
  344. package/esm2022/lib/form/components/widgets/date/date.widget.mjs +163 -0
  345. package/esm2022/lib/form/components/widgets/date-time/date-time.widget.mjs +154 -0
  346. package/esm2022/lib/form/components/widgets/decimal/decimal.component.mjs +54 -0
  347. package/esm2022/lib/form/components/widgets/display-text/display-text.schema.mjs +86 -0
  348. package/esm2022/lib/form/components/widgets/display-text/display-text.widget.mjs +47 -0
  349. package/esm2022/lib/form/components/widgets/display-text/index.mjs +19 -0
  350. package/esm2022/lib/form/components/widgets/error/error.component.mjs +93 -0
  351. package/esm2022/lib/form/components/widgets/header/header.schema.mjs +86 -0
  352. package/esm2022/lib/form/components/widgets/header/header.widget.mjs +43 -0
  353. package/esm2022/lib/form/components/widgets/header/index.mjs +19 -0
  354. package/esm2022/lib/form/components/widgets/hyperlink/hyperlink.widget.mjs +71 -0
  355. package/esm2022/lib/form/components/widgets/index.mjs +71 -0
  356. package/esm2022/lib/form/components/widgets/json/json.widget.mjs +67 -0
  357. package/esm2022/lib/form/components/widgets/multiline-text/multiline-text.widget.mjs +56 -0
  358. package/esm2022/lib/form/components/widgets/number/number.widget.mjs +72 -0
  359. package/esm2022/lib/form/components/widgets/reactive-widget.interface.mjs +18 -0
  360. package/esm2022/lib/form/components/widgets/text/text-mask.component.mjs +215 -0
  361. package/esm2022/lib/form/components/widgets/text/text.widget.mjs +66 -0
  362. package/esm2022/lib/form/components/widgets/unknown/unknown.widget.mjs +63 -0
  363. package/esm2022/lib/form/components/widgets/widget.component.mjs +110 -0
  364. package/esm2022/lib/form/events/form-error.event.mjs +24 -0
  365. package/esm2022/lib/form/events/form-field.event.mjs +24 -0
  366. package/esm2022/lib/form/events/form-rules.event.mjs +25 -0
  367. package/esm2022/lib/form/events/form-spinner.event.mjs +23 -0
  368. package/esm2022/lib/form/events/form.event.mjs +29 -0
  369. package/esm2022/lib/form/events/index.mjs +24 -0
  370. package/esm2022/lib/form/events/validate-form-field.event.mjs +24 -0
  371. package/esm2022/lib/form/events/validate-form.event.mjs +25 -0
  372. package/esm2022/lib/form/form-base.module.mjs +90 -0
  373. package/esm2022/lib/form/index.mjs +18 -0
  374. package/esm2022/lib/form/models/form-rules.model.mjs +77 -0
  375. package/esm2022/lib/form/models/task-process-variable.model.mjs +19 -0
  376. package/esm2022/lib/form/models/widget-visibility.model.mjs +104 -0
  377. package/esm2022/lib/form/pipes/field-style.pipe.mjs +45 -0
  378. package/esm2022/lib/form/pipes/index.mjs +18 -0
  379. package/esm2022/lib/form/public-api.mjs +35 -0
  380. package/esm2022/lib/form/services/form-rendering.service.mjs +53 -0
  381. package/esm2022/lib/form/services/form-validation-service.interface.mjs +18 -0
  382. package/esm2022/lib/form/services/form.service.mjs +86 -0
  383. package/esm2022/lib/form/services/widget-visibility.service.mjs +294 -0
  384. package/esm2022/lib/header/header.component.mjs +73 -0
  385. package/esm2022/lib/header/index.mjs +18 -0
  386. package/esm2022/lib/header/navbar/navbar-item.component.mjs +37 -0
  387. package/esm2022/lib/header/navbar/navbar.component.mjs +36 -0
  388. package/esm2022/lib/header/public-api.mjs +20 -0
  389. package/esm2022/lib/icon/icon.component.mjs +51 -0
  390. package/esm2022/lib/icon/icon.module.mjs +36 -0
  391. package/esm2022/lib/icon/index.mjs +18 -0
  392. package/esm2022/lib/icon/public-api.mjs +19 -0
  393. package/esm2022/lib/identity-user-info/identity-user-info.component.mjs +87 -0
  394. package/esm2022/lib/identity-user-info/identity-user-info.module.mjs +33 -0
  395. package/esm2022/lib/identity-user-info/index.mjs +18 -0
  396. package/esm2022/lib/identity-user-info/public-api.mjs +19 -0
  397. package/esm2022/lib/info-drawer/index.mjs +18 -0
  398. package/esm2022/lib/info-drawer/info-drawer-layout.component.mjs +71 -0
  399. package/esm2022/lib/info-drawer/info-drawer.component.mjs +114 -0
  400. package/esm2022/lib/info-drawer/info-drawer.module.mjs +53 -0
  401. package/esm2022/lib/info-drawer/public-api.mjs +20 -0
  402. package/esm2022/lib/interface/index.mjs +18 -0
  403. package/esm2022/lib/interface/injection.tokens.mjs +19 -0
  404. package/esm2022/lib/interface/public-api.mjs +18 -0
  405. package/esm2022/lib/language-menu/index.mjs +18 -0
  406. package/esm2022/lib/language-menu/language-menu.component.mjs +61 -0
  407. package/esm2022/lib/language-menu/language-menu.module.mjs +35 -0
  408. package/esm2022/lib/language-menu/language-picker.component.mjs +78 -0
  409. package/esm2022/lib/language-menu/public-api.mjs +21 -0
  410. package/esm2022/lib/language-menu/service/language.service.interface.mjs +18 -0
  411. package/esm2022/lib/language-menu/service/language.service.mjs +34 -0
  412. package/esm2022/lib/layout/components/header/header.component.mjs +100 -0
  413. package/esm2022/lib/layout/components/layout-container/layout-container.component.mjs +180 -0
  414. package/esm2022/lib/layout/components/sidebar-action/sidebar-action-menu.component.mjs +82 -0
  415. package/esm2022/lib/layout/components/sidenav-layout/sidenav-layout.component.mjs +145 -0
  416. package/esm2022/lib/layout/directives/sidenav-layout-content.directive.mjs +33 -0
  417. package/esm2022/lib/layout/directives/sidenav-layout-header.directive.mjs +33 -0
  418. package/esm2022/lib/layout/directives/sidenav-layout-navigation.directive.mjs +33 -0
  419. package/esm2022/lib/layout/index.mjs +18 -0
  420. package/esm2022/lib/layout/layout.module.mjs +72 -0
  421. package/esm2022/lib/layout/public-api.mjs +25 -0
  422. package/esm2022/lib/login/components/login/login.component.mjs +368 -0
  423. package/esm2022/lib/login/components/login-dialog/login-dialog-component-data.interface.mjs +18 -0
  424. package/esm2022/lib/login/components/login-dialog/login-dialog.component.mjs +58 -0
  425. package/esm2022/lib/login/components/login-dialog-panel/login-dialog-panel.component.mjs +48 -0
  426. package/esm2022/lib/login/directives/login-footer.directive.mjs +41 -0
  427. package/esm2022/lib/login/directives/login-header.directive.mjs +41 -0
  428. package/esm2022/lib/login/index.mjs +18 -0
  429. package/esm2022/lib/login/login.module.mjs +54 -0
  430. package/esm2022/lib/login/models/login-error.event.mjs +22 -0
  431. package/esm2022/lib/login/models/login-submit.event.mjs +32 -0
  432. package/esm2022/lib/login/models/login-success.event.mjs +24 -0
  433. package/esm2022/lib/login/public-api.mjs +27 -0
  434. package/esm2022/lib/material.module.mjs +254 -0
  435. package/esm2022/lib/mock/cookie.service.mock.mjs +43 -0
  436. package/esm2022/lib/mock/data-column.mock.mjs +73 -0
  437. package/esm2022/lib/mock/event.mock.mjs +39 -0
  438. package/esm2022/lib/mock/form/form-definition-readonly.mock.mjs +225 -0
  439. package/esm2022/lib/mock/form/form-definition-visibility.mock.mjs +347 -0
  440. package/esm2022/lib/mock/form/form-definition.mock.mjs +403 -0
  441. package/esm2022/lib/mock/form/form.component.mock.mjs +275 -0
  442. package/esm2022/lib/mock/form/form.service.mock.mjs +248 -0
  443. package/esm2022/lib/mock/form/widget-visibility.service.mock.mjs +1835 -0
  444. package/esm2022/lib/mock/index.mjs +18 -0
  445. package/esm2022/lib/mock/public-api.mjs +27 -0
  446. package/esm2022/lib/mock/translation.service.mock.mjs +44 -0
  447. package/esm2022/lib/models/comment.model.mjs +51 -0
  448. package/esm2022/lib/models/component.model.mjs +24 -0
  449. package/esm2022/lib/models/decimal-number.model.mjs +26 -0
  450. package/esm2022/lib/models/general-user.model.mjs +24 -0
  451. package/esm2022/lib/models/index.mjs +18 -0
  452. package/esm2022/lib/models/pagination.model.mjs +29 -0
  453. package/esm2022/lib/models/path.model.mjs +24 -0
  454. package/esm2022/lib/models/product-version.model.mjs +28 -0
  455. package/esm2022/lib/models/public-api.mjs +24 -0
  456. package/esm2022/lib/models/request-pagination.model.mjs +25 -0
  457. package/esm2022/lib/notifications/components/add-notification.stories.component.mjs +44 -0
  458. package/esm2022/lib/notifications/components/notification-history.component.mjs +139 -0
  459. package/esm2022/lib/notifications/helpers/notification.factory.mjs +43 -0
  460. package/esm2022/lib/notifications/index.mjs +18 -0
  461. package/esm2022/lib/notifications/models/notification.model.mjs +25 -0
  462. package/esm2022/lib/notifications/notification-history.module.mjs +35 -0
  463. package/esm2022/lib/notifications/public-api.mjs +23 -0
  464. package/esm2022/lib/notifications/services/notification.service.mjs +166 -0
  465. package/esm2022/lib/pagination/index.mjs +18 -0
  466. package/esm2022/lib/pagination/infinite-pagination.component.mjs +112 -0
  467. package/esm2022/lib/pagination/paginated-component.interface.mjs +18 -0
  468. package/esm2022/lib/pagination/pagination-component.interface.mjs +18 -0
  469. package/esm2022/lib/pagination/pagination.component.mjs +263 -0
  470. package/esm2022/lib/pagination/pagination.module.mjs +35 -0
  471. package/esm2022/lib/pagination/public-api.mjs +22 -0
  472. package/esm2022/lib/pipes/date-time.pipe.mjs +46 -0
  473. package/esm2022/lib/pipes/decimal-number.pipe.mjs +78 -0
  474. package/esm2022/lib/pipes/file-size.pipe.mjs +54 -0
  475. package/esm2022/lib/pipes/file-type.pipe.mjs +40 -0
  476. package/esm2022/lib/pipes/format-space.pipe.mjs +39 -0
  477. package/esm2022/lib/pipes/full-name.pipe.mjs +43 -0
  478. package/esm2022/lib/pipes/index.mjs +18 -0
  479. package/esm2022/lib/pipes/localized-date.pipe.mjs +70 -0
  480. package/esm2022/lib/pipes/multi-value.pipe.mjs +37 -0
  481. package/esm2022/lib/pipes/pipe.module.mjs +83 -0
  482. package/esm2022/lib/pipes/public-api.mjs +30 -0
  483. package/esm2022/lib/pipes/text-highlight.pipe.mjs +39 -0
  484. package/esm2022/lib/pipes/time-ago.pipe.mjs +65 -0
  485. package/esm2022/lib/pipes/truncate.pipe.mjs +33 -0
  486. package/esm2022/lib/pipes/user-initial.pipe.mjs +52 -0
  487. package/esm2022/lib/pipes/user-like.interface.mjs +18 -0
  488. package/esm2022/lib/progress/progress.component.mjs +90 -0
  489. package/esm2022/lib/search-text/animations.mjs +32 -0
  490. package/esm2022/lib/search-text/index.mjs +18 -0
  491. package/esm2022/lib/search-text/models/search-text-input.model.mjs +23 -0
  492. package/esm2022/lib/search-text/public-api.mjs +22 -0
  493. package/esm2022/lib/search-text/search-text-input.component.mjs +294 -0
  494. package/esm2022/lib/search-text/search-text-input.module.mjs +35 -0
  495. package/esm2022/lib/search-text/search-trigger.directive.mjs +181 -0
  496. package/esm2022/lib/snackbar-content/index.mjs +18 -0
  497. package/esm2022/lib/snackbar-content/public-api.mjs +20 -0
  498. package/esm2022/lib/snackbar-content/snack-bar-data.mjs +18 -0
  499. package/esm2022/lib/snackbar-content/snackbar-content.component.mjs +48 -0
  500. package/esm2022/lib/snackbar-content/snackbar-content.module.mjs +38 -0
  501. package/esm2022/lib/sorting-picker/index.mjs +18 -0
  502. package/esm2022/lib/sorting-picker/public-api.mjs +18 -0
  503. package/esm2022/lib/sorting-picker/sorting-picker.component.mjs +68 -0
  504. package/esm2022/lib/templates/empty-content/empty-content.component.mjs +44 -0
  505. package/esm2022/lib/templates/error-content/error-content.component.mjs +62 -0
  506. package/esm2022/lib/templates/index.mjs +18 -0
  507. package/esm2022/lib/templates/public-api.mjs +20 -0
  508. package/esm2022/lib/templates/template.module.mjs +38 -0
  509. package/esm2022/lib/testing/core.story.module.mjs +39 -0
  510. package/esm2022/lib/testing/core.testing.module.mjs +35 -0
  511. package/esm2022/lib/testing/index.mjs +22 -0
  512. package/esm2022/lib/testing/noop-auth.module.mjs +80 -0
  513. package/esm2022/lib/testing/noop-translate.module.mjs +61 -0
  514. package/esm2022/lib/testing/unit-testing-utils.mjs +364 -0
  515. package/esm2022/lib/toolbar/index.mjs +18 -0
  516. package/esm2022/lib/toolbar/public-api.mjs +21 -0
  517. package/esm2022/lib/toolbar/toolbar-divider.component.mjs +27 -0
  518. package/esm2022/lib/toolbar/toolbar-title.component.mjs +32 -0
  519. package/esm2022/lib/toolbar/toolbar.component.mjs +40 -0
  520. package/esm2022/lib/toolbar/toolbar.module.mjs +36 -0
  521. package/esm2022/lib/translation/index.mjs +18 -0
  522. package/esm2022/lib/translation/public-api.mjs +19 -0
  523. package/esm2022/lib/translation/translate-loader.service.mjs +148 -0
  524. package/esm2022/lib/translation/translation.service.mjs +148 -0
  525. package/esm2022/lib/viewer/components/download-prompt-dialog/download-prompt-dialog.component.mjs +37 -0
  526. package/esm2022/lib/viewer/components/img-viewer/img-viewer.component.mjs +221 -0
  527. package/esm2022/lib/viewer/components/media-player/media-player.component.mjs +64 -0
  528. package/esm2022/lib/viewer/components/pdf-viewer/pdf-viewer.component.mjs +551 -0
  529. package/esm2022/lib/viewer/components/pdf-viewer-password-dialog/pdf-viewer-password-dialog.mjs +61 -0
  530. package/esm2022/lib/viewer/components/pdf-viewer-thumb/pdf-viewer-thumb.component.mjs +49 -0
  531. package/esm2022/lib/viewer/components/pdf-viewer-thumbnails/pdf-viewer-thumbnails.component.mjs +198 -0
  532. package/esm2022/lib/viewer/components/txt-viewer/txt-viewer.component.mjs +85 -0
  533. package/esm2022/lib/viewer/components/unknown-format/unknown-format.component.mjs +33 -0
  534. package/esm2022/lib/viewer/components/viewer-more-actions.component.mjs +34 -0
  535. package/esm2022/lib/viewer/components/viewer-open-with.component.mjs +34 -0
  536. package/esm2022/lib/viewer/components/viewer-render/viewer-render.component.mjs +217 -0
  537. package/esm2022/lib/viewer/components/viewer-sidebar.component.mjs +46 -0
  538. package/esm2022/lib/viewer/components/viewer-toolbar-actions.component.mjs +34 -0
  539. package/esm2022/lib/viewer/components/viewer-toolbar-custom-actions.component.mjs +34 -0
  540. package/esm2022/lib/viewer/components/viewer-toolbar.component.mjs +34 -0
  541. package/esm2022/lib/viewer/components/viewer.component.mjs +487 -0
  542. package/esm2022/lib/viewer/directives/viewer-extension.directive.mjs +67 -0
  543. package/esm2022/lib/viewer/index.mjs +18 -0
  544. package/esm2022/lib/viewer/models/download-prompt.actions.mjs +23 -0
  545. package/esm2022/lib/viewer/models/viewer.model.mjs +22 -0
  546. package/esm2022/lib/viewer/public-api.mjs +40 -0
  547. package/esm2022/lib/viewer/services/rendering-queue.services.mjs +179 -0
  548. package/esm2022/lib/viewer/services/view-util.service.mjs +149 -0
  549. package/esm2022/lib/viewer/viewer.module.mjs +112 -0
  550. package/esm2022/public-api.mjs +60 -0
  551. package/esm2022/shell/alfresco-adf-core-shell.mjs +5 -0
  552. package/esm2022/shell/index.mjs +20 -0
  553. package/esm2022/shell/lib/components/shell/shell.component.mjs +122 -0
  554. package/esm2022/shell/lib/services/shell-app.service.mjs +22 -0
  555. package/esm2022/shell/lib/shell.module.mjs +79 -0
  556. package/esm2022/shell/lib/shell.routes.mjs +25 -0
  557. package/feature-flags/lib/providers/debug-feature-flags.provider.d.ts +35 -4
  558. package/fesm2022/adf-core.mjs +989 -955
  559. package/fesm2022/adf-core.mjs.map +1 -1
  560. package/fesm2022/alfresco-adf-core-api.mjs +4 -4
  561. package/fesm2022/alfresco-adf-core-api.mjs.map +1 -1
  562. package/fesm2022/alfresco-adf-core-auth.mjs +3 -3
  563. package/fesm2022/alfresco-adf-core-auth.mjs.map +1 -1
  564. package/fesm2022/alfresco-adf-core-breadcrumbs.mjs +11 -11
  565. package/fesm2022/alfresco-adf-core-breadcrumbs.mjs.map +1 -1
  566. package/fesm2022/alfresco-adf-core-feature-flags.mjs +56 -51
  567. package/fesm2022/alfresco-adf-core-feature-flags.mjs.map +1 -1
  568. package/fesm2022/alfresco-adf-core-shell.mjs +9 -9
  569. package/fesm2022/alfresco-adf-core-shell.mjs.map +1 -1
  570. package/lib/card-view/components/base-card-view.d.ts +1 -1
  571. package/lib/card-view/components/card-view-dateitem/card-view-dateitem.component.d.ts +2 -0
  572. package/lib/card-view/components/card-view-dateitem/card-view-dateitem.component.scss +1 -3
  573. package/lib/card-view/components/card-view-selectitem/card-view-selectitem.component.scss +2 -1
  574. package/lib/datatable/data/data-table.schema.d.ts +1 -1
  575. package/lib/datatable/data/object-datarow.model.d.ts +1 -0
  576. package/lib/form/components/form-renderer.component.scss +1 -1
  577. package/lib/viewer/components/img-viewer/img-viewer.component.scss +10 -0
  578. package/lib/viewer/components/unknown-format/unknown-format.component.scss +4 -0
  579. package/lib/viewer/components/viewer-render/viewer-render.component.scss +16 -0
  580. package/lib/viewer/components/viewer.component.d.ts +4 -1
  581. package/lib/viewer/components/viewer.component.scss +12 -0
  582. package/package.json +15 -3
@@ -0,0 +1,487 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { A11yModule } from '@angular/cdk/a11y';
18
+ import { NgIf, NgTemplateOutlet } from '@angular/common';
19
+ import { Component, ContentChild, DestroyRef, ElementRef, EventEmitter, HostBinding, HostListener, inject, Input, Output, TemplateRef, ViewEncapsulation } from '@angular/core';
20
+ import { MatButtonModule } from '@angular/material/button';
21
+ import { MatDialog } from '@angular/material/dialog';
22
+ import { MatIconModule } from '@angular/material/icon';
23
+ import { MatMenuModule } from '@angular/material/menu';
24
+ import { TranslateModule } from '@ngx-translate/core';
25
+ import { fromEvent } from 'rxjs';
26
+ import { filter, first, skipWhile } from 'rxjs/operators';
27
+ import { AppConfigService } from '../../app-config';
28
+ import { ToolbarComponent, ToolbarDividerComponent, ToolbarTitleComponent } from '../../toolbar';
29
+ import { DownloadPromptActions } from '../models/download-prompt.actions';
30
+ import { CloseButtonPosition } from '../models/viewer.model';
31
+ import { ViewUtilService } from '../services/view-util.service';
32
+ import { DownloadPromptDialogComponent } from './download-prompt-dialog/download-prompt-dialog.component';
33
+ import { ViewerMoreActionsComponent } from './viewer-more-actions.component';
34
+ import { ViewerOpenWithComponent } from './viewer-open-with.component';
35
+ import { ViewerRenderComponent } from './viewer-render/viewer-render.component';
36
+ import { ViewerSidebarComponent } from './viewer-sidebar.component';
37
+ import { ViewerToolbarComponent } from './viewer-toolbar.component';
38
+ import { ViewerToolbarActionsComponent } from './viewer-toolbar-actions.component';
39
+ import { ViewerToolbarCustomActionsComponent } from './viewer-toolbar-custom-actions.component';
40
+ import { IconComponent } from '../../icon';
41
+ import { ThumbnailService } from '../../common';
42
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
43
+ import * as i0 from "@angular/core";
44
+ import * as i1 from "@angular/material/dialog";
45
+ import * as i2 from "../services/view-util.service";
46
+ import * as i3 from "../../app-config";
47
+ import * as i4 from "@angular/cdk/a11y";
48
+ import * as i5 from "@angular/material/button";
49
+ import * as i6 from "@ngx-translate/core";
50
+ import * as i7 from "@angular/material/icon";
51
+ import * as i8 from "@angular/material/menu";
52
+ const DEFAULT_NON_PREVIEW_CONFIG = {
53
+ enableDownloadPrompt: false,
54
+ enableDownloadPromptReminder: false,
55
+ downloadPromptDelay: 50,
56
+ downloadPromptReminderDelay: 30
57
+ };
58
+ export class ViewerComponent {
59
+ get isInline() {
60
+ return !this.overlayMode;
61
+ }
62
+ get CloseButtonPosition() {
63
+ return CloseButtonPosition;
64
+ }
65
+ /** Override Content filename. */
66
+ set fileName(fileName) {
67
+ this._fileName = fileName;
68
+ this._fileExtension = this.viewUtilsService.getFileExtension(this.fileName);
69
+ this._fileNameWithoutExtension = this.fileName?.replace(new RegExp(`${this.fileExtension}$`), '') || '';
70
+ this.displayName = this.getDisplayFileName();
71
+ }
72
+ get fileName() {
73
+ return this._fileName;
74
+ }
75
+ get fileExtension() {
76
+ return this._fileExtension;
77
+ }
78
+ get fileNameWithoutExtension() {
79
+ return this._fileNameWithoutExtension;
80
+ }
81
+ constructor(el, dialog, viewUtilsService, appConfigService) {
82
+ this.el = el;
83
+ this.dialog = dialog;
84
+ this.viewUtilsService = viewUtilsService;
85
+ this.appConfigService = appConfigService;
86
+ this.thumbnailService = inject(ThumbnailService);
87
+ /**
88
+ * If you want to load an external file that does not come from ACS you
89
+ * can use this URL to specify where to load the file from.
90
+ */
91
+ this.urlFile = '';
92
+ /** Hide or show the viewer */
93
+ this.showViewer = true;
94
+ /** Allows `back` navigation */
95
+ this.allowGoBack = true;
96
+ /** Toggles the 'Full Screen' feature. */
97
+ this.allowFullScreen = true;
98
+ /** Hide or show the toolbar */
99
+ this.showToolbar = true;
100
+ /**
101
+ * If `true` then show the Viewer as a full page over the current content.
102
+ * Otherwise, fit inside the parent div.
103
+ */
104
+ this.overlayMode = false;
105
+ /**
106
+ * Toggles before/next navigation. You can use the arrow buttons to navigate
107
+ * between documents in the collection.
108
+ */
109
+ this.allowNavigate = false;
110
+ /** Toggles the "before" ("<") button. Requires `allowNavigate` to be enabled. */
111
+ this.canNavigateBefore = true;
112
+ /** Toggles the next (">") button. Requires `allowNavigate` to be enabled. */
113
+ this.canNavigateNext = true;
114
+ /** Allow the left the sidebar. */
115
+ this.allowLeftSidebar = false;
116
+ /** Allow the right sidebar. */
117
+ this.allowRightSidebar = false;
118
+ /** Toggles right sidebar visibility. Requires `allowRightSidebar` to be set to `true`. */
119
+ this.showRightSidebar = false;
120
+ /** Toggles left sidebar visibility. Requires `allowLeftSidebar` to be set to `true`. */
121
+ this.showLeftSidebar = false;
122
+ /** The template for the right sidebar. The template context contains the loaded node data. */
123
+ this.sidebarRightTemplate = null;
124
+ /** The template for the left sidebar. The template context contains the loaded node data. */
125
+ this.sidebarLeftTemplate = null;
126
+ /** Enable when where is possible the editing functionalities */
127
+ this.readOnly = true;
128
+ /**
129
+ * Controls which actions are enabled in the viewer.
130
+ * Example:
131
+ * { rotate: true, crop: false } will enable rotation but disable cropping.
132
+ */
133
+ this.allowedEditActions = {
134
+ rotate: true,
135
+ crop: true
136
+ };
137
+ /** media subtitles for the media player*/
138
+ this.tracks = [];
139
+ /**
140
+ * Context object available for binding by the local sidebarRightTemplate with let declarations.
141
+ */
142
+ this.sidebarRightTemplateContext = null;
143
+ /**
144
+ * Context object available for binding by the local sidebarLeftTemplate with let declarations.
145
+ */
146
+ this.sidebarLeftTemplateContext = null;
147
+ /**
148
+ * Change the close button position Right/Left.
149
+ */
150
+ this.closeButtonPosition = CloseButtonPosition.Left;
151
+ /** Toggles the 'Info Button' */
152
+ this.hideInfoButton = false;
153
+ /** Identifier of a node that is opened by the viewer. */
154
+ this.nodeId = null;
155
+ /** Original node mime type, should be provided when renditiona mime type is different. */
156
+ this.nodeMimeType = undefined;
157
+ /** Custom error message to be displayed in the viewer. */
158
+ this.customError = undefined;
159
+ /** Toggles dividers visibility */
160
+ this.showToolbarDividers = true;
161
+ /**
162
+ * Enable dialog box to allow user to download the previewed file, in case the preview is not responding for a set period of time.
163
+ */
164
+ this.enableDownloadPrompt = false;
165
+ /**
166
+ * Enable reminder dialogs to prompt user to download the file, in case the preview is not responding for a set period of time.
167
+ */
168
+ this.enableDownloadPromptReminder = false;
169
+ /**
170
+ * Initial time in seconds to wait before giving the first prompt to user to download the file
171
+ */
172
+ this.downloadPromptDelay = 50;
173
+ /**
174
+ * Time in seconds to wait before giving the second and consequent reminders to the user to download the file.
175
+ */
176
+ this.downloadPromptReminderDelay = 15;
177
+ /**
178
+ * Emitted when user clicks on download button on download prompt dialog.
179
+ */
180
+ this.downloadFile = new EventEmitter();
181
+ /** Emitted when user clicks 'Navigate Before' ("<") button. */
182
+ this.navigateBefore = new EventEmitter();
183
+ /** Emitted when user clicks 'Navigate Next' (">") button. */
184
+ this.navigateNext = new EventEmitter();
185
+ /** Emitted when the viewer close */
186
+ this.showViewerChange = new EventEmitter();
187
+ /** Emitted when the img is submitted in the img viewer. */
188
+ this.submitFile = new EventEmitter();
189
+ this.closeViewer = true;
190
+ this.keyDown$ = fromEvent(document, 'keydown');
191
+ this.isDialogVisible = false;
192
+ this.destroyRef = inject(DestroyRef);
193
+ }
194
+ ngOnChanges(changes) {
195
+ const { blobFile, urlFile, mimeType, nodeMimeType } = changes;
196
+ if (blobFile?.currentValue) {
197
+ this.mimeType = blobFile.currentValue.type;
198
+ this.mimeTypeIconUrl = this.thumbnailService.getMimeTypeIcon(blobFile.currentValue.type);
199
+ }
200
+ if (urlFile?.currentValue) {
201
+ this.fileName ||= this.viewUtilsService.getFilenameFromUrl(urlFile.currentValue);
202
+ }
203
+ if (mimeType?.currentValue && !nodeMimeType?.currentValue) {
204
+ this.mimeTypeIconUrl = this.thumbnailService.getMimeTypeIcon(mimeType.currentValue);
205
+ }
206
+ if (nodeMimeType?.currentValue) {
207
+ this.mimeTypeIconUrl = this.thumbnailService.getMimeTypeIcon(nodeMimeType.currentValue);
208
+ }
209
+ }
210
+ ngOnInit() {
211
+ this.closeOverlayManager();
212
+ this.configureAndInitDownloadPrompt();
213
+ }
214
+ closeOverlayManager() {
215
+ this.dialog.afterOpened
216
+ .pipe(skipWhile(() => !this.overlayMode), takeUntilDestroyed(this.destroyRef))
217
+ .subscribe(() => (this.closeViewer = false));
218
+ this.dialog.afterAllClosed
219
+ .pipe(skipWhile(() => !this.overlayMode), takeUntilDestroyed(this.destroyRef))
220
+ .subscribe(() => (this.closeViewer = true));
221
+ this.keyDown$
222
+ .pipe(skipWhile(() => !this.overlayMode), filter((e) => e.keyCode === 27), takeUntilDestroyed(this.destroyRef))
223
+ .subscribe((event) => {
224
+ event.preventDefault();
225
+ if (this.closeViewer) {
226
+ this.onClose();
227
+ }
228
+ });
229
+ }
230
+ onNavigateBeforeClick(event) {
231
+ this.resetLoadingSpinner();
232
+ this.navigateBefore.next(event);
233
+ }
234
+ onNavigateNextClick(event) {
235
+ this.resetLoadingSpinner();
236
+ this.navigateNext.next(event);
237
+ }
238
+ /**
239
+ * close the viewer
240
+ */
241
+ onClose() {
242
+ this.showViewer = false;
243
+ this.showViewerChange.emit(this.showViewer);
244
+ }
245
+ toggleRightSidebar() {
246
+ this.showRightSidebar = !this.showRightSidebar;
247
+ }
248
+ toggleLeftSidebar() {
249
+ this.showLeftSidebar = !this.showLeftSidebar;
250
+ }
251
+ handleKeyboardEvent(event) {
252
+ if (event?.defaultPrevented) {
253
+ return;
254
+ }
255
+ if (event.key === 'ArrowLeft' && this.canNavigateBefore) {
256
+ event.preventDefault();
257
+ this.onNavigateBeforeClick(event);
258
+ }
259
+ if (event.key === 'ArrowRight' && this.canNavigateNext) {
260
+ event.preventDefault();
261
+ this.onNavigateNextClick(event);
262
+ }
263
+ if (event.code === 'KeyF' && event.ctrlKey) {
264
+ event.preventDefault();
265
+ this.enterFullScreen();
266
+ }
267
+ }
268
+ /**
269
+ * Triggers full screen mode with a main content area displayed.
270
+ */
271
+ enterFullScreen() {
272
+ if (this.allowFullScreen) {
273
+ const container = this.el.nativeElement.querySelector('.adf-viewer__fullscreen-container');
274
+ if (container) {
275
+ if (container.requestFullscreen) {
276
+ container.requestFullscreen();
277
+ }
278
+ else if (container.webkitRequestFullscreen) {
279
+ container.webkitRequestFullscreen();
280
+ }
281
+ else if (container.mozRequestFullScreen) {
282
+ container.mozRequestFullScreen();
283
+ }
284
+ else if (container.msRequestFullscreen) {
285
+ container.msRequestFullscreen();
286
+ }
287
+ }
288
+ }
289
+ }
290
+ onSubmitFile(newImageBlob) {
291
+ this.submitFile.emit(newImageBlob);
292
+ }
293
+ ngOnDestroy() {
294
+ this.clearDownloadPromptTimeouts();
295
+ }
296
+ getDisplayFileName() {
297
+ const fullName = (this.fileNameWithoutExtension || '') + (this.fileExtension || '');
298
+ const maxLength = 50;
299
+ if (fullName.length <= maxLength) {
300
+ return fullName;
301
+ }
302
+ const amountOfTruncateDots = 5;
303
+ const availableSpace = maxLength - amountOfTruncateDots;
304
+ const endLength = 8;
305
+ const startLength = availableSpace - endLength;
306
+ const start = fullName.substring(0, startLength);
307
+ const end = fullName.substring(fullName.length - endLength);
308
+ return start + '.....' + end;
309
+ }
310
+ configureAndInitDownloadPrompt() {
311
+ this.configureDownloadPromptProperties();
312
+ if (this.enableDownloadPrompt) {
313
+ this.initDownloadPrompt();
314
+ }
315
+ }
316
+ configureDownloadPromptProperties() {
317
+ const nonResponsivePreviewConfig = this.appConfigService.get('viewer', DEFAULT_NON_PREVIEW_CONFIG);
318
+ this.enableDownloadPrompt = nonResponsivePreviewConfig.enableDownloadPrompt;
319
+ this.enableDownloadPromptReminder = nonResponsivePreviewConfig.enableDownloadPromptReminder;
320
+ this.downloadPromptDelay = nonResponsivePreviewConfig.downloadPromptDelay;
321
+ this.downloadPromptReminderDelay = nonResponsivePreviewConfig.downloadPromptReminderDelay;
322
+ }
323
+ initDownloadPrompt() {
324
+ this.downloadPromptTimer = window.setTimeout(() => {
325
+ this.showOrClearDownloadPrompt();
326
+ }, this.downloadPromptDelay * 1000);
327
+ }
328
+ showOrClearDownloadPrompt() {
329
+ if (!this.urlFile && !this.blobFile) {
330
+ this.showDownloadPrompt();
331
+ }
332
+ else {
333
+ this.clearDownloadPromptTimeouts();
334
+ }
335
+ }
336
+ clearDownloadPromptTimeouts() {
337
+ if (this.downloadPromptTimer) {
338
+ clearTimeout(this.downloadPromptTimer);
339
+ }
340
+ if (this.downloadPromptReminderTimer) {
341
+ clearTimeout(this.downloadPromptReminderTimer);
342
+ }
343
+ }
344
+ showDownloadPrompt() {
345
+ if (!this.isDialogVisible) {
346
+ this.isDialogVisible = true;
347
+ this.dialog
348
+ .open(DownloadPromptDialogComponent, { disableClose: true })
349
+ .afterClosed()
350
+ .pipe(first())
351
+ .subscribe((result) => {
352
+ this.isDialogVisible = false;
353
+ if (result === DownloadPromptActions.DOWNLOAD) {
354
+ this.downloadFile.emit();
355
+ this.onClose();
356
+ }
357
+ else if (result === DownloadPromptActions.WAIT) {
358
+ if (this.enableDownloadPromptReminder) {
359
+ this.clearDownloadPromptTimeouts();
360
+ this.downloadPromptReminderTimer = window.setTimeout(() => {
361
+ this.showOrClearDownloadPrompt();
362
+ }, this.downloadPromptReminderDelay * 1000);
363
+ }
364
+ }
365
+ });
366
+ }
367
+ }
368
+ resetLoadingSpinner() {
369
+ this.urlFile = '';
370
+ this.blobFile = null;
371
+ }
372
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewerComponent, deps: [{ token: i0.ElementRef }, { token: i1.MatDialog }, { token: i2.ViewUtilService }, { token: i3.AppConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
373
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ViewerComponent, isStandalone: true, selector: "adf-viewer", inputs: { urlFile: "urlFile", blobFile: "blobFile", showViewer: "showViewer", allowGoBack: "allowGoBack", allowFullScreen: "allowFullScreen", showToolbar: "showToolbar", overlayMode: "overlayMode", allowNavigate: "allowNavigate", canNavigateBefore: "canNavigateBefore", canNavigateNext: "canNavigateNext", allowLeftSidebar: "allowLeftSidebar", allowRightSidebar: "allowRightSidebar", showRightSidebar: "showRightSidebar", showLeftSidebar: "showLeftSidebar", sidebarRightTemplate: "sidebarRightTemplate", sidebarLeftTemplate: "sidebarLeftTemplate", readOnly: "readOnly", allowedEditActions: "allowedEditActions", tracks: "tracks", mimeType: "mimeType", sidebarRightTemplateContext: "sidebarRightTemplateContext", sidebarLeftTemplateContext: "sidebarLeftTemplateContext", closeButtonPosition: "closeButtonPosition", hideInfoButton: "hideInfoButton", viewerExtensions: "viewerExtensions", nodeId: "nodeId", nodeMimeType: "nodeMimeType", customError: "customError", showToolbarDividers: "showToolbarDividers", fileName: "fileName" }, outputs: { downloadFile: "downloadFile", navigateBefore: "navigateBefore", navigateNext: "navigateNext", showViewerChange: "showViewerChange", submitFile: "submitFile" }, host: { listeners: { "document:keyup": "handleKeyboardEvent($event)" }, properties: { "class.adf-viewer-inline": "this.isInline" }, classAttribute: "adf-viewer" }, providers: [ViewUtilService], queries: [{ propertyName: "toolbar", first: true, predicate: ViewerToolbarComponent, descendants: true }, { propertyName: "sidebar", first: true, predicate: ViewerSidebarComponent, descendants: true }, { propertyName: "mnuOpenWith", first: true, predicate: ViewerOpenWithComponent, descendants: true }, { propertyName: "mnuMoreActions", first: true, predicate: ViewerMoreActionsComponent, descendants: true }, { propertyName: "viewerTemplateExtensions", first: true, predicate: ["viewerExtensions"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"showViewer\"\n class=\"adf-viewer-container\"\n [class.adf-viewer-overlay-container]=\"overlayMode\"\n [class.adf-viewer-inline-container]=\"!overlayMode\">\n\n <div class=\"adf-viewer-content\"\n [cdkTrapFocus]=\"overlayMode\"\n cdkTrapFocusAutoCapture>\n <ng-content select=\"adf-viewer-toolbar\" />\n <ng-container *ngIf=\"showToolbar && !toolbar\">\n <adf-toolbar id=\"adf-viewer-toolbar\" class=\"adf-viewer-toolbar\">\n <adf-toolbar-title>\n <ng-container *ngIf=\"allowLeftSidebar\">\n <button mat-icon-button\n [attr.aria-expanded]=\"showLeftSidebar\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.INFO' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.INFO' | translate }}\"\n data-automation-id=\"adf-toolbar-left-sidebar\"\n [color]=\"showLeftSidebar ? 'accent' : null\"\n (click)=\"toggleLeftSidebar()\">\n <mat-icon>info_outline</mat-icon>\n </button>\n </ng-container>\n\n <button *ngIf=\"allowGoBack && closeButtonPosition === CloseButtonPosition.Left\"\n class=\"adf-viewer-close-button\"\n data-automation-id=\"adf-toolbar-left-back\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n mat-icon-button\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\"\n (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n </adf-toolbar-title>\n\n <div class=\"adf-viewer__file-title\">\n <button *ngIf=\"allowNavigate && canNavigateBefore\"\n data-automation-id=\"adf-toolbar-pref-file\"\n mat-icon-button\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.PREV_FILE' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.PREV_FILE' | translate }}\"\n (click)=\"onNavigateBeforeClick($event)\">\n <mat-icon>navigate_before</mat-icon>\n </button>\n <img class=\"adf-viewer__mimeicon\"\n [alt]=\"'ADF_VIEWER.ARIA.MIME_TYPE_ICON' | translate\"\n [src]=\"mimeTypeIconUrl\"\n data-automation-id=\"adf-file-thumbnail\">\n <div class=\"adf-viewer__display-name\"\n id=\"adf-viewer-display-name\"\n [title]=\"fileName\">\n <span>{{ displayName }}</span>\n </div>\n <button *ngIf=\"allowNavigate && canNavigateNext\"\n data-automation-id=\"adf-toolbar-next-file\"\n mat-icon-button\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.NEXT_FILE' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.NEXT_FILE' | translate }}\"\n (click)=\"onNavigateNextClick($event)\">\n <mat-icon>navigate_next</mat-icon>\n </button>\n </div>\n\n <ng-content select=\"adf-viewer-toolbar-actions\" />\n\n <ng-container *ngIf=\"mnuOpenWith\"\n data-automation-id='adf-toolbar-custom-btn'>\n <button id=\"adf-viewer-openwith\"\n mat-button\n [matMenuTriggerFor]=\"mnuOpenWith\"\n data-automation-id=\"adf-toolbar-open-with\">\n <span>{{ 'ADF_VIEWER.ACTIONS.OPEN_WITH' | translate }}</span>\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #mnuOpenWith=\"matMenu\"\n [overlapTrigger]=\"false\">\n <ng-content select=\"adf-viewer-open-with\" />\n </mat-menu>\n </ng-container>\n\n @if (showToolbarDividers) {\n <adf-toolbar-divider />\n }\n\n <ng-content select=\"adf-viewer-toolbar-custom-actions\" />\n\n <button id=\"adf-viewer-fullscreen\"\n *ngIf=\"allowFullScreen\"\n mat-icon-button\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate }}\"\n data-automation-id=\"adf-toolbar-fullscreen\"\n (click)=\"enterFullScreen()\">\n <mat-icon>fullscreen</mat-icon>\n </button>\n\n <ng-container *ngIf=\"allowRightSidebar && !hideInfoButton\">\n <adf-toolbar-divider />\n\n <button mat-icon-button\n [attr.aria-expanded]=\"showRightSidebar\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.INFO' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.INFO' | translate }}\"\n data-automation-id=\"adf-toolbar-sidebar\"\n [color]=\"showRightSidebar ? 'accent' : null\"\n (click)=\"toggleRightSidebar()\">\n <mat-icon>info_outline</mat-icon>\n </button>\n\n </ng-container>\n\n <ng-container *ngIf=\"mnuMoreActions\">\n <button id=\"adf-viewer-moreactions\"\n mat-icon-button\n [matMenuTriggerFor]=\"mnuMoreActions\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.MORE_ACTIONS' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.MORE_ACTIONS' | translate }}\"\n data-automation-id=\"adf-toolbar-more-actions\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #mnuMoreActions=\"matMenu\"\n [overlapTrigger]=\"false\">\n <ng-content select=\"adf-viewer-more-actions\" />\n </mat-menu>\n </ng-container>\n\n <ng-container *ngIf=\"allowGoBack && closeButtonPosition === CloseButtonPosition.Right\">\n @if (showToolbarDividers) {\n <adf-toolbar-divider />\n }\n <button class=\"adf-viewer-close-button\"\n data-automation-id=\"adf-toolbar-right-back\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n mat-icon-button\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\"\n (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n </ng-container>\n\n </adf-toolbar>\n </ng-container>\n\n <div class=\"adf-viewer-sidebars\">\n\n <ng-container *ngIf=\"allowRightSidebar && showRightSidebar\">\n <div class=\"adf-viewer__sidebar adf-viewer__sidebar__right\"\n id=\"adf-right-sidebar\">\n <ng-container *ngIf=\"sidebarRightTemplate\">\n <ng-container *ngTemplateOutlet=\"sidebarRightTemplate;context:sidebarRightTemplateContext\" />\n </ng-container>\n <ng-content *ngIf=\"!sidebarRightTemplate\"\n select=\"adf-viewer-sidebar\" />\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"allowLeftSidebar && showLeftSidebar\">\n <div class=\"adf-viewer__sidebar adf-viewer__sidebar__left\"\n id=\"adf-left-sidebar\">\n <ng-container *ngIf=\"sidebarLeftTemplate\">\n <ng-container *ngTemplateOutlet=\"sidebarLeftTemplate;context:sidebarLeftTemplateContext\" />\n </ng-container>\n <ng-content *ngIf=\"!sidebarLeftTemplate\"\n select=\"adf-viewer-sidebar\" />\n </div>\n </ng-container>\n\n <adf-viewer-render (close)=\"onClose()\"\n [mimeType]=\"mimeType\"\n [fileName]=\"fileName\"\n [blobFile]=\"blobFile\"\n [readOnly]=\"readOnly\"\n (submitFile)=\"onSubmitFile($event)\"\n [allowedEditActions]=\"allowedEditActions\"\n [urlFile]=\"urlFile\"\n (isSaving)=\"allowNavigate = !$event\"\n [tracks]=\"tracks\"\n [viewerTemplateExtensions]=\"viewerExtensions ?? viewerTemplateExtensions\"\n [nodeId]=\"nodeId\"\n [customError]=\"customError\" />\n\n </div>\n </div>\n</div>\n", styles: [".adf-full-screen,.adf-viewer-inline-container,.adf-viewer-container .adf-viewer-content,.adf-viewer-container .adf-viewer-layout,.adf-viewer-container .adf-viewer-layout-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-viewer{position:absolute;width:100%;height:100%}.adf-viewer .mat-toolbar{color:var(--adf-theme-foreground-text-color-054)}.adf-viewer .mat-toolbar .adf-toolbar-title{width:auto}.adf-viewer-main{width:0}.adf-viewer__mimeicon{vertical-align:middle;height:18px;width:18px;margin-left:4px;margin-right:4px}.adf-viewer-toolbar .mat-toolbar{background-color:var(--adf-theme-background-card-color-087)}.adf-viewer__file-title{text-align:center;flex:1 1 auto;position:absolute;left:50%;transform:translate(-50%);display:flex;flex-direction:row;align-items:center}@media screen and (width <= 1450px){.adf-viewer__file-title{left:30%}}.adf-viewer-inline{display:flex;width:100%;height:100%;position:unset}.adf-viewer-inline .adf-viewer__file-title{position:unset;transform:unset}.adf-viewer__display-name{font-size:var(--theme-subheading-2-font-size);line-height:1.5;vertical-align:middle;color:var(--adf-theme-foreground-text-color);white-space:nowrap}.adf-viewer-container .adf-viewer-layout-content{position:relative;overflow:hidden;z-index:1;background-color:var(--theme-background-color);display:flex;flex-direction:row;flex-wrap:wrap;flex:1}.adf-viewer-container .adf-viewer-layout-content>div{display:flex;flex-flow:row wrap;margin:0 auto;align-items:stretch;height:100%}.adf-viewer-container .adf-viewer-layout{display:flex;flex-direction:row;overflow:hidden auto;position:relative}.adf-viewer-container .adf-viewer-content{flex:1;flex-direction:column;display:flex}.adf-viewer-container .adf-viewer-content>div{height:0}.adf-viewer-overlay-container .adf-viewer-content{position:fixed;top:0;left:0;z-index:1000}.adf-viewer-sidebars{display:flex;flex:1 1 auto}.adf-viewer-sidebars .adf-viewer__sidebar{width:350px;display:block;padding:0;background-color:var(--theme-background-color);box-shadow:0 2px 4px 0 var(--adf-theme-foreground-text-color-027);overflow:auto}.adf-viewer-sidebars .adf-viewer__sidebar__right{border-left:1px solid var(--adf-theme-foreground-text-color-007);order:4}.adf-viewer-sidebars .adf-viewer__sidebar__left{border-right:1px solid var(--adf-theme-foreground-text-color-007);order:1}.adf-viewer-sidebars adf-viewer-render{order:1;flex:1 1 auto;display:flex}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "component", type: ToolbarTitleComponent, selector: "adf-toolbar-title" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: ToolbarDividerComponent, selector: "adf-toolbar-divider" }, { kind: "component", type: ViewerRenderComponent, selector: "adf-viewer-render", inputs: ["urlFile", "blobFile", "allowFullScreen", "allowThumbnails", "thumbnailsTemplate", "mimeType", "fileName", "readOnly", "allowedEditActions", "tracks", "nodeId", "viewerTemplateExtensions", "customError"], outputs: ["extensionChange", "submitFile", "close", "isSaving"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], encapsulation: i0.ViewEncapsulation.None }); }
374
+ }
375
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewerComponent, decorators: [{
376
+ type: Component,
377
+ args: [{ selector: 'adf-viewer', standalone: true, host: { class: 'adf-viewer' }, encapsulation: ViewEncapsulation.None, imports: [
378
+ NgIf,
379
+ A11yModule,
380
+ ToolbarComponent,
381
+ ToolbarTitleComponent,
382
+ MatButtonModule,
383
+ TranslateModule,
384
+ MatIconModule,
385
+ MatMenuModule,
386
+ ToolbarDividerComponent,
387
+ ViewerRenderComponent,
388
+ NgTemplateOutlet,
389
+ ViewerToolbarComponent,
390
+ ViewerSidebarComponent,
391
+ ViewerToolbarActionsComponent,
392
+ ViewerToolbarCustomActionsComponent,
393
+ IconComponent
394
+ ], providers: [ViewUtilService], template: "<div *ngIf=\"showViewer\"\n class=\"adf-viewer-container\"\n [class.adf-viewer-overlay-container]=\"overlayMode\"\n [class.adf-viewer-inline-container]=\"!overlayMode\">\n\n <div class=\"adf-viewer-content\"\n [cdkTrapFocus]=\"overlayMode\"\n cdkTrapFocusAutoCapture>\n <ng-content select=\"adf-viewer-toolbar\" />\n <ng-container *ngIf=\"showToolbar && !toolbar\">\n <adf-toolbar id=\"adf-viewer-toolbar\" class=\"adf-viewer-toolbar\">\n <adf-toolbar-title>\n <ng-container *ngIf=\"allowLeftSidebar\">\n <button mat-icon-button\n [attr.aria-expanded]=\"showLeftSidebar\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.INFO' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.INFO' | translate }}\"\n data-automation-id=\"adf-toolbar-left-sidebar\"\n [color]=\"showLeftSidebar ? 'accent' : null\"\n (click)=\"toggleLeftSidebar()\">\n <mat-icon>info_outline</mat-icon>\n </button>\n </ng-container>\n\n <button *ngIf=\"allowGoBack && closeButtonPosition === CloseButtonPosition.Left\"\n class=\"adf-viewer-close-button\"\n data-automation-id=\"adf-toolbar-left-back\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n mat-icon-button\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\"\n (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n </adf-toolbar-title>\n\n <div class=\"adf-viewer__file-title\">\n <button *ngIf=\"allowNavigate && canNavigateBefore\"\n data-automation-id=\"adf-toolbar-pref-file\"\n mat-icon-button\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.PREV_FILE' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.PREV_FILE' | translate }}\"\n (click)=\"onNavigateBeforeClick($event)\">\n <mat-icon>navigate_before</mat-icon>\n </button>\n <img class=\"adf-viewer__mimeicon\"\n [alt]=\"'ADF_VIEWER.ARIA.MIME_TYPE_ICON' | translate\"\n [src]=\"mimeTypeIconUrl\"\n data-automation-id=\"adf-file-thumbnail\">\n <div class=\"adf-viewer__display-name\"\n id=\"adf-viewer-display-name\"\n [title]=\"fileName\">\n <span>{{ displayName }}</span>\n </div>\n <button *ngIf=\"allowNavigate && canNavigateNext\"\n data-automation-id=\"adf-toolbar-next-file\"\n mat-icon-button\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.NEXT_FILE' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.NEXT_FILE' | translate }}\"\n (click)=\"onNavigateNextClick($event)\">\n <mat-icon>navigate_next</mat-icon>\n </button>\n </div>\n\n <ng-content select=\"adf-viewer-toolbar-actions\" />\n\n <ng-container *ngIf=\"mnuOpenWith\"\n data-automation-id='adf-toolbar-custom-btn'>\n <button id=\"adf-viewer-openwith\"\n mat-button\n [matMenuTriggerFor]=\"mnuOpenWith\"\n data-automation-id=\"adf-toolbar-open-with\">\n <span>{{ 'ADF_VIEWER.ACTIONS.OPEN_WITH' | translate }}</span>\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #mnuOpenWith=\"matMenu\"\n [overlapTrigger]=\"false\">\n <ng-content select=\"adf-viewer-open-with\" />\n </mat-menu>\n </ng-container>\n\n @if (showToolbarDividers) {\n <adf-toolbar-divider />\n }\n\n <ng-content select=\"adf-viewer-toolbar-custom-actions\" />\n\n <button id=\"adf-viewer-fullscreen\"\n *ngIf=\"allowFullScreen\"\n mat-icon-button\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate }}\"\n data-automation-id=\"adf-toolbar-fullscreen\"\n (click)=\"enterFullScreen()\">\n <mat-icon>fullscreen</mat-icon>\n </button>\n\n <ng-container *ngIf=\"allowRightSidebar && !hideInfoButton\">\n <adf-toolbar-divider />\n\n <button mat-icon-button\n [attr.aria-expanded]=\"showRightSidebar\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.INFO' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.INFO' | translate }}\"\n data-automation-id=\"adf-toolbar-sidebar\"\n [color]=\"showRightSidebar ? 'accent' : null\"\n (click)=\"toggleRightSidebar()\">\n <mat-icon>info_outline</mat-icon>\n </button>\n\n </ng-container>\n\n <ng-container *ngIf=\"mnuMoreActions\">\n <button id=\"adf-viewer-moreactions\"\n mat-icon-button\n [matMenuTriggerFor]=\"mnuMoreActions\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.MORE_ACTIONS' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.MORE_ACTIONS' | translate }}\"\n data-automation-id=\"adf-toolbar-more-actions\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #mnuMoreActions=\"matMenu\"\n [overlapTrigger]=\"false\">\n <ng-content select=\"adf-viewer-more-actions\" />\n </mat-menu>\n </ng-container>\n\n <ng-container *ngIf=\"allowGoBack && closeButtonPosition === CloseButtonPosition.Right\">\n @if (showToolbarDividers) {\n <adf-toolbar-divider />\n }\n <button class=\"adf-viewer-close-button\"\n data-automation-id=\"adf-toolbar-right-back\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n mat-icon-button\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\"\n (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n </ng-container>\n\n </adf-toolbar>\n </ng-container>\n\n <div class=\"adf-viewer-sidebars\">\n\n <ng-container *ngIf=\"allowRightSidebar && showRightSidebar\">\n <div class=\"adf-viewer__sidebar adf-viewer__sidebar__right\"\n id=\"adf-right-sidebar\">\n <ng-container *ngIf=\"sidebarRightTemplate\">\n <ng-container *ngTemplateOutlet=\"sidebarRightTemplate;context:sidebarRightTemplateContext\" />\n </ng-container>\n <ng-content *ngIf=\"!sidebarRightTemplate\"\n select=\"adf-viewer-sidebar\" />\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"allowLeftSidebar && showLeftSidebar\">\n <div class=\"adf-viewer__sidebar adf-viewer__sidebar__left\"\n id=\"adf-left-sidebar\">\n <ng-container *ngIf=\"sidebarLeftTemplate\">\n <ng-container *ngTemplateOutlet=\"sidebarLeftTemplate;context:sidebarLeftTemplateContext\" />\n </ng-container>\n <ng-content *ngIf=\"!sidebarLeftTemplate\"\n select=\"adf-viewer-sidebar\" />\n </div>\n </ng-container>\n\n <adf-viewer-render (close)=\"onClose()\"\n [mimeType]=\"mimeType\"\n [fileName]=\"fileName\"\n [blobFile]=\"blobFile\"\n [readOnly]=\"readOnly\"\n (submitFile)=\"onSubmitFile($event)\"\n [allowedEditActions]=\"allowedEditActions\"\n [urlFile]=\"urlFile\"\n (isSaving)=\"allowNavigate = !$event\"\n [tracks]=\"tracks\"\n [viewerTemplateExtensions]=\"viewerExtensions ?? viewerTemplateExtensions\"\n [nodeId]=\"nodeId\"\n [customError]=\"customError\" />\n\n </div>\n </div>\n</div>\n", styles: [".adf-full-screen,.adf-viewer-inline-container,.adf-viewer-container .adf-viewer-content,.adf-viewer-container .adf-viewer-layout,.adf-viewer-container .adf-viewer-layout-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-viewer{position:absolute;width:100%;height:100%}.adf-viewer .mat-toolbar{color:var(--adf-theme-foreground-text-color-054)}.adf-viewer .mat-toolbar .adf-toolbar-title{width:auto}.adf-viewer-main{width:0}.adf-viewer__mimeicon{vertical-align:middle;height:18px;width:18px;margin-left:4px;margin-right:4px}.adf-viewer-toolbar .mat-toolbar{background-color:var(--adf-theme-background-card-color-087)}.adf-viewer__file-title{text-align:center;flex:1 1 auto;position:absolute;left:50%;transform:translate(-50%);display:flex;flex-direction:row;align-items:center}@media screen and (width <= 1450px){.adf-viewer__file-title{left:30%}}.adf-viewer-inline{display:flex;width:100%;height:100%;position:unset}.adf-viewer-inline .adf-viewer__file-title{position:unset;transform:unset}.adf-viewer__display-name{font-size:var(--theme-subheading-2-font-size);line-height:1.5;vertical-align:middle;color:var(--adf-theme-foreground-text-color);white-space:nowrap}.adf-viewer-container .adf-viewer-layout-content{position:relative;overflow:hidden;z-index:1;background-color:var(--theme-background-color);display:flex;flex-direction:row;flex-wrap:wrap;flex:1}.adf-viewer-container .adf-viewer-layout-content>div{display:flex;flex-flow:row wrap;margin:0 auto;align-items:stretch;height:100%}.adf-viewer-container .adf-viewer-layout{display:flex;flex-direction:row;overflow:hidden auto;position:relative}.adf-viewer-container .adf-viewer-content{flex:1;flex-direction:column;display:flex}.adf-viewer-container .adf-viewer-content>div{height:0}.adf-viewer-overlay-container .adf-viewer-content{position:fixed;top:0;left:0;z-index:1000}.adf-viewer-sidebars{display:flex;flex:1 1 auto}.adf-viewer-sidebars .adf-viewer__sidebar{width:350px;display:block;padding:0;background-color:var(--theme-background-color);box-shadow:0 2px 4px 0 var(--adf-theme-foreground-text-color-027);overflow:auto}.adf-viewer-sidebars .adf-viewer__sidebar__right{border-left:1px solid var(--adf-theme-foreground-text-color-007);order:4}.adf-viewer-sidebars .adf-viewer__sidebar__left{border-right:1px solid var(--adf-theme-foreground-text-color-007);order:1}.adf-viewer-sidebars adf-viewer-render{order:1;flex:1 1 auto;display:flex}\n"] }]
395
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.MatDialog }, { type: i2.ViewUtilService }, { type: i3.AppConfigService }], propDecorators: { isInline: [{
396
+ type: HostBinding,
397
+ args: ['class.adf-viewer-inline']
398
+ }], toolbar: [{
399
+ type: ContentChild,
400
+ args: [ViewerToolbarComponent]
401
+ }], sidebar: [{
402
+ type: ContentChild,
403
+ args: [ViewerSidebarComponent]
404
+ }], mnuOpenWith: [{
405
+ type: ContentChild,
406
+ args: [ViewerOpenWithComponent]
407
+ }], mnuMoreActions: [{
408
+ type: ContentChild,
409
+ args: [ViewerMoreActionsComponent]
410
+ }], viewerTemplateExtensions: [{
411
+ type: ContentChild,
412
+ args: ['viewerExtensions', { static: false }]
413
+ }], urlFile: [{
414
+ type: Input
415
+ }], blobFile: [{
416
+ type: Input
417
+ }], showViewer: [{
418
+ type: Input
419
+ }], allowGoBack: [{
420
+ type: Input
421
+ }], allowFullScreen: [{
422
+ type: Input
423
+ }], showToolbar: [{
424
+ type: Input
425
+ }], overlayMode: [{
426
+ type: Input
427
+ }], allowNavigate: [{
428
+ type: Input
429
+ }], canNavigateBefore: [{
430
+ type: Input
431
+ }], canNavigateNext: [{
432
+ type: Input
433
+ }], allowLeftSidebar: [{
434
+ type: Input
435
+ }], allowRightSidebar: [{
436
+ type: Input
437
+ }], showRightSidebar: [{
438
+ type: Input
439
+ }], showLeftSidebar: [{
440
+ type: Input
441
+ }], sidebarRightTemplate: [{
442
+ type: Input
443
+ }], sidebarLeftTemplate: [{
444
+ type: Input
445
+ }], readOnly: [{
446
+ type: Input
447
+ }], allowedEditActions: [{
448
+ type: Input
449
+ }], tracks: [{
450
+ type: Input
451
+ }], mimeType: [{
452
+ type: Input
453
+ }], sidebarRightTemplateContext: [{
454
+ type: Input
455
+ }], sidebarLeftTemplateContext: [{
456
+ type: Input
457
+ }], closeButtonPosition: [{
458
+ type: Input
459
+ }], hideInfoButton: [{
460
+ type: Input
461
+ }], viewerExtensions: [{
462
+ type: Input
463
+ }], nodeId: [{
464
+ type: Input
465
+ }], nodeMimeType: [{
466
+ type: Input
467
+ }], customError: [{
468
+ type: Input
469
+ }], showToolbarDividers: [{
470
+ type: Input
471
+ }], downloadFile: [{
472
+ type: Output
473
+ }], navigateBefore: [{
474
+ type: Output
475
+ }], navigateNext: [{
476
+ type: Output
477
+ }], showViewerChange: [{
478
+ type: Output
479
+ }], submitFile: [{
480
+ type: Output
481
+ }], fileName: [{
482
+ type: Input
483
+ }], handleKeyboardEvent: [{
484
+ type: HostListener,
485
+ args: ['document:keyup', ['$event']]
486
+ }] } });
487
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvdmlld2VyL2NvbXBvbmVudHMvdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvdmlld2VyL2NvbXBvbmVudHMvdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFFTixXQUFXLEVBQ1gsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFP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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBza2lwV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbmZpZyc7XG5pbXBvcnQgeyBUb29sYmFyQ29tcG9uZW50LCBUb29sYmFyRGl2aWRlckNvbXBvbmVudCwgVG9vbGJhclRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdG9vbGJhcic7XG5pbXBvcnQgeyBEb3dubG9hZFByb21wdEFjdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMvZG93bmxvYWQtcHJvbXB0LmFjdGlvbnMnO1xuaW1wb3J0IHsgQ2xvc2VCdXR0b25Qb3NpdGlvbiwgVHJhY2sgfSBmcm9tICcuLi9tb2RlbHMvdmlld2VyLm1vZGVsJztcbmltcG9ydCB7IFZpZXdVdGlsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3ZpZXctdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IERvd25sb2FkUHJvbXB0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kb3dubG9hZC1wcm9tcHQtZGlhbG9nL2Rvd25sb2FkLXByb21wdC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFZpZXdlck1vcmVBY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi92aWV3ZXItbW9yZS1hY3Rpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWaWV3ZXJPcGVuV2l0aENvbXBvbmVudCB9IGZyb20gJy4vdmlld2VyLW9wZW4td2l0aC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmlld2VyUmVuZGVyQ29tcG9uZW50IH0gZnJvbSAnLi92aWV3ZXItcmVuZGVyL3ZpZXdlci1yZW5kZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFZpZXdlclNpZGViYXJDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdlci1zaWRlYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWaWV3ZXJUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi92aWV3ZXItdG9vbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmlld2VyVG9vbGJhckFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdlci10b29sYmFyLWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IFZpZXdlclRvb2xiYXJDdXN0b21BY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi92aWV3ZXItdG9vbGJhci1jdXN0b20tYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgVGh1bWJuYWlsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmNvbnN0IERFRkFVTFRfTk9OX1BSRVZJRVdfQ09ORklHID0ge1xuICAgIGVuYWJsZURvd25sb2FkUHJvbXB0OiBmYWxzZSxcbiAgICBlbmFibGVEb3dubG9hZFByb21wdFJlbWluZGVyOiBmYWxzZSxcbiAgICBkb3dubG9hZFByb21wdERlbGF5OiA1MCxcbiAgICBkb3dubG9hZFByb21wdFJlbWluZGVyRGVsYXk6IDMwXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi12aWV3ZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3ZpZXdlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdmlld2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi12aWV3ZXInIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIEExMXlNb2R1bGUsXG4gICAgICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgICAgIFRvb2xiYXJEaXZpZGVyQ29tcG9uZW50LFxuICAgICAgICBWaWV3ZXJSZW5kZXJDb21wb25lbnQsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIFZpZXdlclRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIFZpZXdlclNpZGViYXJDb21wb25lbnQsXG4gICAgICAgIFZpZXdlclRvb2xiYXJBY3Rpb25zQ29tcG9uZW50LFxuICAgICAgICBWaWV3ZXJUb29sYmFyQ3VzdG9tQWN0aW9uc0NvbXBvbmVudCxcbiAgICAgICAgSWNvbkNvbXBvbmVudFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbVmlld1V0aWxTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBWaWV3ZXJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBwcml2YXRlIHRodW1ibmFpbFNlcnZpY2UgPSBpbmplY3QoVGh1bWJuYWlsU2VydmljZSk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFkZi12aWV3ZXItaW5saW5lJylcbiAgICBnZXQgaXNJbmxpbmUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5vdmVybGF5TW9kZTtcbiAgICB9XG5cbiAgICBAQ29udGVudENoaWxkKFZpZXdlclRvb2xiYXJDb21wb25lbnQpXG4gICAgdG9vbGJhcjogVmlld2VyVG9vbGJhckNvbXBvbmVudDtcblxuICAgIEBDb250ZW50Q2hpbGQoVmlld2VyU2lkZWJhckNvbXBvbmVudClcbiAgICBzaWRlYmFyOiBWaWV3ZXJTaWRlYmFyQ29tcG9uZW50O1xuXG4gICAgQENvbnRlbnRDaGlsZChWaWV3ZXJPcGVuV2l0aENvbXBvbmVudClcbiAgICBtbnVPcGVuV2l0aDogVmlld2VyT3BlbldpdGhDb21wb25lbnQ7XG5cbiAgICBAQ29udGVudENoaWxkKFZpZXdlck1vcmVBY3Rpb25zQ29tcG9uZW50KVxuICAgIG1udU1vcmVBY3Rpb25zOiBWaWV3ZXJNb3JlQWN0aW9uc0NvbXBvbmVudDtcblxuICAgIEBDb250ZW50Q2hpbGQoJ3ZpZXdlckV4dGVuc2lvbnMnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICB2aWV3ZXJUZW1wbGF0ZUV4dGVuc2lvbnM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBnZXQgQ2xvc2VCdXR0b25Qb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENsb3NlQnV0dG9uUG9zaXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgeW91IHdhbnQgdG8gbG9hZCBhbiBleHRlcm5hbCBmaWxlIHRoYXQgZG9lcyBub3QgY29tZSBmcm9tIEFDUyB5b3VcbiAgICAgKiBjYW4gdXNlIHRoaXMgVVJMIHRvIHNwZWNpZnkgd2hlcmUgdG8gbG9hZCB0aGUgZmlsZSBmcm9tLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXJsRmlsZSA9ICcnO1xuXG4gICAgLyoqIExvYWRzIGEgQmxvYiBGaWxlICovXG4gICAgQElucHV0KClcbiAgICBibG9iRmlsZTogQmxvYjtcblxuICAgIC8qKiBIaWRlIG9yIHNob3cgdGhlIHZpZXdlciAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1ZpZXdlciA9IHRydWU7XG5cbiAgICAvKiogQWxsb3dzIGBiYWNrYCBuYXZpZ2F0aW9uICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd0dvQmFjayA9IHRydWU7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgJ0Z1bGwgU2NyZWVuJyBmZWF0dXJlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dGdWxsU2NyZWVuID0gdHJ1ZTtcblxuICAgIC8qKiBIaWRlIG9yIHNob3cgdGhlIHRvb2xiYXIgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dUb29sYmFyID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIElmIGB0cnVlYCB0aGVuIHNob3cgdGhlIFZpZXdlciBhcyBhIGZ1bGwgcGFnZSBvdmVyIHRoZSBjdXJyZW50IGNvbnRlbnQuXG4gICAgICogT3RoZXJ3aXNlLCBmaXQgaW5zaWRlIHRoZSBwYXJlbnQgZGl2LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3ZlcmxheU1vZGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgYmVmb3JlL25leHQgbmF2aWdhdGlvbi4gWW91IGNhbiB1c2UgdGhlIGFycm93IGJ1dHRvbnMgdG8gbmF2aWdhdGVcbiAgICAgKiBiZXR3ZWVuIGRvY3VtZW50cyBpbiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TmF2aWdhdGUgPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBcImJlZm9yZVwiIChcIjxcIikgYnV0dG9uLiBSZXF1aXJlcyBgYWxsb3dOYXZpZ2F0ZWAgdG8gYmUgZW5hYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNhbk5hdmlnYXRlQmVmb3JlID0gdHJ1ZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBuZXh0IChcIj5cIikgYnV0dG9uLiBSZXF1aXJlcyBgYWxsb3dOYXZpZ2F0ZWAgdG8gYmUgZW5hYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNhbk5hdmlnYXRlTmV4dCA9IHRydWU7XG5cbiAgICAvKiogQWxsb3cgdGhlIGxlZnQgdGhlIHNpZGViYXIuICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd0xlZnRTaWRlYmFyID0gZmFsc2U7XG5cbiAgICAvKiogQWxsb3cgdGhlIHJpZ2h0IHNpZGViYXIuICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd1JpZ2h0U2lkZWJhciA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgcmlnaHQgc2lkZWJhciB2aXNpYmlsaXR5LiBSZXF1aXJlcyBgYWxsb3dSaWdodFNpZGViYXJgIHRvIGJlIHNldCB0byBgdHJ1ZWAuICovXG4gICAgQElucHV0KClcbiAgICBzaG93UmlnaHRTaWRlYmFyID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyBsZWZ0IHNpZGViYXIgdmlzaWJpbGl0eS4gUmVxdWlyZXMgYGFsbG93TGVmdFNpZGViYXJgIHRvIGJlIHNldCB0byBgdHJ1ZWAuICovXG4gICAgQElucHV0KClcbiAgICBzaG93TGVmdFNpZGViYXIgPSBmYWxzZTtcblxuICAgIC8qKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSByaWdodCBzaWRlYmFyLiBUaGUgdGVtcGxhdGUgY29udGV4dCBjb250YWlucyB0aGUgbG9hZGVkIG5vZGUgZGF0YS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNpZGViYXJSaWdodFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcblxuICAgIC8qKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSBsZWZ0IHNpZGViYXIuIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGNvbnRhaW5zIHRoZSBsb2FkZWQgbm9kZSBkYXRhLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2lkZWJhckxlZnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKiogRW5hYmxlIHdoZW4gd2hlcmUgaXMgcG9zc2libGUgdGhlIGVkaXRpbmcgZnVuY3Rpb25hbGl0aWVzICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZE9ubHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hpY2ggYWN0aW9ucyBhcmUgZW5hYmxlZCBpbiB0aGUgdmlld2VyLlxuICAgICAqIEV4YW1wbGU6XG4gICAgICogeyByb3RhdGU6IHRydWUsIGNyb3A6IGZhbHNlIH0gd2lsbCBlbmFibGUgcm90YXRpb24gYnV0IGRpc2FibGUgY3JvcHBpbmcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd2VkRWRpdEFjdGlvbnM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge1xuICAgICAgICByb3RhdGU6IHRydWUsXG4gICAgICAgIGNyb3A6IHRydWVcbiAgICB9O1xuXG4gICAgLyoqIG1lZGlhIHN1YnRpdGxlcyBmb3IgdGhlIG1lZGlhIHBsYXllciovXG4gICAgQElucHV0KClcbiAgICB0cmFja3M6IFRyYWNrW10gPSBbXTtcblxuICAgIC8qKiBPdmVybG9hZCBtaW1lVHlwZSovXG4gICAgQElucHV0KClcbiAgICBtaW1lVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29udGV4dCBvYmplY3QgYXZhaWxhYmxlIGZvciBiaW5kaW5nIGJ5IHRoZSBsb2NhbCBzaWRlYmFyUmlnaHRUZW1wbGF0ZSB3aXRoIGxldCBkZWNsYXJhdGlvbnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaWRlYmFyUmlnaHRUZW1wbGF0ZUNvbnRleHQ6IFQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ29udGV4dCBvYmplY3QgYXZhaWxhYmxlIGZvciBiaW5kaW5nIGJ5IHRoZSBsb2NhbCBzaWRlYmFyTGVmdFRlbXBsYXRlIHdpdGggbGV0IGRlY2xhcmF0aW9ucy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNpZGViYXJMZWZ0VGVtcGxhdGVDb250ZXh0OiBUID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgY2xvc2UgYnV0dG9uIHBvc2l0aW9uIFJpZ2h0L0xlZnQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjbG9zZUJ1dHRvblBvc2l0aW9uID0gQ2xvc2VCdXR0b25Qb3NpdGlvbi5MZWZ0O1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlICdJbmZvIEJ1dHRvbicgKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVJbmZvQnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKiogVGVtcGxhdGUgY29udGFpbmluZyBWaWV3ZXJFeHRlbnNpb25EaXJlY3RpdmUgaW5zdGFuY2VzIHByb3ZpZGluZyBkaWZmZXJlbnQgdmlld2VyIGV4dGVuc2lvbnMgYmFzZWQgb24gc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmlld2VyRXh0ZW5zaW9uczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBJZGVudGlmaWVyIG9mIGEgbm9kZSB0aGF0IGlzIG9wZW5lZCBieSB0aGUgdmlld2VyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9kZUlkOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgLyoqIE9yaWdpbmFsIG5vZGUgbWltZSB0eXBlLCBzaG91bGQgYmUgcHJvdmlkZWQgd2hlbiByZW5kaXRpb25hIG1pbWUgdHlwZSBpcyBkaWZmZXJlbnQuICovXG4gICAgQElucHV0KClcbiAgICBub2RlTWltZVR5cGU6IHN0cmluZyA9IHVuZGVmaW5lZDtcblxuICAgIC8qKiBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHZpZXdlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGN1c3RvbUVycm9yOiBzdHJpbmcgPSB1bmRlZmluZWQ7XG5cbiAgICAvKiogVG9nZ2xlcyBkaXZpZGVycyB2aXNpYmlsaXR5ICovXG4gICAgQElucHV0KClcbiAgICBzaG93VG9vbGJhckRpdmlkZXJzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZSBkaWFsb2cgYm94IHRvIGFsbG93IHVzZXIgdG8gZG93bmxvYWQgdGhlIHByZXZpZXdlZCBmaWxlLCBpbiBjYXNlIHRoZSBwcmV2aWV3IGlzIG5vdCByZXNwb25kaW5nIGZvciBhIHNldCBwZXJpb2Qgb2YgdGltZS5cbiAgICAgKi9cbiAgICBlbmFibGVEb3dubG9hZFByb21wdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlIHJlbWluZGVyIGRpYWxvZ3MgdG8gcHJvbXB0IHVzZXIgdG8gZG93bmxvYWQgdGhlIGZpbGUsIGluIGNhc2UgdGhlIHByZXZpZXcgaXMgbm90IHJlc3BvbmRpbmcgZm9yIGEgc2V0IHBlcmlvZCBvZiB0aW1lLlxuICAgICAqL1xuICAgIGVuYWJsZURvd25sb2FkUHJvbXB0UmVtaW5kZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgdGltZSBpbiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB0aGUgZmlyc3QgcHJvbXB0IHRvIHVzZXIgdG8gZG93bmxvYWQgdGhlIGZpbGVcbiAgICAgKi9cbiAgICBkb3dubG9hZFByb21wdERlbGF5OiBudW1iZXIgPSA1MDtcblxuICAgIC8qKlxuICAgICAqIFRpbWUgaW4gc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBnaXZpbmcgdGhlIHNlY29uZCBhbmQgY29uc2VxdWVudCByZW1pbmRlcnMgdG8gdGhlIHVzZXIgdG8gZG93bmxvYWQgdGhlIGZpbGUuXG4gICAgICovXG4gICAgZG93bmxvYWRQcm9tcHRSZW1pbmRlckRlbGF5OiBudW1iZXIgPSAxNTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBvbiBkb3dubG9hZCBidXR0b24gb24gZG93bmxvYWQgcHJvbXB0IGRpYWxvZy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBkb3dubG9hZEZpbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgY2xpY2tzICdOYXZpZ2F0ZSBCZWZvcmUnIChcIjxcIikgYnV0dG9uLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG5hdmlnYXRlQmVmb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgJ05hdmlnYXRlIE5leHQnIChcIj5cIikgYnV0dG9uLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG5hdmlnYXRlTmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSB2aWV3ZXIgY2xvc2UgKi9cbiAgICBAT3V0cHV0KClcbiAgICBzaG93Vmlld2VyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgaW1nIGlzIHN1Ym1pdHRlZCBpbiB0aGUgaW1nIHZpZXdlci4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzdWJtaXRGaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxCbG9iPigpO1xuXG4gICAgcHJpdmF0ZSBjbG9zZVZpZXdlciA9IHRydWU7XG4gICAgcHJpdmF0ZSBrZXlEb3duJCA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKTtcbiAgICBwcml2YXRlIGlzRGlhbG9nVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2ZpbGVOYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZmlsZU5hbWVXaXRob3V0RXh0ZW5zaW9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuXG4gICAgcHVibGljIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIGRvd25sb2FkUHJvbXB0VGltZXI6IG51bWJlcjtcbiAgICBwdWJsaWMgZG93bmxvYWRQcm9tcHRSZW1pbmRlclRpbWVyOiBudW1iZXI7XG4gICAgcHVibGljIG1pbWVUeXBlSWNvblVybDogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIE92ZXJyaWRlIENvbnRlbnQgZmlsZW5hbWUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZmlsZU5hbWUoZmlsZU5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9maWxlTmFtZSA9IGZpbGVOYW1lO1xuICAgICAgICB0aGlzLl9maWxlRXh0ZW5zaW9uID0gdGhpcy52aWV3VXRpbHNTZXJ2aWNlLmdldEZpbGVFeHRlbnNpb24odGhpcy5maWxlTmFtZSk7XG4gICAgICAgIHRoaXMuX2ZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbiA9IHRoaXMuZmlsZU5hbWU/LnJlcGxhY2UobmV3IFJlZ0V4cChgJHt0aGlzLmZpbGVFeHRlbnNpb259JGApLCAnJykgfHwgJyc7XG4gICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSB0aGlzLmdldERpc3BsYXlGaWxlTmFtZSgpO1xuICAgIH1cblxuICAgIGdldCBmaWxlTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZU5hbWU7XG4gICAgfVxuXG4gICAgZ2V0IGZpbGVFeHRlbnNpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVFeHRlbnNpb247XG4gICAgfVxuXG4gICAgZ2V0IGZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZU5hbWVXaXRob3V0RXh0ZW5zaW9uO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIHByaXZhdGUgdmlld1V0aWxzU2VydmljZTogVmlld1V0aWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2VcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IHsgYmxvYkZpbGUsIHVybEZpbGUsIG1pbWVUeXBlLCBub2RlTWltZVR5cGUgfSA9IGNoYW5nZXM7XG5cbiAgICAgICAgaWYgKGJsb2JGaWxlPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubWltZVR5cGUgPSBibG9iRmlsZS5jdXJyZW50VmFsdWUudHlwZTtcbiAgICAgICAgICAgIHRoaXMubWltZVR5cGVJY29uVXJsID0gdGhpcy50aHVtYm5haWxTZXJ2aWNlLmdldE1pbWVUeXBlSWNvbihibG9iRmlsZS5jdXJyZW50VmFsdWUudHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXJsRmlsZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVOYW1lIHx8PSB0aGlzLnZpZXdVdGlsc1NlcnZpY2UuZ2V0RmlsZW5hbWVGcm9tVXJsKHVybEZpbGUuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW1lVHlwZT8uY3VycmVudFZhbHVlICYmICFub2RlTWltZVR5cGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5taW1lVHlwZUljb25VcmwgPSB0aGlzLnRodW1ibmFpbFNlcnZpY2UuZ2V0TWltZVR5cGVJY29uKG1pbWVUeXBlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZU1pbWVUeXBlPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubWltZVR5cGVJY29uVXJsID0gdGhpcy50aHVtYm5haWxTZXJ2aWNlLmdldE1pbWVUeXBlSWNvbihub2RlTWltZVR5cGUuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlT3ZlcmxheU1hbmFnZXIoKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmVBbmRJbml0RG93bmxvYWRQcm9tcHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlT3ZlcmxheU1hbmFnZXIoKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nLmFmdGVyT3BlbmVkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBza2lwV2hpbGUoKCkgPT4gIXRoaXMub3ZlcmxheU1vZGUpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+ICh0aGlzLmNsb3NlVmlld2VyID0gZmFsc2UpKTtcblxuICAgICAgICB0aGlzLmRpYWxvZy5hZnRlckFsbENsb3NlZFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2tpcFdoaWxlKCgpID0+ICF0aGlzLm92ZXJsYXlNb2RlKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiAodGhpcy5jbG9zZVZpZXdlciA9IHRydWUpKTtcblxuICAgICAgICB0aGlzLmtleURvd24kXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBza2lwV2hpbGUoKCkgPT4gIXRoaXMub3ZlcmxheU1vZGUpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZTogS2V5Ym9hcmRFdmVudCkgPT4gZS5rZXlDb2RlID09PSAyNyksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uTmF2aWdhdGVCZWZvcmVDbGljayhldmVudDogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5yZXNldExvYWRpbmdTcGlubmVyKCk7XG4gICAgICAgIHRoaXMubmF2aWdhdGVCZWZvcmUubmV4dChldmVudCk7XG4gICAgfVxuXG4gICAgb25OYXZpZ2F0ZU5leHRDbGljayhldmVudDogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5yZXNldExvYWRpbmdTcGlubmVyKCk7XG4gICAgICAgIHRoaXMubmF2aWdhdGVOZXh0Lm5leHQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNsb3NlIHRoZSB2aWV3ZXJcbiAgICAgKi9cbiAgICBvbkNsb3NlKCkge1xuICAgICAgICB0aGlzLnNob3dWaWV3ZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Vmlld2VyQ2hhbmdlLmVtaXQodGhpcy5zaG93Vmlld2VyKTtcbiAgICB9XG5cbiAgICB0b2dnbGVSaWdodFNpZGViYXIoKSB7XG4gICAgICAgIHRoaXMuc2hvd1JpZ2h0U2lkZWJhciA9ICF0aGlzLnNob3dSaWdodFNpZGViYXI7XG4gICAgfVxuXG4gICAgdG9nZ2xlTGVmdFNpZGViYXIoKSB7XG4gICAgICAgIHRoaXMuc2hvd0xlZnRTaWRlYmFyID0gIXRoaXMuc2hvd0xlZnRTaWRlYmFyO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgJiYgdGhpcy5jYW5OYXZpZ2F0ZUJlZm9yZSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0ZUJlZm9yZUNsaWNrKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JyAmJiB0aGlzLmNhbk5hdmlnYXRlTmV4dCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0ZU5leHRDbGljayhldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0tleUYnICYmIGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmVudGVyRnVsbFNjcmVlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgZnVsbCBzY3JlZW4gbW9kZSB3aXRoIGEgbWFpbiBjb250ZW50IGFyZWEgZGlzcGxheWVkLlxuICAgICAqL1xuICAgIGVudGVyRnVsbFNjcmVlbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFkZi12aWV3ZXJfX2Z1bGxzY3JlZW4tY29udGFpbmVyJyk7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TdWJtaXRGaWxlKG5ld0ltYWdlQmxvYjogQmxvYikge1xuICAgICAgICB0aGlzLnN1Ym1pdEZpbGUuZW1pdChuZXdJbWFnZUJsb2IpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNsZWFyRG93bmxvYWRQcm9tcHRUaW1lb3V0cygpO1xuICAgIH1cblxuICAgIGdldERpc3BsYXlGaWxlTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmdWxsTmFtZSA9ICh0aGlzLmZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbiB8fCAnJykgKyAodGhpcy5maWxlRXh0ZW5zaW9uIHx8ICcnKTtcbiAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gNTA7XG5cbiAgICAgICAgaWYgKGZ1bGxOYW1lLmxlbmd0aCA8PSBtYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmdWxsTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFtb3VudE9mVHJ1bmNhdGVEb3RzID0gNTtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlU3BhY2UgPSBtYXhMZW5ndGggLSBhbW91bnRPZlRydW5jYXRlRG90cztcbiAgICAgICAgY29uc3QgZW5kTGVuZ3RoID0gODtcbiAgICAgICAgY29uc3Qgc3RhcnRMZW5ndGggPSBhdmFpbGFibGVTcGFjZSAtIGVuZExlbmd0aDtcblxuICAgICAgICBjb25zdCBzdGFydCA9IGZ1bGxOYW1lLnN1YnN0cmluZygwLCBzdGFydExlbmd0aCk7XG4gICAgICAgIGNvbnN0IGVuZCA9IGZ1bGxOYW1lLnN1YnN0cmluZyhmdWxsTmFtZS5sZW5ndGggLSBlbmRMZW5ndGgpO1xuICAgICAgICByZXR1cm4gc3RhcnQgKyAnLi4uLi4nICsgZW5kO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlndXJlQW5kSW5pdERvd25sb2FkUHJvbXB0KCkge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZURvd25sb2FkUHJvbXB0UHJvcGVydGllcygpO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVEb3dubG9hZFByb21wdCkge1xuICAgICAgICAgICAgdGhpcy5pbml0RG93bmxvYWRQcm9tcHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlndXJlRG93bmxvYWRQcm9tcHRQcm9wZXJ0aWVzKCkge1xuICAgICAgICBjb25zdCBub25SZXNwb25zaXZlUHJldmlld0NvbmZpZyA9IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXQoJ3ZpZXdlcicsIERFRkFVTFRfTk9OX1BSRVZJRVdfQ09ORklHKTtcblxuICAgICAgICB0aGlzLmVuYWJsZURvd25sb2FkUHJvbXB0ID0gbm9uUmVzcG9uc2l2ZVByZXZpZXdDb25maWcuZW5hYmxlRG93bmxvYWRQcm9tcHQ7XG4gICAgICAgIHRoaXMuZW5hYmxlRG93bmxvYWRQcm9tcHRSZW1pbmRlciA9IG5vblJlc3BvbnNpdmVQcmV2aWV3Q29uZmlnLmVuYWJsZURvd25sb2FkUHJvbXB0UmVtaW5kZXI7XG4gICAgICAgIHRoaXMuZG93bmxvYWRQcm9tcHREZWxheSA9IG5vblJlc3BvbnNpdmVQcmV2aWV3Q29uZmlnLmRvd25sb2FkUHJvbXB0RGVsYXk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRQcm9tcHRSZW1pbmRlckRlbGF5ID0gbm9uUmVzcG9uc2l2ZVByZXZpZXdDb25maWcuZG93bmxvYWRQcm9tcHRSZW1pbmRlckRlbGF5O1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERvd25sb2FkUHJvbXB0KCkge1xuICAgICAgICB0aGlzLmRvd25sb2FkUHJvbXB0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dPckNsZWFyRG93bmxvYWRQcm9tcHQoKTtcbiAgICAgICAgfSwgdGhpcy5kb3dubG9hZFByb21wdERlbGF5ICogMTAwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93T3JDbGVhckRvd25sb2FkUHJvbXB0KCkge1xuICAgICAgICBpZiAoIXRoaXMudXJsRmlsZSAmJiAhdGhpcy5ibG9iRmlsZSkge1xuICAgICAgICAgICAgdGhpcy5zaG93RG93bmxvYWRQcm9tcHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJEb3dubG9hZFByb21wdFRpbWVvdXRzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJEb3dubG9hZFByb21wdFRpbWVvdXRzKCkge1xuICAgICAgICBpZiAodGhpcy5kb3dubG9hZFByb21wdFRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kb3dubG9hZFByb21wdFRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kb3dubG9hZFByb21wdFJlbWluZGVyVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRvd25sb2FkUHJvbXB0UmVtaW5kZXJUaW1lcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dEb3dubG9hZFByb21wdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGlhbG9nVmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5pc0RpYWxvZ1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dcbiAgICAgICAgICAgICAgICAub3BlbihEb3dubG9hZFByb21wdERpYWxvZ0NvbXBvbmVudCwgeyBkaXNhYmxlQ2xvc2U6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBEb3dubG9hZFByb21wdEFjdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxvZ1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gRG93bmxvYWRQcm9tcHRBY3Rpb25zLkRPV05MT0FEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkRmlsZS5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IERvd25sb2FkUHJvbXB0QWN0aW9ucy5XQUlUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbmFibGVEb3dubG9hZFByb21wdFJlbWluZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckRvd25sb2FkUHJvbXB0VGltZW91dHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkUHJvbXB0UmVtaW5kZXJUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93T3JDbGVhckRvd25sb2FkUHJvbXB0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5kb3dubG9hZFByb21wdFJlbWluZGVyRGVsYXkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldExvYWRpbmdTcGlubmVyKCkge1xuICAgICAgICB0aGlzLnVybEZpbGUgPSAnJztcbiAgICAgICAgdGhpcy5ibG9iRmlsZSA9IG51bGw7XG4gICAgfVxufVxuIiwiPGRpdiAqbmdJZj1cInNob3dWaWV3ZXJcIlxuICAgICBjbGFzcz1cImFkZi12aWV3ZXItY29udGFpbmVyXCJcbiAgICAgW2NsYXNzLmFkZi12aWV3ZXItb3ZlcmxheS1jb250YWluZXJdPVwib3ZlcmxheU1vZGVcIlxuICAgICBbY2xhc3MuYWRmLXZpZXdlci1pbmxpbmUtY29udGFpbmVyXT1cIiFvdmVybGF5TW9kZVwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImFkZi12aWV3ZXItY29udGVudFwiXG4gICAgICAgICBbY2RrVHJhcEZvY3VzXT1cIm92ZXJsYXlNb2RlXCJcbiAgICAgICAgIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhZGYtdmlld2VyLXRvb2xiYXJcIiAvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1Rvb2xiYXIgJiYgIXRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxhZGYtdG9vbGJhciBpZD1cImFkZi12aWV3ZXItdG9vbGJhclwiIGNsYXNzPVwiYWRmLXZpZXdlci10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgPGFkZi10b29sYmFyLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWxsb3dMZWZ0U2lkZWJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJzaG93TGVmdFNpZGViYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfVklFV0VSLkFDVElPTlMuSU5GTycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBREZfVklFV0VSLkFDVElPTlMuSU5GTycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtdG9vbGJhci1sZWZ0LXNpZGViYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwic2hvd0xlZnRTaWRlYmFyID8gJ2FjY2VudCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUxlZnRTaWRlYmFyKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+aW5mb19vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWxsb3dHb0JhY2sgJiYgY2xvc2VCdXR0b25Qb3NpdGlvbiA9PT0gQ2xvc2VCdXR0b25Qb3NpdGlvbi5MZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi12aWV3ZXItY2xvc2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtdG9vbGJhci1sZWZ0LWJhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERl9WSUVXRVIuQUNUSU9OUy5DTE9TRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FERl9WSUVXRVIuQUNUSU9OUy5DTE9TRScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvYWRmLXRvb2xiYXItdGl0bGU+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXZpZXdlcl9fZmlsZS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWxsb3dOYXZpZ2F0ZSAmJiBjYW5OYXZpZ2F0ZUJlZm9yZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXRvb2xiYXItcHJlZi1maWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfVklFV0VSLkFDVElPTlMuUFJFVl9GSUxFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQURGX1ZJRVdFUi5BQ1RJT05TLlBSRVZfRklMRScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk5hdmlnYXRlQmVmb3JlQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm5hdmlnYXRlX2JlZm9yZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYWRmLXZpZXdlcl9fbWltZWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwiJ0FERl9WSUVXRVIuQVJJQS5NSU1FX1RZUEVfSUNPTicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwibWltZVR5cGVJY29uVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtZmlsZS10aHVtYm5haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi12aWV3ZXJfX2Rpc3BsYXktbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZGYtdmlld2VyLWRpc3BsYXktbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImZpbGVOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkaXNwbGF5TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhbGxvd05hdmlnYXRlICYmIGNhbk5hdmlnYXRlTmV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXRvb2xiYXItbmV4dC1maWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfVklFV0VSLkFDVElPTlMuTkVYVF9GSUxFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQURGX1ZJRVdFUi5BQ1RJT05TLk5FWFRfRklMRScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk5hdmlnYXRlTmV4dENsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5uYXZpZ2F0ZV9uZXh0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhZGYtdmlld2VyLXRvb2xiYXItYWN0aW9uc1wiIC8+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW51T3BlbldpdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPSdhZGYtdG9vbGJhci1jdXN0b20tYnRuJz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImFkZi12aWV3ZXItb3BlbndpdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibW51T3BlbldpdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi10b29sYmFyLW9wZW4td2l0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0FERl9WSUVXRVIuQUNUSU9OUy5PUEVOX1dJVEgnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21udU9wZW5XaXRoPVwibWF0TWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3ZlcmxhcFRyaWdnZXJdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFkZi12aWV3ZXItb3Blbi13aXRoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Rvb2xiYXJEaXZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICA8YWRmLXRvb2xiYXItZGl2aWRlciAvPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFkZi12aWV3ZXItdG9vbGJhci1jdXN0b20tYWN0aW9uc1wiIC8+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiYWRmLXZpZXdlci1mdWxsc2NyZWVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWxsb3dGdWxsU2NyZWVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX1ZJRVdFUi5BQ1RJT05TLkZVTExTQ1JFRU4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FERl9WSUVXRVIuQUNUSU9OUy5GVUxMU0NSRUVOJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtdG9vbGJhci1mdWxsc2NyZWVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbnRlckZ1bGxTY3JlZW4oKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZnVsbHNjcmVlbjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWxsb3dSaWdodFNpZGViYXIgJiYgIWhpZGVJbmZvQnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhZGYtdG9vbGJhci1kaXZpZGVyIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cInNob3dSaWdodFNpZGViYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERl9WSUVXRVIuQUNUSU9OUy5JTkZPJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQURGX1ZJRVdFUi5BQ1RJT05TLklORk8nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtdG9vbGJhci1zaWRlYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwic2hvd1JpZ2h0U2lkZWJhciA/ICdhY2NlbnQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJpZ2h0U2lkZWJhcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+aW5mb19vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtbnVNb3JlQWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiYWRmLXZpZXdlci1tb3JlYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1udU1vcmVBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfVklFV0VSLkFDVElPTlMuTU9SRV9BQ1RJT05TJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQURGX1ZJRVdFUi5BQ1RJT05TLk1PUkVfQUNUSU9OUycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi10b29sYmFyLW1vcmUtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21udU1vcmVBY3Rpb25zPVwibWF0TWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3ZlcmxhcFRyaWdnZXJdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFkZi12aWV3ZXItbW9yZS1hY3Rpb25zXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhbGxvd0dvQmFjayAmJiBjbG9zZUJ1dHRvblBvc2l0aW9uID09PSBDbG9zZUJ1dHRvblBvc2l0aW9uLlJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Rvb2xiYXJEaXZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi10b29sYmFyLWRpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRmLXZpZXdlci1jbG9zZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi10b29sYmFyLXJpZ2h0LWJhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERl9WSUVXRVIuQUNUSU9OUy5DTE9TRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FERl9WSUVXRVIuQUNUSU9OUy5DTE9TRScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8L2FkZi10b29sYmFyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXZpZXdlci1zaWRlYmFyc1wiPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWxsb3dSaWdodFNpZGViYXIgJiYgc2hvd1JpZ2h0U2lkZWJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdmlld2VyX19zaWRlYmFyIGFkZi12aWV3ZXJfX3NpZGViYXJfX3JpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWRmLXJpZ2h0LXNpZGViYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNpZGViYXJSaWdodFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2lkZWJhclJpZ2h0VGVtcGxhdGU7Y29udGV4dDpzaWRlYmFyUmlnaHRUZW1wbGF0ZUNvbnRleHRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhc2lkZWJhclJpZ2h0VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Q9XCJhZGYtdmlld2VyLXNpZGViYXJcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhbGxvd0xlZnRTaWRlYmFyICYmIHNob3dMZWZ0U2lkZWJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdmlld2VyX19zaWRlYmFyIGFkZi12aWV3ZXJfX3NpZGViYXJfX2xlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZGYtbGVmdC1zaWRlYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaWRlYmFyTGVmdFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2lkZWJhckxlZnRUZW1wbGF0ZTtjb250ZXh0OnNpZGViYXJMZWZ0VGVtcGxhdGVDb250ZXh0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiIXNpZGViYXJMZWZ0VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Q9XCJhZGYtdmlld2VyLXNpZGViYXJcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxhZGYtdmlld2VyLXJlbmRlciAoY2xvc2UpPVwib25DbG9zZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWltZVR5cGVdPVwibWltZVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlTmFtZV09XCJmaWxlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Jsb2JGaWxlXT1cImJsb2JGaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJtaXRGaWxlKT1cIm9uU3VibWl0RmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dlZEVkaXRBY3Rpb25zXT1cImFsbG93ZWRFZGl0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VybEZpbGVdPVwidXJsRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzU2F2aW5nKT1cImFsbG93TmF2aWdhdGUgPSAhJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHJhY2tzXT1cInRyYWNrc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZpZXdlclRlbXBsYXRlRXh0ZW5zaW9uc109XCJ2aWV3ZXJFeHRlbnNpb25zID8/IHZpZXdlclRlbXBsYXRlRXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVJZF09XCJub2RlSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21FcnJvcl09XCJjdXN0b21FcnJvclwiIC8+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==