@sunbird-cb/toc 0.0.8 → 0.0.9-ang-17-20

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 (495) hide show
  1. package/fesm2022/sunbird-cb-toc.mjs +16729 -13896
  2. package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
  3. package/index.d.ts +5889 -4
  4. package/package.json +13 -12
  5. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.component.mjs +0 -55
  6. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +0 -126
  7. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +0 -32
  8. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +0 -85
  9. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +0 -100
  10. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +0 -48
  11. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +0 -120
  12. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +0 -92
  13. package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +0 -48
  14. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +0 -25
  15. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +0 -41
  16. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +0 -89
  17. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +0 -42
  18. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +0 -41
  19. package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +0 -78
  20. package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +0 -45
  21. package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +0 -2
  22. package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +0 -70
  23. package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +0 -28
  24. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +0 -187
  25. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +0 -86
  26. package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +0 -31
  27. package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +0 -941
  28. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +0 -183
  29. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +0 -327
  30. package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +0 -297
  31. package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +0 -225
  32. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +0 -1030
  33. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +0 -16
  34. package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +0 -43
  35. package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +0 -133
  36. package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +0 -66
  37. package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +0 -278
  38. package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +0 -21
  39. package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +0 -21
  40. package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +0 -847
  41. package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +0 -219
  42. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +0 -209
  43. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +0 -26
  44. package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +0 -19
  45. package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +0 -23
  46. package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +0 -113
  47. package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +0 -110
  48. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +0 -26
  49. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +0 -19
  50. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +0 -67
  51. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +0 -28
  52. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +0 -77
  53. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +0 -2
  54. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +0 -61
  55. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +0 -20
  56. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +0 -67
  57. package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +0 -139
  58. package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +0 -71
  59. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +0 -34
  60. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +0 -56
  61. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +0 -25
  62. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +0 -37
  63. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +0 -32
  64. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +0 -30
  65. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +0 -38
  66. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +0 -51
  67. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +0 -115
  68. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +0 -12
  69. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +0 -51
  70. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +0 -61
  71. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +0 -87
  72. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +0 -36
  73. package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +0 -62
  74. package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +0 -24
  75. package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +0 -192
  76. package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +0 -44
  77. package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +0 -99
  78. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +0 -58
  79. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +0 -67
  80. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +0 -112
  81. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +0 -2
  82. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +0 -69
  83. package/esm2022/lib/_collection-api.mjs +0 -57
  84. package/esm2022/lib/_constants/widget-content.constants.mjs +0 -19
  85. package/esm2022/lib/_directives/tooltip.directive.mjs +0 -68
  86. package/esm2022/lib/_models/common.model.mjs +0 -2
  87. package/esm2022/lib/_models/error.model.mjs +0 -2
  88. package/esm2022/lib/_pipes/highlight.pipe.mjs +0 -24
  89. package/esm2022/lib/_services/rating.service.mjs +0 -89
  90. package/esm2022/lib/_services/samuhik-charcha.service.mjs +0 -29
  91. package/esm2022/lib/_services/viewer-route-util.mjs +0 -103
  92. package/esm2022/lib/_services/widget-content.model.mjs +0 -247
  93. package/esm2022/lib/_services/widget-content.service.mjs +0 -594
  94. package/esm2022/lib/_shared/translate-loader.factory.mjs +0 -9
  95. package/esm2022/lib/app-toc-lib.module.mjs +0 -499
  96. package/esm2022/lib/collection.config.mjs +0 -161
  97. package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +0 -37
  98. package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +0 -1436
  99. package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +0 -475
  100. package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +0 -119
  101. package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +0 -80
  102. package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +0 -249
  103. package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +0 -39
  104. package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +0 -58
  105. package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +0 -2229
  106. package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +0 -2905
  107. package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +0 -157
  108. package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +0 -48
  109. package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +0 -47
  110. package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +0 -766
  111. package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +0 -243
  112. package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +0 -116
  113. package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +0 -44
  114. package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +0 -1838
  115. package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +0 -236
  116. package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +0 -213
  117. package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +0 -36
  118. package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +0 -256
  119. package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +0 -133
  120. package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +0 -36
  121. package/esm2022/lib/models/app-toc-analytics.model.mjs +0 -2
  122. package/esm2022/lib/models/app-toc.model.mjs +0 -38
  123. package/esm2022/lib/models/auto-complete.model.mjs +0 -2
  124. package/esm2022/lib/models/card-content.model.mjs +0 -13
  125. package/esm2022/lib/models/content-strip-with-tabs.model.mjs +0 -2
  126. package/esm2022/lib/models/discussion-forum.model.mjs +0 -14
  127. package/esm2022/lib/models/goal.model.mjs +0 -2
  128. package/esm2022/lib/models/meta-tag.model.mjs +0 -8
  129. package/esm2022/lib/models/playlist.model.mjs +0 -2
  130. package/esm2022/lib/models/profile-revamp.model.mjs +0 -2
  131. package/esm2022/lib/models/rating.model.mjs +0 -2
  132. package/esm2022/lib/models/user-profile.model.mjs +0 -21
  133. package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +0 -24
  134. package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +0 -24
  135. package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +0 -60
  136. package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +0 -25
  137. package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +0 -106
  138. package/esm2022/lib/resolvers/config-resolver.service.mjs +0 -25
  139. package/esm2022/lib/resolvers/profile-resolver.service.mjs +0 -25
  140. package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +0 -25
  141. package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +0 -51
  142. package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +0 -16
  143. package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +0 -18
  144. package/esm2022/lib/services/access-control.service.mjs +0 -56
  145. package/esm2022/lib/services/action.service.mjs +0 -23
  146. package/esm2022/lib/services/app-toc-v2.service.mjs +0 -243
  147. package/esm2022/lib/services/app-toc.service.mjs +0 -1387
  148. package/esm2022/lib/services/certificate.service.mjs +0 -69
  149. package/esm2022/lib/services/discuss-utils.service.mjs +0 -58
  150. package/esm2022/lib/services/editor.service.mjs +0 -34
  151. package/esm2022/lib/services/load-check.service.mjs +0 -21
  152. package/esm2022/lib/services/loader.service.mjs +0 -33
  153. package/esm2022/lib/services/mobile-apps.service.mjs +0 -67
  154. package/esm2022/lib/services/netcore.service.mjs +0 -56
  155. package/esm2022/lib/services/nps-grid.service.mjs +0 -31
  156. package/esm2022/lib/services/otp.service.mjs +0 -43
  157. package/esm2022/lib/services/profile-v2.service.mjs +0 -43
  158. package/esm2022/lib/services/reset-ratings.service.mjs +0 -19
  159. package/esm2022/lib/services/resource-download-helper.service.mjs +0 -64
  160. package/esm2022/lib/services/timer.service.mjs +0 -23
  161. package/esm2022/lib/services/title-tag.service.mjs +0 -71
  162. package/esm2022/lib/services/user-profile.service.mjs +0 -55
  163. package/esm2022/lib/services/viewer-data.service.mjs +0 -64
  164. package/esm2022/lib/services/viewer-util.service.mjs +0 -590
  165. package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +0 -291
  166. package/esm2022/lib/share-toc/share-toc.module.mjs +0 -119
  167. package/esm2022/public-api.mjs +0 -71
  168. package/esm2022/sunbird-cb-toc.mjs +0 -5
  169. package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +0 -17
  170. package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts.map +0 -1
  171. package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +0 -32
  172. package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts.map +0 -1
  173. package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +0 -16
  174. package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts.map +0 -1
  175. package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +0 -21
  176. package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts.map +0 -1
  177. package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +0 -23
  178. package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts.map +0 -1
  179. package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +0 -16
  180. package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts.map +0 -1
  181. package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +0 -23
  182. package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts.map +0 -1
  183. package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +0 -23
  184. package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts.map +0 -1
  185. package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +0 -10
  186. package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts.map +0 -1
  187. package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +0 -12
  188. package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts.map +0 -1
  189. package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +0 -13
  190. package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts.map +0 -1
  191. package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +0 -19
  192. package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts.map +0 -1
  193. package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +0 -15
  194. package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts.map +0 -1
  195. package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +0 -12
  196. package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts.map +0 -1
  197. package/lib/_collection/_common/connection-name/connection-name.component.d.ts +0 -18
  198. package/lib/_collection/_common/connection-name/connection-name.component.d.ts.map +0 -1
  199. package/lib/_collection/_common/connection-name/connection-name.module.d.ts +0 -15
  200. package/lib/_collection/_common/connection-name/connection-name.module.d.ts.map +0 -1
  201. package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +0 -200
  202. package/lib/_collection/_common/connection-name/profile-v2.model.d.ts.map +0 -1
  203. package/lib/_collection/_common/content-progress/content-progress.component.d.ts +0 -17
  204. package/lib/_collection/_common/content-progress/content-progress.component.d.ts.map +0 -1
  205. package/lib/_collection/_common/content-progress/content-progress.module.d.ts +0 -11
  206. package/lib/_collection/_common/content-progress/content-progress.module.d.ts.map +0 -1
  207. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +0 -39
  208. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts.map +0 -1
  209. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +0 -20
  210. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts.map +0 -1
  211. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +0 -12
  212. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts.map +0 -1
  213. package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +0 -184
  214. package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts.map +0 -1
  215. package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +0 -42
  216. package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts.map +0 -1
  217. package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +0 -55
  218. package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts.map +0 -1
  219. package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +0 -48
  220. package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts.map +0 -1
  221. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +0 -49
  222. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts.map +0 -1
  223. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +0 -155
  224. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +0 -1
  225. package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +0 -9
  226. package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts.map +0 -1
  227. package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +0 -17
  228. package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts.map +0 -1
  229. package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +0 -41
  230. package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts.map +0 -1
  231. package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +0 -22
  232. package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts.map +0 -1
  233. package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +0 -46
  234. package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts.map +0 -1
  235. package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +0 -11
  236. package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts.map +0 -1
  237. package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +0 -11
  238. package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts.map +0 -1
  239. package/lib/_collection/_common/content-toc/content-toc.component.d.ts +0 -129
  240. package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +0 -1
  241. package/lib/_collection/_common/content-toc/content-toc.module.d.ts +0 -52
  242. package/lib/_collection/_common/content-toc/content-toc.module.d.ts.map +0 -1
  243. package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +0 -30
  244. package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts.map +0 -1
  245. package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +0 -10
  246. package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts.map +0 -1
  247. package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +0 -8
  248. package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts.map +0 -1
  249. package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +0 -8
  250. package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts.map +0 -1
  251. package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +0 -29
  252. package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts.map +0 -1
  253. package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +0 -25
  254. package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts.map +0 -1
  255. package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +0 -15
  256. package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts.map +0 -1
  257. package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +0 -10
  258. package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts.map +0 -1
  259. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +0 -13
  260. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts.map +0 -1
  261. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +0 -11
  262. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts.map +0 -1
  263. package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +0 -23
  264. package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts.map +0 -1
  265. package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +0 -9
  266. package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts.map +0 -1
  267. package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +0 -19
  268. package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts.map +0 -1
  269. package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +0 -9
  270. package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts.map +0 -1
  271. package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +0 -16
  272. package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts.map +0 -1
  273. package/lib/_collection/_common/player-brief/player-brief.component.d.ts +0 -36
  274. package/lib/_collection/_common/player-brief/player-brief.component.d.ts.map +0 -1
  275. package/lib/_collection/_common/player-brief/player-brief.module.d.ts +0 -20
  276. package/lib/_collection/_common/player-brief/player-brief.module.d.ts.map +0 -1
  277. package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +0 -15
  278. package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts.map +0 -1
  279. package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +0 -14
  280. package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts.map +0 -1
  281. package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +0 -12
  282. package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts.map +0 -1
  283. package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +0 -12
  284. package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts.map +0 -1
  285. package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +0 -16
  286. package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts.map +0 -1
  287. package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +0 -11
  288. package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts.map +0 -1
  289. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +0 -17
  290. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts.map +0 -1
  291. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +0 -12
  292. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts.map +0 -1
  293. package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +0 -35
  294. package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts.map +0 -1
  295. package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +0 -18
  296. package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts.map +0 -1
  297. package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +0 -16
  298. package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts.map +0 -1
  299. package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +0 -16
  300. package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts.map +0 -1
  301. package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +0 -22
  302. package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts.map +0 -1
  303. package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +0 -13
  304. package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts.map +0 -1
  305. package/lib/_collection/_common/user-image/user-image.component.d.ts +0 -22
  306. package/lib/_collection/_common/user-image/user-image.component.d.ts.map +0 -1
  307. package/lib/_collection/_common/user-image/user-image.module.d.ts +0 -10
  308. package/lib/_collection/_common/user-image/user-image.module.d.ts.map +0 -1
  309. package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +0 -48
  310. package/lib/_collection/btn-page-back/btn-page-back.component.d.ts.map +0 -1
  311. package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +0 -15
  312. package/lib/_collection/btn-page-back/btn-page-back.module.d.ts.map +0 -1
  313. package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +0 -23
  314. package/lib/_collection/btn-page-back/btn-page-back.service.d.ts.map +0 -1
  315. package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +0 -20
  316. package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts.map +0 -1
  317. package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +0 -16
  318. package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts.map +0 -1
  319. package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +0 -26
  320. package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts.map +0 -1
  321. package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +0 -22
  322. package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts.map +0 -1
  323. package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +0 -19
  324. package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts.map +0 -1
  325. package/lib/_collection-api.d.ts +0 -35
  326. package/lib/_collection-api.d.ts.map +0 -1
  327. package/lib/_constants/widget-content.constants.d.ts +0 -8
  328. package/lib/_constants/widget-content.constants.d.ts.map +0 -1
  329. package/lib/_directives/tooltip.directive.d.ts +0 -18
  330. package/lib/_directives/tooltip.directive.d.ts.map +0 -1
  331. package/lib/_models/common.model.d.ts +0 -4
  332. package/lib/_models/common.model.d.ts.map +0 -1
  333. package/lib/_models/error.model.d.ts +0 -6
  334. package/lib/_models/error.model.d.ts.map +0 -1
  335. package/lib/_pipes/highlight.pipe.d.ts +0 -11
  336. package/lib/_pipes/highlight.pipe.d.ts.map +0 -1
  337. package/lib/_services/rating.service.d.ts +0 -19
  338. package/lib/_services/rating.service.d.ts.map +0 -1
  339. package/lib/_services/samuhik-charcha.service.d.ts +0 -14
  340. package/lib/_services/samuhik-charcha.service.d.ts.map +0 -1
  341. package/lib/_services/viewer-route-util.d.ts +0 -9
  342. package/lib/_services/viewer-route-util.d.ts.map +0 -1
  343. package/lib/_services/widget-content.model.d.ts +0 -516
  344. package/lib/_services/widget-content.model.d.ts.map +0 -1
  345. package/lib/_services/widget-content.service.d.ts +0 -102
  346. package/lib/_services/widget-content.service.d.ts.map +0 -1
  347. package/lib/_shared/translate-loader.factory.d.ts +0 -8
  348. package/lib/_shared/translate-loader.factory.d.ts.map +0 -1
  349. package/lib/app-toc-lib.module.d.ts +0 -89
  350. package/lib/app-toc-lib.module.d.ts.map +0 -1
  351. package/lib/collection.config.d.ts +0 -160
  352. package/lib/collection.config.d.ts.map +0 -1
  353. package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +0 -18
  354. package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts.map +0 -1
  355. package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +0 -226
  356. package/lib/components/app-toc-banner/app-toc-banner.component.d.ts.map +0 -1
  357. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +0 -79
  358. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts.map +0 -1
  359. package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +0 -23
  360. package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts.map +0 -1
  361. package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +0 -32
  362. package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts.map +0 -1
  363. package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +0 -48
  364. package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts.map +0 -1
  365. package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +0 -15
  366. package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts.map +0 -1
  367. package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +0 -22
  368. package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts.map +0 -1
  369. package/lib/components/app-toc-home/app-toc-home.component.d.ts +0 -315
  370. package/lib/components/app-toc-home/app-toc-home.component.d.ts.map +0 -1
  371. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +0 -409
  372. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +0 -1
  373. package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +0 -48
  374. package/lib/components/app-toc-overview/app-toc-overview.component.d.ts.map +0 -1
  375. package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +0 -23
  376. package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts.map +0 -1
  377. package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +0 -15
  378. package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts.map +0 -1
  379. package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +0 -150
  380. package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts.map +0 -1
  381. package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +0 -43
  382. package/lib/components/completion-survey-form/completion-survey-form.component.d.ts.map +0 -1
  383. package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +0 -28
  384. package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts.map +0 -1
  385. package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +0 -16
  386. package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts.map +0 -1
  387. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +0 -196
  388. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts.map +0 -1
  389. package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +0 -45
  390. package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts.map +0 -1
  391. package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +0 -55
  392. package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts.map +0 -1
  393. package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +0 -19
  394. package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts.map +0 -1
  395. package/lib/components/public-survey-form/public-survey-form.component.d.ts +0 -44
  396. package/lib/components/public-survey-form/public-survey-form.component.d.ts.map +0 -1
  397. package/lib/components/survey-form-question/survey-form-question.component.d.ts +0 -21
  398. package/lib/components/survey-form-question/survey-form-question.component.d.ts.map +0 -1
  399. package/lib/components/survey-form-section/survey-form-section.component.d.ts +0 -14
  400. package/lib/components/survey-form-section/survey-form-section.component.d.ts.map +0 -1
  401. package/lib/models/app-toc-analytics.model.d.ts +0 -153
  402. package/lib/models/app-toc-analytics.model.d.ts.map +0 -1
  403. package/lib/models/app-toc.model.d.ts +0 -85
  404. package/lib/models/app-toc.model.d.ts.map +0 -1
  405. package/lib/models/auto-complete.model.d.ts +0 -28
  406. package/lib/models/auto-complete.model.d.ts.map +0 -1
  407. package/lib/models/card-content.model.d.ts +0 -20
  408. package/lib/models/card-content.model.d.ts.map +0 -1
  409. package/lib/models/content-strip-with-tabs.model.d.ts +0 -45
  410. package/lib/models/content-strip-with-tabs.model.d.ts.map +0 -1
  411. package/lib/models/discussion-forum.model.d.ts +0 -41
  412. package/lib/models/discussion-forum.model.d.ts.map +0 -1
  413. package/lib/models/goal.model.d.ts +0 -23
  414. package/lib/models/goal.model.d.ts.map +0 -1
  415. package/lib/models/meta-tag.model.d.ts +0 -7
  416. package/lib/models/meta-tag.model.d.ts.map +0 -1
  417. package/lib/models/playlist.model.d.ts +0 -24
  418. package/lib/models/playlist.model.d.ts.map +0 -1
  419. package/lib/models/profile-revamp.model.d.ts +0 -15
  420. package/lib/models/profile-revamp.model.d.ts.map +0 -1
  421. package/lib/models/rating.model.d.ts +0 -18
  422. package/lib/models/rating.model.d.ts.map +0 -1
  423. package/lib/models/user-profile.model.d.ts +0 -38
  424. package/lib/models/user-profile.model.d.ts.map +0 -1
  425. package/lib/resolvers/app-toc-cios-resolver.service.d.ts +0 -13
  426. package/lib/resolvers/app-toc-cios-resolver.service.d.ts.map +0 -1
  427. package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +0 -13
  428. package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts.map +0 -1
  429. package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +0 -17
  430. package/lib/resolvers/app-toc-content-read-resolver.service.d.ts.map +0 -1
  431. package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +0 -13
  432. package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts.map +0 -1
  433. package/lib/resolvers/app-toc-resolver.service.d.ts +0 -17
  434. package/lib/resolvers/app-toc-resolver.service.d.ts.map +0 -1
  435. package/lib/resolvers/config-resolver.service.d.ts +0 -12
  436. package/lib/resolvers/config-resolver.service.d.ts.map +0 -1
  437. package/lib/resolvers/profile-resolver.service.d.ts +0 -12
  438. package/lib/resolvers/profile-resolver.service.d.ts.map +0 -1
  439. package/lib/resolvers/restricted-features-resolver.service.d.ts +0 -12
  440. package/lib/resolvers/restricted-features-resolver.service.d.ts.map +0 -1
  441. package/lib/routes/app-toc-home/app-toc-home.component.d.ts +0 -20
  442. package/lib/routes/app-toc-home/app-toc-home.component.d.ts.map +0 -1
  443. package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +0 -9
  444. package/lib/routes/app-toc-home/app-toc-home.directive.d.ts.map +0 -1
  445. package/lib/routes/app-toc-home/app-toc-home.service.d.ts +0 -9
  446. package/lib/routes/app-toc-home/app-toc-home.service.d.ts.map +0 -1
  447. package/lib/services/access-control.service.d.ts +0 -30
  448. package/lib/services/access-control.service.d.ts.map +0 -1
  449. package/lib/services/action.service.d.ts +0 -10
  450. package/lib/services/action.service.d.ts.map +0 -1
  451. package/lib/services/app-toc-v2.service.d.ts +0 -15
  452. package/lib/services/app-toc-v2.service.d.ts.map +0 -1
  453. package/lib/services/app-toc.service.d.ts +0 -178
  454. package/lib/services/app-toc.service.d.ts.map +0 -1
  455. package/lib/services/certificate.service.d.ts +0 -43
  456. package/lib/services/certificate.service.d.ts.map +0 -1
  457. package/lib/services/discuss-utils.service.d.ts +0 -34
  458. package/lib/services/discuss-utils.service.d.ts.map +0 -1
  459. package/lib/services/editor.service.d.ts +0 -18
  460. package/lib/services/editor.service.d.ts.map +0 -1
  461. package/lib/services/load-check.service.d.ts +0 -9
  462. package/lib/services/load-check.service.d.ts.map +0 -1
  463. package/lib/services/loader.service.d.ts +0 -17
  464. package/lib/services/loader.service.d.ts.map +0 -1
  465. package/lib/services/mobile-apps.service.d.ts +0 -39
  466. package/lib/services/mobile-apps.service.d.ts.map +0 -1
  467. package/lib/services/netcore.service.d.ts +0 -34
  468. package/lib/services/netcore.service.d.ts.map +0 -1
  469. package/lib/services/nps-grid.service.d.ts +0 -16
  470. package/lib/services/nps-grid.service.d.ts.map +0 -1
  471. package/lib/services/otp.service.d.ts +0 -21
  472. package/lib/services/otp.service.d.ts.map +0 -1
  473. package/lib/services/profile-v2.service.d.ts +0 -21
  474. package/lib/services/profile-v2.service.d.ts.map +0 -1
  475. package/lib/services/reset-ratings.service.d.ts +0 -9
  476. package/lib/services/reset-ratings.service.d.ts.map +0 -1
  477. package/lib/services/resource-download-helper.service.d.ts +0 -30
  478. package/lib/services/resource-download-helper.service.d.ts.map +0 -1
  479. package/lib/services/timer.service.d.ts +0 -10
  480. package/lib/services/timer.service.d.ts.map +0 -1
  481. package/lib/services/title-tag.service.d.ts +0 -22
  482. package/lib/services/title-tag.service.d.ts.map +0 -1
  483. package/lib/services/user-profile.service.d.ts +0 -25
  484. package/lib/services/user-profile.service.d.ts.map +0 -1
  485. package/lib/services/viewer-data.service.d.ts +0 -59
  486. package/lib/services/viewer-data.service.d.ts.map +0 -1
  487. package/lib/services/viewer-util.service.d.ts +0 -77
  488. package/lib/services/viewer-util.service.d.ts.map +0 -1
  489. package/lib/share-toc/share-toc/share-toc.component.d.ts +0 -57
  490. package/lib/share-toc/share-toc/share-toc.component.d.ts.map +0 -1
  491. package/lib/share-toc/share-toc.module.d.ts +0 -33
  492. package/lib/share-toc/share-toc.module.d.ts.map +0 -1
  493. package/public-api.d.ts +0 -57
  494. package/public-api.d.ts.map +0 -1
  495. package/sunbird-cb-toc.d.ts.map +0 -1
