@sunbird-cb/toc 0.0.1-mauritius

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 (346) hide show
  1. package/esm2022/lib/_collection/_common/ai-tutor/ai-tutor.component.mjs +1169 -0
  2. package/esm2022/lib/_collection/_common/ai-tutor/socket.service.mjs +121 -0
  3. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.component.mjs +55 -0
  4. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -0
  5. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -0
  6. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -0
  7. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -0
  8. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -0
  9. package/esm2022/lib/_collection/_common/card-competency/card-competency.component.mjs +58 -0
  10. package/esm2022/lib/_collection/_common/card-competency/card-competency.module.mjs +22 -0
  11. package/esm2022/lib/_collection/_common/card-content-v2/card-content-v2.model.mjs +23 -0
  12. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +221 -0
  13. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +96 -0
  14. package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -0
  15. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -0
  16. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -0
  17. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -0
  18. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -0
  19. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -0
  20. package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -0
  21. package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -0
  22. package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -0
  23. package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -0
  24. package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -0
  25. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -0
  26. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -0
  27. package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -0
  28. package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +961 -0
  29. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -0
  30. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -0
  31. package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -0
  32. package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +304 -0
  33. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1229 -0
  34. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -0
  35. package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -0
  36. package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -0
  37. package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -0
  38. package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -0
  39. package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -0
  40. package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -0
  41. package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +833 -0
  42. package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +224 -0
  43. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +212 -0
  44. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -0
  45. package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -0
  46. package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -0
  47. package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -0
  48. package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -0
  49. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -0
  50. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -0
  51. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -0
  52. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -0
  53. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -0
  54. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -0
  55. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -0
  56. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -0
  57. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +67 -0
  58. package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -0
  59. package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -0
  60. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -0
  61. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -0
  62. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -0
  63. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -0
  64. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -0
  65. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -0
  66. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -0
  67. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -0
  68. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -0
  69. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -0
  70. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -0
  71. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -0
  72. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -0
  73. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -0
  74. package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -0
  75. package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -0
  76. package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -0
  77. package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -0
  78. package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -0
  79. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -0
  80. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -0
  81. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +112 -0
  82. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -0
  83. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -0
  84. package/esm2022/lib/_collection-api.mjs +57 -0
  85. package/esm2022/lib/_constants/widget-content.constants.mjs +19 -0
  86. package/esm2022/lib/_directives/tooltip.directive.mjs +68 -0
  87. package/esm2022/lib/_models/common.model.mjs +2 -0
  88. package/esm2022/lib/_models/error.model.mjs +2 -0
  89. package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -0
  90. package/esm2022/lib/_services/rating.service.mjs +89 -0
  91. package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -0
  92. package/esm2022/lib/_services/viewer-route-util.mjs +103 -0
  93. package/esm2022/lib/_services/widget-content.model.mjs +254 -0
  94. package/esm2022/lib/_services/widget-content.service.mjs +594 -0
  95. package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -0
  96. package/esm2022/lib/app-toc-lib.module.mjs +503 -0
  97. package/esm2022/lib/collection.config.mjs +161 -0
  98. package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -0
  99. package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -0
  100. package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +505 -0
  101. package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -0
  102. package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -0
  103. package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -0
  104. package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -0
  105. package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -0
  106. package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2230 -0
  107. package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +3001 -0
  108. package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -0
  109. package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -0
  110. package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -0
  111. package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -0
  112. package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -0
  113. package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -0
  114. package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -0
  115. package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1838 -0
  116. package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -0
  117. package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -0
  118. package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -0
  119. package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +258 -0
  120. package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -0
  121. package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -0
  122. package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -0
  123. package/esm2022/lib/models/app-toc.model.mjs +38 -0
  124. package/esm2022/lib/models/auto-complete.model.mjs +2 -0
  125. package/esm2022/lib/models/card-content.model.mjs +13 -0
  126. package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -0
  127. package/esm2022/lib/models/discussion-forum.model.mjs +14 -0
  128. package/esm2022/lib/models/goal.model.mjs +2 -0
  129. package/esm2022/lib/models/meta-tag.model.mjs +8 -0
  130. package/esm2022/lib/models/playlist.model.mjs +2 -0
  131. package/esm2022/lib/models/profile-revamp.model.mjs +2 -0
  132. package/esm2022/lib/models/rating.model.mjs +2 -0
  133. package/esm2022/lib/models/user-profile.model.mjs +21 -0
  134. package/esm2022/lib/registration-toc-lib.config.mjs +14 -0
  135. package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -0
  136. package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -0
  137. package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -0
  138. package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -0
  139. package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -0
  140. package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -0
  141. package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -0
  142. package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -0
  143. package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -0
  144. package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -0
  145. package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -0
  146. package/esm2022/lib/services/access-control.service.mjs +56 -0
  147. package/esm2022/lib/services/action.service.mjs +23 -0
  148. package/esm2022/lib/services/app-toc-v2.service.mjs +368 -0
  149. package/esm2022/lib/services/app-toc.service.mjs +1577 -0
  150. package/esm2022/lib/services/certificate.service.mjs +114 -0
  151. package/esm2022/lib/services/discuss-utils.service.mjs +58 -0
  152. package/esm2022/lib/services/editor.service.mjs +34 -0
  153. package/esm2022/lib/services/load-check.service.mjs +21 -0
  154. package/esm2022/lib/services/loader.service.mjs +33 -0
  155. package/esm2022/lib/services/mobile-apps.service.mjs +67 -0
  156. package/esm2022/lib/services/netcore.service.mjs +56 -0
  157. package/esm2022/lib/services/nps-grid.service.mjs +31 -0
  158. package/esm2022/lib/services/otp.service.mjs +43 -0
  159. package/esm2022/lib/services/profile-v2.service.mjs +43 -0
  160. package/esm2022/lib/services/reset-ratings.service.mjs +19 -0
  161. package/esm2022/lib/services/resource-download-helper.service.mjs +64 -0
  162. package/esm2022/lib/services/root.service.mjs +106 -0
  163. package/esm2022/lib/services/timer.service.mjs +23 -0
  164. package/esm2022/lib/services/title-tag.service.mjs +71 -0
  165. package/esm2022/lib/services/user-profile.service.mjs +55 -0
  166. package/esm2022/lib/services/viewer-data.service.mjs +64 -0
  167. package/esm2022/lib/services/viewer-util.service.mjs +627 -0
  168. package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -0
  169. package/esm2022/lib/share-toc/share-toc.module.mjs +119 -0
  170. package/esm2022/public-api.mjs +80 -0
  171. package/esm2022/sunbird-cb-toc.mjs +5 -0
  172. package/fesm2022/sunbird-cb-toc.mjs +27111 -0
  173. package/fesm2022/sunbird-cb-toc.mjs.map +1 -0
  174. package/index.d.ts +5 -0
  175. package/lib/_collection/_common/ai-tutor/ai-tutor.component.d.ts +139 -0
  176. package/lib/_collection/_common/ai-tutor/socket.service.d.ts +19 -0
  177. package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +16 -0
  178. package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +31 -0
  179. package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +15 -0
  180. package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +20 -0
  181. package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +22 -0
  182. package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +15 -0
  183. package/lib/_collection/_common/card-competency/card-competency.component.d.ts +14 -0
  184. package/lib/_collection/_common/card-competency/card-competency.module.d.ts +8 -0
  185. package/lib/_collection/_common/card-content-v2/card-content-v2.model.d.ts +44 -0
  186. package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +30 -0
  187. package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +23 -0
  188. package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +9 -0
  189. package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +11 -0
  190. package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +12 -0
  191. package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +18 -0
  192. package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +14 -0
  193. package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +11 -0
  194. package/lib/_collection/_common/connection-name/connection-name.component.d.ts +17 -0
  195. package/lib/_collection/_common/connection-name/connection-name.module.d.ts +14 -0
  196. package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +199 -0
  197. package/lib/_collection/_common/content-progress/content-progress.component.d.ts +16 -0
  198. package/lib/_collection/_common/content-progress/content-progress.module.d.ts +10 -0
  199. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +38 -0
  200. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +19 -0
  201. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +11 -0
  202. package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +187 -0
  203. package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +41 -0
  204. package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +54 -0
  205. package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +47 -0
  206. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +56 -0
  207. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +195 -0
  208. package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +8 -0
  209. package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +16 -0
  210. package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +40 -0
  211. package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +21 -0
  212. package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +45 -0
  213. package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +10 -0
  214. package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +10 -0
  215. package/lib/_collection/_common/content-toc/content-toc.component.d.ts +131 -0
  216. package/lib/_collection/_common/content-toc/content-toc.module.d.ts +52 -0
  217. package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +29 -0
  218. package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +9 -0
  219. package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +7 -0
  220. package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +7 -0
  221. package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +28 -0
  222. package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +24 -0
  223. package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +14 -0
  224. package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +9 -0
  225. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +12 -0
  226. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +10 -0
  227. package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +22 -0
  228. package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +8 -0
  229. package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +18 -0
  230. package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +8 -0
  231. package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +15 -0
  232. package/lib/_collection/_common/player-brief/player-brief.component.d.ts +35 -0
  233. package/lib/_collection/_common/player-brief/player-brief.module.d.ts +19 -0
  234. package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +14 -0
  235. package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +13 -0
  236. package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +11 -0
  237. package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +11 -0
  238. package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +15 -0
  239. package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +10 -0
  240. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +16 -0
  241. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +11 -0
  242. package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +34 -0
  243. package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +17 -0
  244. package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +15 -0
  245. package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +15 -0
  246. package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +21 -0
  247. package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +12 -0
  248. package/lib/_collection/_common/user-image/user-image.component.d.ts +21 -0
  249. package/lib/_collection/_common/user-image/user-image.module.d.ts +9 -0
  250. package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +47 -0
  251. package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +14 -0
  252. package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +22 -0
  253. package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +19 -0
  254. package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +15 -0
  255. package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +25 -0
  256. package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +21 -0
  257. package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +18 -0
  258. package/lib/_collection-api.d.ts +34 -0
  259. package/lib/_constants/widget-content.constants.d.ts +7 -0
  260. package/lib/_directives/tooltip.directive.d.ts +17 -0
  261. package/lib/_models/common.model.d.ts +3 -0
  262. package/lib/_models/error.model.d.ts +5 -0
  263. package/lib/_pipes/highlight.pipe.d.ts +10 -0
  264. package/lib/_services/rating.service.d.ts +18 -0
  265. package/lib/_services/samuhik-charcha.service.d.ts +13 -0
  266. package/lib/_services/viewer-route-util.d.ts +8 -0
  267. package/lib/_services/widget-content.model.d.ts +521 -0
  268. package/lib/_services/widget-content.service.d.ts +101 -0
  269. package/lib/_shared/translate-loader.factory.d.ts +7 -0
  270. package/lib/app-toc-lib.module.d.ts +89 -0
  271. package/lib/collection.config.d.ts +159 -0
  272. package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +17 -0
  273. package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +225 -0
  274. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +82 -0
  275. package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +22 -0
  276. package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +31 -0
  277. package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +47 -0
  278. package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +14 -0
  279. package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +21 -0
  280. package/lib/components/app-toc-home/app-toc-home.component.d.ts +315 -0
  281. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +417 -0
  282. package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +47 -0
  283. package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +22 -0
  284. package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +14 -0
  285. package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +149 -0
  286. package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +42 -0
  287. package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +27 -0
  288. package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +15 -0
  289. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +195 -0
  290. package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +44 -0
  291. package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +54 -0
  292. package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +18 -0
  293. package/lib/components/public-survey-form/public-survey-form.component.d.ts +44 -0
  294. package/lib/components/survey-form-question/survey-form-question.component.d.ts +20 -0
  295. package/lib/components/survey-form-section/survey-form-section.component.d.ts +13 -0
  296. package/lib/models/app-toc-analytics.model.d.ts +152 -0
  297. package/lib/models/app-toc.model.d.ts +84 -0
  298. package/lib/models/auto-complete.model.d.ts +27 -0
  299. package/lib/models/card-content.model.d.ts +19 -0
  300. package/lib/models/content-strip-with-tabs.model.d.ts +44 -0
  301. package/lib/models/discussion-forum.model.d.ts +40 -0
  302. package/lib/models/goal.model.d.ts +22 -0
  303. package/lib/models/meta-tag.model.d.ts +6 -0
  304. package/lib/models/playlist.model.d.ts +23 -0
  305. package/lib/models/profile-revamp.model.d.ts +14 -0
  306. package/lib/models/rating.model.d.ts +17 -0
  307. package/lib/models/user-profile.model.d.ts +37 -0
  308. package/lib/registration-toc-lib.config.d.ts +4 -0
  309. package/lib/resolvers/app-toc-cios-resolver.service.d.ts +12 -0
  310. package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +12 -0
  311. package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +16 -0
  312. package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +12 -0
  313. package/lib/resolvers/app-toc-resolver.service.d.ts +16 -0
  314. package/lib/resolvers/config-resolver.service.d.ts +11 -0
  315. package/lib/resolvers/profile-resolver.service.d.ts +11 -0
  316. package/lib/resolvers/restricted-features-resolver.service.d.ts +11 -0
  317. package/lib/routes/app-toc-home/app-toc-home.component.d.ts +19 -0
  318. package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +8 -0
  319. package/lib/routes/app-toc-home/app-toc-home.service.d.ts +8 -0
  320. package/lib/services/access-control.service.d.ts +29 -0
  321. package/lib/services/action.service.d.ts +9 -0
  322. package/lib/services/app-toc-v2.service.d.ts +17 -0
  323. package/lib/services/app-toc.service.d.ts +190 -0
  324. package/lib/services/certificate.service.d.ts +41 -0
  325. package/lib/services/discuss-utils.service.d.ts +33 -0
  326. package/lib/services/editor.service.d.ts +17 -0
  327. package/lib/services/load-check.service.d.ts +8 -0
  328. package/lib/services/loader.service.d.ts +16 -0
  329. package/lib/services/mobile-apps.service.d.ts +38 -0
  330. package/lib/services/netcore.service.d.ts +33 -0
  331. package/lib/services/nps-grid.service.d.ts +15 -0
  332. package/lib/services/otp.service.d.ts +20 -0
  333. package/lib/services/profile-v2.service.d.ts +20 -0
  334. package/lib/services/reset-ratings.service.d.ts +8 -0
  335. package/lib/services/resource-download-helper.service.d.ts +29 -0
  336. package/lib/services/root.service.d.ts +26 -0
  337. package/lib/services/timer.service.d.ts +9 -0
  338. package/lib/services/title-tag.service.d.ts +21 -0
  339. package/lib/services/user-profile.service.d.ts +24 -0
  340. package/lib/services/viewer-data.service.d.ts +62 -0
  341. package/lib/services/viewer-util.service.d.ts +76 -0
  342. package/lib/share-toc/share-toc/share-toc.component.d.ts +56 -0
  343. package/lib/share-toc/share-toc.module.d.ts +32 -0
  344. package/package.json +34 -0
  345. package/public-api.d.ts +64 -0
  346. package/sunbird-cb-toc-0.0.1-mauritius.tgz +0 -0