@@ -1,590 +0,0 @@
1
- import { NsContent } from '../_services/widget-content.model';
2
- import { Inject, Injectable } from '@angular/core';
3
- import { noop, Subject } from 'rxjs';
4
- import dayjs from 'dayjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common/http";
7
- import * as i2 from "@sunbird-cb/utils-v2";
8
- import * as i3 from "../_collection-api";
9
- import * as i4 from "./app-toc.service";
10
- import * as i5 from "@sunbird-cb/consumption";
11
- export class ViewerUtilService {
12
- constructor(http, configservice, contentSvc, tocSvc, userSvc, contentLangSvc, domainConfSvc, environment) {
13
- this.http = http;
14
- this.configservice = configservice;
15
- this.contentSvc = contentSvc;
16
- this.tocSvc = tocSvc;
17
- this.userSvc = userSvc;
18
- this.contentLangSvc = contentLangSvc;
19
- this.domainConfSvc = domainConfSvc;
20
- this.environment = environment;
21
- this.API_ENDPOINTS = {
22
- setS3Cookie: `/apis/v8/protected/content/setCookie`,
23
- // PROGRESS_UPDATE: `/apis/protected/v8/user/realTimeProgress/update`,
24
- PROGRESS_UPDATE: `/apis/proxies/v8/content-progres`,
25
- ASSESSMENT_SECTION: `/apis/proxies/v8/assessment/v5/read`,
26
- GET_FORM_BYID: (formId) => `apis/proxies/v8/forms/v2/getFormById?formId=${formId}`,
27
- SUBMIT_FORM: `/apis/proxies/v8/forms/v2/saveFormSubmit`,
28
- // GET_FORM_BYID: (formId: string) => `apis/proxies/v8/forms/getFormById?id=${formId}`,
29
- // SUBMIT_FORM: `/apis/proxies/v8/forms/v1/saveFormSubmit`,
30
- PRE_ASSESSMENT_STATE_UPDATE: `/apis/proxies/v8/content/v2/state/update`
31
- };
32
- this.downloadRegex = new RegExp(`(/content-store/.*?)(\\\)?\\\\?['"])`, 'gm');
33
- this.authoringBase = '/apis/authContent/';
34
- this.markAsCompleteSubject = new Subject();
35
- this.autoPlayNextVideo = new Subject();
36
- this.autoPlayNextAudio = new Subject();
37
- this.forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
38
- this.publicUserDetails = {};
39
- this.regexDownloadReplace = (_str = '', group1, group2) => {
40
- return `${this.authoringBase}${encodeURIComponent(group1)}${group2}`;
41
- };
42
- }
43
- async fetchManifestFile(url) {
44
- this.setS3Cookie(url);
45
- const manifestFile = await this.http
46
- .get(url)
47
- .toPromise()
48
- .catch((_err) => { });
49
- return manifestFile;
50
- }
51
- async setS3Cookie(_contentId) {
52
- // await this.http
53
- // .post(this.API_ENDPOINTS.setS3Cookie, { contentId })
54
- // .toPromise()
55
- // .catch((_err: any) => { })
56
- return;
57
- }
58
- calculatePercent(current, max, mimeType) {
59
- try {
60
- const temp = [...current];
61
- if (temp && temp.length && max) {
62
- const latest = parseFloat(temp.pop() || '0');
63
- const percentMilis = (latest / max) * 100;
64
- let percent = parseFloat(percentMilis.toFixed(2));
65
- if (mimeType === NsContent.EMimeTypes.MP4 ||
66
- mimeType === NsContent.EMimeTypes.M3U8 ||
67
- mimeType === NsContent.EMimeTypes.MP3 ||
68
- mimeType === NsContent.EMimeTypes.M4A ||
69
- mimeType === NsContent.EMimeTypes.YOUTUBE ||
70
- mimeType === NsContent.EMimeTypes.SURVEY) {
71
- if (percent <= 5) {
72
- // if percentage is less than 5% make it 0
73
- percent = 0;
74
- }
75
- else if (percent >= 95) {
76
- // if percentage is greater than 95% make it 100
77
- percent = 100;
78
- }
79
- }
80
- return percent;
81
- }
82
- return 0;
83
- }
84
- catch (e) {
85
- // tslint:disable-next-line: no-console
86
- console.log('Error in calculating percentage', e);
87
- return 0;
88
- }
89
- }
90
- getStatus(current, max, mimeType) {
91
- try {
92
- const percentage = this.calculatePercent(current, max, mimeType);
93
- // for videos and audios
94
- if (mimeType === NsContent.EMimeTypes.MP4 ||
95
- mimeType === NsContent.EMimeTypes.M3U8 ||
96
- mimeType === NsContent.EMimeTypes.MP3 ||
97
- mimeType === NsContent.EMimeTypes.M4A ||
98
- mimeType === NsContent.EMimeTypes.SURVEY ||
99
- mimeType === NsContent.EMimeTypes.PDF) {
100
- // if percentage is less than 5% then make status started
101
- if (Math.ceil(percentage) <= 5) {
102
- return 1;
103
- }
104
- // if percentage is greater than 95% then make status complete
105
- if (Math.ceil(percentage) >= 95) {
106
- return 2;
107
- }
108
- }
109
- else {
110
- if (Math.ceil(percentage) >= 100) {
111
- return 2;
112
- }
113
- }
114
- return 1;
115
- }
116
- catch (e) {
117
- // tslint:disable-next-line: no-console
118
- console.log('Error in getting completion status', e);
119
- return 1;
120
- }
121
- }
122
- realTimeProgressUpdate(contentId, request, collectionId, batchId) {
123
- let req;
124
- if (this.configservice.userProfile) {
125
- const language = this.getResourceContentLanguage(contentId);
126
- req = {
127
- request: {
128
- userId: this.configservice.userProfile.userId || '',
129
- contents: [
130
- {
131
- contentId,
132
- batchId,
133
- language,
134
- status: this.getStatus(request.current, request.max_size, request.mime_type),
135
- courseId: collectionId,
136
- lastAccessTime: dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss:SSSZZ'),
137
- progressdetails: {
138
- max_size: request.max_size,
139
- current: request.current,
140
- mimeType: request.mime_type,
141
- },
142
- completionPercentage: this.calculatePercent(request.current, request.max_size, request.mime_type),
143
- },
144
- ],
145
- },
146
- };
147
- // if (this.configservice.cstoken !== '') {
148
- // const headers = new HttpHeaders()
149
- // .set('cstoken', this.configservice.cstoken)
150
- // this.http
151
- // .patch(`${this.API_ENDPOINTS.PROGRESS_UPDATE}/${contentId}`, { headers } , req)
152
- // .subscribe(noop, noop)
153
- // } else {
154
- // this.http
155
- // .patch(`${this.API_ENDPOINTS.PROGRESS_UPDATE}/${contentId}`, req)
156
- // .subscribe(noop, noop)
157
- // }
158
- this.http
159
- .patch(`${this.API_ENDPOINTS.PROGRESS_UPDATE}/${contentId}`, req)
160
- .subscribe(noop, noop);
161
- if (this.tocSvc.hashmap[contentId] &&
162
- (!this.tocSvc.hashmap[contentId]['completionStatus'] || this.tocSvc.hashmap[contentId]['completionStatus'] < 2)) {
163
- this.tocSvc.hashmap[contentId]['completionPercentage'] = req.request.contents[0].completionPercentage;
164
- this.tocSvc.hashmap[contentId]['completionStatus'] = req.request.contents[0].status;
165
- this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
166
- // Notify UI components about hashmap changes
167
- this.tocSvc.hashmapUpdated.next(this.tocSvc.hashmap);
168
- // Trigger milestone lock recomputation for Learning Pathways
169
- this.tocSvc.triggerMilestoneLockUpdate();
170
- }
171
- }
172
- else {
173
- req = {};
174
- // do nothing
175
- }
176
- }
177
- getBatchIdAndCourseId(courseId, batchId, resourceId) {
178
- const tempData = {
179
- courseId,
180
- batchId,
181
- };
182
- const tempContentData = this.contentSvc.currentMetaData;
183
- const tempContentReadData = this.contentSvc.currentContentReadMetaData;
184
- const enrollmentList = this.contentSvc.currentBatchEnrollmentList;
185
- if (!this.forPreview) {
186
- if (tempContentData.courseCategory === 'Learning Pathway') {
187
- // Find the course that contains the given resource ID
188
- const foundCourse = this.findCourseContainingResource(tempContentData, resourceId);
189
- if (foundCourse) {
190
- // Always update courseId if course is found
191
- tempData.courseId = foundCourse.identifier;
192
- // Try to find batch ID from enrollment data for the found course
193
- if (foundCourse.identifier) {
194
- const enrollment = enrollmentList.find((course) => course.collectionId === foundCourse.identifier);
195
- if (enrollment && enrollment.batchId) {
196
- tempData.batchId = enrollment.batchId;
197
- }
198
- }
199
- }
200
- }
201
- else if (tempContentData && tempContentReadData.cumulativeTracking &&
202
- (tempContentData.primaryCategory === NsContent.EPrimaryCategory.PROGRAM ||
203
- tempContentData.primaryCategory === NsContent.EPrimaryCategory.CURATED_PROGRAM
204
- || tempContentData.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM)) {
205
- tempContentData.children.forEach(async (childList) => {
206
- if (childList.primaryCategory === NsContent.EPrimaryCategory.COURSE) {
207
- // tslint:disable-next-line: max-line-length
208
- const courseEnrollmentList = enrollmentList && enrollmentList.filter((v) => v.contentId === childList.identifier);
209
- if (childList.childNodes && childList.childNodes.indexOf(resourceId) !== -1) {
210
- if (courseEnrollmentList && courseEnrollmentList.length > 0) {
211
- tempData.batchId = courseEnrollmentList[courseEnrollmentList.length - 1].batch.batchId;
212
- tempData.courseId = childList.identifier;
213
- }
214
- else {
215
- const data = await this.checkForCourseEnrollment(childList, resourceId, enrollmentList, tempData);
216
- tempData.courseId = data.courseId;
217
- tempData.batchId = data.batchId;
218
- }
219
- }
220
- }
221
- else if (tempContentData.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM) {
222
- if (tempData.courseId === courseId) {
223
- const bPEnrollmentList = enrollmentList.filter((v) => v.contentId === tempContentData.identifier);
224
- if (tempContentData.childNodes && tempContentData.childNodes.indexOf(resourceId) !== -1) {
225
- if (bPEnrollmentList.length > 0) {
226
- tempData.batchId = bPEnrollmentList[bPEnrollmentList.length - 1].batch.batchId;
227
- tempData.courseId = tempContentData.identifier;
228
- }
229
- }
230
- }
231
- }
232
- });
233
- }
234
- }
235
- return tempData;
236
- }
237
- /**
238
- * Recursively searches for a resource ID in a content's children hierarchy
239
- * @param content The content object to search in
240
- * @param resourceId The resource ID to find
241
- * @returns true if resource is found, false otherwise
242
- */
243
- findResourceInContent(content, resourceId) {
244
- // Check if this content has the resource in its leafNodes
245
- if (content.leafNodes && Array.isArray(content.leafNodes)) {
246
- if (content.leafNodes.indexOf(resourceId) !== -1) {
247
- return true;
248
- }
249
- }
250
- // Check if this content's identifier matches the resource ID
251
- if (content.identifier === resourceId) {
252
- return true;
253
- }
254
- // Recursively search in children
255
- if (content.children && Array.isArray(content.children)) {
256
- for (const child of content.children) {
257
- if (this.findResourceInContent(child, resourceId)) {
258
- return true;
259
- }
260
- }
261
- }
262
- return false;
263
- }
264
- /**
265
- * Finds the course that contains a given resource ID in a Learning Pathway
266
- * @param learningPathwayContent The Learning Pathway content data
267
- * @param resourceId The resource ID to find
268
- * @returns The course object containing the resource, or null if not found
269
- */
270
- findCourseContainingResource(learningPathwayContent, resourceId) {
271
- // Check if milestones_v1 exists
272
- if (!learningPathwayContent.milestones_v1 || !Array.isArray(learningPathwayContent.milestones_v1)) {
273
- return null;
274
- }
275
- // Loop through each milestone
276
- for (const milestone of learningPathwayContent.milestones_v1) {
277
- // Check if milestone has courses
278
- if (milestone.courses && Array.isArray(milestone.courses)) {
279
- // Loop through each course in the milestone
280
- for (const course of milestone.courses) {
281
- // Check if this course contains the resource
282
- if (this.findResourceInContent(course, resourceId)) {
283
- return course;
284
- }
285
- }
286
- }
287
- }
288
- return null;
289
- }
290
- getResourceContentLanguage(resourceId) {
291
- let tempLanguage = 'english';
292
- let languageFound = false;
293
- const tempContentData = this.contentSvc.currentMetaData;
294
- if (!this.forPreview) {
295
- tempContentData.children?.forEach(async (childList) => {
296
- if (childList.primaryCategory === NsContent.EPrimaryCategory.COURSE) {
297
- // tslint:disable-next-line: max-line-length
298
- if (childList.leafNodes && childList.leafNodes.indexOf(resourceId) !== -1) {
299
- tempLanguage = this.contentLangSvc.getContentLanguage(childList);
300
- languageFound = true;
301
- }
302
- }
303
- });
304
- if (!languageFound) {
305
- if (tempContentData.leafNodes && tempContentData.leafNodes.indexOf(resourceId) !== -1) {
306
- tempLanguage = this.contentLangSvc.getContentLanguage(tempContentData);
307
- }
308
- }
309
- }
310
- return tempLanguage;
311
- }
312
- async checkForCourseEnrollment(childList, _resourceId, _enrollmentList, _tempData) {
313
- // tslint:disable-next-line: max-line-length
314
- const courseData = await this.contentSvc.autoAssignBatchApi(childList.identifier).toPromise().then(async (data) => {
315
- if (data) {
316
- // tslint:disable-next-line: max-line-length
317
- const responseData = await this.userSvc.fetchEnrollmentDataByContentId(this.configservice.userProfile?.userId, childList.identifier).toPromise().then(async (res) => {
318
- if (res && res.courses && res.courses.length) {
319
- return res.courses;
320
- }
321
- return [{ courseId: childList.identifier, batchId: '' }];
322
- }).catch((_err) => {
323
- return [{ courseId: childList.identifier, batchId: '' }];
324
- });
325
- this.contentSvc.currentBatchEnrollmentList = [...this.contentSvc.currentBatchEnrollmentList, ...responseData];
326
- return { courseId: childList.identifier, batchId: responseData[0].batchId };
327
- }
328
- }).catch((_err) => {
329
- return [{ courseId: childList.identifier, batchId: '' }];
330
- });
331
- return courseData;
332
- }
333
- realTimeProgressUpdateQuiz(contentId, collectionId, batchId, status) {
334
- let req;
335
- if (this.configservice.userProfile) {
336
- const language = this.getResourceContentLanguage(contentId);
337
- req = {
338
- request: {
339
- userId: this.configservice.userProfile.userId || '',
340
- contents: [
341
- {
342
- contentId,
343
- batchId,
344
- language,
345
- status: status || 2,
346
- courseId: collectionId,
347
- lastAccessTime: dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss:SSSZZ'),
348
- completionPercentage: status === 2 ? 100 : 0,
349
- },
350
- ],
351
- },
352
- };
353
- this.http
354
- .patch(`${this.API_ENDPOINTS.PROGRESS_UPDATE}/${contentId}`, req)
355
- .subscribe(noop, noop);
356
- if (this.tocSvc.hashmap && this.tocSvc.hashmap[contentId] && req.request.contents[0]) {
357
- if (this.tocSvc.hashmap[contentId] &&
358
- (!this.tocSvc.hashmap[contentId]['completionStatus'] || this.tocSvc.hashmap[contentId]['completionStatus'] < 2)) {
359
- this.tocSvc.hashmap[contentId]['completionPercentage'] = req.request.contents[0].completionPercentage;
360
- this.tocSvc.hashmap[contentId]['completionStatus'] = req.request.contents[0].status;
361
- this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
362
- // Notify UI components about hashmap changes
363
- this.tocSvc.hashmapUpdated.next(this.tocSvc.hashmap);
364
- // Trigger milestone lock recomputation for Learning Pathways
365
- if (this.tocSvc.triggerMilestoneLockUpdate) {
366
- this.tocSvc.triggerMilestoneLockUpdate();
367
- }
368
- }
369
- }
370
- }
371
- else {
372
- req = {};
373
- // do nothing
374
- }
375
- }
376
- getContent(contentId) {
377
- const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
378
- let url = `/apis/proxies/v8/action/content/v3/read/${contentId}`;
379
- if (!forPreview) {
380
- url = `/apis/proxies/v8/action/content/v3/read/${contentId}`;
381
- }
382
- else {
383
- if (window.location.href.includes('editMode=true') && window.location.href.includes('_rc')) {
384
- url = `/apis/proxies/v8/action/content/v3/read/${contentId}`;
385
- }
386
- else {
387
- url = `/api/content/v1/read/${contentId}`;
388
- }
389
- }
390
- return this.http.get(
391
- // tslint:disable-next-line:max-line-length
392
- // `/apis/authApi/action/content/hierarchy/${contentId}?rootOrg=${this.configservice.rootOrg || 'igot'}&org=${this.configservice.activeOrg || 'dopt'}`,
393
- url);
394
- }
395
- getAuthoringUrl(url) {
396
- return url
397
- // tslint:disable-next-line:max-line-length
398
- ? `/apis/authContent/${url.includes('/content-store/') ? new URL(url).pathname.slice(1) : encodeURIComponent(url)}`
399
- : '';
400
- }
401
- replaceToAuthUrl(data) {
402
- return JSON.parse(JSON.stringify(data).replace(this.downloadRegex, this.regexDownloadReplace));
403
- }
404
- readSections(assessmentId) {
405
- return `${this.API_ENDPOINTS}/${assessmentId}`;
406
- }
407
- getPublicUrl(url) {
408
- const mainUrl = url.split('/content').pop() || '';
409
- return `${this.environment.contentHost}/${this.environment.contentBucket}/content${mainUrl}`;
410
- }
411
- getCdnUrl(url) {
412
- const mainUrl = url.split('/content').pop() || '';
413
- return `${this.domainConfSvc.getDomainCDNHost()}/${this.environment.cdnContentBucket}/content${mainUrl}`;
414
- }
415
- // fetchContent(
416
- // contentId: string,
417
- // hierarchyType: 'all' | 'minimal' | 'detail' = 'detail'
418
- // ): Observable<NsContent.IContent> {
419
- // let url = ''
420
- // const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true')
421
- // if (!forPreview) {
422
- // url = `/apis/proxies/v8/action/content/v3/hierarchy/${contentId}?hierarchyType=${hierarchyType}`
423
- // } else {
424
- // url = `/api/course/v1/hierarchy/${contentId}?hierarchyType=${hierarchyType}`
425
- // }
426
- // return this.http.get<NsContent.IContent>(url)
427
- // }
428
- fetchContent(id, type) {
429
- return this.http.get(`/apis/proxies/v8/action/content/v3/hierarchy/${id}?mode=${type}`);
430
- }
431
- updateContentHashMapForAssesstent(contentId, contentProgress) {
432
- if (this.tocSvc.hashmap[contentId] &&
433
- (!this.tocSvc.hashmap[contentId]['completionStatus'] || this.tocSvc.hashmap[contentId]['completionStatus'] < 2)) {
434
- this.tocSvc.hashmap[contentId]['completionPercentage'] = contentProgress.completionPercentage;
435
- this.tocSvc.hashmap[contentId]['completionStatus'] = contentProgress.status;
436
- this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
437
- }
438
- }
439
- getFormById(formId) {
440
- return this.http.get(this.API_ENDPOINTS.GET_FORM_BYID(formId));
441
- }
442
- submitForm(formData) {
443
- return this.http.post(this.API_ENDPOINTS.SUBMIT_FORM, formData);
444
- }
445
- realTimeProgressUpdateForPreAssessment(contentId, request) {
446
- let req;
447
- if (this.configservice.userProfile) {
448
- req = {
449
- request: {
450
- userId: this.configservice.userProfile.userId || '',
451
- contents: [
452
- {
453
- contentId,
454
- // batchId,
455
- status: this.getStatus(request.current, request.max_size, request.mime_type),
456
- // courseId: collectionId,
457
- lastAccessTime: dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss:SSSZZ'),
458
- progressdetails: {
459
- max_size: request.max_size,
460
- current: request.current,
461
- mimeType: request.mime_type,
462
- },
463
- completionPercentage: this.calculatePercent(request.current, request.max_size, request.mime_type),
464
- },
465
- ],
466
- },
467
- };
468
- // if (this.configservice.cstoken !== '') {
469
- // const headers = new HttpHeaders()
470
- // .set('cstoken', this.configservice.cstoken)
471
- // this.http
472
- // .patch(`${this.API_ENDPOINTS.PROGRESS_UPDATE}/${contentId}`, { headers } , req)
473
- // .subscribe(noop, noop)
474
- // } else {
475
- // this.http
476
- // .patch(`${this.API_ENDPOINTS.PROGRESS_UPDATE}/${contentId}`, req)
477
- // .subscribe(noop, noop)
478
- // }
479
- // this.http
480
- // .patch(`${this.API_ENDPOINTS.PROGRESS_UPDATE}/${contentId}`, req)
481
- // .subscribe(noop, noop)
482
- //const contentIdNew= req.request.contents[0].contentId
483
- // const updatedCompletionPercentage = req.request.contents[0].completionPercentage
484
- // const updatedStatus = req.request.contents[0].status
485
- // // Clone the inner object and update
486
- // const existingContent = this.tocSvc.hashmap[contentIdNew] || {}
487
- // this.tocSvc.hashmap = {
488
- // ...this.tocSvc.hashmap,
489
- // [contentIdNew]: {
490
- // ...existingContent,
491
- // completionPercentage: updatedCompletionPercentage,
492
- // completionStatus: updatedStatus
493
- // }
494
- // }
495
- // console.log('req', JSON.stringify(req))
496
- // console.log('req', req)
497
- const resourceStatus = this.getPreAssessmentResourceStatus(contentId);
498
- if (resourceStatus < 2) {
499
- this.http
500
- .patch(`${this.API_ENDPOINTS.PRE_ASSESSMENT_STATE_UPDATE}`, req)
501
- .subscribe(noop, noop);
502
- }
503
- if (this.tocSvc.hashmap[contentId] &&
504
- (!this.tocSvc.hashmap[contentId]['completionStatus'] || this.tocSvc.hashmap[contentId]['completionStatus'] < 2)) {
505
- this.tocSvc.hashmap[contentId]['completionPercentage'] = req.request.contents[0].completionPercentage;
506
- this.tocSvc.hashmap[contentId]['completionStatus'] = req.request.contents[0].status;
507
- this.tocSvc.hashmap[contentId]['parent'] = req.request.contents[0].courseId;
508
- this.tocSvc.hashmap[contentId]['progress'] = req.request.contents[0].progressdetails;
509
- this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
510
- // Notify UI components about hashmap changes
511
- this.tocSvc.hashmapUpdated.next(this.tocSvc.hashmap);
512
- // Trigger milestone lock recomputation for Learning Pathways
513
- if (this.tocSvc.triggerMilestoneLockUpdate) {
514
- this.tocSvc.triggerMilestoneLockUpdate();
515
- }
516
- }
517
- // console.log('Updated hashmap:', this.tocSvc.hashmap)
518
- // console.log('this.tocSvc.hashmap---', this.tocSvc.hashmap)
519
- }
520
- else {
521
- req = {};
522
- // do nothing
523
- }
524
- }
525
- realTimeProgressUpdateForPreAssessmentQuiz(contentId, status, mimeType) {
526
- let req;
527
- if (this.configservice.userProfile) {
528
- req = {
529
- request: {
530
- //userId: this.configservice.userProfile.userId || '',
531
- contents: [
532
- {
533
- contentId,
534
- // batchId,
535
- status: status || 2,
536
- // courseId: collectionId,
537
- lastAccessTime: dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss:SSSZZ'),
538
- completionPercentage: status === 2 ? 100.0 : 0,
539
- progressdetails: {
540
- "mimeType": mimeType || "application/vnd.sunbird.questionset"
541
- },
542
- },
543
- ],
544
- },
545
- };
546
- const resourceStatus = this.getPreAssessmentResourceStatus(contentId);
547
- if (resourceStatus < 2) {
548
- this.http
549
- .patch(`${this.API_ENDPOINTS.PRE_ASSESSMENT_STATE_UPDATE}`, req)
550
- .subscribe(noop, noop);
551
- }
552
- if (this.tocSvc.hashmap && this.tocSvc.hashmap[contentId] && req.request.contents[0]) {
553
- if (this.tocSvc.hashmap[contentId] &&
554
- (!this.tocSvc.hashmap[contentId]['completionStatus'] || this.tocSvc.hashmap[contentId]['completionStatus'] < 2)) {
555
- this.tocSvc.hashmap[contentId]['completionPercentage'] = req.request.contents[0].completionPercentage;
556
- this.tocSvc.hashmap[contentId]['completionStatus'] = req.request.contents[0].status;
557
- this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
558
- // Notify UI components about hashmap changes
559
- this.tocSvc.hashmapUpdated.next(this.tocSvc.hashmap);
560
- // Trigger milestone lock recomputation for Learning Pathways
561
- if (this.tocSvc.triggerMilestoneLockUpdate) {
562
- this.tocSvc.triggerMilestoneLockUpdate();
563
- }
564
- }
565
- }
566
- }
567
- else {
568
- req = {};
569
- // do nothing
570
- }
571
- }
572
- getPreAssessmentResourceStatus(resourceId) {
573
- if (this.tocSvc && this.tocSvc.hashmap && this.tocSvc.hashmap[resourceId]) {
574
- return this.tocSvc.hashmap[resourceId]['completionStatus'] || 1;
575
- }
576
- return 1;
577
- }
578
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewerUtilService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigurationsService }, { token: i3.WidgetContentService }, { token: i4.AppTocService }, { token: i5.WidgetUserServiceLib }, { token: i5.ContentLanguageService }, { token: i2.DomainConfService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable }); }
579
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewerUtilService, providedIn: 'root' }); }
580
- }
581
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewerUtilService, decorators: [{
582
- type: Injectable,
583
- args: [{
584
- providedIn: 'root',
585
- }]
586
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ConfigurationsService }, { type: i3.WidgetContentService }, { type: i4.AppTocService }, { type: i5.WidgetUserServiceLib }, { type: i5.ContentLanguageService }, { type: i2.DomainConfService }, { type: undefined, decorators: [{
587
- type: Inject,
588
- args: ['environment']
589
- }] }]; } });
590
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLXV0aWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9zZXJ2aWNlcy92aWV3ZXItdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNoRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7Ozs7Ozs7QUFRekIsTUFBTSxPQUFPLGlCQUFpQjtJQW9CNUIsWUFDVSxJQUFnQixFQUNoQixhQUFvQyxFQUNwQyxVQUFnQyxFQUNoQyxNQUFxQixFQUNyQixPQUE2QixFQUM3QixjQUFzQyxFQUN0QyxhQUFnQyxFQUNULFdBQWdCO1FBUHZDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUNULGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBM0JqRCxrQkFBYSxHQUFHO1lBQ2QsV0FBVyxFQUFFLHNDQUFzQztZQUNuRCxzRUFBc0U7WUFDdEUsZUFBZSxFQUFFLGtDQUFrQztZQUNuRCxrQkFBa0IsRUFBRSxxQ0FBcUM7WUFDekQsYUFBYSxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQywrQ0FBK0MsTUFBTSxFQUFFO1lBQzFGLFdBQVcsRUFBRSwwQ0FBMEM7WUFDdkQsdUZBQXVGO1lBQ3ZG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O1lBQ1IsYUFBYTtTQUNkO0lBQ0gsQ0FBQztJQUVELDhCQUE4QixDQUFDLFVBQWtCO1FBQy9DLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN6RSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ2hFO1FBQ0QsT0FBTyxDQUFDLENBQUE7SUFDVixDQUFDOytHQTVtQlUsaUJBQWlCLDZQQTRCbEIsYUFBYTttSEE1QlosaUJBQWlCLGNBRmhCLE1BQU07OzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQTZCSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UsIERvbWFpbkNvbmZTZXJ2aWNlIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQubW9kZWwnXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgbm9vcCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgeyBBcHBUb2NTZXJ2aWNlIH0gZnJvbSAnLi9hcHAtdG9jLnNlcnZpY2UnXG5pbXBvcnQgeyBDb250ZW50TGFuZ3VhZ2VTZXJ2aWNlLCBXaWRnZXRVc2VyU2VydmljZUxpYiB9IGZyb20gJ0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uJ1xuaW1wb3J0IHsgV2lkZ2V0Q29udGVudFNlcnZpY2UgfSBmcm9tICcuLi9fY29sbGVjdGlvbi1hcGknXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBWaWV3ZXJVdGlsU2VydmljZSB7XG4gIEFQSV9FTkRQT0lOVFMgPSB7XG4gICAgc2V0UzNDb29raWU6IGAvYXBpcy92OC9wcm90ZWN0ZWQvY29udGVudC9zZXRDb29raWVgLFxuICAgIC8vIFBST0dSRVNTX1VQREFURTogYC9hcGlzL3Byb3RlY3RlZC92OC91c2VyL3JlYWxUaW1lUHJvZ3Jlc3MvdXBkYXRlYCxcbiAgICBQUk9HUkVTU19VUERBVEU6IGAvYXBpcy9wcm94aWVzL3Y4L2NvbnRlbnQtcHJvZ3Jlc2AsXG4gICAgQVNTRVNTTUVOVF9TRUNUSU9OOiBgL2FwaXMvcHJveGllcy92OC9hc3Nlc3NtZW50L3Y1L3JlYWRgLFxuICAgIEdFVF9GT1JNX0JZSUQ6IChmb3JtSWQ6IHN0cmluZykgPT4gYGFwaXMvcHJveGllcy92OC9mb3Jtcy92Mi9nZXRGb3JtQnlJZD9mb3JtSWQ9JHtmb3JtSWR9YCxcbiAgICBTVUJNSVRfRk9STTogYC9hcGlzL3Byb3hpZXMvdjgvZm9ybXMvdjIvc2F2ZUZvcm1TdWJtaXRgLFxuICAgIC8vIEdFVF9GT1JNX0JZSUQ6IChmb3JtSWQ6IHN0cmluZykgPT4gYGFwaXMvcHJveGllcy92OC9mb3Jtcy9nZXRGb3JtQnlJZD9pZD0ke2Zvcm1JZH1gLFxuICAgIC8vIFNVQk1JVF9GT1JNOiBgL2FwaXMvcHJveGllcy92OC9mb3Jtcy92MS9zYXZlRm9ybVN1Ym1pdGAsXG4gICAgUFJFX0FTU0VTU01FTlRfU1RBVEVfVVBEQVRFOiBgL2FwaXMvcHJveGllcy92OC9jb250ZW50L3YyL3N0YXRlL3VwZGF0ZWBcblxuICB9XG4gIGRvd25sb2FkUmVnZXggPSBuZXcgUmVnRXhwKGAoL2NvbnRlbnQtc3RvcmUvLio/KShcXFxcXFwpP1xcXFxcXFxcP1snXCJdKWAsICdnbScpXG4gIGF1dGhvcmluZ0Jhc2UgPSAnL2FwaXMvYXV0aENvbnRlbnQvJ1xuICBtYXJrQXNDb21wbGV0ZVN1YmplY3QgPSBuZXcgU3ViamVjdCgpXG4gIGF1dG9QbGF5TmV4dFZpZGVvID0gbmV3IFN1YmplY3QoKVxuICBhdXRvUGxheU5leHRBdWRpbyA9IG5ldyBTdWJqZWN0KClcbiAgZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJylcbiAgcHVibGljVXNlckRldGFpbHM6IGFueSA9IHt9XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNvbmZpZ3NlcnZpY2U6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRlbnRTdmM6IFdpZGdldENvbnRlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9jU3ZjOiBBcHBUb2NTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclN2YzogV2lkZ2V0VXNlclNlcnZpY2VMaWIsXG4gICAgcHJpdmF0ZSBjb250ZW50TGFuZ1N2YzogQ29udGVudExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIGRvbWFpbkNvbmZTdmM6IERvbWFpbkNvbmZTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55XG4gICkgeyB9XG5cbiAgYXN5bmMgZmV0Y2hNYW5pZmVzdEZpbGUodXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFMzQ29va2llKHVybClcbiAgICBjb25zdCBtYW5pZmVzdEZpbGUgPSBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55Pih1cmwpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC5jYXRjaCgoX2VycjogYW55KSA9PiB7IH0pXG4gICAgcmV0dXJuIG1hbmlmZXN0RmlsZVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRTM0Nvb2tpZShfY29udGVudElkOiBzdHJpbmcpIHtcbiAgICAvLyBhd2FpdCB0aGlzLmh0dHBcbiAgICAvLyAgIC5wb3N0KHRoaXMuQVBJX0VORFBPSU5UUy5zZXRTM0Nvb2tpZSwgeyBjb250ZW50SWQgfSlcbiAgICAvLyAgIC50b1Byb21pc2UoKVxuICAgIC8vICAgLmNhdGNoKChfZXJyOiBhbnkpID0+IHsgfSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNhbGN1bGF0ZVBlcmNlbnQoY3VycmVudDogc3RyaW5nW10sIG1heDogbnVtYmVyLCBtaW1lVHlwZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRlbXAgPSBbLi4uY3VycmVudF1cbiAgICAgIGlmICh0ZW1wICYmIHRlbXAubGVuZ3RoICYmIG1heCkge1xuICAgICAgICBjb25zdCBsYXRlc3QgPSBwYXJzZUZsb2F0KHRlbXAucG9wKCkgfHwgJzAnKVxuICAgICAgICBjb25zdCBwZXJjZW50TWlsaXMgPSAobGF0ZXN0IC8gbWF4KSAqIDEwMFxuICAgICAgICBsZXQgcGVyY2VudCA9IHBhcnNlRmxvYXQocGVyY2VudE1pbGlzLnRvRml4ZWQoMikpXG4gICAgICAgIGlmIChcbiAgICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTVA0IHx8XG4gICAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk0zVTggfHxcbiAgICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTVAzIHx8XG4gICAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk00QSB8fFxuICAgICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5ZT1VUVUJFIHx8XG4gICAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLlNVUlZFWVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAocGVyY2VudCA8PSA1KSB7XG4gICAgICAgICAgICAvLyBpZiBwZXJjZW50YWdlIGlzIGxlc3MgdGhhbiA1JSBtYWtlIGl0IDBcbiAgICAgICAgICAgIHBlcmNlbnQgPSAwXG4gICAgICAgICAgfSBlbHNlIGlmIChwZXJjZW50ID49IDk1KSB7XG4gICAgICAgICAgICAvLyBpZiBwZXJjZW50YWdlIGlzIGdyZWF0ZXIgdGhhbiA5NSUgbWFrZSBpdCAxMDBcbiAgICAgICAgICAgIHBlcmNlbnQgPSAxMDBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBlcmNlbnRcbiAgICAgIH1cbiAgICAgIHJldHVybiAwXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gY2FsY3VsYXRpbmcgcGVyY2VudGFnZScsIGUpXG4gICAgICByZXR1cm4gMFxuICAgIH1cbiAgfVxuXG4gIGdldFN0YXR1cyhjdXJyZW50OiBzdHJpbmdbXSwgbWF4OiBudW1iZXIsIG1pbWVUeXBlPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB0aGlzLmNhbGN1bGF0ZVBlcmNlbnQoY3VycmVudCwgbWF4LCBtaW1lVHlwZSlcbiAgICAgIC8vIGZvciB2aWRlb3MgYW5kIGF1ZGlvc1xuICAgICAgaWYgKFxuICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTVA0IHx8XG4gICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NM1U4IHx8XG4gICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDMgfHxcbiAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk00QSB8fFxuICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuU1VSVkVZIHx8XG4gICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5QREZcbiAgICAgICkge1xuICAgICAgICAvLyBpZiBwZXJjZW50YWdlIGlzIGxlc3MgdGhhbiA1JSB0aGVuIG1ha2Ugc3RhdHVzIHN0YXJ0ZWRcbiAgICAgICAgaWYgKE1hdGguY2VpbChwZXJjZW50YWdlKSA8PSA1KSB7XG4gICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBwZXJjZW50YWdlIGlzIGdyZWF0ZXIgdGhhbiA5NSUgdGhlbiBtYWtlIHN0YXR1cyBjb21wbGV0ZVxuICAgICAgICBpZiAoTWF0aC5jZWlsKHBlcmNlbnRhZ2UpID49IDk1KSB7XG4gICAgICAgICAgcmV0dXJuIDJcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKE1hdGguY2VpbChwZXJjZW50YWdlKSA+PSAxMDApIHtcbiAgICAgICAgICByZXR1cm4gMlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gMVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIGdldHRpbmcgY29tcGxldGlvbiBzdGF0dXMnLCBlKVxuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gIH1cblxuICByZWFsVGltZVByb2dyZXNzVXBkYXRlKGNvbnRlbnRJZDogc3RyaW5nLCByZXF1ZXN0OiBhbnksIGNvbGxlY3Rpb25JZD86IHN0cmluZywgYmF0Y2hJZD86IHN0cmluZykge1xuICAgIGxldCByZXE6IGFueVxuICAgIGlmICh0aGlzLmNvbmZpZ3NlcnZpY2UudXNlclByb2ZpbGUpIHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5nZXRSZXNvdXJjZUNvbnRlbnRMYW5ndWFnZShjb250ZW50SWQpXG4gICAgICByZXEgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZS51c2VySWQgfHwgJycsXG4gICAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGVudElkLFxuICAgICAgICAgICAgICBiYXRjaElkLFxuICAgICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiB0aGlzLmdldFN0YXR1cyhyZXF1ZXN0LmN1cnJlbnQsIHJlcXVlc3QubWF4X3NpemUsIHJlcXVlc3QubWltZV90eXBlKSxcbiAgICAgICAgICAgICAgY291cnNlSWQ6IGNvbGxlY3Rpb25JZCxcbiAgICAgICAgICAgICAgbGFzdEFjY2Vzc1RpbWU6IGRheWpzKG5ldyBEYXRlKCkpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzczpTU1NaWicpLFxuICAgICAgICAgICAgICBwcm9ncmVzc2RldGFpbHM6IHtcbiAgICAgICAgICAgICAgICBtYXhfc2l6ZTogcmVxdWVzdC5tYXhfc2l6ZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50OiByZXF1ZXN0LmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgbWltZVR5cGU6IHJlcXVlc3QubWltZV90eXBlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogdGhpcy5jYWxjdWxhdGVQZXJjZW50KHJlcXVlc3QuY3VycmVudCwgcmVxdWVzdC5tYXhfc2l6ZSwgcmVxdWVzdC5taW1lX3R5cGUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICAgLy8gaWYgKHRoaXMuY29uZmlnc2VydmljZS5jc3Rva2VuICE9PSAnJykge1xuICAgICAgLy8gICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcbiAgICAgIC8vICAgLnNldCgnY3N0b2tlbicsIHRoaXMuY29uZmlnc2VydmljZS5jc3Rva2VuKVxuXG4gICAgICAvLyAgIHRoaXMuaHR0cFxuICAgICAgLy8gICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgeyBoZWFkZXJzIH0gLCByZXEpXG4gICAgICAvLyAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIHRoaXMuaHR0cFxuICAgICAgLy8gICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgcmVxKVxuICAgICAgLy8gICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICAvLyB9XG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUk9HUkVTU19VUERBVEV9LyR7Y29udGVudElkfWAsIHJlcSlcbiAgICAgICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgaWYgKHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSAmJlxuICAgICAgICAoIXRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddIHx8IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddIDwgMikpIHtcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uUGVyY2VudGFnZSddID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXNcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcCA9IHsgLi4udGhpcy50b2NTdmMuaGFzaG1hcCB9XG4gICAgICAgIFxuICAgICAgICAvLyBOb3RpZnkgVUkgY29tcG9uZW50cyBhYm91dCBoYXNobWFwIGNoYW5nZXNcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFVwZGF0ZWQubmV4dCh0aGlzLnRvY1N2Yy5oYXNobWFwKVxuICAgICAgICBcbiAgICAgICAgLy8gVHJpZ2dlciBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgZ2V0QmF0Y2hJZEFuZENvdXJzZUlkKGNvdXJzZUlkOiBzdHJpbmcsIGJhdGNoSWQ6IHN0cmluZywgcmVzb3VyY2VJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVtcERhdGEgPSB7XG4gICAgICBjb3Vyc2VJZCxcbiAgICAgIGJhdGNoSWQsXG4gICAgfVxuICAgIGNvbnN0IHRlbXBDb250ZW50RGF0YSA9IHRoaXMuY29udGVudFN2Yy5jdXJyZW50TWV0YURhdGFcbiAgICBjb25zdCB0ZW1wQ29udGVudFJlYWREYXRhID0gdGhpcy5jb250ZW50U3ZjLmN1cnJlbnRDb250ZW50UmVhZE1ldGFEYXRhXG4gICAgY29uc3QgZW5yb2xsbWVudExpc3QgPSB0aGlzLmNvbnRlbnRTdmMuY3VycmVudEJhdGNoRW5yb2xsbWVudExpc3RcbiAgICBpZiAoIXRoaXMuZm9yUHJldmlldykge1xuICAgICAgaWYgKHRlbXBDb250ZW50RGF0YS5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknKSB7XG4gICAgICAgIC8vIEZpbmQgdGhlIGNvdXJzZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiByZXNvdXJjZSBJRFxuICAgICAgICBjb25zdCBmb3VuZENvdXJzZSA9IHRoaXMuZmluZENvdXJzZUNvbnRhaW5pbmdSZXNvdXJjZSh0ZW1wQ29udGVudERhdGEsIHJlc291cmNlSWQpXG5cbiAgICAgICAgaWYgKGZvdW5kQ291cnNlKSB7XG4gICAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBjb3Vyc2VJZCBpZiBjb3Vyc2UgaXMgZm91bmRcbiAgICAgICAgICB0ZW1wRGF0YS5jb3Vyc2VJZCA9IGZvdW5kQ291cnNlLmlkZW50aWZpZXJcblxuICAgICAgICAgIC8vIFRyeSB0byBmaW5kIGJhdGNoIElEIGZyb20gZW5yb2xsbWVudCBkYXRhIGZvciB0aGUgZm91bmQgY291cnNlXG4gICAgICAgICAgaWYgKGZvdW5kQ291cnNlLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVucm9sbG1lbnQgPSBlbnJvbGxtZW50TGlzdC5maW5kKFxuICAgICAgICAgICAgICAoY291cnNlOiBhbnkpID0+IGNvdXJzZS5jb2xsZWN0aW9uSWQgPT09IGZvdW5kQ291cnNlLmlkZW50aWZpZXJcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKGVucm9sbG1lbnQgJiYgZW5yb2xsbWVudC5iYXRjaElkKSB7XG4gICAgICAgICAgICAgIHRlbXBEYXRhLmJhdGNoSWQgPSBlbnJvbGxtZW50LmJhdGNoSWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGVtcENvbnRlbnREYXRhICYmIHRlbXBDb250ZW50UmVhZERhdGEuY3VtdWxhdGl2ZVRyYWNraW5nICYmXG4gICAgICAgICh0ZW1wQ29udGVudERhdGEucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUk9HUkFNIHx8XG4gICAgICAgICAgdGVtcENvbnRlbnREYXRhLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ1VSQVRFRF9QUk9HUkFNXG4gICAgICAgICAgfHwgdGVtcENvbnRlbnREYXRhLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0ZW1wQ29udGVudERhdGEuY2hpbGRyZW4uZm9yRWFjaChhc3luYyAoY2hpbGRMaXN0OiBOc0NvbnRlbnQuSUNvbnRlbnQpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGRMaXN0LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgY29uc3QgY291cnNlRW5yb2xsbWVudExpc3QgPSBlbnJvbGxtZW50TGlzdCAmJiBlbnJvbGxtZW50TGlzdC5maWx0ZXIoKHY6IE5zQ29udGVudC5JQ291cnNlKSA9PiB2LmNvbnRlbnRJZCA9PT0gY2hpbGRMaXN0LmlkZW50aWZpZXIpXG4gICAgICAgICAgICBpZiAoY2hpbGRMaXN0LmNoaWxkTm9kZXMgJiYgY2hpbGRMaXN0LmNoaWxkTm9kZXMuaW5kZXhPZihyZXNvdXJjZUlkKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgaWYgKGNvdXJzZUVucm9sbG1lbnRMaXN0ICYmIGNvdXJzZUVucm9sbG1lbnRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0ZW1wRGF0YS5iYXRjaElkID0gY291cnNlRW5yb2xsbWVudExpc3RbY291cnNlRW5yb2xsbWVudExpc3QubGVuZ3RoIC0gMV0uYmF0Y2guYmF0Y2hJZFxuICAgICAgICAgICAgICAgIHRlbXBEYXRhLmNvdXJzZUlkID0gY2hpbGRMaXN0LmlkZW50aWZpZXJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmNoZWNrRm9yQ291cnNlRW5yb2xsbWVudChjaGlsZExpc3QsIHJlc291cmNlSWQsIGVucm9sbG1lbnRMaXN0LCB0ZW1wRGF0YSlcbiAgICAgICAgICAgICAgICB0ZW1wRGF0YS5jb3Vyc2VJZCA9IGRhdGEuY291cnNlSWRcbiAgICAgICAgICAgICAgICB0ZW1wRGF0YS5iYXRjaElkID0gZGF0YS5iYXRjaElkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRlbXBDb250ZW50RGF0YS5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSkge1xuICAgICAgICAgICAgaWYgKHRlbXBEYXRhLmNvdXJzZUlkID09PSBjb3Vyc2VJZCkge1xuICAgICAgICAgICAgICBjb25zdCBiUEVucm9sbG1lbnRMaXN0ID0gZW5yb2xsbWVudExpc3QuZmlsdGVyKCh2OiBOc0NvbnRlbnQuSUNvdXJzZSkgPT4gdi5jb250ZW50SWQgPT09IHRlbXBDb250ZW50RGF0YS5pZGVudGlmaWVyKVxuICAgICAgICAgICAgICBpZiAodGVtcENvbnRlbnREYXRhLmNoaWxkTm9kZXMgJiYgdGVtcENvbnRlbnREYXRhLmNoaWxkTm9kZXMuaW5kZXhPZihyZXNvdXJjZUlkKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoYlBFbnJvbGxtZW50TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0ZW1wRGF0YS5iYXRjaElkID0gYlBFbnJvbGxtZW50TGlzdFtiUEVucm9sbG1lbnRMaXN0Lmxlbmd0aCAtIDFdLmJhdGNoLmJhdGNoSWRcbiAgICAgICAgICAgICAgICAgIHRlbXBEYXRhLmNvdXJzZUlkID0gdGVtcENvbnRlbnREYXRhLmlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wRGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIGZvciBhIHJlc291cmNlIElEIGluIGEgY29udGVudCdzIGNoaWxkcmVuIGhpZXJhcmNoeVxuICAgKiBAcGFyYW0gY29udGVudCBUaGUgY29udGVudCBvYmplY3QgdG8gc2VhcmNoIGluXG4gICAqIEBwYXJhbSByZXNvdXJjZUlkIFRoZSByZXNvdXJjZSBJRCB0byBmaW5kXG4gICAqIEByZXR1cm5zIHRydWUgaWYgcmVzb3VyY2UgaXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kUmVzb3VyY2VJbkNvbnRlbnQoY29udGVudDogYW55LCByZXNvdXJjZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBpZiB0aGlzIGNvbnRlbnQgaGFzIHRoZSByZXNvdXJjZSBpbiBpdHMgbGVhZk5vZGVzXG4gICAgaWYgKGNvbnRlbnQubGVhZk5vZGVzICYmIEFycmF5LmlzQXJyYXkoY29udGVudC5sZWFmTm9kZXMpKSB7XG4gICAgICBpZiAoY29udGVudC5sZWFmTm9kZXMuaW5kZXhPZihyZXNvdXJjZUlkKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGNvbnRlbnQncyBpZGVudGlmaWVyIG1hdGNoZXMgdGhlIHJlc291cmNlIElEXG4gICAgaWYgKGNvbnRlbnQuaWRlbnRpZmllciA9PT0gcmVzb3VyY2VJZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBSZWN1cnNpdmVseSBzZWFyY2ggaW4gY2hpbGRyZW5cbiAgICBpZiAoY29udGVudC5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbnRlbnQuY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNvbnRlbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZmluZFJlc291cmNlSW5Db250ZW50KGNoaWxkLCByZXNvdXJjZUlkKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgY291cnNlIHRoYXQgY29udGFpbnMgYSBnaXZlbiByZXNvdXJjZSBJRCBpbiBhIExlYXJuaW5nIFBhdGh3YXlcbiAgICogQHBhcmFtIGxlYXJuaW5nUGF0aHdheUNvbnRlbnQgVGhlIExlYXJuaW5nIFBhdGh3YXkgY29udGVudCBkYXRhXG4gICAqIEBwYXJhbSByZXNvdXJjZUlkIFRoZSByZXNvdXJjZSBJRCB0byBmaW5kXG4gICAqIEByZXR1cm5zIFRoZSBjb3Vyc2Ugb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlc291cmNlLCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZmluZENvdXJzZUNvbnRhaW5pbmdSZXNvdXJjZShsZWFybmluZ1BhdGh3YXlDb250ZW50OiBhbnksIHJlc291cmNlSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgLy8gQ2hlY2sgaWYgbWlsZXN0b25lc192MSBleGlzdHNcbiAgICBpZiAoIWxlYXJuaW5nUGF0aHdheUNvbnRlbnQubWlsZXN0b25lc192MSB8fCAhQXJyYXkuaXNBcnJheShsZWFybmluZ1BhdGh3YXlDb250ZW50Lm1pbGVzdG9uZXNfdjEpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIG1pbGVzdG9uZVxuICAgIGZvciAoY29uc3QgbWlsZXN0b25lIG9mIGxlYXJuaW5nUGF0aHdheUNvbnRlbnQubWlsZXN0b25lc192MSkge1xuICAgICAgLy8gQ2hlY2sgaWYgbWlsZXN0b25lIGhhcyBjb3Vyc2VzXG4gICAgICBpZiAobWlsZXN0b25lLmNvdXJzZXMgJiYgQXJyYXkuaXNBcnJheShtaWxlc3RvbmUuY291cnNlcykpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggY291cnNlIGluIHRoZSBtaWxlc3RvbmVcbiAgICAgICAgZm9yIChjb25zdCBjb3Vyc2Ugb2YgbWlsZXN0b25lLmNvdXJzZXMpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGNvdXJzZSBjb250YWlucyB0aGUgcmVzb3VyY2VcbiAgICAgICAgICBpZiAodGhpcy5maW5kUmVzb3VyY2VJbkNvbnRlbnQoY291cnNlLCByZXNvdXJjZUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvdXJzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBnZXRSZXNvdXJjZUNvbnRlbnRMYW5ndWFnZShyZXNvdXJjZUlkOiBzdHJpbmcpIHtcblxuICAgIGxldCB0ZW1wTGFuZ3VhZ2U6IGFueSA9ICdlbmdsaXNoJ1xuICAgIGxldCBsYW5ndWFnZUZvdW5kID0gZmFsc2VcbiAgICBjb25zdCB0ZW1wQ29udGVudERhdGEgPSB0aGlzLmNvbnRlbnRTdmMuY3VycmVudE1ldGFEYXRhXG4gICAgaWYgKCF0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgIHRlbXBDb250ZW50RGF0YS5jaGlsZHJlbj8uZm9yRWFjaChhc3luYyAoY2hpbGRMaXN0OiBOc0NvbnRlbnQuSUNvbnRlbnQpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkTGlzdC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPVVJTRSkge1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgaWYgKGNoaWxkTGlzdC5sZWFmTm9kZXMgJiYgY2hpbGRMaXN0LmxlYWZOb2Rlcy5pbmRleE9mKHJlc291cmNlSWQpICE9PSAtMSkge1xuICAgICAgICAgICAgdGVtcExhbmd1YWdlID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRDb250ZW50TGFuZ3VhZ2UoY2hpbGRMaXN0KVxuICAgICAgICAgICAgbGFuZ3VhZ2VGb3VuZCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIClcbiAgICAgIGlmICghbGFuZ3VhZ2VGb3VuZCkge1xuICAgICAgICBpZiAodGVtcENvbnRlbnREYXRhLmxlYWZOb2RlcyAmJiB0ZW1wQ29udGVudERhdGEubGVhZk5vZGVzLmluZGV4T2YocmVzb3VyY2VJZCkgIT09IC0xKSB7XG4gICAgICAgICAgdGVtcExhbmd1YWdlID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRDb250ZW50TGFuZ3VhZ2UodGVtcENvbnRlbnREYXRhKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wTGFuZ3VhZ2VcbiAgfVxuXG4gIGFzeW5jIGNoZWNrRm9yQ291cnNlRW5yb2xsbWVudChjaGlsZExpc3Q6IE5zQ29udGVudC5JQ29udGVudCwgX3Jlc291cmNlSWQ6IHN0cmluZywgX2Vucm9sbG1lbnRMaXN0OiBhbnksIF90ZW1wRGF0YTogYW55KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICBjb25zdCBjb3Vyc2VEYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmNvbnRlbnRTdmMuYXV0b0Fzc2lnbkJhdGNoQXBpKGNoaWxkTGlzdC5pZGVudGlmaWVyKS50b1Byb21pc2UoKS50aGVuKGFzeW5jIChkYXRhOiBOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLnVzZXJTdmMuZmV0Y2hFbnJvbGxtZW50RGF0YUJ5Q29udGVudElkKHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZT8udXNlcklkLCBjaGlsZExpc3QuaWRlbnRpZmllcikudG9Qcm9taXNlKCkudGhlbihhc3luYyAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb3Vyc2VzICYmIHJlcy5jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcy5jb3Vyc2VzXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbeyBjb3Vyc2VJZDogY2hpbGRMaXN0LmlkZW50aWZpZXIsIGJhdGNoSWQ6ICcnIH1dXG5cbiAgICAgICAgfSkuY2F0Y2goKF9lcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBbeyBjb3Vyc2VJZDogY2hpbGRMaXN0LmlkZW50aWZpZXIsIGJhdGNoSWQ6ICcnIH1dXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5jdXJyZW50QmF0Y2hFbnJvbGxtZW50TGlzdCA9IFsuLi50aGlzLmNvbnRlbnRTdmMuY3VycmVudEJhdGNoRW5yb2xsbWVudExpc3QsIC4uLnJlc3BvbnNlRGF0YV1cbiAgICAgICAgcmV0dXJuIHsgY291cnNlSWQ6IGNoaWxkTGlzdC5pZGVudGlmaWVyLCBiYXRjaElkOiByZXNwb25zZURhdGFbMF0uYmF0Y2hJZCB9XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKF9lcnI6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIFt7IGNvdXJzZUlkOiBjaGlsZExpc3QuaWRlbnRpZmllciwgYmF0Y2hJZDogJycgfV1cbiAgICB9KVxuICAgIHJldHVybiBjb3Vyc2VEYXRhXG4gIH1cblxuICByZWFsVGltZVByb2dyZXNzVXBkYXRlUXVpeihjb250ZW50SWQ6IHN0cmluZywgY29sbGVjdGlvbklkPzogc3RyaW5nLCBiYXRjaElkPzogc3RyaW5nLCBzdGF0dXM/OiBudW1iZXIpIHtcbiAgICBsZXQgcmVxOiBhbnlcbiAgICBpZiAodGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0UmVzb3VyY2VDb250ZW50TGFuZ3VhZ2UoY29udGVudElkKVxuICAgICAgcmVxID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZ3NlcnZpY2UudXNlclByb2ZpbGUudXNlcklkIHx8ICcnLFxuICAgICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnRlbnRJZCxcbiAgICAgICAgICAgICAgYmF0Y2hJZCxcbiAgICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzIHx8IDIsXG4gICAgICAgICAgICAgIGNvdXJzZUlkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgIGxhc3RBY2Nlc3NUaW1lOiBkYXlqcyhuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3M6U1NTWlonKSxcbiAgICAgICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHN0YXR1cyA9PT0gMiA/IDEwMCA6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG5cbiAgICAgIHRoaXMuaHR0cFxuICAgICAgICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgcmVxKVxuICAgICAgICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcCAmJiB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF0gJiYgcmVxLnJlcXVlc3QuY29udGVudHNbMF0pIHtcbiAgICAgICAgaWYgKHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSAmJlxuICAgICAgICAgICghdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPCAyKSkge1xuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXNcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwID0geyAuLi50aGlzLnRvY1N2Yy5oYXNobWFwIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBOb3RpZnkgVUkgY29tcG9uZW50cyBhYm91dCBoYXNobWFwIGNoYW5nZXNcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwVXBkYXRlZC5uZXh0KHRoaXMudG9jU3ZjLmhhc2htYXApXG4gICAgICAgICAgXG4gICAgICAgICAgLy8gVHJpZ2dlciBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICAgIGlmICh0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXEgPSB7fVxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIGdldENvbnRlbnQoY29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudD4ge1xuICAgIGNvbnN0IGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gICAgbGV0IHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL3JlYWQvJHtjb250ZW50SWR9YFxuICAgIGlmICghZm9yUHJldmlldykge1xuICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvcmVhZC8ke2NvbnRlbnRJZH1gXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZWRpdE1vZGU9dHJ1ZScpICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdfcmMnKSkge1xuICAgICAgICB1cmwgPSBgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9yZWFkLyR7Y29udGVudElkfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGAvYXBpL2NvbnRlbnQvdjEvcmVhZC8ke2NvbnRlbnRJZH1gXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudD4oXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAvLyBgL2FwaXMvYXV0aEFwaS9hY3Rpb24vY29udGVudC9oaWVyYXJjaHkvJHtjb250ZW50SWR9P3Jvb3RPcmc9JHt0aGlzLmNvbmZpZ3NlcnZpY2Uucm9vdE9yZyB8fCAnaWdvdCd9Jm9yZz0ke3RoaXMuY29uZmlnc2VydmljZS5hY3RpdmVPcmcgfHwgJ2RvcHQnfWAsXG4gICAgICB1cmxcbiAgICApXG4gIH1cblxuICBnZXRBdXRob3JpbmdVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmxcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgID8gYC9hcGlzL2F1dGhDb250ZW50LyR7dXJsLmluY2x1ZGVzKCcvY29udGVudC1zdG9yZS8nKSA/IG5ldyBVUkwodXJsKS5wYXRobmFtZS5zbGljZSgxKSA6IGVuY29kZVVSSUNvbXBvbmVudCh1cmwpfWBcbiAgICAgIDogJydcbiAgfVxuXG4gIHJlZ2V4RG93bmxvYWRSZXBsYWNlID0gKF9zdHIgPSAnJywgZ3JvdXAxOiBzdHJpbmcsIGdyb3VwMjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5hdXRob3JpbmdCYXNlfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGdyb3VwMSl9JHtncm91cDJ9YFxuICB9XG5cbiAgcmVwbGFjZVRvQXV0aFVybChkYXRhOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoZGF0YSkucmVwbGFjZShcbiAgICAgICAgdGhpcy5kb3dubG9hZFJlZ2V4LFxuICAgICAgICB0aGlzLnJlZ2V4RG93bmxvYWRSZXBsYWNlLFxuICAgICAgKSxcbiAgICApXG4gIH1cbiAgcmVhZFNlY3Rpb25zKGFzc2Vzc21lbnRJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuQVBJX0VORFBPSU5UU30vJHthc3Nlc3NtZW50SWR9YFxuICB9XG5cbiAgZ2V0UHVibGljVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYWluVXJsID0gdXJsLnNwbGl0KCcvY29udGVudCcpLnBvcCgpIHx8ICcnXG4gICAgcmV0dXJuIGAke3RoaXMuZW52aXJvbm1lbnQuY29udGVudEhvc3R9LyR7dGhpcy5lbnZpcm9ubWVudC5jb250ZW50QnVja2V0fS9jb250ZW50JHttYWluVXJsfWBcbiAgfVxuXG4gIGdldENkblVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWFpblVybCA9IHVybC5zcGxpdCgnL2NvbnRlbnQnKS5wb3AoKSB8fCAnJ1xuICAgIHJldHVybiBgJHt0aGlzLmRvbWFpbkNvbmZTdmMuZ2V0RG9tYWluQ0ROSG9zdCgpfS8ke3RoaXMuZW52aXJvbm1lbnQuY2RuQ29udGVudEJ1Y2tldH0vY29udGVudCR7bWFpblVybH1gXG4gIH1cblxuICAvLyAgZmV0Y2hDb250ZW50KFxuICAvLyAgIGNvbnRlbnRJZDogc3RyaW5nLFxuICAvLyAgIGhpZXJhcmNoeVR5cGU6ICdhbGwnIHwgJ21pbmltYWwnIHwgJ2RldGFpbCcgPSAnZGV0YWlsJ1xuICAvLyAgICk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50PiB7XG4gIC8vICAgICBsZXQgdXJsID0gJydcbiAgLy8gICAgIGNvbnN0IGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gIC8vICAgICAgIGlmICghZm9yUHJldmlldykge1xuICAvLyAgICAgICAgIHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/aGllcmFyY2h5VHlwZT0ke2hpZXJhcmNoeVR5cGV9YFxuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIHVybCA9IGAvYXBpL2NvdXJzZS92MS9oaWVyYXJjaHkvJHtjb250ZW50SWR9P2hpZXJhcmNoeVR5cGU9JHtoaWVyYXJjaHlUeXBlfWBcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KHVybClcbiAgLy8gICB9XG5cbiAgZmV0Y2hDb250ZW50KGlkOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudD4oYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvaGllcmFyY2h5LyR7aWR9P21vZGU9JHt0eXBlfWApXG4gIH1cblxuICB1cGRhdGVDb250ZW50SGFzaE1hcEZvckFzc2Vzc3RlbnQoY29udGVudElkOiBzdHJpbmcsIGNvbnRlbnRQcm9ncmVzczogYW55KSB7XG4gICAgaWYgKHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSAmJlxuICAgICAgKCF0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSB8fCB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA8IDIpKSB7XG4gICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSBjb250ZW50UHJvZ3Jlc3MuY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddID0gY29udGVudFByb2dyZXNzLnN0YXR1c1xuICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcCA9IHsgLi4udGhpcy50b2NTdmMuaGFzaG1hcCB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Rm9ybUJ5SWQoZm9ybUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkFQSV9FTkRQT0lOVFMuR0VUX0ZPUk1fQllJRChmb3JtSWQpKVxuICB9XG5cbiAgc3VibWl0Rm9ybShmb3JtRGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4odGhpcy5BUElfRU5EUE9JTlRTLlNVQk1JVF9GT1JNLCBmb3JtRGF0YSlcbiAgfVxuXG4gIHJlYWxUaW1lUHJvZ3Jlc3NVcGRhdGVGb3JQcmVBc3Nlc3NtZW50KGNvbnRlbnRJZDogc3RyaW5nLCByZXF1ZXN0OiBhbnkpIHtcbiAgICBsZXQgcmVxOiBhbnlcbiAgICBpZiAodGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlKSB7XG4gICAgICByZXEgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZS51c2VySWQgfHwgJycsXG4gICAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGVudElkLFxuICAgICAgICAgICAgICAvLyBiYXRjaElkLFxuICAgICAgICAgICAgICBzdGF0dXM6IHRoaXMuZ2V0U3RhdHVzKHJlcXVlc3QuY3VycmVudCwgcmVxdWVzdC5tYXhfc2l6ZSwgcmVxdWVzdC5taW1lX3R5cGUpLFxuICAgICAgICAgICAgICAvLyBjb3Vyc2VJZDogY29sbGVjdGlvbklkLFxuICAgICAgICAgICAgICBsYXN0QWNjZXNzVGltZTogZGF5anMobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzOlNTU1paJyksXG4gICAgICAgICAgICAgIHByb2dyZXNzZGV0YWlsczoge1xuICAgICAgICAgICAgICAgIG1heF9zaXplOiByZXF1ZXN0Lm1heF9zaXplLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHJlcXVlc3QuY3VycmVudCxcbiAgICAgICAgICAgICAgICBtaW1lVHlwZTogcmVxdWVzdC5taW1lX3R5cGUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiB0aGlzLmNhbGN1bGF0ZVBlcmNlbnQocmVxdWVzdC5jdXJyZW50LCByZXF1ZXN0Lm1heF9zaXplLCByZXF1ZXN0Lm1pbWVfdHlwZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICAvLyBpZiAodGhpcy5jb25maWdzZXJ2aWNlLmNzdG9rZW4gIT09ICcnKSB7XG4gICAgICAvLyAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLy8gICAuc2V0KCdjc3Rva2VuJywgdGhpcy5jb25maWdzZXJ2aWNlLmNzdG9rZW4pXG5cbiAgICAgIC8vICAgdGhpcy5odHRwXG4gICAgICAvLyAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCB7IGhlYWRlcnMgfSAsIHJlcSlcbiAgICAgIC8vICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgdGhpcy5odHRwXG4gICAgICAvLyAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCByZXEpXG4gICAgICAvLyAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIC8vIH1cbiAgICAgIC8vIHRoaXMuaHR0cFxuICAgICAgLy8gICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgcmVxKVxuICAgICAgLy8gICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICAvL2NvbnN0IGNvbnRlbnRJZE5ldz0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29udGVudElkXG4gICAgICAvLyBjb25zdCB1cGRhdGVkQ29tcGxldGlvblBlcmNlbnRhZ2UgPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgLy8gY29uc3QgdXBkYXRlZFN0YXR1cyA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLnN0YXR1c1xuXG4gICAgICAvLyAvLyBDbG9uZSB0aGUgaW5uZXIgb2JqZWN0IGFuZCB1cGRhdGVcbiAgICAgIC8vIGNvbnN0IGV4aXN0aW5nQ29udGVudCA9IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkTmV3XSB8fCB7fVxuXG4gICAgICAvLyB0aGlzLnRvY1N2Yy5oYXNobWFwID0ge1xuICAgICAgLy8gICAuLi50aGlzLnRvY1N2Yy5oYXNobWFwLFxuICAgICAgLy8gICBbY29udGVudElkTmV3XToge1xuICAgICAgLy8gICAgIC4uLmV4aXN0aW5nQ29udGVudCxcbiAgICAgIC8vICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogdXBkYXRlZENvbXBsZXRpb25QZXJjZW50YWdlLFxuICAgICAgLy8gICAgIGNvbXBsZXRpb25TdGF0dXM6IHVwZGF0ZWRTdGF0dXNcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgLy8gY29uc29sZS5sb2coJ3JlcScsIEpTT04uc3RyaW5naWZ5KHJlcSkpXG4gICAgICAvLyBjb25zb2xlLmxvZygncmVxJywgcmVxKVxuXG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHRoaXMuZ2V0UHJlQXNzZXNzbWVudFJlc291cmNlU3RhdHVzKGNvbnRlbnRJZClcbiAgICAgIGlmIChyZXNvdXJjZVN0YXR1cyA8IDIpIHtcbiAgICAgICAgdGhpcy5odHRwXG4gICAgICAgICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUkVfQVNTRVNTTUVOVF9TVEFURV9VUERBVEV9YCwgcmVxKVxuICAgICAgICAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF0gJiZcbiAgICAgICAgKCF0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSB8fCB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA8IDIpKSB7XG4gICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uc3RhdHVzXG4gICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsncGFyZW50J10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb3Vyc2VJZFxuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ3Byb2dyZXNzJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5wcm9ncmVzc2RldGFpbHNcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcCA9IHsgLi4udGhpcy50b2NTdmMuaGFzaG1hcCB9XG4gICAgICAgIFxuICAgICAgICAvLyBOb3RpZnkgVUkgY29tcG9uZW50cyBhYm91dCBoYXNobWFwIGNoYW5nZXNcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFVwZGF0ZWQubmV4dCh0aGlzLnRvY1N2Yy5oYXNobWFwKVxuICAgICAgICBcbiAgICAgICAgLy8gVHJpZ2dlciBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICBpZiAodGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY29uc29sZS5sb2coJ1VwZGF0ZWQgaGFzaG1hcDonLCB0aGlzLnRvY1N2Yy5oYXNobWFwKVxuXG4gICAgICAvLyBjb25zb2xlLmxvZygndGhpcy50b2NTdmMuaGFzaG1hcC0tLScsIHRoaXMudG9jU3ZjLmhhc2htYXApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgcmVhbFRpbWVQcm9ncmVzc1VwZGF0ZUZvclByZUFzc2Vzc21lbnRRdWl6KGNvbnRlbnRJZDogc3RyaW5nLCBzdGF0dXM/OiBudW1iZXIsIG1pbWVUeXBlPzogc3RyaW5nKSB7XG4gICAgbGV0IHJlcTogYW55XG4gICAgaWYgKHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZSkge1xuICAgICAgcmVxID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgLy91c2VySWQ6IHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZS51c2VySWQgfHwgJycsXG4gICAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGVudElkLFxuICAgICAgICAgICAgICAvLyBiYXRjaElkLFxuICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyB8fCAyLFxuICAgICAgICAgICAgICAvLyBjb3Vyc2VJZDogY29sbGVjdGlvbklkLFxuICAgICAgICAgICAgICBsYXN0QWNjZXNzVGltZTogZGF5anMobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzOlNTU1paJyksXG4gICAgICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBzdGF0dXMgPT09IDIgPyAxMDAuMCA6IDAsXG4gICAgICAgICAgICAgIHByb2dyZXNzZGV0YWlsczoge1xuICAgICAgICAgICAgICAgIFwibWltZVR5cGVcIjogbWltZVR5cGUgfHwgXCJhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldFwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHRoaXMuZ2V0UHJlQXNzZXNzbWVudFJlc291cmNlU3RhdHVzKGNvbnRlbnRJZClcbiAgICAgIGlmIChyZXNvdXJjZVN0YXR1cyA8IDIpIHtcbiAgICAgICAgdGhpcy5odHRwXG4gICAgICAgICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUkVfQVNTRVNTTUVOVF9TVEFURV9VUERBVEV9YCwgcmVxKVxuICAgICAgICAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRvY1N2Yy5oYXNobWFwICYmIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSAmJiByZXEucmVxdWVzdC5jb250ZW50c1swXSkge1xuICAgICAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdICYmXG4gICAgICAgICAgKCF0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSB8fCB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA8IDIpKSB7XG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uUGVyY2VudGFnZSddID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLnN0YXR1c1xuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXAgPSB7IC4uLnRoaXMudG9jU3ZjLmhhc2htYXAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIE5vdGlmeSBVSSBjb21wb25lbnRzIGFib3V0IGhhc2htYXAgY2hhbmdlc1xuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBVcGRhdGVkLm5leHQodGhpcy50b2NTdmMuaGFzaG1hcClcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBUcmlnZ2VyIG1pbGVzdG9uZSBsb2NrIHJlY29tcHV0YXRpb24gZm9yIExlYXJuaW5nIFBhdGh3YXlzXG4gICAgICAgICAgaWYgKHRoaXMudG9jU3ZjLnRyaWdnZXJNaWxlc3RvbmVMb2NrVXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgZ2V0UHJlQXNzZXNzbWVudFJlc291cmNlU3RhdHVzKHJlc291cmNlSWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnRvY1N2YyAmJiB0aGlzLnRvY1N2Yy5oYXNobWFwICYmIHRoaXMudG9jU3ZjLmhhc2htYXBbcmVzb3VyY2VJZF0pIHtcbiAgICAgIHJldHVybiB0aGlzLnRvY1N2Yy5oYXNobWFwW3Jlc291cmNlSWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgMVxuICAgIH1cbiAgICByZXR1cm4gMVxuICB9XG5cblxufVxuIl19