@@ -0,0 +1,833 @@
1
+ import { Component, EventEmitter, HostListener, Inject, Input, Output, ViewChild, ViewChildren } from '@angular/core';
2
+ import { WsEvents } from '@sunbird-cb/utils-v2';
3
+ import { AiTutorConfirmPopupComponent } from './ai-tutor-confirm-popup/ai-tutor-confirm-popup.component';
4
+ import { MatLegacyDialogConfig as MatDialogConfig } from '@angular/material/legacy-dialog';
5
+ import { viewerRouteGenerator } from '../../../_services/viewer-route-util';
6
+ import { VttFile } from '@polyflix/vtt-parser';
7
+ import { tap } from 'rxjs/operators';
8
+ import { MatTab } from '@angular/material/tabs';
9
+ import * as _ from 'lodash';
10
+ import { NsContent } from '../../../_collection-api';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/router";
13
+ import * as i2 from "@sunbird-cb/utils-v2";
14
+ import * as i3 from "../../../services/load-check.service";
15
+ import * as i4 from "@angular/material/legacy-dialog";
16
+ import * as i5 from "../../../services/app-toc.service";
17
+ import * as i6 from "../../../services/action.service";
18
+ import * as i7 from "../../../services/viewer-data.service";
19
+ import * as i8 from "../../../_services/samuhik-charcha.service";
20
+ import * as i9 from "@angular/common";
21
+ import * as i10 from "@angular/material/icon";
22
+ import * as i11 from "@angular/material/tabs";
23
+ import * as i12 from "@sunbird-cb/discussion-v2";
24
+ import * as i13 from "@angular/material/form-field";
25
+ import * as i14 from "@angular/material/select";
26
+ import * as i15 from "@angular/material/core";
27
+ import * as i16 from "./app-toc-about/app-toc-about.component";
28
+ import * as i17 from "./app-toc-content/app-toc-content.component";
29
+ import * as i18 from "./app-toc-teachers-notes/app-toc-teachers-notes.component";
30
+ import * as i19 from "./app-toc-batch-assignments/app-toc-batch-assignments.component";
31
+ import * as i20 from "./samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component";
32
+ import * as i21 from "../ai-tutor/ai-tutor.component";
33
+ import * as i22 from "@ngx-translate/core";
34
+ import * as i23 from "../../../_pipes/highlight.pipe";
35
+ export class ContentTocComponent {
36
+ constructor(route, utilityService, loadCheckService, configService, dialog, tocSvc, actionSVC, router, eventSvc, viewerDataSvc, samuhikCharchaSvc, domainConfService, environment) {
37
+ this.route = route;
38
+ this.utilityService = utilityService;
39
+ this.loadCheckService = loadCheckService;
40
+ this.configService = configService;
41
+ this.dialog = dialog;
42
+ this.tocSvc = tocSvc;
43
+ this.actionSVC = actionSVC;
44
+ this.router = router;
45
+ this.eventSvc = eventSvc;
46
+ this.viewerDataSvc = viewerDataSvc;
47
+ this.samuhikCharchaSvc = samuhikCharchaSvc;
48
+ this.domainConfService = domainConfService;
49
+ this.environment = environment;
50
+ this.tabChangeValue = '';
51
+ this.changeTab = false;
52
+ this.routeSubscription = null;
53
+ this.forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
54
+ this.contentTabFlag = true;
55
+ this.resumeData = null;
56
+ this.batchData = null;
57
+ this.skeletonLoader = false;
58
+ this.tocStructure = {};
59
+ this.fromViewer = false;
60
+ this.hierarchyMapData = {};
61
+ this.playResourceId = '';
62
+ this.sideNavBarOpened = false;
63
+ this.languageList = [];
64
+ this.lockCertificate = false;
65
+ this.fromMDO = false;
66
+ this.playResumeForAI = new EventEmitter();
67
+ this.enrollUserToAI = new EventEmitter();
68
+ this.trigerCompletionSurveyForm = new EventEmitter();
69
+ this.resumeContent = new EventEmitter();
70
+ this.commentId = '';
71
+ this.sticky = false;
72
+ this.isMobile = false;
73
+ this.selectedTabIndex = 0;
74
+ this.teacherNotesFlag = false;
75
+ this.referenceNotesFlag = false;
76
+ this.viewerPage = window.location.href.includes('/viewer/') ? true : false;
77
+ this.enableAITutorFlag = false;
78
+ this.enableTranscriptionFlag = false;
79
+ this.courseCategory = NsContent.ECourseCategory;
80
+ this.subTitles$ = null;
81
+ this.resourceIdentifier$ = null;
82
+ this.subTitles = [];
83
+ this.keywordToHighlight = '';
84
+ this.highlightCondition = false;
85
+ this.vttLangArr = [];
86
+ this.transcriptionActiveLanguage = 'en';
87
+ this.defaultTranscriptLanguage = 'en';
88
+ this.transriptionLanguageSub = null;
89
+ this.fromAITutor = false;
90
+ this.totalResource = 0;
91
+ this.scormAssessmentCount = 0;
92
+ this.showAITutorPopup = false;
93
+ this.fromAISelectedTabIndex = false;
94
+ this.isMobileForAI = false;
95
+ this.transcriptActiveLanguageText = 'English';
96
+ this.showAssignmentsTab = false;
97
+ this.enableSamuhikCharchaTab = false;
98
+ }
99
+ ngOnInit() {
100
+ if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig?.aiTutor?.all) {
101
+ this.enableAITutorFlag = this.onlyscormAssessmentExists(this.route.snapshot?.data?.content?.data?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
102
+ // this.enableAITutorFlag = true
103
+ }
104
+ else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig?.aiTutor?.forOrg && this.configService.iGOTAIConfig.aiTutor?.forOrg?.length &&
105
+ this.configService.iGOTAIConfig?.aiTutor?.forOrg.includes(this.configService.userProfile?.rootOrgId)) {
106
+ this.enableAITutorFlag = this.onlyscormAssessmentExists(this.route.snapshot?.data?.content?.data?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
107
+ // this.enableAITutorFlag = true
108
+ }
109
+ else {
110
+ this.enableAITutorFlag = false;
111
+ }
112
+ if (this.content && this.content.courseCategory === NsContent.ECourseCategory.LEARNING_PATHWAY) {
113
+ this.enableAITutorFlag = false;
114
+ }
115
+ if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription?.all) {
116
+ // this.resourceIdentifier$ = this.tocSvc.transriptionIdentifier.subscribe((value:any)=>{
117
+ // if(value && value?.identifier) {
118
+ // this.resourceIdentifier = value?.identifier //value?.identifier // do_1138891198489067521147
119
+ // this.parseVTT()
120
+ // }
121
+ // })
122
+ this.subTitles$ = this.tocSvc.transcriptionData$.subscribe((value) => {
123
+ this.keywordToHighlight = value;
124
+ });
125
+ this.transriptionLanguageSub = this.tocSvc.transriptionActiveLanguageDataObject$
126
+ .pipe(tap((langvalue) => console.log('tap langvalue:', langvalue)))
127
+ .subscribe((langvalue) => {
128
+ if (langvalue) {
129
+ // this.renderSelectedLanguageTranscription();
130
+ }
131
+ });
132
+ this.enableTranscriptionFlag = true;
133
+ }
134
+ else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription && this.configService.iGOTAIConfig?.transcription?.forOrg && this.configService.iGOTAIConfig?.transcription?.forOrg?.length &&
135
+ this.configService.iGOTAIConfig?.transcription?.forOrg?.includes(this.configService.userProfile?.rootOrgId)) {
136
+ // this.resourceIdentifier$ = this.tocSvc.transriptionIdentifier.subscribe((value:any)=>{
137
+ // if(value && value?.identifier) {
138
+ // this.resourceIdentifier = value?.identifier //value?.identifier // do_1138891198489067521147
139
+ // this.parseVTT()
140
+ // }
141
+ // })
142
+ this.subTitles$ = this.tocSvc.transcriptionData$.subscribe((value) => {
143
+ this.keywordToHighlight = value;
144
+ });
145
+ this.transriptionLanguageSub = this.tocSvc.transriptionActiveLanguageDataObject$
146
+ .pipe(tap((langvalue) => console.log('tap langvalue:', langvalue)))
147
+ .subscribe((langvalue) => {
148
+ if (langvalue) {
149
+ // this.renderSelectedLanguageTranscription();
150
+ }
151
+ });
152
+ this.enableTranscriptionFlag = true;
153
+ }
154
+ else {
155
+ this.enableTranscriptionFlag = false;
156
+ }
157
+ const batchId = this.route.snapshot.queryParams.batchId ?
158
+ this.route.snapshot.queryParams.batchId : '';
159
+ if (batchId) {
160
+ this.selectedTabIndex = 1;
161
+ }
162
+ this.commentId = this.route.snapshot.queryParams.commentId ? this.route.snapshot.queryParams.commentId : '';
163
+ if (this.commentId) {
164
+ this.selectedTabIndex = 2;
165
+ }
166
+ }
167
+ ngAfterViewInit() {
168
+ this.isMobile = this.utilityService.isMobile;
169
+ if (window.innerWidth < 1480) {
170
+ this.isMobileForAI = true;
171
+ }
172
+ else {
173
+ this.isMobileForAI = false;
174
+ }
175
+ this.menuPosition = this.tabElement._elementRef.nativeElement.offsetTop;
176
+ this.route.queryParamMap.subscribe(async (params) => {
177
+ let fromAITutor = params.get('fromAITutor');
178
+ if ((fromAITutor === 'true' || fromAITutor === true) && this.isMobile) {
179
+ setTimeout(() => {
180
+ const tabsArray = this.tabs?.toArray();
181
+ let index = tabsArray?.findIndex(tab => tab.textLabel.trim() === "AI Tutor".trim());
182
+ if (index > -1) {
183
+ this.selectedTabIndex = index;
184
+ this.fromAISelectedTabIndex = true;
185
+ }
186
+ }, 3000);
187
+ }
188
+ });
189
+ }
190
+ get getCurrentTimeInUTC() {
191
+ const currentDate = new Date();
192
+ const isoString = currentDate.toISOString();
193
+ return isoString.replace('Z', '+0000');
194
+ }
195
+ async getSamuhikConfig() {
196
+ try {
197
+ this.samuhikConfig = await this.samuhikCharchaSvc.fetchConfigFile().toPromise();
198
+ }
199
+ catch (error) {
200
+ }
201
+ }
202
+ async ngOnChanges(changes) {
203
+ this.resourceIdentifier = this.viewerDataSvc.resourceId;
204
+ if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription?.all) {
205
+ this.enableTranscriptionFlag = true;
206
+ }
207
+ else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription && this.configService.iGOTAIConfig?.transcription?.forOrg && this.configService.iGOTAIConfig?.transcription?.forOrg?.length &&
208
+ this.configService.iGOTAIConfig?.transcription?.forOrg?.includes(this.configService?.userProfile?.rootOrgId)) {
209
+ this.enableTranscriptionFlag = true;
210
+ }
211
+ else {
212
+ this.enableTranscriptionFlag = false;
213
+ }
214
+ if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig.aiTutor?.all) {
215
+ this.enableAITutorFlag = this.onlyscormAssessmentExists(this.content?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
216
+ // this.enableAITutorFlag = true
217
+ }
218
+ else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig?.aiTutor?.forOrg && this.configService.iGOTAIConfig?.aiTutor?.forOrg?.length
219
+ && this.configService.iGOTAIConfig.aiTutor?.forOrg?.includes(this.configService?.userProfile?.rootOrgId)) {
220
+ this.enableAITutorFlag = this.onlyscormAssessmentExists(this.content?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
221
+ }
222
+ else {
223
+ this.enableAITutorFlag = false;
224
+ }
225
+ if (this.content && this.content.courseCategory === NsContent.ECourseCategory.LEARNING_PATHWAY) {
226
+ this.enableAITutorFlag = false;
227
+ }
228
+ if (changes && changes['playResourceId']) {
229
+ if (changes?.playResourceId?.previousValue !== changes?.playResourceId?.currentValue) {
230
+ if (this.viewerPage && this.viewerDataSvc?.resourceId && this.enableTranscriptionFlag) {
231
+ this.parseVTT();
232
+ }
233
+ }
234
+ }
235
+ if (changes.changeTab && changes.changeTab.currentValue && !this.fromAISelectedTabIndex) {
236
+ this.selectedTabIndex = 1;
237
+ }
238
+ if (this.route.snapshot.data.pageData && this.route.snapshot.data.pageData.data) {
239
+ this.config = this.route.snapshot.data.pageData.data;
240
+ }
241
+ if (this.config && this.config.discussWidgetData) {
242
+ this.discussWidgetData = this.config.discussWidgetData;
243
+ if (this.baseContentReadData && this.baseContentReadData.identifier) {
244
+ if (!this.discussWidgetData.newCommentSection.commentTreeData.entityId) {
245
+ this.discussWidgetData.newCommentSection.commentTreeData.entityId = this.baseContentReadData.identifier;
246
+ }
247
+ if (this.discussWidgetData.commentsList.repliesSection && this.discussWidgetData.commentsList.repliesSection.newCommentReply) {
248
+ this.discussWidgetData.commentsList.repliesSection.newCommentReply.commentTreeData.entityId = this.baseContentReadData.identifier;
249
+ }
250
+ }
251
+ if (this.isEnrolled) {
252
+ if (this.content && this.content.primaryCategory === NsContent.ECourseCategory.BLENDED_PROGRAM) {
253
+ this.showAssignmentsTab = true;
254
+ }
255
+ this.discussWidgetData.enrolledContent = true;
256
+ this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Start a discussion';
257
+ }
258
+ else {
259
+ this.discussWidgetData.enrolledContent = false;
260
+ this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Enrol to add your comments';
261
+ }
262
+ if (this.commentId) {
263
+ this.discussWidgetData.newCommentSection.show = false;
264
+ }
265
+ this.discussWidgetData = { ...this.discussWidgetData };
266
+ }
267
+ if (this.contentReadData && this.contentReadData?.eventLinked?.length) {
268
+ const orgId = _.get(this.configService, 'userProfile.userRootOrg.id', '');
269
+ await this.getSamuhikConfig();
270
+ const eventsLinked = this.contentReadData.eventLinked || [];
271
+ let eventsData = [];
272
+ this.samuhikConfig?.strips[0].tabs.forEach((ele) => {
273
+ ele.request.searchV6.request.filters.identifier = eventsLinked;
274
+ ele.request.searchV6.request.filters.createdFor = [orgId];
275
+ if (ele.request.searchV6.request.filters.endDateTime.hasOwnProperty('>=')) {
276
+ ele.request.searchV6.request.filters.endDateTime['>='] = this.getCurrentTimeInUTC;
277
+ }
278
+ if (ele.request.searchV6.request.filters.endDateTime.hasOwnProperty('<')) {
279
+ ele.request.searchV6.request.filters.endDateTime['<'] = this.getCurrentTimeInUTC;
280
+ }
281
+ this.samuhikCharchaSvc.getSearchV6Results(ele.request.searchV6).subscribe((res) => {
282
+ if (res && res.result && res.result.count && res.result?.Event && res.result.Event?.length) {
283
+ for (let eve = 0; eve < res.result.Event?.length; eve++) {
284
+ if (res.result.Event[eve]['createdFor'] && res.result.Event[eve]['createdFor'].length &&
285
+ res.result.Event[eve]['resourceType'] === 'Samuhik Charcha')
286
+ eventsData.push(res.result.Event[eve]['createdFor'][0]);
287
+ if (eventsData.includes(this.configService.userProfile?.rootOrgId)) {
288
+ this.enableSamuhikCharchaTab = true;
289
+ }
290
+ }
291
+ }
292
+ });
293
+ });
294
+ }
295
+ if (this.contentReadData && this.contentReadData.referenceNodes) {
296
+ this.contentReadData.referenceNodes.forEach((item) => {
297
+ let userRoles = this.configService?.userRoles || new Set();
298
+ let hasEducatorRole = false;
299
+ // Check if user has MENTOR role
300
+ if (userRoles.has('MENTOR') ||
301
+ userRoles.has('mentor') ||
302
+ userRoles.has('Mentor')) {
303
+ hasEducatorRole = true;
304
+ }
305
+ // Check local storage for survey response only if URL contains 'public' or 'preview=true'
306
+ if (!hasEducatorRole && this.forPreview) {
307
+ const surveyId = this.environment.publicContentSurveyId || '';
308
+ const courseId = this.contentReadData?.identifier || '';
309
+ const storageKey = `survey_${surveyId}_${courseId}`;
310
+ const storedData = localStorage.getItem(storageKey);
311
+ if (storedData) {
312
+ try {
313
+ const surveyResponses = JSON.parse(storedData);
314
+ const educatorQuestion = surveyResponses.find((response) => response.question === 'Are you an Educator/Faculty member?');
315
+ if (educatorQuestion && educatorQuestion.answer === 'Yes') {
316
+ hasEducatorRole = true;
317
+ }
318
+ }
319
+ catch (error) {
320
+ console.error('Error parsing survey data from local storage:', error);
321
+ }
322
+ }
323
+ }
324
+ // Set teacherNotesFlag if user has educator role
325
+ if (hasEducatorRole) {
326
+ if (item && item.resourceCategory && item.resourceCategory === 'Teachers Resource') {
327
+ this.teacherNotesFlag = true;
328
+ }
329
+ }
330
+ if (item && item.resourceCategory && item.resourceCategory === 'Reference Resource') {
331
+ this.referenceNotesFlag = true;
332
+ }
333
+ });
334
+ }
335
+ if (this.sideNavBarOpened) {
336
+ if (window.innerWidth < 1480) {
337
+ if (this.isMobileForAI) {
338
+ this.isMobileForAI = false;
339
+ }
340
+ }
341
+ else {
342
+ this.isMobileForAI = false;
343
+ }
344
+ }
345
+ else {
346
+ if (window.innerWidth < 1480) {
347
+ this.isMobileForAI = true;
348
+ }
349
+ else {
350
+ this.isMobileForAI = false;
351
+ }
352
+ }
353
+ }
354
+ handleScroll() {
355
+ const windowScroll = window.scrollY;
356
+ if (windowScroll >= (this.menuPosition - ((this.isMobile) ? 96 : 104))) {
357
+ this.sticky = true;
358
+ }
359
+ else {
360
+ this.sticky = false;
361
+ }
362
+ }
363
+ handleTabChange(event) {
364
+ this.tabChangeValue = event.tab;
365
+ this.selectedTabIndex = event.index;
366
+ this.loadCheckService.componentLoaded(true);
367
+ if (event && event.tab.textLabel === 'AI Tutor') {
368
+ this.showAITutorPopup = true;
369
+ }
370
+ if (event && event.index === 0 && event.tab.textLabel === 'Transcription') {
371
+ this.raiseTranscriptionTabStartTelemetry();
372
+ setTimeout(() => {
373
+ this.raiseTranscriptionTabInteractTelemetry();
374
+ }, 1000);
375
+ }
376
+ else {
377
+ this.raiseTranscriptionTabStopTelemetry();
378
+ }
379
+ }
380
+ showAiTutorConfirmPopup() {
381
+ debugger;
382
+ this.raiseAIPopupStartTelemetry();
383
+ if (this.isEnrolled) {
384
+ this.fromAITutor = true;
385
+ setTimeout(() => {
386
+ this.raiseAIPopupInteractTelemetry();
387
+ }, 1000);
388
+ this.generateResumeDataLinkNew();
389
+ setTimeout(() => {
390
+ this.raiseAIPopupEndTelemetry();
391
+ }, 1000);
392
+ }
393
+ else {
394
+ setTimeout(() => {
395
+ this.raiseAIPopupInteractTelemetry();
396
+ }, 1000);
397
+ const dialogConfig = new MatDialogConfig();
398
+ dialogConfig.width = '421px';
399
+ dialogConfig.data = {
400
+ enroll: this.isEnrolled
401
+ };
402
+ const dialogRef = this.dialog.open(AiTutorConfirmPopupComponent, dialogConfig);
403
+ dialogRef.afterClosed().subscribe((response) => {
404
+ if (response === 'enroll') {
405
+ this.fromAITutor = true;
406
+ this.generateResumeDataLinkNew();
407
+ }
408
+ else if (response === 'needToEnroll') {
409
+ this.enrollUserForAITutor();
410
+ }
411
+ this.raiseAIPopupEndTelemetry();
412
+ });
413
+ }
414
+ }
415
+ generateResumeDataLinkNew() {
416
+ if (this.resumeData && this.content) {
417
+ let resumeDataV2;
418
+ if (this.content.completionPercentage === 100) {
419
+ resumeDataV2 = this.getResumeDataFromList('start');
420
+ }
421
+ else {
422
+ resumeDataV2 = this.getResumeDataFromList();
423
+ }
424
+ if (!resumeDataV2.mimeType) {
425
+ resumeDataV2.mimeType = this.tocSvc.getMimeType(this.content, resumeDataV2.identifier);
426
+ }
427
+ this.resumeDataLink = viewerRouteGenerator(resumeDataV2.identifier, resumeDataV2.mimeType, this.content.identifier, this.content.contentType, this.forPreview, 'Learning Resource', this.getBatchId(), this.content.name);
428
+ this.actionSVC.setUpdateCompGroupO = this.resumeDataLink;
429
+ this.router.navigate([this.resumeDataLink.url], {
430
+ queryParams: {
431
+ ...this.resumeDataLink.queryParams,
432
+ fromAITutor: this.fromAITutor
433
+ }
434
+ });
435
+ // this.router.navigateByUrl(
436
+ // [this.resumeDataLink.url],
437
+ // {
438
+ // relativeTo: this.resumeDataLink.url,
439
+ // queryParams: this.resumeDataLink.queryParams,
440
+ // queryParamsHandling: 'merge',
441
+ // })
442
+ /* tslint:disable-next-line */
443
+ }
444
+ else {
445
+ this.playResumeForAI.emit();
446
+ }
447
+ }
448
+ getResumeDataFromList(type) {
449
+ const resumeCopy = [...this.resumeData];
450
+ if (!type) {
451
+ // tslint:disable-next-line:max-line-length
452
+ const lastItem = resumeCopy && resumeCopy.sort((a, b) => new Date(b.lastAccessTime).getTime() - new Date(a.lastAccessTime).getTime()).shift();
453
+ return {
454
+ identifier: lastItem.contentId,
455
+ mimeType: lastItem.progressdetails && lastItem.progressdetails.mimeType,
456
+ };
457
+ }
458
+ const firstItem = resumeCopy && resumeCopy.length && resumeCopy[0];
459
+ return {
460
+ identifier: firstItem.contentId,
461
+ mimeType: firstItem.progressdetails && firstItem.progressdetails.mimeType,
462
+ };
463
+ }
464
+ getBatchId() {
465
+ let batchId = '';
466
+ if (this.batchData && this.batchData.content) {
467
+ for (const batch of this.batchData.content) {
468
+ batchId = batch.batchId;
469
+ }
470
+ }
471
+ return batchId;
472
+ }
473
+ raiseAIPopupStartTelemetry() {
474
+ const event = {
475
+ eventType: WsEvents.WsEventType.Telemetry,
476
+ eventLogLevel: WsEvents.WsEventLogLevel.Info,
477
+ data: {
478
+ edata: { type: 'click', "id": "ai-tutor-toc-page", "pageid": `/app/toc/${this.content?.identifier}` },
479
+ object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
480
+ state: WsEvents.EnumTelemetrySubType.Loaded,
481
+ eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
482
+ mode: 'view',
483
+ },
484
+ pageContext: { pageId: '/app/toc', module: 'Learn' },
485
+ from: '',
486
+ to: 'Telemetry',
487
+ };
488
+ this.eventSvc.dispatchChatbotEvent(event);
489
+ }
490
+ raiseAIPopupEndTelemetry() {
491
+ const event = {
492
+ eventType: WsEvents.WsEventType.Telemetry,
493
+ eventLogLevel: WsEvents.WsEventLogLevel.Info,
494
+ data: {
495
+ edata: { type: 'click', "id": "ai-tutor-toc-page", "pageid": `/app/toc/${this.content?.identifier}` },
496
+ object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
497
+ state: WsEvents.EnumTelemetrySubType.Unloaded,
498
+ eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
499
+ mode: 'view',
500
+ },
501
+ pageContext: { pageId: '/app/toc', module: 'Learn' },
502
+ from: '',
503
+ to: 'Telemetry',
504
+ };
505
+ this.eventSvc.dispatchChatbotEvent(event);
506
+ }
507
+ raiseAIPopupInteractTelemetry() {
508
+ const event = {
509
+ eventType: WsEvents.WsEventType.Telemetry,
510
+ eventLogLevel: WsEvents.WsEventLogLevel.Info,
511
+ data: {
512
+ edata: { type: 'click', "id": "ai-tutor-toc-page", "pageid": `/app/toc/${this.content?.identifier}` },
513
+ object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
514
+ state: WsEvents.EnumTelemetrySubType.Interact,
515
+ eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
516
+ mode: 'view',
517
+ },
518
+ pageContext: { pageId: '/app/toc', module: 'Learn' },
519
+ from: '',
520
+ to: 'Telemetry',
521
+ };
522
+ this.eventSvc.dispatchChatbotEvent(event);
523
+ }
524
+ enrollUserForAITutor() {
525
+ this.enrollUserToAI.emit();
526
+ }
527
+ async parseVTT() {
528
+ let identifier = this.resourceIdentifier;
529
+ // console.log('identifier--', identifier)
530
+ await this.tocSvc.aiGetResourceVttFile(identifier).subscribe(async (datas) => {
531
+ let data = datas?.data;
532
+ if (data && data.length && data[0]['transcription_urls'] && data[0]['transcription_urls'].length) {
533
+ this.vttLangArr = data[0]['transcription_urls'];
534
+ this.enableTranscriptionFlag = true;
535
+ // let url = data[0]['transcription_urls'][0]['uri']
536
+ this.transcriptionActiveLanguage = this.vttLangArr && this.vttLangArr.length && this.vttLangArr[0] && this.vttLangArr[0]['default_lang'] ? 'en' : 'en';
537
+ this.defaultTranscriptLanguage = this.vttLangArr && this.vttLangArr.length && this.vttLangArr[0] && this.vttLangArr[0]['default_lang'] ? 'en' : 'en';
538
+ let selectedTranscriptionStyle = this.vttLangArr.filter((item) => {
539
+ return item?.label === this.transcriptionActiveLanguage;
540
+ });
541
+ if (selectedTranscriptionStyle && selectedTranscriptionStyle.length) {
542
+ this.selectedTranscriptionStyle = selectedTranscriptionStyle[0];
543
+ }
544
+ else {
545
+ this.selectedTranscriptionStyle = this.vttLangArr[0];
546
+ }
547
+ const filteredArr = this.vttLangArr.filter((item) => item.label === this.transcriptionActiveLanguage);
548
+ let url = filteredArr.length > 0 ? filteredArr[0].uri : null;
549
+ //let url = this.vttLangArr.filter((item: any) => item.label === this.transcriptionActiveLanguage)[0]['uri']
550
+ if (url) {
551
+ const file = await VttFile.fromUrl(url);
552
+ let blocks = file.getBlocks();
553
+ this.subTitles = blocks;
554
+ }
555
+ this.tocSvc.changeTranscriptionLanguageEvent.next({ activeLang: this.transcriptionActiveLanguage, langData: this.vttLangArr, loadPlayer: true });
556
+ }
557
+ else {
558
+ this.vttLangArr = [];
559
+ this.enableTranscriptionFlag = false;
560
+ }
561
+ });
562
+ }
563
+ async renderSelectedLanguageTranscription(_langvalue) {
564
+ // this.transcriptionActiveLanguage = this.selectedTranscriptionStyle?.label
565
+ if (typeof _langvalue === 'string' && _langvalue) {
566
+ this.transcriptionActiveLanguage = _langvalue;
567
+ }
568
+ else {
569
+ this.selectedTranscriptionStyle = _langvalue?.value;
570
+ this.transcriptionActiveLanguage = this.selectedTranscriptionStyle?.label;
571
+ this.transcriptActiveLanguageText = _langvalue?.value?.language;
572
+ }
573
+ this.raiseTranscriptionLanguageStartTelemetry();
574
+ setTimeout(() => {
575
+ this.raiseTranscriptionLanguageInteractTelemetry();
576
+ });
577
+ let currentPath = this.vttLangArr.filter((item) => item?.label === this.transcriptionActiveLanguage);
578
+ if (currentPath && currentPath.length) {
579
+ this.selectedTranscriptionStyle = currentPath[0];
580
+ }
581
+ const file = await VttFile.fromUrl(currentPath && currentPath[0]?.uri);
582
+ let blocks = file.getBlocks();
583
+ this.subTitles = blocks;
584
+ this.raiseTranscriptionLanguageStopTelemetry();
585
+ // this.tocSvc.changeTranscriptionLanguageEvent.next({activeLang: this.transcriptionActiveLanguage, langData: this.vttLangArr, loadPlayer:false})
586
+ }
587
+ openSurveyFormPopup(event) {
588
+ this.trigerCompletionSurveyForm.emit(event);
589
+ }
590
+ playFromSlot(subtitle) {
591
+ if (subtitle) {
592
+ let startTime = subtitle.startTime / 1000;
593
+ let endTime = subtitle.endTime / 1000;
594
+ this.tocSvc.playTranscriptionVideo.next({ startTime, endTime });
595
+ }
596
+ }
597
+ formatMsToVttTime(ms) {
598
+ const totalSeconds = Math.floor(ms / 1000);
599
+ // const milliseconds = ms % 1000;
600
+ const hours = Math.floor(totalSeconds / 3600);
601
+ const minutes = Math.floor((totalSeconds % 3600) / 60);
602
+ const seconds = totalSeconds % 60;
603
+ const pad = (num, size) => num.toString().padStart(size, '0');
604
+ // return `${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}.${pad(milliseconds, 3)}`;
605
+ return `${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}`;
606
+ }
607
+ onlyscormAssessmentExists(data, key, value) {
608
+ for (let i = 0; i < data?.length; i++) {
609
+ if (data[i] && data[i]['children'] && data[i]['children'].length) {
610
+ this.onlyscormAssessmentExists(data[i]?.children, key, value);
611
+ }
612
+ else {
613
+ this.totalResource = this.totalResource + 1;
614
+ if (value.includes(data[i][key])) {
615
+ // this.showAITutorFlag = false;
616
+ this.scormAssessmentCount = this.scormAssessmentCount + 1;
617
+ }
618
+ }
619
+ }
620
+ if (this.totalResource === this.scormAssessmentCount) {
621
+ this.enableAITutorFlag = false;
622
+ }
623
+ else {
624
+ this.enableAITutorFlag = true;
625
+ }
626
+ return this.enableAITutorFlag;
627
+ }
628
+ raiseTranscriptionTabStartTelemetry() {
629
+ const event = {
630
+ eventType: WsEvents.WsEventType.Telemetry,
631
+ eventLogLevel: WsEvents.WsEventLogLevel.Info,
632
+ data: {
633
+ edata: { type: 'click', "id": "ai-tutor-viewer-page", "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-tab' },
634
+ object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
635
+ state: WsEvents.EnumTelemetrySubType.Loaded,
636
+ eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
637
+ mode: 'view',
638
+ },
639
+ pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
640
+ from: '',
641
+ to: 'Telemetry',
642
+ };
643
+ this.eventSvc.dispatchChatbotEvent(event);
644
+ }
645
+ raiseTranscriptionTabInteractTelemetry() {
646
+ const event = {
647
+ eventType: WsEvents.WsEventType.Telemetry,
648
+ eventLogLevel: WsEvents.WsEventLogLevel.Info,
649
+ data: {
650
+ edata: { type: 'click', "id": "ai-tutor-viewer-page", "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-tab' },
651
+ object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
652
+ state: WsEvents.EnumTelemetrySubType.Interact,
653
+ eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
654
+ mode: 'view',
655
+ },
656
+ pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
657
+ from: '',
658
+ to: 'Telemetry',
659
+ };
660
+ this.eventSvc.dispatchChatbotEvent(event);
661
+ }
662
+ raiseTranscriptionTabStopTelemetry() {
663
+ const event = {
664
+ eventType: WsEvents.WsEventType.Telemetry,
665
+ eventLogLevel: WsEvents.WsEventLogLevel.Info,
666
+ data: {
667
+ edata: { type: 'click', "id": "ai-tutor-viewer-page", "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-tab' },
668
+ object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
669
+ state: WsEvents.EnumTelemetrySubType.Unloaded,
670
+ eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
671
+ mode: 'view',
672
+ },
673
+ pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
674
+ from: '',
675
+ to: 'Telemetry',
676
+ };
677
+ this.eventSvc.dispatchChatbotEvent(event);
678
+ }
679
+ raiseTranscriptionLanguageStartTelemetry() {
680
+ const event = {
681
+ eventType: WsEvents.WsEventType.Telemetry,
682
+ eventLogLevel: WsEvents.WsEventLogLevel.Info,
683
+ data: {
684
+ edata: { type: 'click', "id": this.transcriptActiveLanguageText, "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-language' },
685
+ object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
686
+ state: WsEvents.EnumTelemetrySubType.Loaded,
687
+ eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
688
+ mode: 'view',
689
+ },
690
+ pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
691
+ from: '',
692
+ to: 'Telemetry',
693
+ };
694
+ this.eventSvc.dispatchChatbotEvent(event);
695
+ }
696
+ raiseTranscriptionLanguageInteractTelemetry() {
697
+ const event = {
698
+ eventType: WsEvents.WsEventType.Telemetry,
699
+ eventLogLevel: WsEvents.WsEventLogLevel.Info,
700
+ data: {
701
+ edata: { type: 'click', "id": this.transcriptActiveLanguageText, "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-language' },
702
+ object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
703
+ state: WsEvents.EnumTelemetrySubType.Interact,
704
+ eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
705
+ mode: 'view',
706
+ },
707
+ pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
708
+ from: '',
709
+ to: 'Telemetry',
710
+ };
711
+ this.eventSvc.dispatchChatbotEvent(event);
712
+ }
713
+ raiseTranscriptionLanguageStopTelemetry() {
714
+ const event = {
715
+ eventType: WsEvents.WsEventType.Telemetry,
716
+ eventLogLevel: WsEvents.WsEventLogLevel.Info,
717
+ data: {
718
+ edata: { type: 'click', "id": this.transcriptActiveLanguageText, "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-language' },
719
+ object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
720
+ state: WsEvents.EnumTelemetrySubType.Unloaded,
721
+ eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
722
+ mode: 'view',
723
+ },
724
+ pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
725
+ from: '',
726
+ to: 'Telemetry',
727
+ };
728
+ this.eventSvc.dispatchChatbotEvent(event);
729
+ }
730
+ closeAIPopup(event) {
731
+ if (event) {
732
+ this.showAITutorPopup = false;
733
+ this.selectedTabIndex = 0;
734
+ }
735
+ }
736
+ ngOnDestroy() {
737
+ if (this.resourceIdentifier$) {
738
+ this.resourceIdentifier$.unsubscribe();
739
+ }
740
+ if (this.subTitles$) {
741
+ this.subTitles$.unsubscribe();
742
+ }
743
+ if (this.transriptionLanguageSub) {
744
+ this.transriptionLanguageSub.unsubscribe();
745
+ }
746
+ }
747
+ clearCommentIdFromUrl() {
748
+ const currentQueryParams = { ...this.route.snapshot.queryParams };
749
+ delete currentQueryParams.commentId;
750
+ this.commentId = '';
751
+ this.discussWidgetData.newCommentSection.show = true;
752
+ }
753
+ resumeContentCall() {
754
+ this.resumeContent.emit();
755
+ }
756
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentTocComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.UtilityService }, { token: i3.LoadCheckService }, { token: i2.ConfigurationsService }, { token: i4.MatLegacyDialog }, { token: i5.AppTocService }, { token: i6.ActionService }, { token: i1.Router }, { token: i2.EventService }, { token: i7.ViewerDataService }, { token: i8.SamuhikCharchaService }, { token: i2.DomainConfService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Component }); }
757
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContentTocComponent, selector: "ws-widget-content-toc", inputs: { content: "content", contentReadData: "contentReadData", initialRouteData: "initialRouteData", changeTab: "changeTab", baseContentReadData: "baseContentReadData", forPreview: "forPreview", contentTabFlag: "contentTabFlag", resumeData: "resumeData", batchData: "batchData", skeletonLoader: "skeletonLoader", tocStructure: "tocStructure", pathSet: "pathSet", fromViewer: "fromViewer", hierarchyMapData: "hierarchyMapData", condition: "condition", kparray: "kparray", selectedBatchData: "selectedBatchData", config: "config", componentName: "componentName", isEnrolled: "isEnrolled", playResourceId: "playResourceId", sideNavBarOpened: "sideNavBarOpened", languageList: "languageList", lockCertificate: "lockCertificate", fromMDO: "fromMDO" }, outputs: { playResumeForAI: "playResumeForAI", enrollUserToAI: "enrollUserToAI", trigerCompletionSurveyForm: "trigerCompletionSurveyForm", resumeContent: "resumeContent" }, host: { listeners: { "window:scroll": "handleScroll($event)" } }, viewQueries: [{ propertyName: "tabElement", first: true, predicate: ["stickyMenu"], descendants: true }, { propertyName: "tabs", predicate: MatTab, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- && (content?.courseCategory !== courseCategory?.BLENDED_PROGRAM) -->\n<div class=\"ai-tutor-get-started\" *ngIf=\"!viewerPage && enableAITutorFlag && !isMobile\">\n <div class=\"flex flex-row align-items-center\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"64px\" width=\"64px\" />\n </div>\n <div class=\"flex flex-row align-items-center\">\n <div class=\"py-2\" >\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning tailored just\n for you.</span>\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\" [ngClass]=\"isMobile ? 'w-160' : ''\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div>\n </div>\n</div>\n<div class=\"tab-group-container\">\n <mat-tab-group (selectedTabChange)=\"handleTabChange($event)\" #stickyMenu [class.sticky-mat-tabs]=\"sticky\"\n [selectedIndex]=\"selectedTabIndex\" [ngClass]=\"{'content-tabs':!fromViewer,'contentSticky': forPreview}\">\n\n <!-- Transcription Tab -->\n <mat-tab label=\"Transcription\"\n *ngIf=\"viewerPage && enableTranscriptionFlag && vttLangArr?.length && subTitles?.length\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>Transcript</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <div class=\"disclaimer my-2\">\n <p class=\"py-2 px-2\">Disclaimer : These transcripts and subtitles are AI-generated and may contain\n errors.</p>\n </div>\n <div class=\"w-full ml-5 mr-5\" *ngIf=\"isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\" style=\"height: auto; width: 100%;\"\n floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\" *ngFor=\"let lang of vttLangArr\"\n [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"ml-4 flex flex-row justify-end transcript-control\">\n <!-- <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\" (change)=\"renderSelectedLanguageTranscription($event)\">\n <option [value]=\"lang?.language\" *ngFor=\"let lang of vttLangArr\" [selected]=\"lang?.label === transcriptionActiveLanguage\">\n <span *ngIf=\"transcriptionActiveLanguage === lang?.label\"> Transcript Language: </span> {{lang?.language | titlecase}} <span *ngIf=\"transcriptionActiveLanguage === lang?.language\">(Auto)</span>\n </option>\n </select>\n </mat-form-field> -->\n <div class=\"flex flex-row w-full\">\n <div [ngClass]=\"!isMobileForAI ? 'w-subtitle-80':'w-full'\">\n <div [ngClass]=\"!isMobileForAI ? 'ml-5-per' : ''\" *ngIf=\"subTitles && subTitles?.length\">\n <!-- Transcription content -->\n <ng-container *ngFor=\"let subtitle of subTitles\">\n <div class=\"flex flex-col my-2\">\n <div class=\"flex flex-row\">\n <div class=\"subtitle-time\">\n <p class=\"cursor-pointer\" (click)=\"playFromSlot(subtitle)\">\n <span class=\"pr-1 blue-underline\"> {{\n formatMsToVttTime(subtitle?.startTime) }} </span>\n <span class=\"black-text\">-</span>\n <span class=\"pl-1 blue-underline\">{{\n formatMsToVttTime(subtitle?.endTime) }}</span>\n </p>\n </div>\n <div class=\"ml-4 subtitle-text-slot mr-4\">\n <p class=\"black-text\" [innerHtml]=\"subtitle?.text\n | highlight : keywordToHighlight?.text\n : ((subtitle?.startTime / 1000) >= keywordToHighlight?.start\n && (subtitle?.endTime / 1000) <= keywordToHighlight?.end)\">\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"w-subtitle-20\" *ngIf=\"!isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\"\n style=\"height: auto; width: 100%;\" floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\"\n *ngFor=\"let lang of vttLangArr\" [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n </div>\n <!-- <div class=\"flex flex-row align-items-center my-2\">\n <div>\n <p>0.00</p>\n </div>\n <div class=\"ml-4\">\n <p>AI for Digital Transformation: Machine Learning and Deep Learning Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>\n </div>\n <div class=\"ml-4\">\n <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\">\n <option value=\"\">Transcription Language: English (Auto)</option>\n </select>\n </mat-form-field>\n </div>\n </div> -->\n\n </ng-template>\n </mat-tab>\n\n <!-- About Tab -->\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"ai-tutor-get-started-mobile my-2 ml-2\" *ngIf=\"!viewerPage && enableAITutorFlag && isMobile && (domainConfService?.isFeatureByPageEnabled('toc','aiTutor'))\">\n <div class=\"flex flex-row align-items-center w-98\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"48px\" width=\"48px\" />\n </div>\n <div class=\"flex flex-row align-items-center w-60\">\n <div class=\"py-2\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning\n tailored just for you.</span>\n </div>\n\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI\n Tutor</span></a>\n </div>\n\n </div>\n <!-- <div class=\"flex justify-end my-2 mx-2\">\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div> -->\n </div>\n <ws-widget-app-toc-about [fromViewer]=\"fromViewer\" [pathSet]=\"pathSet\" [content]=\"content\"\n [contentReadData]=\"contentReadData\" [baseContentReadData]=\"baseContentReadData\"\n [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"false\" [sticky]=\"sticky\"\n [selectedBatchData]=\"selectedBatchData\" [selectedTabValue]=\"selectedTabIndex\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [condition]=\"condition\" [kparray]=\"kparray\" [showReviews]=\"'true'\" [languageList]=\"languageList\"\n [lockCertificate]=\"lockCertificate\" (trigerCompletionSurveyForm)=\"openSurveyFormPopup($event)\"\n [fromMDO]=\"fromMDO\">\n </ws-widget-app-toc-about>\n </ng-template>\n </mat-tab>\n\n <!-- Content Tab -->\n <ng-container *ngIf=\"content?.children?.length\">\n <mat-tab label=\"{{ 'apptocsinglepage.content' | translate }}\" *ngIf=\"contentTabFlag\">\n <ng-template matTabContent>\n <ws-widget-app-toc-content [batchId]=\"batchId\" [componentName]=\"componentName\" [pathSet]=\"pathSet\"\n [content]=\"content\" [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"forPreview\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [hierarchyMapData]=\"hierarchyMapData\" [baseContentReadData]=\"baseContentReadData\">\n </ws-widget-app-toc-content>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"config?.commentsTab && !forPreview && (domainConfService?.isFeatureByPageEnabled('toc','startDiscussion'))\">\n <mat-tab label=\"{{ 'apptocsinglepage.startDiscussion' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\"\n *ngIf=\"discussWidgetData && discussWidgetData?.newCommentSection?.commentTreeData?.entityId\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container\n *ngIf=\"config?.samuhikCharchaTab && condition && contentReadData?.eventLinked?.length > 0 && enableSamuhikCharchaTab && (domainConfService?.isFeatureByPageEnabled('toc','samuhikCharcha'))\">\n <mat-tab label=\"{{ 'apptocsinglepage.samuhikCharcha' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"samuhikCharchaDiv\">\n <ws-widget-samuhik-charcha-content [content]=\"contentReadData\" [conditionData]=\"condition\"\n (resumeContent)=\"resumeContentCall()\">\n </ws-widget-samuhik-charcha-content>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Teachers Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && teacherNotesFlag\">\n <mat-tab label=\"Teachers Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Teachers Resource'\"></ws-widget-app-toc-teachers-notes>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Reference Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && referenceNotesFlag\">\n <mat-tab label=\"Reference Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Reference Resource'\"></ws-widget-app-toc-teachers-notes>\n\n <!-- <ws-widget-app-toc-reference-notes [content]=\"contentReadData\"></ws-widget-app-toc-reference-notes> -->\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"showAssignmentsTab && !forPreview && (domainConfService?.isFeatureByPageEnabled('toc','assignment'))\">\n <mat-tab label=\"{{ 'apptocsinglepage.assignments' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"takeAssessmentDiv\">\n <ws-widget-app-batch-assignments [content]=\"content\"></ws-widget-app-batch-assignments>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Transcription Tab -->\n <mat-tab label=\"AI Tutor\" *ngIf=\"viewerPage && enableAITutorFlag && isMobile && (domainConfService?.isFeatureByPageEnabled('toc','transcription'))\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>AI Tutor</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <ng-container *ngIf=\"showAITutorPopup\">\n <div>\n <ws-widget-ai-tutor [content]=\"content?.identifier\"\n (closeAIPopup)=\"closeAIPopup($event)\"></ws-widget-ai-tutor>\n </div>\n </ng-container>\n </ng-template>\n </mat-tab>\n\n </mat-tab-group>\n</div>", styles: ["::ng-deep .content-tabs .mat-tab-body-content{overflow:hidden!important;background-color:#eff3f9}::ng-deep .content-tabs .mat-tab-body.mat-tab-body-active{overflow-y:hidden}:host ::ng-deep .sticky-mat-tabs .mat-tab-header{top:96px;z-index:1000;position:sticky;position:-webkit-sticky;background:#eff3f9}#commentsDiv,#samuhikCharchaDiv{margin:1rem auto;min-height:800px}@media screen and (max-width: 768px){.sticky-mat-tabs .mat-tab-header{top:120px;position:fixed;width:100%}.content-tabs{border-radius:16px 16px 0 0;box-shadow:0 -2px 9px #00000014;background-color:#fff}}::ng-deep .contentSticky .mat-tab-header{top:0!important}.ai-tutor-btn{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:115px}.ai-tutor-get-started{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:100%;min-height:80px}.ai-tutor-get-started-mobile{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:96%;min-height:80px}.align-items-center{align-items:center}.w-160{width:160px}.w-98{width:98%}.font-weight-600{font-weight:600;line-height:1}.ai-tutor-label{color:#1b4ca1;font-weight:700}.section-dd{border-radius:32px;border:1px solid #1b4ca1;padding:12px 16px;color:#1b4ca1;width:auto;height:45px;font-size:14px;font-weight:700}::ng-deep .section-dd-container .mat-form-field-wrapper{padding-bottom:.5em!important}::ng-deep .section-dd-container .mat-form-field-infix{width:auto!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:#1b4ca1!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{top:35%!important;right:15%!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-input-element{padding-right:65px}::ng-deep .section-dd .mat-form-field-underline{display:none!important}.w-20{width:20%}::ng-deep .highlight{background-color:#ff0!important;font-weight:700!important}.red-circle{background:red;opacity:1;color:#fff;padding:2px 10px;height:14px;width:20px;border-radius:2px;vertical-align:middle;display:flex;justify-content:center;align-items:center;margin-left:8px;margin-top:-10px}.w-60{width:60%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px}.blue-underline{color:#1b4ca1;text-decoration:underline;font-weight:700}.transcript-control{color:#fff;display:flex;align-items:flex-start;justify-content:flex-start}:host ::ng-deep .multiline-select .mat-mdc-select-value-text{white-space:pre-wrap!important}:host ::ng-deep .mat-pseudo-checkbox{display:none!important}:host ::ng-deep .mat-pseudo-checkbox-checked{display:none!important}::ng-deep .multiline-select.mat-form-field{border-bottom:1px solid #1b4ca1!important}::ng-deep .multiline-select-option .mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:#e3eeff!important;color:#1b4ca1!important;font-weight:700!important}.transcript-flex-container{display:flex;justify-content:flex-end;width:100%}.selected-option-content{color:#1b4ca1}.ml-5-per{margin-left:5%}.black-text{color:#000;word-wrap:break-word}.subtitle-time{width:20%;word-wrap:break-word}.subtitle-text-slot{width:74%}.w-subtitle-80{width:70%}.w-subtitle-20{width:30%}::ng-deep .mat-mdc-select-panel{background:#fff!important}@media (min-width: 1280px) and (max-width: 1280px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1056px) and (max-width: 1232px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1024px) and (max-width: 1024px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 768px) and (max-width: 1023px){.subtitle-time{width:25%}.subtitle-text-slot{width:75%}}@media (min-width: 360px) and (max-width: 360px){.subtitle-time,.subtitle-text-slot{width:50%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 361px) and (max-width: 540px){.subtitle-time,.subtitle-text-slot{width:50%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 541px) and (max-width: 767px){.subtitle-time{width:40%}.subtitle-text-slot{width:60%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 768px){::ng-deep .tab-group-container .mdc-tab{min-width:auto;max-width:max-content;text-align:left;justify-content:start;padding-left:24px;padding-right:24px}.w-60{width:60%}}:host ::ng-deep .tab-group-container ::ng-deep .mat-mdc-tab-header-pagination{z-index:1!important}:host ::ng-deep .transcript-flex-container .mat-mdc-text-field-wrapper{width:100%;padding:10px}:host ::ng-deep .multiline-select.mat-mdc-form-field .mdc-line-ripple{display:none!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mdc-line-ripple{display:block!important;height:4px!important;color:#1b4ca1!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mat-mdc-form-field-flex{background-color:#e3eeff!important}:host ::ng-deep .multiline-select .mat-mdc-select-arrow-wrapper{margin-right:10px}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.MatTabContent, selector: "[matTabContent]" }, { kind: "directive", type: i11.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i11.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i11.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "component", type: i12.WidgetCommentComponent, selector: "d-v2-widget-comment", inputs: ["widgetData", "commentId"], outputs: ["commentDataChange"] }, { kind: "component", type: i13.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i14.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i14.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i15.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i16.AppTocAboutComponent, selector: "ws-widget-app-toc-about", inputs: ["condition", "kparray", "content", "contentReadData", "baseContentReadData", "skeletonLoader", "sticky", "tocStructure", "pathSet", "config", "resumeData", "forPreview", "showReviews", "batchData", "fromViewer", "selectedBatchData", "selectedTabValue", "fromMarketPlace", "showMarketPlaceCertificate", "languageList", "lockCertificate", "fromMDO"], outputs: ["trigerCompletionSurveyForm"] }, { kind: "component", type: i17.AppTocContentComponent, selector: "ws-widget-app-toc-content", inputs: ["batchId", "content", "forPreview", "resumeData", "batchData", "skeletonLoader", "tocStructure", "config", "hierarchyMapData", "pathSet", "componentName", "isPreAssessment", "baseContentReadData", "contentReadData"] }, { kind: "component", type: i18.AppTocTeachersNotesComponent, selector: "ws-widget-app-toc-teachers-notes", inputs: ["content", "notesDisplayType"] }, { kind: "component", type: i19.AppTocBatchAssignmentsComponent, selector: "ws-widget-app-batch-assignments", inputs: ["content"] }, { kind: "component", type: i20.SamuhikCharchaContentComponent, selector: "ws-widget-samuhik-charcha-content", inputs: ["content", "conditionData", "locked"], outputs: ["resumeContent"] }, { kind: "component", type: i21.AiTutorComponent, selector: "ws-widget-ai-tutor", inputs: ["from", "content", "userJourney"], outputs: ["closeAIPopup"] }, { kind: "pipe", type: i9.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i22.TranslatePipe, name: "translate" }, { kind: "pipe", type: i23.HighlightPipe, name: "highlight" }] }); }
758
+ }
759
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentTocComponent, decorators: [{
760
+ type: Component,
761
+ args: [{ selector: 'ws-widget-content-toc', template: "<!-- && (content?.courseCategory !== courseCategory?.BLENDED_PROGRAM) -->\n<div class=\"ai-tutor-get-started\" *ngIf=\"!viewerPage && enableAITutorFlag && !isMobile\">\n <div class=\"flex flex-row align-items-center\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"64px\" width=\"64px\" />\n </div>\n <div class=\"flex flex-row align-items-center\">\n <div class=\"py-2\" >\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning tailored just\n for you.</span>\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\" [ngClass]=\"isMobile ? 'w-160' : ''\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div>\n </div>\n</div>\n<div class=\"tab-group-container\">\n <mat-tab-group (selectedTabChange)=\"handleTabChange($event)\" #stickyMenu [class.sticky-mat-tabs]=\"sticky\"\n [selectedIndex]=\"selectedTabIndex\" [ngClass]=\"{'content-tabs':!fromViewer,'contentSticky': forPreview}\">\n\n <!-- Transcription Tab -->\n <mat-tab label=\"Transcription\"\n *ngIf=\"viewerPage && enableTranscriptionFlag && vttLangArr?.length && subTitles?.length\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>Transcript</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <div class=\"disclaimer my-2\">\n <p class=\"py-2 px-2\">Disclaimer : These transcripts and subtitles are AI-generated and may contain\n errors.</p>\n </div>\n <div class=\"w-full ml-5 mr-5\" *ngIf=\"isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\" style=\"height: auto; width: 100%;\"\n floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\" *ngFor=\"let lang of vttLangArr\"\n [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"ml-4 flex flex-row justify-end transcript-control\">\n <!-- <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\" (change)=\"renderSelectedLanguageTranscription($event)\">\n <option [value]=\"lang?.language\" *ngFor=\"let lang of vttLangArr\" [selected]=\"lang?.label === transcriptionActiveLanguage\">\n <span *ngIf=\"transcriptionActiveLanguage === lang?.label\"> Transcript Language: </span> {{lang?.language | titlecase}} <span *ngIf=\"transcriptionActiveLanguage === lang?.language\">(Auto)</span>\n </option>\n </select>\n </mat-form-field> -->\n <div class=\"flex flex-row w-full\">\n <div [ngClass]=\"!isMobileForAI ? 'w-subtitle-80':'w-full'\">\n <div [ngClass]=\"!isMobileForAI ? 'ml-5-per' : ''\" *ngIf=\"subTitles && subTitles?.length\">\n <!-- Transcription content -->\n <ng-container *ngFor=\"let subtitle of subTitles\">\n <div class=\"flex flex-col my-2\">\n <div class=\"flex flex-row\">\n <div class=\"subtitle-time\">\n <p class=\"cursor-pointer\" (click)=\"playFromSlot(subtitle)\">\n <span class=\"pr-1 blue-underline\"> {{\n formatMsToVttTime(subtitle?.startTime) }} </span>\n <span class=\"black-text\">-</span>\n <span class=\"pl-1 blue-underline\">{{\n formatMsToVttTime(subtitle?.endTime) }}</span>\n </p>\n </div>\n <div class=\"ml-4 subtitle-text-slot mr-4\">\n <p class=\"black-text\" [innerHtml]=\"subtitle?.text\n | highlight : keywordToHighlight?.text\n : ((subtitle?.startTime / 1000) >= keywordToHighlight?.start\n && (subtitle?.endTime / 1000) <= keywordToHighlight?.end)\">\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"w-subtitle-20\" *ngIf=\"!isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\"\n style=\"height: auto; width: 100%;\" floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\"\n *ngFor=\"let lang of vttLangArr\" [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n </div>\n <!-- <div class=\"flex flex-row align-items-center my-2\">\n <div>\n <p>0.00</p>\n </div>\n <div class=\"ml-4\">\n <p>AI for Digital Transformation: Machine Learning and Deep Learning Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>\n </div>\n <div class=\"ml-4\">\n <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\">\n <option value=\"\">Transcription Language: English (Auto)</option>\n </select>\n </mat-form-field>\n </div>\n </div> -->\n\n </ng-template>\n </mat-tab>\n\n <!-- About Tab -->\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"ai-tutor-get-started-mobile my-2 ml-2\" *ngIf=\"!viewerPage && enableAITutorFlag && isMobile && (domainConfService?.isFeatureByPageEnabled('toc','aiTutor'))\">\n <div class=\"flex flex-row align-items-center w-98\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"48px\" width=\"48px\" />\n </div>\n <div class=\"flex flex-row align-items-center w-60\">\n <div class=\"py-2\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning\n tailored just for you.</span>\n </div>\n\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI\n Tutor</span></a>\n </div>\n\n </div>\n <!-- <div class=\"flex justify-end my-2 mx-2\">\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div> -->\n </div>\n <ws-widget-app-toc-about [fromViewer]=\"fromViewer\" [pathSet]=\"pathSet\" [content]=\"content\"\n [contentReadData]=\"contentReadData\" [baseContentReadData]=\"baseContentReadData\"\n [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"false\" [sticky]=\"sticky\"\n [selectedBatchData]=\"selectedBatchData\" [selectedTabValue]=\"selectedTabIndex\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [condition]=\"condition\" [kparray]=\"kparray\" [showReviews]=\"'true'\" [languageList]=\"languageList\"\n [lockCertificate]=\"lockCertificate\" (trigerCompletionSurveyForm)=\"openSurveyFormPopup($event)\"\n [fromMDO]=\"fromMDO\">\n </ws-widget-app-toc-about>\n </ng-template>\n </mat-tab>\n\n <!-- Content Tab -->\n <ng-container *ngIf=\"content?.children?.length\">\n <mat-tab label=\"{{ 'apptocsinglepage.content' | translate }}\" *ngIf=\"contentTabFlag\">\n <ng-template matTabContent>\n <ws-widget-app-toc-content [batchId]=\"batchId\" [componentName]=\"componentName\" [pathSet]=\"pathSet\"\n [content]=\"content\" [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"forPreview\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [hierarchyMapData]=\"hierarchyMapData\" [baseContentReadData]=\"baseContentReadData\">\n </ws-widget-app-toc-content>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"config?.commentsTab && !forPreview && (domainConfService?.isFeatureByPageEnabled('toc','startDiscussion'))\">\n <mat-tab label=\"{{ 'apptocsinglepage.startDiscussion' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\"\n *ngIf=\"discussWidgetData && discussWidgetData?.newCommentSection?.commentTreeData?.entityId\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container\n *ngIf=\"config?.samuhikCharchaTab && condition && contentReadData?.eventLinked?.length > 0 && enableSamuhikCharchaTab && (domainConfService?.isFeatureByPageEnabled('toc','samuhikCharcha'))\">\n <mat-tab label=\"{{ 'apptocsinglepage.samuhikCharcha' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"samuhikCharchaDiv\">\n <ws-widget-samuhik-charcha-content [content]=\"contentReadData\" [conditionData]=\"condition\"\n (resumeContent)=\"resumeContentCall()\">\n </ws-widget-samuhik-charcha-content>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Teachers Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && teacherNotesFlag\">\n <mat-tab label=\"Teachers Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Teachers Resource'\"></ws-widget-app-toc-teachers-notes>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Reference Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && referenceNotesFlag\">\n <mat-tab label=\"Reference Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Reference Resource'\"></ws-widget-app-toc-teachers-notes>\n\n <!-- <ws-widget-app-toc-reference-notes [content]=\"contentReadData\"></ws-widget-app-toc-reference-notes> -->\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"showAssignmentsTab && !forPreview && (domainConfService?.isFeatureByPageEnabled('toc','assignment'))\">\n <mat-tab label=\"{{ 'apptocsinglepage.assignments' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"takeAssessmentDiv\">\n <ws-widget-app-batch-assignments [content]=\"content\"></ws-widget-app-batch-assignments>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Transcription Tab -->\n <mat-tab label=\"AI Tutor\" *ngIf=\"viewerPage && enableAITutorFlag && isMobile && (domainConfService?.isFeatureByPageEnabled('toc','transcription'))\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>AI Tutor</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <ng-container *ngIf=\"showAITutorPopup\">\n <div>\n <ws-widget-ai-tutor [content]=\"content?.identifier\"\n (closeAIPopup)=\"closeAIPopup($event)\"></ws-widget-ai-tutor>\n </div>\n </ng-container>\n </ng-template>\n </mat-tab>\n\n </mat-tab-group>\n</div>", styles: ["::ng-deep .content-tabs .mat-tab-body-content{overflow:hidden!important;background-color:#eff3f9}::ng-deep .content-tabs .mat-tab-body.mat-tab-body-active{overflow-y:hidden}:host ::ng-deep .sticky-mat-tabs .mat-tab-header{top:96px;z-index:1000;position:sticky;position:-webkit-sticky;background:#eff3f9}#commentsDiv,#samuhikCharchaDiv{margin:1rem auto;min-height:800px}@media screen and (max-width: 768px){.sticky-mat-tabs .mat-tab-header{top:120px;position:fixed;width:100%}.content-tabs{border-radius:16px 16px 0 0;box-shadow:0 -2px 9px #00000014;background-color:#fff}}::ng-deep .contentSticky .mat-tab-header{top:0!important}.ai-tutor-btn{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:115px}.ai-tutor-get-started{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:100%;min-height:80px}.ai-tutor-get-started-mobile{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:96%;min-height:80px}.align-items-center{align-items:center}.w-160{width:160px}.w-98{width:98%}.font-weight-600{font-weight:600;line-height:1}.ai-tutor-label{color:#1b4ca1;font-weight:700}.section-dd{border-radius:32px;border:1px solid #1b4ca1;padding:12px 16px;color:#1b4ca1;width:auto;height:45px;font-size:14px;font-weight:700}::ng-deep .section-dd-container .mat-form-field-wrapper{padding-bottom:.5em!important}::ng-deep .section-dd-container .mat-form-field-infix{width:auto!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:#1b4ca1!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{top:35%!important;right:15%!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-input-element{padding-right:65px}::ng-deep .section-dd .mat-form-field-underline{display:none!important}.w-20{width:20%}::ng-deep .highlight{background-color:#ff0!important;font-weight:700!important}.red-circle{background:red;opacity:1;color:#fff;padding:2px 10px;height:14px;width:20px;border-radius:2px;vertical-align:middle;display:flex;justify-content:center;align-items:center;margin-left:8px;margin-top:-10px}.w-60{width:60%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px}.blue-underline{color:#1b4ca1;text-decoration:underline;font-weight:700}.transcript-control{color:#fff;display:flex;align-items:flex-start;justify-content:flex-start}:host ::ng-deep .multiline-select .mat-mdc-select-value-text{white-space:pre-wrap!important}:host ::ng-deep .mat-pseudo-checkbox{display:none!important}:host ::ng-deep .mat-pseudo-checkbox-checked{display:none!important}::ng-deep .multiline-select.mat-form-field{border-bottom:1px solid #1b4ca1!important}::ng-deep .multiline-select-option .mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:#e3eeff!important;color:#1b4ca1!important;font-weight:700!important}.transcript-flex-container{display:flex;justify-content:flex-end;width:100%}.selected-option-content{color:#1b4ca1}.ml-5-per{margin-left:5%}.black-text{color:#000;word-wrap:break-word}.subtitle-time{width:20%;word-wrap:break-word}.subtitle-text-slot{width:74%}.w-subtitle-80{width:70%}.w-subtitle-20{width:30%}::ng-deep .mat-mdc-select-panel{background:#fff!important}@media (min-width: 1280px) and (max-width: 1280px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1056px) and (max-width: 1232px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1024px) and (max-width: 1024px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 768px) and (max-width: 1023px){.subtitle-time{width:25%}.subtitle-text-slot{width:75%}}@media (min-width: 360px) and (max-width: 360px){.subtitle-time,.subtitle-text-slot{width:50%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 361px) and (max-width: 540px){.subtitle-time,.subtitle-text-slot{width:50%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 541px) and (max-width: 767px){.subtitle-time{width:40%}.subtitle-text-slot{width:60%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 768px){::ng-deep .tab-group-container .mdc-tab{min-width:auto;max-width:max-content;text-align:left;justify-content:start;padding-left:24px;padding-right:24px}.w-60{width:60%}}:host ::ng-deep .tab-group-container ::ng-deep .mat-mdc-tab-header-pagination{z-index:1!important}:host ::ng-deep .transcript-flex-container .mat-mdc-text-field-wrapper{width:100%;padding:10px}:host ::ng-deep .multiline-select.mat-mdc-form-field .mdc-line-ripple{display:none!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mdc-line-ripple{display:block!important;height:4px!important;color:#1b4ca1!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mat-mdc-form-field-flex{background-color:#e3eeff!important}:host ::ng-deep .multiline-select .mat-mdc-select-arrow-wrapper{margin-right:10px}\n"] }]
762
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.UtilityService }, { type: i3.LoadCheckService }, { type: i2.ConfigurationsService }, { type: i4.MatLegacyDialog }, { type: i5.AppTocService }, { type: i6.ActionService }, { type: i1.Router }, { type: i2.EventService }, { type: i7.ViewerDataService }, { type: i8.SamuhikCharchaService }, { type: i2.DomainConfService }, { type: undefined, decorators: [{
763
+ type: Inject,
764
+ args: ['environment']
765
+ }] }]; }, propDecorators: { content: [{
766
+ type: Input
767
+ }], contentReadData: [{
768
+ type: Input
769
+ }], initialRouteData: [{
770
+ type: Input
771
+ }], changeTab: [{
772
+ type: Input
773
+ }], baseContentReadData: [{
774
+ type: Input
775
+ }], forPreview: [{
776
+ type: Input
777
+ }], contentTabFlag: [{
778
+ type: Input
779
+ }], resumeData: [{
780
+ type: Input
781
+ }], batchData: [{
782
+ type: Input
783
+ }], skeletonLoader: [{
784
+ type: Input
785
+ }], tocStructure: [{
786
+ type: Input
787
+ }], pathSet: [{
788
+ type: Input
789
+ }], fromViewer: [{
790
+ type: Input
791
+ }], hierarchyMapData: [{
792
+ type: Input
793
+ }], tabElement: [{
794
+ type: ViewChild,
795
+ args: ['stickyMenu']
796
+ }], tabs: [{
797
+ type: ViewChildren,
798
+ args: [MatTab]
799
+ }], condition: [{
800
+ type: Input
801
+ }], kparray: [{
802
+ type: Input
803
+ }], selectedBatchData: [{
804
+ type: Input
805
+ }], config: [{
806
+ type: Input
807
+ }], componentName: [{
808
+ type: Input
809
+ }], isEnrolled: [{
810
+ type: Input
811
+ }], playResourceId: [{
812
+ type: Input
813
+ }], sideNavBarOpened: [{
814
+ type: Input
815
+ }], languageList: [{
816
+ type: Input
817
+ }], lockCertificate: [{
818
+ type: Input
819
+ }], fromMDO: [{
820
+ type: Input
821
+ }], playResumeForAI: [{
822
+ type: Output
823
+ }], enrollUserToAI: [{
824
+ type: Output
825
+ }], trigerCompletionSurveyForm: [{
826
+ type: Output
827
+ }], resumeContent: [{
828
+ type: Output
829
+ }], handleScroll: [{
830
+ type: HostListener,
831
+ args: ['window:scroll', ['$event']]
832
+ }] } });
833
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC10b2MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC10b2MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC10b2MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQTRCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFakwsT0FBTyxFQUEwRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQU12SCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQTtBQUN4RyxPQUFPLEVBQWdDLHFCQUFxQixJQUFJLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3hILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFBO0FBRzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBRS9DLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBQzNCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9wRCxNQUFNLE9BQU8sbUJBQW1CO0lBc0U5QixZQUNVLEtB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QkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBb1ZQLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UsIERvbWFpbkNvbmZTZXJ2aWNlLCBFdmVudFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBXc0V2ZW50cyB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcblxuaW1wb3J0IHsgTG9hZENoZWNrU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2xvYWQtY2hlY2suc2VydmljZSdcbmltcG9ydCB7IE1hdExlZ2FjeVRhYkdyb3VwIGFzIE1hdFRhYkdyb3VwLCBNYXRMZWdhY3lUYWJDaGFuZ2VFdmVudCBhcyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS10YWJzJ1xuaW1wb3J0IHsgTnNEaXNjdXNzaW9uVjIgfSBmcm9tICdAc3VuYmlyZC1jYi9kaXNjdXNzaW9uLXYyJ1xuaW1wb3J0IHsgQWlUdXRvckNvbmZpcm1Qb3B1cENvbXBvbmVudCB9IGZyb20gJy4vYWktdHV0b3ItY29uZmlybS1wb3B1cC9haS10dXRvci1jb25maXJtLXBvcHVwLmNvbXBvbmVudCdcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2csIE1hdExlZ2FjeURpYWxvZ0NvbmZpZyBhcyBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJ1xuaW1wb3J0IHsgdmlld2VyUm91dGVHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9fc2VydmljZXMvdmlld2VyLXJvdXRlLXV0aWwnXG5pbXBvcnQgeyBBcHBUb2NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwLXRvYy5zZXJ2aWNlJ1xuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FjdGlvbi5zZXJ2aWNlJ1xuaW1wb3J0IHsgVnR0RmlsZSB9IGZyb20gJ0Bwb2x5ZmxpeC92dHQtcGFyc2VyJ1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBWaWV3ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ZpZXdlci1kYXRhLnNlcnZpY2UnXG5pbXBvcnQgeyBNYXRUYWIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJ1xuaW1wb3J0IHsgU2FtdWhpa0NoYXJjaGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzL3NhbXVoaWstY2hhcmNoYS5zZXJ2aWNlJ1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi8uLi8uLi9fY29sbGVjdGlvbi1hcGknXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3cy13aWRnZXQtY29udGVudC10b2MnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC10b2MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb250ZW50LXRvYy5jb21wb25lbnQuc2NzcyddLFxufSlcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRUb2NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG5cbiAgdGFiQ2hhbmdlVmFsdWU6IGFueSA9ICcnXG4gIEBJbnB1dCgpIGNvbnRlbnQhOiBhbnlcbiAgQElucHV0KCkgY29udGVudFJlYWREYXRhITogYW55XG4gIEBJbnB1dCgpIGluaXRpYWxSb3V0ZURhdGE6IGFueVxuICBASW5wdXQoKSBjaGFuZ2VUYWIgPSBmYWxzZVxuICBASW5wdXQoKSBiYXNlQ29udGVudFJlYWREYXRhITogYW55XG4gIHJvdXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICBASW5wdXQoKSBmb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKVxuICBASW5wdXQoKSBjb250ZW50VGFiRmxhZyA9IHRydWVcbiAgQElucHV0KCkgcmVzdW1lRGF0YTogYW55IHwgbnVsbCA9IG51bGxcbiAgQElucHV0KCkgYmF0Y2hEYXRhOiAvKipOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlICovIGFueSB8IG51bGwgPSBudWxsXG4gIEBJbnB1dCgpIHNrZWxldG9uTG9hZGVyID0gZmFsc2VcbiAgQElucHV0KCkgdG9jU3RydWN0dXJlOiBhbnkgPSB7fVxuICBASW5wdXQoKSBwYXRoU2V0OiBhbnlcbiAgQElucHV0KCkgZnJvbVZpZXdlciA9IGZhbHNlXG4gIEBJbnB1dCgpIGhpZXJhcmNoeU1hcERhdGE6IGFueSA9IHt9XG4gIEBWaWV3Q2hpbGQoJ3N0aWNreU1lbnUnKSB0YWJFbGVtZW50ITogTWF0VGFiR3JvdXBcbiAgQFZpZXdDaGlsZHJlbihNYXRUYWIpIHRhYnMhOiBRdWVyeUxpc3Q8TWF0VGFiPlxuICBASW5wdXQoKSBjb25kaXRpb246IGFueVxuICBASW5wdXQoKSBrcGFycmF5OiBhbnlcbiAgQElucHV0KCkgc2VsZWN0ZWRCYXRjaERhdGE6IGFueVxuICBASW5wdXQoKSBjb25maWc6IGFueVxuICBASW5wdXQoKSBjb21wb25lbnROYW1lITogc3RyaW5nXG4gIEBJbnB1dCgpIGlzRW5yb2xsZWQhOiBib29sZWFuXG4gIEBJbnB1dCgpIHBsYXlSZXNvdXJjZUlkID0gJydcbiAgQElucHV0KCkgc2lkZU5hdkJhck9wZW5lZCA9IGZhbHNlXG4gIEBJbnB1dCgpIGxhbmd1YWdlTGlzdCA9IFtdXG4gIEBJbnB1dCgpIGxvY2tDZXJ0aWZpY2F0ZSA9IGZhbHNlXG4gIEBJbnB1dCgpIGZyb21NRE8gPSBmYWxzZVxuICBAT3V0cHV0KCkgcGxheVJlc3VtZUZvckFJID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSBlbnJvbGxVc2VyVG9BSSA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgdHJpZ2VyQ29tcGxldGlvblN1cnZleUZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KClcbiAgQE91dHB1dCgpIHJlc3VtZUNvbnRlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcblxuICBjb21tZW50SWQ/OiBzdHJpbmcgPSAnJ1xuICBzdGlja3kgPSBmYWxzZVxuICBtZW51UG9zaXRpb246IGFueVxuICBpc01vYmlsZSA9IGZhbHNlXG4gIHNlbGVjdGVkVGFiSW5kZXggPSAwXG4gIGRpc2N1c3NXaWRnZXREYXRhITogTnNEaXNjdXNzaW9uVjIuSUNvbW1lbnRXaWRnZXREYXRhXG4gIHRlYWNoZXJOb3Rlc0ZsYWcgPSBmYWxzZVxuICByZWZlcmVuY2VOb3Rlc0ZsYWcgPSBmYWxzZVxuICB2aWV3ZXJQYWdlID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy92aWV3ZXIvJykgPyB0cnVlIDogZmFsc2VcbiAgcmVzdW1lRGF0YUxpbms6IGFueVxuICBlbmFibGVBSVR1dG9yRmxhZyA9IGZhbHNlXG4gIGVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gZmFsc2VcbiAgY291cnNlQ2F0ZWdvcnkgPSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5XG4gIHN1YlRpdGxlcyQ6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIHJlc291cmNlSWRlbnRpZmllcjogYW55XG4gIHJlc291cmNlSWRlbnRpZmllciQ6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIHN1YlRpdGxlczogYW55ID0gW11cbiAga2V5d29yZFRvSGlnaGxpZ2h0OiBhbnkgPSAnJ1xuICBoaWdobGlnaHRDb25kaXRpb24gPSBmYWxzZVxuICB2dHRMYW5nQXJyOiBhbnkgPSBbXVxuICB0cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPSAnZW4nXG4gIGRlZmF1bHRUcmFuc2NyaXB0TGFuZ3VhZ2UgPSAnZW4nXG4gIHRyYW5zcmlwdGlvbkxhbmd1YWdlU3ViOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZTogYW55XG4gIGZyb21BSVR1dG9yID0gZmFsc2VcbiAgdG90YWxSZXNvdXJjZSA9IDBcbiAgc2Nvcm1Bc3Nlc3NtZW50Q291bnQgPSAwXG4gIHNob3dBSVR1dG9yUG9wdXAgPSBmYWxzZVxuICBmcm9tQUlTZWxlY3RlZFRhYkluZGV4ID0gZmFsc2VcbiAgaXNNb2JpbGVGb3JBSSA9IGZhbHNlXG4gIHRyYW5zY3JpcHRBY3RpdmVMYW5ndWFnZVRleHQgPSAnRW5nbGlzaCdcbiAgc2hvd0Fzc2lnbm1lbnRzVGFiID0gZmFsc2VcbiAgZW5hYmxlU2FtdWhpa0NoYXJjaGFUYWIgPSBmYWxzZVxuICBzYW11aGlrQ29uZmlnOiBhbnlcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2FkQ2hlY2tTZXJ2aWNlOiBMb2FkQ2hlY2tTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwdWJsaWMgdG9jU3ZjOiBBcHBUb2NTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uU1ZDOiBBY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBldmVudFN2YzogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlld2VyRGF0YVN2YzogVmlld2VyRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW11aGlrQ2hhcmNoYVN2YzogU2FtdWhpa0NoYXJjaGFTZXJ2aWNlLFxuICAgIHB1YmxpYyBkb21haW5Db25mU2VydmljZTogRG9tYWluQ29uZlNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcblxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3IgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvcj8uYWxsKSB7XG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdGhpcy5vbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmNvbnRlbnQ/LmRhdGE/LmNoaWxkcmVuLCAnbWltZVR5cGUnLCBbJ2FwcGxpY2F0aW9uL3ZuZC5la3N0ZXAuaHRtbC1hcmNoaXZlJywgJ2FwcGxpY2F0aW9uL3ZuZC5zdW5iaXJkLnF1ZXN0aW9uc2V0JywgJ2FwcGxpY2F0aW9uL2pzb24nLCAndGV4dC94LXVybCddKVxuICAgICAgLy8gdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvciAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yPy5mb3JPcmcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZy5haVR1dG9yPy5mb3JPcmc/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvcj8uZm9yT3JnLmluY2x1ZGVzKHRoaXMuY29uZmlnU2VydmljZS51c2VyUHJvZmlsZT8ucm9vdE9yZ0lkKVxuICAgICkge1xuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IHRoaXMub25seXNjb3JtQXNzZXNzbWVudEV4aXN0cyh0aGlzLnJvdXRlLnNuYXBzaG90Py5kYXRhPy5jb250ZW50Py5kYXRhPy5jaGlsZHJlbiwgJ21pbWVUeXBlJywgWydhcHBsaWNhdGlvbi92bmQuZWtzdGVwLmh0bWwtYXJjaGl2ZScsICdhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldCcsICdhcHBsaWNhdGlvbi9qc29uJywgJ3RleHQveC11cmwnXSlcbiAgICAgIC8vIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSBmYWxzZVxuICAgIH1cbiAgICAgaWYodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5jb3Vyc2VDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5MRUFSTklOR19QQVRIV0FZKSB7XG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gZmFsc2VcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uYWxsKSB7XG4gICAgICAvLyB0aGlzLnJlc291cmNlSWRlbnRpZmllciQgPSB0aGlzLnRvY1N2Yy50cmFuc3JpcHRpb25JZGVudGlmaWVyLnN1YnNjcmliZSgodmFsdWU6YW55KT0+e1xuICAgICAgLy8gICBpZih2YWx1ZSAmJiAgdmFsdWU/LmlkZW50aWZpZXIpIHtcbiAgICAgIC8vICAgICB0aGlzLnJlc291cmNlSWRlbnRpZmllciA9IHZhbHVlPy5pZGVudGlmaWVyIC8vdmFsdWU/LmlkZW50aWZpZXIgLy8gZG9fMTEzODg5MTE5ODQ4OTA2NzUyMTE0N1xuICAgICAgLy8gICAgIHRoaXMucGFyc2VWVFQoKVxuICAgICAgLy8gICB9XG5cbiAgICAgIC8vIH0pXG5cbiAgICAgIHRoaXMuc3ViVGl0bGVzJCA9IHRoaXMudG9jU3ZjLnRyYW5zY3JpcHRpb25EYXRhJC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5rZXl3b3JkVG9IaWdobGlnaHQgPSB2YWx1ZVxuICAgICAgfSlcblxuICAgICAgdGhpcy50cmFuc3JpcHRpb25MYW5ndWFnZVN1YiA9IHRoaXMudG9jU3ZjLnRyYW5zcmlwdGlvbkFjdGl2ZUxhbmd1YWdlRGF0YU9iamVjdCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChsYW5ndmFsdWU6IGFueSkgPT4gY29uc29sZS5sb2coJ3RhcCBsYW5ndmFsdWU6JywgbGFuZ3ZhbHVlKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChsYW5ndmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChsYW5ndmFsdWUpIHtcbiAgICAgICAgICAgIC8vIHRoaXMucmVuZGVyU2VsZWN0ZWRMYW5ndWFnZVRyYW5zY3JpcHRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSlcbiAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSB0cnVlXG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24gJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uZm9yT3JnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmZvck9yZz8ubGVuZ3RoICYmXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5mb3JPcmc/LmluY2x1ZGVzKHRoaXMuY29uZmlnU2VydmljZS51c2VyUHJvZmlsZT8ucm9vdE9yZ0lkKVxuICAgICkge1xuICAgICAgLy8gdGhpcy5yZXNvdXJjZUlkZW50aWZpZXIkID0gdGhpcy50b2NTdmMudHJhbnNyaXB0aW9uSWRlbnRpZmllci5zdWJzY3JpYmUoKHZhbHVlOmFueSk9PntcbiAgICAgIC8vICAgaWYodmFsdWUgJiYgIHZhbHVlPy5pZGVudGlmaWVyKSB7XG4gICAgICAvLyAgICAgdGhpcy5yZXNvdXJjZUlkZW50aWZpZXIgPSB2YWx1ZT8uaWRlbnRpZmllciAvL3ZhbHVlPy5pZGVudGlmaWVyIC8vIGRvXzExMzg4OTExOTg0ODkwNjc1MjExNDdcbiAgICAgIC8vICAgICB0aGlzLnBhcnNlVlRUKClcbiAgICAgIC8vICAgfVxuXG4gICAgICAvLyB9KVxuXG4gICAgICB0aGlzLnN1YlRpdGxlcyQgPSB0aGlzLnRvY1N2Yy50cmFuc2NyaXB0aW9uRGF0YSQuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMua2V5d29yZFRvSGlnaGxpZ2h0ID0gdmFsdWVcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMudHJhbnNyaXB0aW9uTGFuZ3VhZ2VTdWIgPSB0aGlzLnRvY1N2Yy50cmFuc3JpcHRpb25BY3RpdmVMYW5ndWFnZURhdGFPYmplY3QkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgobGFuZ3ZhbHVlOiBhbnkpID0+IGNvbnNvbGUubG9nKCd0YXAgbGFuZ3ZhbHVlOicsIGxhbmd2YWx1ZSkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgobGFuZ3ZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAobGFuZ3ZhbHVlKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnJlbmRlclNlbGVjdGVkTGFuZ3VhZ2VUcmFuc2NyaXB0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pXG4gICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBiYXRjaElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5iYXRjaElkID9cbiAgICAgIHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuYmF0Y2hJZCA6ICcnXG4gICAgaWYgKGJhdGNoSWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDFcbiAgICB9XG4gICAgdGhpcy5jb21tZW50SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmNvbW1lbnRJZCA/IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuY29tbWVudElkIDogJydcbiAgICBpZiAodGhpcy5jb21tZW50SWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDJcbiAgICB9XG5cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmlzTW9iaWxlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc01vYmlsZVxuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0ODApIHtcbiAgICAgIHRoaXMuaXNNb2JpbGVGb3JBSSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gZmFsc2VcbiAgICB9XG4gICAgdGhpcy5tZW51UG9zaXRpb24gPSB0aGlzLnRhYkVsZW1lbnQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRUb3BcblxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5zdWJzY3JpYmUoYXN5bmMgKHBhcmFtczogYW55KSA9PiB7XG5cbiAgICAgIGxldCBmcm9tQUlUdXRvciA9IHBhcmFtcy5nZXQoJ2Zyb21BSVR1dG9yJylcblxuICAgICAgaWYgKChmcm9tQUlUdXRvciA9PT0gJ3RydWUnIHx8IGZyb21BSVR1dG9yID09PSB0cnVlKSAmJiB0aGlzLmlzTW9iaWxlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhYnNBcnJheSA9IHRoaXMudGFicz8udG9BcnJheSgpXG4gICAgICAgICAgbGV0IGluZGV4ID0gdGFic0FycmF5Py5maW5kSW5kZXgodGFiID0+IHRhYi50ZXh0TGFiZWwudHJpbSgpID09PSBcIkFJIFR1dG9yXCIudHJpbSgpKVxuICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpbmRleFxuICAgICAgICAgICAgdGhpcy5mcm9tQUlTZWxlY3RlZFRhYkluZGV4ID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMzAwMClcblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXQgZ2V0Q3VycmVudFRpbWVJblVUQygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxuICAgIGNvbnN0IGlzb1N0cmluZyA9IGN1cnJlbnREYXRlLnRvSVNPU3RyaW5nKClcbiAgICByZXR1cm4gaXNvU3RyaW5nLnJlcGxhY2UoJ1onLCAnKzAwMDAnKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRTYW11aGlrQ29uZmlnKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNhbXVoaWtDb25maWcgPSBhd2FpdCB0aGlzLnNhbXVoaWtDaGFyY2hhU3ZjLmZldGNoQ29uZmlnRmlsZSgpLnRvUHJvbWlzZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cbiAgICB0aGlzLnJlc291cmNlSWRlbnRpZmllciA9IHRoaXMudmlld2VyRGF0YVN2Yy5yZXNvdXJjZUlkXG5cbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5hbGwpIHtcbiAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSB0cnVlXG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24gJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uZm9yT3JnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmZvck9yZz8ubGVuZ3RoICYmXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5mb3JPcmc/LmluY2x1ZGVzKHRoaXMuY29uZmlnU2VydmljZT8udXNlclByb2ZpbGU/LnJvb3RPcmdJZClcbiAgICApIHtcbiAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3IgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZy5haVR1dG9yPy5hbGwpIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSB0aGlzLm9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHModGhpcy5jb250ZW50Py5jaGlsZHJlbiwgJ21pbWVUeXBlJywgWydhcHBsaWNhdGlvbi92bmQuZWtzdGVwLmh0bWwtYXJjaGl2ZScsICdhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldCcsICdhcHBsaWNhdGlvbi9qc29uJywgJ3RleHQveC11cmwnXSlcbiAgICAgIC8vIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSB0cnVlXG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3IgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvcj8uZm9yT3JnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3I/LmZvck9yZz8ubGVuZ3RoXG4gICAgICAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnLmFpVHV0b3I/LmZvck9yZz8uaW5jbHVkZXModGhpcy5jb25maWdTZXJ2aWNlPy51c2VyUHJvZmlsZT8ucm9vdE9yZ0lkKVxuICAgICkge1xuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IHRoaXMub25seXNjb3JtQXNzZXNzbWVudEV4aXN0cyh0aGlzLmNvbnRlbnQ/LmNoaWxkcmVuLCAnbWltZVR5cGUnLCBbJ2FwcGxpY2F0aW9uL3ZuZC5la3N0ZXAuaHRtbC1hcmNoaXZlJywgJ2FwcGxpY2F0aW9uL3ZuZC5zdW5iaXJkLnF1ZXN0aW9uc2V0JywgJ2FwcGxpY2F0aW9uL2pzb24nLCAndGV4dC94LXVybCddKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZih0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmNvdXJzZUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkxFQVJOSU5HX1BBVEhXQVkpIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXNbJ3BsYXlSZXNvdXJjZUlkJ10pIHtcbiAgICAgIGlmIChjaGFuZ2VzPy5wbGF5UmVzb3VyY2VJZD8ucHJldmlvdXNWYWx1ZSAhPT0gY2hhbmdlcz8ucGxheVJlc291cmNlSWQ/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICBpZiAodGhpcy52aWV3ZXJQYWdlICYmIHRoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZCAmJiB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnKSB7XG4gICAgICAgICAgdGhpcy5wYXJzZVZUVCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuY2hhbmdlVGFiICYmIGNoYW5nZXMuY2hhbmdlVGFiLmN1cnJlbnRWYWx1ZSAmJiAhdGhpcy5mcm9tQUlTZWxlY3RlZFRhYkluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAxXG4gICAgfVxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnBhZ2VEYXRhLmRhdGEpIHtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnBhZ2VEYXRhLmRhdGFcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmRpc2N1c3NXaWRnZXREYXRhKSB7XG4gICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhID0gdGhpcy5jb25maWcuZGlzY3Vzc1dpZGdldERhdGFcbiAgICAgIGlmICh0aGlzLmJhc2VDb250ZW50UmVhZERhdGEgJiYgdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLmNvbW1lbnRUcmVlRGF0YS5lbnRpdHlJZCkge1xuICAgICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudFRyZWVEYXRhLmVudGl0eUlkID0gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5jb21tZW50c0xpc3QucmVwbGllc1NlY3Rpb24gJiYgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5jb21tZW50c0xpc3QucmVwbGllc1NlY3Rpb24ubmV3Q29tbWVudFJlcGx5KSB7XG4gICAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5jb21tZW50c0xpc3QucmVwbGllc1NlY3Rpb24ubmV3Q29tbWVudFJlcGx5LmNvbW1lbnRUcmVlRGF0YS5lbnRpdHlJZCA9IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5pZGVudGlmaWVyXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaXNFbnJvbGxlZCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNKSB7XG4gICAgICAgICAgdGhpcy5zaG93QXNzaWdubWVudHNUYWIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5lbnJvbGxlZENvbnRlbnQgPSB0cnVlXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudEJveC5wbGFjZWhvbGRlciA9ICdTdGFydCBhIGRpc2N1c3Npb24nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmVucm9sbGVkQ29udGVudCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudEJveC5wbGFjZWhvbGRlciA9ICdFbnJvbCB0byBhZGQgeW91ciBjb21tZW50cydcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbW1lbnRJZCkge1xuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLnNob3cgPSBmYWxzZVxuICAgICAgfVxuICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YSA9IHsgLi4udGhpcy5kaXNjdXNzV2lkZ2V0RGF0YSB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udGVudFJlYWREYXRhICYmIHRoaXMuY29udGVudFJlYWREYXRhPy5ldmVudExpbmtlZD8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcmdJZCA9IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ3VzZXJQcm9maWxlLnVzZXJSb290T3JnLmlkJywgJycpXG4gICAgICBhd2FpdCB0aGlzLmdldFNhbXVoaWtDb25maWcoKVxuICAgICAgY29uc3QgZXZlbnRzTGlua2VkID0gdGhpcy5jb250ZW50UmVhZERhdGEuZXZlbnRMaW5rZWQgfHwgW11cbiAgICAgIGxldCBldmVudHNEYXRhOiBhbnkgPSBbXVxuICAgICAgdGhpcy5zYW11aGlrQ29uZmlnPy5zdHJpcHNbMF0udGFicy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgICBlbGUucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMuaWRlbnRpZmllciA9IGV2ZW50c0xpbmtlZFxuICAgICAgICBlbGUucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMuY3JlYXRlZEZvciA9IFtvcmdJZF1cbiAgICAgICAgaWYgKGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5lbmREYXRlVGltZS5oYXNPd25Qcm9wZXJ0eSgnPj0nKSkge1xuICAgICAgICAgIGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5lbmREYXRlVGltZVsnPj0nXSA9IHRoaXMuZ2V0Q3VycmVudFRpbWVJblVUQ1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGUucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMuZW5kRGF0ZVRpbWUuaGFzT3duUHJvcGVydHkoJzwnKSkge1xuICAgICAgICAgIGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5lbmREYXRlVGltZVsnPCddID0gdGhpcy5nZXRDdXJyZW50VGltZUluVVRDXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zYW11aGlrQ2hhcmNoYVN2Yy5nZXRTZWFyY2hWNlJlc3VsdHMoZWxlLnJlcXVlc3Quc2VhcmNoVjYpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5jb3VudCAmJiByZXMucmVzdWx0Py5FdmVudCAmJiByZXMucmVzdWx0LkV2ZW50Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGV2ZSA9IDA7IGV2ZSA8IHJlcy5yZXN1bHQuRXZlbnQ/Lmxlbmd0aDsgZXZlKyspIHtcbiAgICAgICAgICAgICAgaWYgKHJlcy5yZXN1bHQuRXZlbnRbZXZlXVsnY3JlYXRlZEZvciddICYmIHJlcy5yZXN1bHQuRXZlbnRbZXZlXVsnY3JlYXRlZEZvciddLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgIHJlcy5yZXN1bHQuRXZlbnRbZXZlXVsncmVzb3VyY2VUeXBlJ10gPT09ICdTYW11aGlrIENoYXJjaGEnXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBldmVudHNEYXRhLnB1c2gocmVzLnJlc3VsdC5FdmVudFtldmVdWydjcmVhdGVkRm9yJ11bMF0pXG4gICAgICAgICAgICAgIGlmIChldmVudHNEYXRhLmluY2x1ZGVzKHRoaXMuY29uZmlnU2VydmljZS51c2VyUHJvZmlsZT8ucm9vdE9yZ0lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlU2FtdWhpa0NoYXJjaGFUYWIgPSB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udGVudFJlYWREYXRhICYmIHRoaXMuY29udGVudFJlYWREYXRhLnJlZmVyZW5jZU5vZGVzKSB7XG4gICAgICB0aGlzLmNvbnRlbnRSZWFkRGF0YS5yZWZlcmVuY2VOb2Rlcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHVzZXJSb2xlczogU2V0PHN0cmluZz4gPSB0aGlzLmNvbmZpZ1NlcnZpY2U/LnVzZXJSb2xlcyB8fCBuZXcgU2V0KClcbiAgICAgICAgbGV0IGhhc0VkdWNhdG9yUm9sZSA9IGZhbHNlXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdXNlciBoYXMgTUVOVE9SIHJvbGVcbiAgICAgICAgaWYgKHVzZXJSb2xlcy5oYXMoJ01FTlRPUicpIHx8XG4gICAgICAgICAgdXNlclJvbGVzLmhhcygnbWVudG9yJykgfHxcbiAgICAgICAgICB1c2VyUm9sZXMuaGFzKCdNZW50b3InKSkge1xuICAgICAgICAgIGhhc0VkdWNhdG9yUm9sZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGxvY2FsIHN0b3JhZ2UgZm9yIHN1cnZleSByZXNwb25zZSBvbmx5IGlmIFVSTCBjb250YWlucyAncHVibGljJyBvciAncHJldmlldz10cnVlJ1xuICAgICAgICBpZiAoIWhhc0VkdWNhdG9yUm9sZSAmJiB0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgICAgICBjb25zdCBzdXJ2ZXlJZCA9IHRoaXMuZW52aXJvbm1lbnQucHVibGljQ29udGVudFN1cnZleUlkIHx8ICcnXG4gICAgICAgICAgY29uc3QgY291cnNlSWQgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJ1xuICAgICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSBgc3VydmV5XyR7c3VydmV5SWR9XyR7Y291cnNlSWR9YFxuICAgICAgICAgIGNvbnN0IHN0b3JlZERhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5KVxuXG4gICAgICAgICAgaWYgKHN0b3JlZERhdGEpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1cnZleVJlc3BvbnNlcyA9IEpTT04ucGFyc2Uoc3RvcmVkRGF0YSlcbiAgICAgICAgICAgICAgY29uc3QgZWR1Y2F0b3JRdWVzdGlvbiA9IHN1cnZleVJlc3BvbnNlcy5maW5kKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnF1ZXN0aW9uID09PSAnQXJlIHlvdSBhbiBFZHVjYXRvci9GYWN1bHR5IG1lbWJlcj8nXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKGVkdWNhdG9yUXVlc3Rpb24gJiYgZWR1Y2F0b3JRdWVzdGlvbi5hbnN3ZXIgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgaGFzRWR1Y2F0b3JSb2xlID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIHN1cnZleSBkYXRhIGZyb20gbG9jYWwgc3RvcmFnZTonLCBlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdGVhY2hlck5vdGVzRmxhZyBpZiB1c2VyIGhhcyBlZHVjYXRvciByb2xlXG4gICAgICAgIGlmIChoYXNFZHVjYXRvclJvbGUpIHtcbiAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnJlc291cmNlQ2F0ZWdvcnkgJiYgaXRlbS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnVGVhY2hlcnMgUmVzb3VyY2UnKSB7XG4gICAgICAgICAgICB0aGlzLnRlYWNoZXJOb3Rlc0ZsYWcgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5yZXNvdXJjZUNhdGVnb3J5ICYmIGl0ZW0ucmVzb3VyY2VDYXRlZ29yeSA9PT0gJ1JlZmVyZW5jZSBSZXNvdXJjZScpIHtcbiAgICAgICAgICB0aGlzLnJlZmVyZW5jZU5vdGVzRmxhZyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKHRoaXMuc2lkZU5hdkJhck9wZW5lZCkge1xuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQ4MCkge1xuICAgICAgICBpZiAodGhpcy5pc01vYmlsZUZvckFJKSB7XG4gICAgICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gZmFsc2VcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDgwKSB7XG4gICAgICAgIHRoaXMuaXNNb2JpbGVGb3JBSSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNNb2JpbGVGb3JBSSA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU2Nyb2xsKCkge1xuICAgIGNvbnN0IHdpbmRvd1Njcm9sbCA9IHdpbmRvdy5zY3JvbGxZXG4gICAgaWYgKHdpbmRvd1Njcm9sbCA+PSAodGhpcy5tZW51UG9zaXRpb24gLSAoKHRoaXMuaXNNb2JpbGUpID8gOTYgOiAxMDQpKSkge1xuICAgICAgdGhpcy5zdGlja3kgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RpY2t5ID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBoYW5kbGVUYWJDaGFuZ2UoZXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy50YWJDaGFuZ2VWYWx1ZSA9IGV2ZW50LnRhYlxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGV2ZW50LmluZGV4XG4gICAgdGhpcy5sb2FkQ2hlY2tTZXJ2aWNlLmNvbXBvbmVudExvYWRlZCh0cnVlKVxuICAgIGlmIChldmVudCAmJiBldmVudC50YWIudGV4dExhYmVsID09PSAnQUkgVHV0b3InKSB7XG4gICAgICB0aGlzLnNob3dBSVR1dG9yUG9wdXAgPSB0cnVlXG4gICAgfVxuICAgIGlmIChldmVudCAmJiBldmVudC5pbmRleCA9PT0gMCAmJiBldmVudC50YWIudGV4dExhYmVsID09PSAnVHJhbnNjcmlwdGlvbicpIHtcbiAgICAgIHRoaXMucmFpc2VUcmFuc2NyaXB0aW9uVGFiU3RhcnRUZWxlbWV0cnkoKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmFpc2VUcmFuc2NyaXB0aW9uVGFiSW50ZXJhY3RUZWxlbWV0cnkoKVxuICAgICAgfSwgMTAwMClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25UYWJTdG9wVGVsZW1ldHJ5KClcbiAgICB9XG5cbiAgfVxuXG4gIHNob3dBaVR1dG9yQ29uZmlybVBvcHVwKCkge1xuICAgIGRlYnVnZ2VyXG4gICAgdGhpcy5yYWlzZUFJUG9wdXBTdGFydFRlbGVtZXRyeSgpXG4gICAgaWYgKHRoaXMuaXNFbnJvbGxlZCkge1xuICAgICAgdGhpcy5mcm9tQUlUdXRvciA9IHRydWVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJhaXNlQUlQb3B1cEludGVyYWN0VGVsZW1ldHJ5KClcbiAgICAgIH0sIDEwMDApXG5cblxuICAgICAgdGhpcy5nZW5lcmF0ZVJlc3VtZURhdGFMaW5rTmV3KClcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJhaXNlQUlQb3B1cEVuZFRlbGVtZXRyeSgpXG4gICAgICB9LCAxMDAwKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yYWlzZUFJUG9wdXBJbnRlcmFjdFRlbGVtZXRyeSgpXG4gICAgICB9LCAxMDAwKVxuICAgICAgY29uc3QgZGlhbG9nQ29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZygpXG5cbiAgICAgIGRpYWxvZ0NvbmZpZy53aWR0aCA9ICc0MjFweCdcbiAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhID0ge1xuICAgICAgICBlbnJvbGw6IHRoaXMuaXNFbnJvbGxlZFxuICAgICAgfVxuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBaVR1dG9yQ29uZmlybVBvcHVwQ29tcG9uZW50LCBkaWFsb2dDb25maWcpXG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UgPT09ICdlbnJvbGwnKSB7XG4gICAgICAgICAgdGhpcy5mcm9tQUlUdXRvciA9IHRydWVcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlUmVzdW1lRGF0YUxpbmtOZXcoKVxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlID09PSAnbmVlZFRvRW5yb2xsJykge1xuICAgICAgICAgIHRoaXMuZW5yb2xsVXNlckZvckFJVHV0b3IoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmFpc2VBSVBvcHVwRW5kVGVsZW1ldHJ5KClcbiAgICAgIH0pXG4gICAgfVxuXG4gIH1cblxuICBnZW5lcmF0ZVJlc3VtZURhdGFMaW5rTmV3KCkge1xuICAgIGlmICh0aGlzLnJlc3VtZURhdGEgJiYgdGhpcy5jb250ZW50KSB7XG4gICAgICBsZXQgcmVzdW1lRGF0YVYyOiBhbnlcbiAgICAgIGlmICh0aGlzLmNvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCkge1xuICAgICAgICByZXN1bWVEYXRhVjIgPSB0aGlzLmdldFJlc3VtZURhdGFGcm9tTGlzdCgnc3RhcnQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdW1lRGF0YVYyID0gdGhpcy5nZXRSZXN1bWVEYXRhRnJvbUxpc3QoKVxuICAgICAgfVxuICAgICAgaWYgKCFyZXN1bWVEYXRhVjIubWltZVR5cGUpIHtcbiAgICAgICAgcmVzdW1lRGF0YVYyLm1pbWVUeXBlID0gdGhpcy50b2NTdmMuZ2V0TWltZVR5cGUodGhpcy5jb250ZW50LCByZXN1bWVEYXRhVjIuaWRlbnRpZmllcilcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzdW1lRGF0YUxpbmsgPSB2aWV3ZXJSb3V0ZUdlbmVyYXRvcihcbiAgICAgICAgcmVzdW1lRGF0YVYyLmlkZW50aWZpZXIsXG4gICAgICAgIHJlc3VtZURhdGFWMi5taW1lVHlwZSxcbiAgICAgICAgdGhpcy5jb250ZW50LmlkZW50aWZpZXIsXG4gICAgICAgIHRoaXMuY29udGVudC5jb250ZW50VHlwZSxcbiAgICAgICAgdGhpcy5mb3JQcmV2aWV3LFxuICAgICAgICAnTGVhcm5pbmcgUmVzb3VyY2UnLFxuICAgICAgICB0aGlzLmdldEJhdGNoSWQoKSxcbiAgICAgICAgdGhpcy5jb250ZW50Lm5hbWUsXG4gICAgICApXG4gICAgICB0aGlzLmFjdGlvblNWQy5zZXRVcGRhdGVDb21wR3JvdXBPID0gdGhpcy5yZXN1bWVEYXRhTGlua1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucmVzdW1lRGF0YUxpbmsudXJsXSwge1xuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgIC4uLnRoaXMucmVzdW1lRGF0YUxpbmsucXVlcnlQYXJhbXMsXG4gICAgICAgICAgZnJvbUFJVHV0b3I6IHRoaXMuZnJvbUFJVHV0b3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXG4gICAgICAvLyAgIFt0aGlzLnJlc3VtZURhdGFMaW5rLnVybF0sXG4gICAgICAvLyAgIHtcbiAgICAgIC8vICAgICByZWxhdGl2ZVRvOiB0aGlzLnJlc3VtZURhdGFMaW5rLnVybCxcbiAgICAgIC8vICAgICBxdWVyeVBhcmFtczogdGhpcy5yZXN1bWVEYXRhTGluay5xdWVyeVBhcmFtcyxcbiAgICAgIC8vICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgLy8gICB9KVxuICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxheVJlc3VtZUZvckFJLmVtaXQoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVzdW1lRGF0YUZyb21MaXN0KHR5cGU/OiBzdHJpbmcpOiBhbnkgfCB2b2lkIHtcbiAgICBjb25zdCByZXN1bWVDb3B5ID0gWy4uLnRoaXMucmVzdW1lRGF0YV1cbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcblxuICAgICAgY29uc3QgbGFzdEl0ZW0gPSByZXN1bWVDb3B5ICYmIHJlc3VtZUNvcHkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgIG5ldyBEYXRlKGIubGFzdEFjY2Vzc1RpbWUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEubGFzdEFjY2Vzc1RpbWUpLmdldFRpbWUoKSkuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWRlbnRpZmllcjogbGFzdEl0ZW0uY29udGVudElkLFxuICAgICAgICBtaW1lVHlwZTogbGFzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzICYmIGxhc3RJdGVtLnByb2dyZXNzZGV0YWlscy5taW1lVHlwZSxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZmlyc3RJdGVtID0gcmVzdW1lQ29weSAmJiByZXN1bWVDb3B5Lmxlbmd0aCAmJiByZXN1bWVDb3B5WzBdXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkZW50aWZpZXI6IGZpcnN0SXRlbS5jb250ZW50SWQsXG4gICAgICBtaW1lVHlwZTogZmlyc3RJdGVtLnByb2dyZXNzZGV0YWlscyAmJiBmaXJzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzLm1pbWVUeXBlLFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRCYXRjaElkKCk6IHN0cmluZyB7XG4gICAgbGV0IGJhdGNoSWQgPSAnJ1xuICAgIGlmICh0aGlzLmJhdGNoRGF0YSAmJiB0aGlzLmJhdGNoRGF0YS5jb250ZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGJhdGNoIG9mIHRoaXMuYmF0Y2hEYXRhLmNvbnRlbnQpIHtcbiAgICAgICAgYmF0Y2hJZCA9IGJhdGNoLmJhdGNoSWRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhdGNoSWRcbiAgfVxuXG4gIHJhaXNlQUlQb3B1cFN0YXJ0VGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiBcImFpLXR1dG9yLXRvYy1wYWdlXCIsIFwicGFnZWlkXCI6IGAvYXBwL3RvYy8ke3RoaXMuY29udGVudD8uaWRlbnRpZmllcn1gIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiAnL2FwcC90b2MnLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgcmFpc2VBSVBvcHVwRW5kVGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiBcImFpLXR1dG9yLXRvYy1wYWdlXCIsIFwicGFnZWlkXCI6IGAvYXBwL3RvYy8ke3RoaXMuY29udGVudD8uaWRlbnRpZmllcn1gIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkLFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6ICcvYXBwL3RvYycsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICByYWlzZUFJUG9wdXBJbnRlcmFjdFRlbGVtZXRyeSgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICdjbGljaycsIFwiaWRcIjogXCJhaS10dXRvci10b2MtcGFnZVwiLCBcInBhZ2VpZFwiOiBgL2FwcC90b2MvJHt0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXJ9YCB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiAnL2FwcC90b2MnLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgZW5yb2xsVXNlckZvckFJVHV0b3IoKSB7XG4gICAgdGhpcy5lbnJvbGxVc2VyVG9BSS5lbWl0KClcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVlRUKCkge1xuICAgIGxldCBpZGVudGlmaWVyID0gdGhpcy5yZXNvdXJjZUlkZW50aWZpZXJcbiAgICAvLyBjb25zb2xlLmxvZygnaWRlbnRpZmllci0tJywgaWRlbnRpZmllcilcbiAgICBhd2FpdCB0aGlzLnRvY1N2Yy5haUdldFJlc291cmNlVnR0RmlsZShpZGVudGlmaWVyKS5zdWJzY3JpYmUoYXN5bmMgKGRhdGFzOiBhbnkpID0+IHtcbiAgICAgIGxldCBkYXRhOiBhbnkgPSBkYXRhcz8uZGF0YVxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggJiYgZGF0YVswXVsndHJhbnNjcmlwdGlvbl91cmxzJ10gJiYgZGF0YVswXVsndHJhbnNjcmlwdGlvbl91cmxzJ10ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudnR0TGFuZ0FyciA9IGRhdGFbMF1bJ3RyYW5zY3JpcHRpb25fdXJscyddXG5cbiAgICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IHRydWVcbiAgICAgICAgLy8gbGV0IHVybCA9ICBkYXRhWzBdWyd0cmFuc2NyaXB0aW9uX3VybHMnXVswXVsndXJpJ11cbiAgICAgICAgdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPSB0aGlzLnZ0dExhbmdBcnIgJiYgdGhpcy52dHRMYW5nQXJyLmxlbmd0aCAmJiB0aGlzLnZ0dExhbmdBcnJbMF0gJiYgdGhpcy52dHRMYW5nQXJyWzBdWydkZWZhdWx0X2xhbmcnXSA/ICdlbicgOiAnZW4nXG4gICAgICAgIHRoaXMuZGVmYXVsdFRyYW5zY3JpcHRMYW5ndWFnZSA9IHRoaXMudnR0TGFuZ0FyciAmJiB0aGlzLnZ0dExhbmdBcnIubGVuZ3RoICYmIHRoaXMudnR0TGFuZ0FyclswXSAmJiB0aGlzLnZ0dExhbmdBcnJbMF1bJ2RlZmF1bHRfbGFuZyddID8gJ2VuJyA6ICdlbidcbiAgICAgICAgbGV0IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlID0gdGhpcy52dHRMYW5nQXJyLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0/LmxhYmVsID09PSB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZVxuICAgICAgICB9KVxuICAgICAgICBpZiAoc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUgJiYgc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSA9IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlWzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSA9IHRoaXMudnR0TGFuZ0FyclswXVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQXJyID0gdGhpcy52dHRMYW5nQXJyLmZpbHRlcihcbiAgICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtLmxhYmVsID09PSB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZVxuICAgICAgICApXG4gICAgICAgIGxldCB1cmwgPSBmaWx0ZXJlZEFyci5sZW5ndGggPiAwID8gZmlsdGVyZWRBcnJbMF0udXJpIDogbnVsbFxuICAgICAgICAvL2xldCB1cmwgPSB0aGlzLnZ0dExhbmdBcnIuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ubGFiZWwgPT09IHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlKVswXVsndXJpJ11cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBWdHRGaWxlLmZyb21VcmwodXJsKVxuICAgICAgICAgIGxldCBibG9ja3M6IGFueSA9IGZpbGUuZ2V0QmxvY2tzKClcblxuICAgICAgICAgIHRoaXMuc3ViVGl0bGVzID0gYmxvY2tzXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2NTdmMuY2hhbmdlVHJhbnNjcmlwdGlvbkxhbmd1YWdlRXZlbnQubmV4dCh7IGFjdGl2ZUxhbmc6IHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlLCBsYW5nRGF0YTogdGhpcy52dHRMYW5nQXJyLCBsb2FkUGxheWVyOiB0cnVlIH0pXG5cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52dHRMYW5nQXJyID0gW11cbiAgICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IGZhbHNlXG4gICAgICB9XG5cbiAgICB9KVxuXG4gIH1cblxuICBhc3luYyByZW5kZXJTZWxlY3RlZExhbmd1YWdlVHJhbnNjcmlwdGlvbihfbGFuZ3ZhbHVlOiBhbnkpIHtcbiAgICAvLyB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9IHRoaXMuc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsXG4gICAgaWYgKHR5cGVvZiBfbGFuZ3ZhbHVlID09PSAnc3RyaW5nJyAmJiBfbGFuZ3ZhbHVlKSB7XG4gICAgICB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9IF9sYW5ndmFsdWVcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlID0gX2xhbmd2YWx1ZT8udmFsdWVcbiAgICAgIHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID0gdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcbiAgICAgIHRoaXMudHJhbnNjcmlwdEFjdGl2ZUxhbmd1YWdlVGV4dCA9IF9sYW5ndmFsdWU/LnZhbHVlPy5sYW5ndWFnZVxuICAgIH1cbiAgICB0aGlzLnJhaXNlVHJhbnNjcmlwdGlvbkxhbmd1YWdlU3RhcnRUZWxlbWV0cnkoKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25MYW5ndWFnZUludGVyYWN0VGVsZW1ldHJ5KClcbiAgICB9KVxuICAgIGxldCBjdXJyZW50UGF0aCA9IHRoaXMudnR0TGFuZ0Fyci5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbT8ubGFiZWwgPT09IHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlKVxuICAgIGlmIChjdXJyZW50UGF0aCAmJiBjdXJyZW50UGF0aC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUgPSBjdXJyZW50UGF0aFswXVxuICAgIH1cbiAgICBjb25zdCBmaWxlID0gYXdhaXQgVnR0RmlsZS5mcm9tVXJsKGN1cnJlbnRQYXRoICYmIGN1cnJlbnRQYXRoWzBdPy51cmkpXG4gICAgbGV0IGJsb2NrczogYW55ID0gZmlsZS5nZXRCbG9ja3MoKVxuICAgIHRoaXMuc3ViVGl0bGVzID0gYmxvY2tzXG4gICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25MYW5ndWFnZVN0b3BUZWxlbWV0cnkoKVxuICAgIC8vIHRoaXMudG9jU3ZjLmNoYW5nZVRyYW5zY3JpcHRpb25MYW5ndWFnZUV2ZW50Lm5leHQoe2FjdGl2ZUxhbmc6IHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlLCBsYW5nRGF0YTogdGhpcy52dHRMYW5nQXJyLCBsb2FkUGxheWVyOmZhbHNlfSlcblxuICB9XG5cbiAgb3BlblN1cnZleUZvcm1Qb3B1cChldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMudHJpZ2VyQ29tcGxldGlvblN1cnZleUZvcm0uZW1pdChldmVudClcbiAgfVxuXG4gIHBsYXlGcm9tU2xvdChzdWJ0aXRsZTogYW55KSB7XG4gICAgaWYgKHN1YnRpdGxlKSB7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gc3VidGl0bGUuc3RhcnRUaW1lIC8gMTAwMFxuICAgICAgbGV0IGVuZFRpbWUgPSBzdWJ0aXRsZS5lbmRUaW1lIC8gMTAwMFxuICAgICAgdGhpcy50b2NTdmMucGxheVRyYW5zY3JpcHRpb25WaWRlby5uZXh0KHsgc3RhcnRUaW1lLCBlbmRUaW1lIH0pXG4gICAgfVxuICB9XG5cbiAgZm9ybWF0TXNUb1Z0dFRpbWUobXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgdG90YWxTZWNvbmRzID0gTWF0aC5mbG9vcihtcyAvIDEwMDApXG4gICAgLy8gIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG1zICUgMTAwMDtcbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IodG90YWxTZWNvbmRzIC8gMzYwMClcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigodG90YWxTZWNvbmRzICUgMzYwMCkgLyA2MClcbiAgICBjb25zdCBzZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjBcblxuICAgIGNvbnN0IHBhZCA9IChudW06IG51bWJlciwgc2l6ZTogbnVtYmVyKSA9PiBudW0udG9TdHJpbmcoKS5wYWRTdGFydChzaXplLCAnMCcpXG5cbiAgICAvLyByZXR1cm4gYCR7cGFkKGhvdXJzLCAyKX06JHtwYWQobWludXRlcywgMil9OiR7cGFkKHNlY29uZHMsIDIpfS4ke3BhZChtaWxsaXNlY29uZHMsIDMpfWA7XG4gICAgcmV0dXJuIGAke3BhZChob3VycywgMil9OiR7cGFkKG1pbnV0ZXMsIDIpfToke3BhZChzZWNvbmRzLCAyKX1gXG4gIH1cblxuICBvbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKGRhdGE6IGFueSwga2V5OiBhbnksIHZhbHVlOiBhbnkpIHtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YT8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChkYXRhW2ldICYmIGRhdGFbaV1bJ2NoaWxkcmVuJ10gJiYgZGF0YVtpXVsnY2hpbGRyZW4nXS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5vbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKGRhdGFbaV0/LmNoaWxkcmVuLCBrZXksIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICB0aGlzLnRvdGFsUmVzb3VyY2UgPSB0aGlzLnRvdGFsUmVzb3VyY2UgKyAxXG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhkYXRhW2ldW2tleV0pKSB7XG4gICAgICAgICAgLy8gdGhpcy5zaG93QUlUdXRvckZsYWcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNjb3JtQXNzZXNzbWVudENvdW50ID0gdGhpcy5zY29ybUFzc2Vzc21lbnRDb3VudCArIDFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRvdGFsUmVzb3VyY2UgPT09IHRoaXMuc2Nvcm1Bc3Nlc3NtZW50Q291bnQpIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbmFibGVBSVR1dG9yRmxhZ1xuICB9XG5cbiAgcmFpc2VUcmFuc2NyaXB0aW9uVGFiU3RhcnRUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3Itdmlld2VyLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtdGFiJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQsXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgfSxcbiAgICAgIHBhZ2VDb250ZXh0OiB7IHBhZ2VJZDogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgbW9kdWxlOiAnTGVhcm4nIH0sXG4gICAgICBmcm9tOiAnJyxcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcbiAgICB9XG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcbiAgfVxuXG4gIHJhaXNlVHJhbnNjcmlwdGlvblRhYkludGVyYWN0VGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiBcImFpLXR1dG9yLXZpZXdlci1wYWdlXCIsIFwicGFnZWlkXCI6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIHN1YlR5cGU6ICd0cmFuc2NyaXB0LXRhYicgfSxcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxuICAgICAgICBzdGF0ZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSW50ZXJhY3QsXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgfSxcbiAgICAgIHBhZ2VDb250ZXh0OiB7IHBhZ2VJZDogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgbW9kdWxlOiAnTGVhcm4nIH0sXG4gICAgICBmcm9tOiAnJyxcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcbiAgICB9XG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcbiAgfVxuXG4gIHJhaXNlVHJhbnNjcmlwdGlvblRhYlN0b3BUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3Itdmlld2VyLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtdGFiJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgcmFpc2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VTdGFydFRlbGVtZXRyeSgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICdjbGljaycsIFwiaWRcIjogdGhpcy50cmFuc2NyaXB0QWN0aXZlTGFuZ3VhZ2VUZXh0LCBcInBhZ2VpZFwiOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBzdWJUeXBlOiAndHJhbnNjcmlwdC1sYW5ndWFnZScgfSxcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxuICAgICAgICBzdGF0ZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkLFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICByYWlzZVRyYW5zY3JpcHRpb25MYW5ndWFnZUludGVyYWN0VGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiB0aGlzLnRyYW5zY3JpcHRBY3RpdmVMYW5ndWFnZVRleHQsIFwicGFnZWlkXCI6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIHN1YlR5cGU6ICd0cmFuc2NyaXB0LWxhbmd1YWdlJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgcmFpc2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VTdG9wVGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiB0aGlzLnRyYW5zY3JpcHRBY3RpdmVMYW5ndWFnZVRleHQsIFwicGFnZWlkXCI6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIHN1YlR5cGU6ICd0cmFuc2NyaXB0LWxhbmd1YWdlJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgY2xvc2VBSVBvcHVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2hvd0FJVHV0b3JQb3B1cCA9IGZhbHNlXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucmVzb3VyY2VJZGVudGlmaWVyJCkge1xuICAgICAgdGhpcy5yZXNvdXJjZUlkZW50aWZpZXIkLnVuc3Vic2NyaWJlKClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdWJUaXRsZXMkKSB7XG4gICAgICB0aGlzLnN1YlRpdGxlcyQudW5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zcmlwdGlvbkxhbmd1YWdlU3ViKSB7XG4gICAgICB0aGlzLnRyYW5zcmlwdGlvbkxhbmd1YWdlU3ViLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbW1lbnRJZEZyb21VcmwoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFF1ZXJ5UGFyYW1zID0geyAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIH1cbiAgICBkZWxldGUgY3VycmVudFF1ZXJ5UGFyYW1zLmNvbW1lbnRJZFxuICAgIHRoaXMuY29tbWVudElkID0gJydcbiAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLnNob3cgPSB0cnVlXG4gIH1cblxuICByZXN1bWVDb250ZW50Q2FsbCgpIHtcbiAgICB0aGlzLnJlc3VtZUNvbnRlbnQuZW1pdCgpXG4gIH1cbn0iLCI8IS0tICYmIChjb250ZW50Py5jb3Vyc2VDYXRlZ29yeSAhPT0gY291cnNlQ2F0ZWdvcnk/LkJMRU5ERURfUFJPR1JBTSkgLS0+XG48ZGl2IGNsYXNzPVwiYWktdHV0b3ItZ2V0LXN0YXJ0ZWRcIiAqbmdJZj1cIiF2aWV3ZXJQYWdlICYmIGVuYWJsZUFJVHV0b3JGbGFnICYmICFpc01vYmlsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBweS0yXCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9ib3QtY2hhdC1zbWFsbC5zdmdcIiBoZWlnaHQ9XCI2NHB4XCIgd2lkdGg9XCI2NHB4XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTJcIiA+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LXdlaWdodC02MDBcIj5HZXQgU3RhcnRlZCB3aXRoIEFJIFR1dG9yPC9wPlxuICAgICAgICAgICAgICAgIDxzcGFuPkdldCBpbnN0YW50IGV4cGxhbmF0aW9ucywgc3RlcC1ieS1zdGVwIGxlYXJuaW5nIGd1aWRhbmNlLCBhbmQgY3VzdG9taXNlZCBsZWFybmluZyB0YWlsb3JlZCBqdXN0XG4gICAgICAgICAgICAgICAgICAgIGZvciB5b3UuPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktdHV0b3ItYnRuIHB4LTIgcHktMVwiIFtuZ0NsYXNzXT1cImlzTW9iaWxlID8gJ3ctMTYwJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJzaG93QWlUdXRvckNvbmZpcm1Qb3B1cCgpXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2FpLXR1dG9yL2FpLWljb24uc3ZnXCI+Jm5ic3A7ICZuYnNwOyA8c3BhbiBjbGFzcz1cImFpLXR1dG9yLWxhYmVsXCI+QUkgVHV0b3I8L3NwYW4+PC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwidGFiLWdyb3VwLWNvbnRhaW5lclwiPlxuICAgIDxtYXQtdGFiLWdyb3VwIChzZWxlY3RlZFRhYkNoYW5nZSk9XCJoYW5kbGVUYWJDaGFuZ2UoJGV2ZW50KVwiICNzdGlja3lNZW51IFtjbGFzcy5zdGlja3ktbWF0LXRhYnNdPVwic3RpY2t5XCJcbiAgICAgICAgW3NlbGVjdGVkSW5kZXhdPVwic2VsZWN0ZWRUYWJJbmRleFwiIFtuZ0NsYXNzXT1cInsnY29udGVudC10YWJzJzohZnJvbVZpZXdlciwnY29udGVudFN0aWNreSc6IGZvclByZXZpZXd9XCI+XG5cbiAgICAgICAgPCEtLSBUcmFuc2NyaXB0aW9uIFRhYiAtLT5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJUcmFuc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICpuZ0lmPVwidmlld2VyUGFnZSAmJiBlbmFibGVUcmFuc2NyaXB0aW9uRmxhZyAmJiB2dHRMYW5nQXJyPy5sZW5ndGggJiYgc3ViVGl0bGVzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5UcmFuc2NyaXB0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZC1jaXJjbGUgbWwtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgTmV3XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc2NsYWltZXIgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInB5LTIgcHgtMlwiPkRpc2NsYWltZXIgOiBUaGVzZSB0cmFuc2NyaXB0cyBhbmQgc3VidGl0bGVzIGFyZSBBSS1nZW5lcmF0ZWQgYW5kIG1heSBjb250YWluXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbWwtNSBtci01XCIgKm5nSWY9XCJpc01vYmlsZUZvckFJXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmFuc2NyaXB0LWZsZXgtY29udGFpbmVyIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3RcIiBhcHBlYXJhbmNlPVwiZmlsbFwiIHN0eWxlPVwiaGVpZ2h0OiBhdXRvOyB3aWR0aDogMTAwJTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0TGFiZWw9XCJuZXZlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdC1ib3ggcHItNVwiIFsodmFsdWUpXT1cInNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJyZW5kZXJTZWxlY3RlZExhbmd1YWdlVHJhbnNjcmlwdGlvbigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXIgY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LWJveC10cmlnZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtb3B0aW9uLWNvbnRlbnQgcHgtNSBweS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID09PSBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlRyYW5zY3JpcHQgTGFuZ3VhZ2U6IDwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/Lmxhbmd1YWdlIHwgdGl0bGVjYXNlfX0gPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGVmYXVsdFRyYW5zY3JpcHRMYW5ndWFnZSA9PT0gc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsXCI+KEF1dG8pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3Qtb3B0aW9uXCIgdmFsdWU9XCJcIiAqbmdGb3I9XCJsZXQgbGFuZyBvZiB2dHRMYW5nQXJyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsYW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlLW9wdGlvbic6IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbCA9PT0gbGFuZz8ubGFiZWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e2xhbmc/Lmxhbmd1YWdlIHwgdGl0bGVjYXNlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTQgZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCB0cmFuc2NyaXB0LWNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIHJlcXVpcmVkIGNsYXNzPVwic2VjdGlvbi1kZFwiIChjaGFuZ2UpPVwicmVuZGVyU2VsZWN0ZWRMYW5ndWFnZVRyYW5zY3JpcHRpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibGFuZz8ubGFuZ3VhZ2VcIiAqbmdGb3I9XCJsZXQgbGFuZyBvZiB2dHRMYW5nQXJyXCIgW3NlbGVjdGVkXT1cImxhbmc/LmxhYmVsID09PSB0cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID09PSBsYW5nPy5sYWJlbFwiPiBUcmFuc2NyaXB0IExhbmd1YWdlOiA8L3NwYW4+IHt7bGFuZz8ubGFuZ3VhZ2UgfCB0aXRsZWNhc2V9fSA8c3BhbiAqbmdJZj1cInRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9PT0gbGFuZz8ubGFuZ3VhZ2VcIj4oQXV0byk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCIhaXNNb2JpbGVGb3JBSSA/ICd3LXN1YnRpdGxlLTgwJzondy1mdWxsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiIWlzTW9iaWxlRm9yQUkgPyAnbWwtNS1wZXInIDogJydcIiAqbmdJZj1cInN1YlRpdGxlcyAmJiBzdWJUaXRsZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRyYW5zY3JpcHRpb24gY29udGVudCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3VidGl0bGUgb2Ygc3ViVGl0bGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCAgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZS10aW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInBsYXlGcm9tU2xvdChzdWJ0aXRsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByLTEgYmx1ZS11bmRlcmxpbmVcIj4ge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0TXNUb1Z0dFRpbWUoc3VidGl0bGU/LnN0YXJ0VGltZSkgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmxhY2stdGV4dFwiPi08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0xIGJsdWUtdW5kZXJsaW5lXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0TXNUb1Z0dFRpbWUoc3VidGl0bGU/LmVuZFRpbWUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTQgc3VidGl0bGUtdGV4dC1zbG90IG1yLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYmxhY2stdGV4dFwiIFtpbm5lckh0bWxdPVwic3VidGl0bGU/LnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGlnaGxpZ2h0IDoga2V5d29yZFRvSGlnaGxpZ2h0Py50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoc3VidGl0bGU/LnN0YXJ0VGltZSAvIDEwMDApID49IGtleXdvcmRUb0hpZ2hsaWdodD8uc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoc3VidGl0bGU/LmVuZFRpbWUgLyAxMDAwKSA8PSBrZXl3b3JkVG9IaWdobGlnaHQ/LmVuZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LXN1YnRpdGxlLTIwXCIgKm5nSWY9XCIhaXNNb2JpbGVGb3JBSVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmFuc2NyaXB0LWZsZXgtY29udGFpbmVyIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdFwiIGFwcGVhcmFuY2U9XCJmaWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiBhdXRvOyB3aWR0aDogMTAwJTtcIiBmbG9hdExhYmVsPVwibmV2ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdC1ib3ggcHItNVwiIFsodmFsdWUpXT1cInNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInJlbmRlclNlbGVjdGVkTGFuZ3VhZ2VUcmFuc2NyaXB0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyIGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdC1ib3gtdHJpZ2dlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtb3B0aW9uLWNvbnRlbnQgcHgtNSBweS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj48c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9PT0gc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlRyYW5zY3JpcHQgTGFuZ3VhZ2U6IDwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFuZ3VhZ2UgfCB0aXRsZWNhc2V9fSA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRlZmF1bHRUcmFuc2NyaXB0TGFuZ3VhZ2UgPT09IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbFwiPihBdXRvKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3Qtb3B0aW9uXCIgdmFsdWU9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFuZyBvZiB2dHRMYW5nQXJyXCIgW3ZhbHVlXT1cImxhbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZS1vcHRpb24nOiBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWwgPT09IGxhbmc/LmxhYmVsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7bGFuZz8ubGFuZ3VhZ2UgfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBteS0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHA+MC4wMDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5BSSBmb3IgRGlnaXRhbCBUcmFuc2Zvcm1hdGlvbjogTWFjaGluZSBMZWFybmluZyBhbmQgRGVlcCBMZWFybmluZyAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLjwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbWF0TmF0aXZlQ29udHJvbCByZXF1aXJlZCBjbGFzcz1cInNlY3Rpb24tZGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+VHJhbnNjcmlwdGlvbiBMYW5ndWFnZTogRW5nbGlzaCAoQXV0byk8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC10YWI+XG5cbiAgICAgICAgPCEtLSBBYm91dCBUYWIgLS0+XG4gICAgICAgIDxtYXQtdGFiIGxhYmVsPVwie3sgJ2FwcHRvY3NpbmdsZXBhZ2UuYWJvdXQnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktdHV0b3ItZ2V0LXN0YXJ0ZWQtbW9iaWxlIG15LTIgbWwtMlwiICpuZ0lmPVwiIXZpZXdlclBhZ2UgJiYgZW5hYmxlQUlUdXRvckZsYWcgJiYgaXNNb2JpbGUgJiYgICAoZG9tYWluQ29uZlNlcnZpY2U/LmlzRmVhdHVyZUJ5UGFnZUVuYWJsZWQoJ3RvYycsJ2FpVHV0b3InKSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIHctOThcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9ib3QtY2hhdC1zbWFsbC5zdmdcIiBoZWlnaHQ9XCI0OHB4XCIgd2lkdGg9XCI0OHB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIHctNjBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtd2VpZ2h0LTYwMFwiPkdldCBTdGFydGVkIHdpdGggQUkgVHV0b3I8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkdldCBpbnN0YW50IGV4cGxhbmF0aW9ucywgc3RlcC1ieS1zdGVwIGxlYXJuaW5nIGd1aWRhbmNlLCBhbmQgY3VzdG9taXNlZCBsZWFybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbG9yZWQganVzdCBmb3IgeW91Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktdHV0b3ItYnRuIHB4LTIgcHktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwic2hvd0FpVHV0b3JDb25maXJtUG9wdXAoKVwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9haS10dXRvci9haS1pY29uLnN2Z1wiPiZuYnNwOyAmbmJzcDsgPHNwYW4gY2xhc3M9XCJhaS10dXRvci1sYWJlbFwiPkFJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUdXRvcjwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBteS0yIG14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXR1dG9yLWJ0biBweC0yIHB5LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwic2hvd0FpVHV0b3JDb25maXJtUG9wdXAoKVwiPjxpbWcgc3JjPVwiYXNzZXRzL2FpLXR1dG9yL2FpLWljb24uc3ZnXCI+Jm5ic3A7ICZuYnNwOyA8c3BhbiBjbGFzcz1cImFpLXR1dG9yLWxhYmVsXCI+QUkgVHV0b3I8L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtdG9jLWFib3V0IFtmcm9tVmlld2VyXT1cImZyb21WaWV3ZXJcIiBbcGF0aFNldF09XCJwYXRoU2V0XCIgW2NvbnRlbnRdPVwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtjb250ZW50UmVhZERhdGFdPVwiY29udGVudFJlYWREYXRhXCIgW2Jhc2VDb250ZW50UmVhZERhdGFdPVwiYmFzZUNvbnRlbnRSZWFkRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b2NTdHJ1Y3R1cmVdPVwidG9jU3RydWN0dXJlXCIgW2NvbmZpZ109XCJjb25maWdcIiBbZm9yUHJldmlld109XCJmYWxzZVwiIFtzdGlja3ldPVwic3RpY2t5XCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkQmF0Y2hEYXRhXT1cInNlbGVjdGVkQmF0Y2hEYXRhXCIgW3NlbGVjdGVkVGFiVmFsdWVdPVwic2VsZWN0ZWRUYWJJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXN1bWVEYXRhXT1cInJlc3VtZURhdGFcIiBbYmF0Y2hEYXRhXT1cImJhdGNoRGF0YVwiIFtza2VsZXRvbkxvYWRlcl09XCJza2VsZXRvbkxvYWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtjb25kaXRpb25dPVwiY29uZGl0aW9uXCIgW2twYXJyYXldPVwia3BhcnJheVwiIFtzaG93UmV2aWV3c109XCIndHJ1ZSdcIiBbbGFuZ3VhZ2VMaXN0XT1cImxhbmd1YWdlTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2NrQ2VydGlmaWNhdGVdPVwibG9ja0NlcnRpZmljYXRlXCIgKHRyaWdlckNvbXBsZXRpb25TdXJ2ZXlGb3JtKT1cIm9wZW5TdXJ2ZXlGb3JtUG9wdXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtmcm9tTURPXT1cImZyb21NRE9cIj5cbiAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1hcHAtdG9jLWFib3V0PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICAgIDwhLS0gQ29udGVudCBUYWIgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmNvbnRlbnQnIHwgdHJhbnNsYXRlIH19XCIgKm5nSWY9XCJjb250ZW50VGFiRmxhZ1wiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFwcC10b2MtY29udGVudCBbYmF0Y2hJZF09XCJiYXRjaElkXCIgW2NvbXBvbmVudE5hbWVdPVwiY29tcG9uZW50TmFtZVwiIFtwYXRoU2V0XT1cInBhdGhTZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiY29udGVudFwiIFt0b2NTdHJ1Y3R1cmVdPVwidG9jU3RydWN0dXJlXCIgW2NvbmZpZ109XCJjb25maWdcIiBbZm9yUHJldmlld109XCJmb3JQcmV2aWV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bWVEYXRhXT1cInJlc3VtZURhdGFcIiBbYmF0Y2hEYXRhXT1cImJhdGNoRGF0YVwiIFtza2VsZXRvbkxvYWRlcl09XCJza2VsZXRvbkxvYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGllcmFyY2h5TWFwRGF0YV09XCJoaWVyYXJjaHlNYXBEYXRhXCIgW2Jhc2VDb250ZW50UmVhZERhdGFdPVwiYmFzZUNvbnRlbnRSZWFkRGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1hcHAtdG9jLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZz8uY29tbWVudHNUYWIgJiYgIWZvclByZXZpZXcgJiYgICAoZG9tYWluQ29uZlNlcnZpY2U/LmlzRmVhdHVyZUJ5UGFnZUVuYWJsZWQoJ3RvYycsJ3N0YXJ0RGlzY3Vzc2lvbicpKVwiPlxuICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJ7eyAnYXBwdG9jc2luZ2xlcGFnZS5zdGFydERpc2N1c3Npb24nIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJhdGluZ3MtZGl2IG10LTVcIiBpZD1cImNvbW1lbnRzRGl2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGlzY3Vzc1dpZGdldERhdGEgJiYgZGlzY3Vzc1dpZGdldERhdGE/Lm5ld0NvbW1lbnRTZWN0aW9uPy5jb21tZW50VHJlZURhdGE/LmVudGl0eUlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbW1lbnRJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkLXYyLXdpZGdldC1jb21tZW50IFt3aWRnZXREYXRhXT1cImRpc2N1c3NXaWRnZXREYXRhXCI+PC9kLXYyLXdpZGdldC1jb21tZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tbWVudElkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTMgY3Vyc29yLXBvaW50ZXIgbWItNVwiIChjbGljayk9XCJjbGVhckNvbW1lbnRJZEZyb21VcmwoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPmFycm93X2JhY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIHRvIGFsbCBjb21tZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkLXYyLXdpZGdldC1jb21tZW50IFt3aWRnZXREYXRhXT1cImRpc2N1c3NXaWRnZXREYXRhXCIgW2NvbW1lbnRJZF09XCJjb21tZW50SWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2tlbGV0b25Mb2FkZXJdPjwvZC12Mi13aWRnZXQtY29tbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZz8uc2FtdWhpa0NoYXJjaGFUYWIgJiYgY29uZGl0aW9uICYmIGNvbnRlbnRSZWFkRGF0YT8uZXZlbnRMaW5rZWQ/Lmxlbmd0aCA+IDAgJiYgZW5hYmxlU2FtdWhpa0NoYXJjaGFUYWIgJiYgKGRvbWFpbkNvbmZTZXJ2aWNlPy5pc0ZlYXR1cmVCeVBhZ2VFbmFibGVkKCd0b2MnLCdzYW11aGlrQ2hhcmNoYScpKVwiPlxuICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJ7eyAnYXBwdG9jc2luZ2xlcGFnZS5zYW11aGlrQ2hhcmNoYScgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcmF0aW5ncy1kaXYgbXQtNVwiIGlkPVwic2FtdWhpa0NoYXJjaGFEaXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2FtdWhpay1jaGFyY2hhLWNvbnRlbnQgW2NvbnRlbnRdPVwiY29udGVudFJlYWREYXRhXCIgW2NvbmRpdGlvbkRhdGFdPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdW1lQ29udGVudCk9XCJyZXN1bWVDb250ZW50Q2FsbCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1zYW11aGlrLWNoYXJjaGEtY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUZWFjaGVycyBOb3RlIFRhYiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucmVmZXJlbmNlTm9kZXMgJiYgdGVhY2hlck5vdGVzRmxhZ1wiPlxuICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJUZWFjaGVycyBOb3RlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJhdGluZ3MtZGl2IG10LTVcIiBpZD1cInRlYWNoZXJzTm90ZURpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtdG9jLXRlYWNoZXJzLW5vdGVzIFtjb250ZW50XT1cImNvbnRlbnRSZWFkRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vdGVzRGlzcGxheVR5cGVdPVwiJ1RlYWNoZXJzIFJlc291cmNlJ1wiPjwvd3Mtd2lkZ2V0LWFwcC10b2MtdGVhY2hlcnMtbm90ZXM+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gUmVmZXJlbmNlIE5vdGUgVGFiIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5yZWZlcmVuY2VOb2RlcyAmJiByZWZlcmVuY2VOb3Rlc0ZsYWdcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiUmVmZXJlbmNlIE5vdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcmF0aW5ncy1kaXYgbXQtNVwiIGlkPVwidGVhY2hlcnNOb3RlRGl2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFwcC10b2MtdGVhY2hlcnMtbm90ZXMgW2NvbnRlbnRdPVwiY29udGVudFJlYWREYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm90ZXNEaXNwbGF5VHlwZV09XCInUmVmZXJlbmNlIFJlc291cmNlJ1wiPjwvd3Mtd2lkZ2V0LWFwcC10b2MtdGVhY2hlcnMtbm90ZXM+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHdzLXdpZGdldC1hcHAtdG9jLXJlZmVyZW5jZS1ub3RlcyBbY29udGVudF09XCJjb250ZW50UmVhZERhdGFcIj48L3dzLXdpZGdldC1hcHAtdG9jLXJlZmVyZW5jZS1ub3Rlcz4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QXNzaWdubWVudHNUYWIgJiYgIWZvclByZXZpZXcgJiYgKGRvbWFpbkNvbmZTZXJ2aWNlPy5pc0ZlYXR1cmVCeVBhZ2VFbmFibGVkKCd0b2MnLCdhc3NpZ25tZW50JykpXCI+XG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmFzc2lnbm1lbnRzJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCByYXRpbmdzLWRpdiBtdC01XCIgaWQ9XCJ0YWtlQXNzZXNzbWVudERpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtYmF0Y2gtYXNzaWdubWVudHMgW2NvbnRlbnRdPVwiY29udGVudFwiPjwvd3Mtd2lkZ2V0LWFwcC1iYXRjaC1hc3NpZ25tZW50cz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUcmFuc2NyaXB0aW9uIFRhYiAtLT5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJBSSBUdXRvclwiICpuZ0lmPVwidmlld2VyUGFnZSAmJiBlbmFibGVBSVR1dG9yRmxhZyAmJiBpc01vYmlsZSAmJiAoZG9tYWluQ29uZlNlcnZpY2U/LmlzRmVhdHVyZUJ5UGFnZUVuYWJsZWQoJ3RvYycsJ3RyYW5zY3JpcHRpb24nKSlcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BSSBUdXRvcjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWQtY2lyY2xlIG1sLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIE5ld1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QUlUdXRvclBvcHVwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFpLXR1dG9yIFtjb250ZW50XT1cImNvbnRlbnQ/LmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZUFJUG9wdXApPVwiY2xvc2VBSVBvcHVwKCRldmVudClcIj48L3dzLXdpZGdldC1haS10dXRvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC10YWI+XG5cbiAgICA8L21hdC10YWItZ3JvdXA+XG48L2Rpdj4iXX0=