@the-liberators/ngx-scrumteamsurvey-tools 2.3.23 → 2.3.24

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 (238) hide show
  1. package/fesm2022/the-liberators-ngx-scrumteamsurvey-tools.mjs +707 -673
  2. package/fesm2022/the-liberators-ngx-scrumteamsurvey-tools.mjs.map +1 -1
  3. package/package.json +8 -10
  4. package/esm2022/lib/actions/actions.module.mjs +0 -128
  5. package/esm2022/lib/actions/components/action-list/action-list.component.mjs +0 -118
  6. package/esm2022/lib/actions/components/action-manage/action-manage.component.mjs +0 -164
  7. package/esm2022/lib/actions/components/action-tile/action-tile.component.mjs +0 -79
  8. package/esm2022/lib/actions/dialogs/dialog-export-actions/dialog-export-actions.component.mjs +0 -75
  9. package/esm2022/lib/actions/dialogs/dialog-export-actions/dialog-export-actions.directive.mjs +0 -30
  10. package/esm2022/lib/actions/dialogs/dialog-filters/dialog-filters.component.mjs +0 -113
  11. package/esm2022/lib/actions/dialogs/dialog-manageaction/dialog-manageaction.component.mjs +0 -78
  12. package/esm2022/lib/actions/interfaces/IActionState.mjs +0 -2
  13. package/esm2022/lib/actions/models/actionDto.mjs +0 -43
  14. package/esm2022/lib/actions/models/actionOptionsDto.mjs +0 -9
  15. package/esm2022/lib/actions/models/actionPrefillDto.mjs +0 -3
  16. package/esm2022/lib/actions/models/actionResponseDto.mjs +0 -7
  17. package/esm2022/lib/actions/models/exportRequestDto.mjs +0 -3
  18. package/esm2022/lib/actions/pipes/interventionOwnerToString.pipe.mjs +0 -32
  19. package/esm2022/lib/actions/pipes/interventionStateToString.pipe.mjs +0 -26
  20. package/esm2022/lib/actions/pipes/interventionTypeToString.pipe.mjs +0 -30
  21. package/esm2022/lib/actions/services/actionClientConfig.mjs +0 -30
  22. package/esm2022/lib/actions/services/actionService.mjs +0 -66
  23. package/esm2022/lib/add-calendar/generators/base-calendar.generator.mjs +0 -46
  24. package/esm2022/lib/add-calendar/generators/google-calendar.generator.mjs +0 -16
  25. package/esm2022/lib/add-calendar/generators/ics-calendar.generator.mjs +0 -33
  26. package/esm2022/lib/add-calendar/generators/outlook-calendar.generator.mjs +0 -17
  27. package/esm2022/lib/add-calendar/generators/yahoo-calendar.generator.mjs +0 -28
  28. package/esm2022/lib/add-calendar/index.mjs +0 -4
  29. package/esm2022/lib/add-calendar/model/calendar-event.model.mjs +0 -2
  30. package/esm2022/lib/add-calendar/model/calendar-type.enum.mjs +0 -9
  31. package/esm2022/lib/add-calendar/ng-add-to-calendar.module.mjs +0 -18
  32. package/esm2022/lib/add-calendar/service/ng-add-to-calendar.service.mjs +0 -33
  33. package/esm2022/lib/alerts/alerts.module.mjs +0 -24
  34. package/esm2022/lib/alerts/components/alerts-list/alerts.component.mjs +0 -105
  35. package/esm2022/lib/alerts/components/dialog-alerts/dialog-alerts.component.mjs +0 -25
  36. package/esm2022/lib/alerts/components/dialog-alerts/dialog-alerts.directive.mjs +0 -35
  37. package/esm2022/lib/alerts/interfaces/IAlertState.mjs +0 -2
  38. package/esm2022/lib/alerts/models/alertDto.model.mjs +0 -3
  39. package/esm2022/lib/alerts/models/alertFilterDto.model.mjs +0 -3
  40. package/esm2022/lib/alerts/models/alertResponseDto.model.mjs +0 -7
  41. package/esm2022/lib/alerts/models/dismissAlertRequestDto.model.mjs +0 -3
  42. package/esm2022/lib/alerts/services/alertClientConfig.mjs +0 -30
  43. package/esm2022/lib/alerts/services/alerts.service.mjs +0 -31
  44. package/esm2022/lib/apiUrlToken.mjs +0 -30
  45. package/esm2022/lib/branding/brandBackground.directive.mjs +0 -46
  46. package/esm2022/lib/branding/brandConditionalBackgroundColor.directive.mjs +0 -58
  47. package/esm2022/lib/branding/brandConditionalColor.directive.mjs +0 -63
  48. package/esm2022/lib/branding/brandHoverColor.directive.mjs +0 -84
  49. package/esm2022/lib/branding/branding.module.mjs +0 -68
  50. package/esm2022/lib/branding/brandingProvider.service.mjs +0 -33
  51. package/esm2022/lib/branding/components/site-default-footer/site-default-footer.component.mjs +0 -37
  52. package/esm2022/lib/branding/components/site-default-header/site-default-header.component.mjs +0 -74
  53. package/esm2022/lib/branding/components/site-micro-footer/site-micro-footer.component.mjs +0 -34
  54. package/esm2022/lib/community/community.module.mjs +0 -31
  55. package/esm2022/lib/community/components/gethelp-form/gethelp-form.component.mjs +0 -79
  56. package/esm2022/lib/community/components/meetups/meetups.component.mjs +0 -69
  57. package/esm2022/lib/community/components/recentcontent/recentcontent.component.mjs +0 -29
  58. package/esm2022/lib/community/interfaces/ICommunityState.mjs +0 -2
  59. package/esm2022/lib/community/models/meetupDto.mjs +0 -6
  60. package/esm2022/lib/community/models/resourceDto.mjs +0 -6
  61. package/esm2022/lib/community/services/communityClientConfig.mjs +0 -30
  62. package/esm2022/lib/componentBase.mjs +0 -33
  63. package/esm2022/lib/componentWithViewStateBase.mjs +0 -38
  64. package/esm2022/lib/components/checkbox/checkbox.component.mjs +0 -52
  65. package/esm2022/lib/components/checkbox/checkbox.module.mjs +0 -24
  66. package/esm2022/lib/components/expand/expand.component.mjs +0 -41
  67. package/esm2022/lib/components/expand/expand.module.mjs +0 -24
  68. package/esm2022/lib/components/loading/loading.component.mjs +0 -33
  69. package/esm2022/lib/components/loading/loading.module.mjs +0 -24
  70. package/esm2022/lib/components/mat-tags/mat-tags.component.mjs +0 -82
  71. package/esm2022/lib/components/mat-tags/mat-tags.module.mjs +0 -47
  72. package/esm2022/lib/components/metadata-input/metadata-input.component.mjs +0 -99
  73. package/esm2022/lib/components/metadata-input/metadata-input.module.mjs +0 -39
  74. package/esm2022/lib/components/multi-email-input/multi-email-input.component.mjs +0 -112
  75. package/esm2022/lib/components/multi-email-input/multi-email-input.module.mjs +0 -39
  76. package/esm2022/lib/components/paginator/paginator.component.mjs +0 -50
  77. package/esm2022/lib/components/paginator/paginator.module.mjs +0 -40
  78. package/esm2022/lib/components/quantity-selector/quantity-selector.component.mjs +0 -90
  79. package/esm2022/lib/components/quantity-selector/quantity-selector.module.mjs +0 -43
  80. package/esm2022/lib/components/select-list/select-list.component.mjs +0 -73
  81. package/esm2022/lib/components/select-list/select-list.module.mjs +0 -46
  82. package/esm2022/lib/components/snapshot-inviteurls/snapshot-inviteurls.component.mjs +0 -30
  83. package/esm2022/lib/components/snapshot-inviteurls/snapshot-inviteurls.module.mjs +0 -36
  84. package/esm2022/lib/components/tabnavigator/tabnavigator.component.mjs +0 -36
  85. package/esm2022/lib/components/tabnavigator/tabnavigator.module.mjs +0 -32
  86. package/esm2022/lib/components/topicselector/customCheckValidator.mjs +0 -15
  87. package/esm2022/lib/components/topicselector/minTopicsSelectedValidator.mjs +0 -15
  88. package/esm2022/lib/components/topicselector/topic-selector.component.mjs +0 -220
  89. package/esm2022/lib/components/topicselector/topic-selector.module.mjs +0 -55
  90. package/esm2022/lib/dialogs/dialog-account/account.service.mjs +0 -29
  91. package/esm2022/lib/dialogs/dialog-account/dialog-account.component.mjs +0 -86
  92. package/esm2022/lib/dialogs/dialog-account/dialog-account.module.mjs +0 -21
  93. package/esm2022/lib/dialogs/dialog-account/resetPasswordRequestDto.model.mjs +0 -3
  94. package/esm2022/lib/dialogs/dialog-factorinformation/dialog-factorinformation.component.mjs +0 -48
  95. package/esm2022/lib/dialogs/dialog-factorinformation/dialog-factorinformation.module.mjs +0 -21
  96. package/esm2022/lib/dialogs/dialog-resourcedownload/dialog-resourcedownload.component.mjs +0 -76
  97. package/esm2022/lib/dialogs/dialog-resourcedownload/dialog-resourcedownload.module.mjs +0 -23
  98. package/esm2022/lib/dialogs/dialog-resourcedownload/resourceDownload.service.mjs +0 -26
  99. package/esm2022/lib/dialogs/dialog-subscribe/dialog-subscribe.component.mjs +0 -25
  100. package/esm2022/lib/dialogs/dialog-subscribe/dialog-subscribe.directive.mjs +0 -30
  101. package/esm2022/lib/dialogs/dialog-subscribe/dialog-subscribe.module.mjs +0 -19
  102. package/esm2022/lib/dialogs/dialog-support/contactDto.mjs +0 -2
  103. package/esm2022/lib/dialogs/dialog-support/contactService.service.mjs +0 -25
  104. package/esm2022/lib/dialogs/dialog-support/contactTypeDto.mjs +0 -2
  105. package/esm2022/lib/dialogs/dialog-support/dialog-support.component.mjs +0 -90
  106. package/esm2022/lib/dialogs/dialog-support/dialog-support.directive.mjs +0 -131
  107. package/esm2022/lib/dialogs/dialog-support/dialog-support.module.mjs +0 -27
  108. package/esm2022/lib/directives/backbutton/backbutton.directive.mjs +0 -34
  109. package/esm2022/lib/directives/backbutton/backbutton.module.mjs +0 -17
  110. package/esm2022/lib/directives/guards/guards.module.mjs +0 -30
  111. package/esm2022/lib/directives/guards/validChangeTokenGuard.mjs +0 -27
  112. package/esm2022/lib/directives/guards/validKeyGuard.mjs +0 -26
  113. package/esm2022/lib/directives/guards/validSnapshotKeyGuard.mjs +0 -27
  114. package/esm2022/lib/directives/guards/validTeamKeyGuard.mjs +0 -27
  115. package/esm2022/lib/errorhandling/error.model.mjs +0 -16
  116. package/esm2022/lib/errorhandling/errorHandler.mjs +0 -96
  117. package/esm2022/lib/errorhandling/errorService.module.mjs +0 -24
  118. package/esm2022/lib/errorhandling/errorServiceConfig.mjs +0 -34
  119. package/esm2022/lib/guides/components/imageslider/imageslider.component.mjs +0 -52
  120. package/esm2022/lib/guides/components/resumeguidehover/resumeguidehover.component.mjs +0 -40
  121. package/esm2022/lib/guides/dialogs/dialog-guide/dialog-guide.component.mjs +0 -144
  122. package/esm2022/lib/guides/dialogs/dialog-guides/dialog-guides.component.mjs +0 -90
  123. package/esm2022/lib/guides/directives/startguide/startguide.directive.mjs +0 -27
  124. package/esm2022/lib/guides/guides.module.mjs +0 -92
  125. package/esm2022/lib/guides/interfaces/IGuideState.mjs +0 -2
  126. package/esm2022/lib/guides/models/guideCollectionDto.mjs +0 -19
  127. package/esm2022/lib/guides/services/guidePopup.service.mjs +0 -80
  128. package/esm2022/lib/guides/services/guideStateInBackEnd.service.mjs +0 -54
  129. package/esm2022/lib/guides/services/guideStateInBrowser.service.mjs +0 -56
  130. package/esm2022/lib/guides/services/guidesClientConfig.mjs +0 -30
  131. package/esm2022/lib/guides/services/interfaces.mjs +0 -2
  132. package/esm2022/lib/models/brandingSettingsDto.mjs +0 -5
  133. package/esm2022/lib/models/channelDto.mjs +0 -18
  134. package/esm2022/lib/models/clientInfoDto.mjs +0 -7
  135. package/esm2022/lib/models/contextItemDto.mjs +0 -7
  136. package/esm2022/lib/models/featuresDto.mjs +0 -3
  137. package/esm2022/lib/models/keyValueDto.mjs +0 -7
  138. package/esm2022/lib/models/modelStructureDto.mjs +0 -46
  139. package/esm2022/lib/models/paginatedResponse.mjs +0 -6
  140. package/esm2022/lib/models/pagingOptions.mjs +0 -3
  141. package/esm2022/lib/models/selectListItem.mjs +0 -8
  142. package/esm2022/lib/models/userInfoDto.mjs +0 -16
  143. package/esm2022/lib/models/userSettingsDto.mjs +0 -65
  144. package/esm2022/lib/pipes/callback/callback.module.mjs +0 -17
  145. package/esm2022/lib/pipes/callback/callback.pipe.mjs +0 -20
  146. package/esm2022/lib/pipes/dateRange/ngx-dateRange.module.mjs +0 -17
  147. package/esm2022/lib/pipes/dateRange/ngx-dateRange.pipe.mjs +0 -36
  148. package/esm2022/lib/pipes/dateRange/ngx-dateRangeDto.model.mjs +0 -3
  149. package/esm2022/lib/pipes/segmentName/segmentName.module.mjs +0 -17
  150. package/esm2022/lib/pipes/segmentName/segmentName.pipe.mjs +0 -31
  151. package/esm2022/lib/pipes/slugify/ngx-slugify.module.mjs +0 -17
  152. package/esm2022/lib/pipes/slugify/ngx-slugify.pipe.mjs +0 -24
  153. package/esm2022/lib/results/components/age-indicator/age-indicator.component.mjs +0 -37
  154. package/esm2022/lib/results/components/arrow/arrow.component.mjs +0 -224
  155. package/esm2022/lib/results/components/badge/badge.component.mjs +0 -29
  156. package/esm2022/lib/results/components/badge-progression/badge-progression.component.mjs +0 -25
  157. package/esm2022/lib/results/components/badge-streak/badge-streak.component.mjs +0 -29
  158. package/esm2022/lib/results/components/badges/badges.component.mjs +0 -40
  159. package/esm2022/lib/results/components/benchmark-indicator/benchmark-indicator.component.mjs +0 -21
  160. package/esm2022/lib/results/components/coachingcenter-teaser/coachingcenter-teaser.component.mjs +0 -28
  161. package/esm2022/lib/results/components/delta-arrow/delta-arrow.component.mjs +0 -37
  162. package/esm2022/lib/results/components/doityourself/doityourself.component.mjs +0 -17
  163. package/esm2022/lib/results/components/doityourselfworkshops/doityourselfworkshops.component.mjs +0 -41
  164. package/esm2022/lib/results/components/factor-axis/factor-axis.component.mjs +0 -62
  165. package/esm2022/lib/results/components/factors/factors.component.mjs +0 -46
  166. package/esm2022/lib/results/components/filter-tags/filter-tags.component.mjs +0 -31
  167. package/esm2022/lib/results/components/focusareas/focusareas.component.mjs +0 -43
  168. package/esm2022/lib/results/components/footer/footer.component.mjs +0 -30
  169. package/esm2022/lib/results/components/impact-indicator/impact-indicator.component.mjs +0 -20
  170. package/esm2022/lib/results/components/liberatorkits/liberatorkits.component.mjs +0 -29
  171. package/esm2022/lib/results/components/limitationsapply/limitationsapply.component.mjs +0 -20
  172. package/esm2022/lib/results/components/model/model.component.mjs +0 -79
  173. package/esm2022/lib/results/components/model-factor/model-factor.component.mjs +0 -95
  174. package/esm2022/lib/results/components/model-factor-breakdown/model-factor-breakdown.component.mjs +0 -44
  175. package/esm2022/lib/results/components/model-switcher/model-switcher.component.mjs +0 -33
  176. package/esm2022/lib/results/components/nav-button/nav-button.component.mjs +0 -85
  177. package/esm2022/lib/results/components/participants/participants.component.mjs +0 -78
  178. package/esm2022/lib/results/components/quicktips/quicktips.component.mjs +0 -77
  179. package/esm2022/lib/results/components/recommendation/recommendation.component.mjs +0 -53
  180. package/esm2022/lib/results/components/recommendations/recommendations.component.mjs +0 -57
  181. package/esm2022/lib/results/components/research/research.component.mjs +0 -16
  182. package/esm2022/lib/results/components/roadmap/roadmap.component.mjs +0 -29
  183. package/esm2022/lib/results/components/teamdashboard-teaser/teamdashboard-teaser.component.mjs +0 -30
  184. package/esm2022/lib/results/components/teameffectiveness/teameffectiveness.component.mjs +0 -40
  185. package/esm2022/lib/results/components/termsupdated/termsupdated.component.mjs +0 -37
  186. package/esm2022/lib/results/components/tip-badge/tip-badge.component.mjs +0 -53
  187. package/esm2022/lib/results/components/trends/trends.component.mjs +0 -138
  188. package/esm2022/lib/results/components/update-in-progress/update-in-progress.component.mjs +0 -36
  189. package/esm2022/lib/results/components/userprofile/userprofile.component.mjs +0 -166
  190. package/esm2022/lib/results/components/video/video.component.mjs +0 -23
  191. package/esm2022/lib/results/components/widget-factorscore/widget-factorscore.component.mjs +0 -41
  192. package/esm2022/lib/results/components/widget-participationrate/widget-participationrate.component.mjs +0 -32
  193. package/esm2022/lib/results/dialogs/dialog-export-factorscores/dialog-export-factorscores.component.mjs +0 -94
  194. package/esm2022/lib/results/dialogs/dialog-export-factorscores/dialog-export-factorscores.directive.mjs +0 -30
  195. package/esm2022/lib/results/dialogs/dialog-export-teamlist/dialog-export-teamlist.component.mjs +0 -93
  196. package/esm2022/lib/results/dialogs/dialog-export-teamlist/dialog-export-teamlist.directive.mjs +0 -30
  197. package/esm2022/lib/results/dialogs/dialog-modelfilter/dialog-modelfilter.component.mjs +0 -84
  198. package/esm2022/lib/results/dialogs/dialog-notes/dialog-notes.component.mjs +0 -46
  199. package/esm2022/lib/results/dialogs/dialog-settings/dialog-settings.component.mjs +0 -167
  200. package/esm2022/lib/results/interfaces/IResultsState.mjs +0 -2
  201. package/esm2022/lib/results/models/badgeDto.mjs +0 -10
  202. package/esm2022/lib/results/models/dataSetDto.mjs +0 -7
  203. package/esm2022/lib/results/models/dimensionResultDto.mjs +0 -3
  204. package/esm2022/lib/results/models/exportRequestDto.mjs +0 -11
  205. package/esm2022/lib/results/models/factorScoreDto.mjs +0 -96
  206. package/esm2022/lib/results/models/localUserDto.model.mjs +0 -4
  207. package/esm2022/lib/results/models/participantDto.model.mjs +0 -4
  208. package/esm2022/lib/results/models/snapshotDto.model.mjs +0 -4
  209. package/esm2022/lib/results/models/snapshotMetaDataDto.mjs +0 -5
  210. package/esm2022/lib/results/models/teamDto.model.mjs +0 -4
  211. package/esm2022/lib/results/models/teamListResponseDto.mjs +0 -6
  212. package/esm2022/lib/results/models/teamMetaDataDto.mjs +0 -11
  213. package/esm2022/lib/results/models/trendDataRequestDto.model.mjs +0 -3
  214. package/esm2022/lib/results/models/userListResponseDto.mjs +0 -6
  215. package/esm2022/lib/results/models/widgetDataDto.mjs +0 -3
  216. package/esm2022/lib/results/results.module.mjs +0 -385
  217. package/esm2022/lib/results/services/account.service.mjs +0 -24
  218. package/esm2022/lib/results/services/dimissPopupService.mjs +0 -18
  219. package/esm2022/lib/results/services/exportService.mjs +0 -30
  220. package/esm2022/lib/results/services/factorService.mjs +0 -24
  221. package/esm2022/lib/results/services/resultsClientConfig.mjs +0 -30
  222. package/esm2022/lib/results/services/terms.service.mjs +0 -24
  223. package/esm2022/lib/results/services/trend.service.mjs +0 -24
  224. package/esm2022/lib/results/services/userProfile.service.mjs +0 -41
  225. package/esm2022/lib/validators/domainValidator.mjs +0 -14
  226. package/esm2022/lib/validators/matchInputValidator.mjs +0 -25
  227. package/esm2022/lib/validators/maxSelectedValidator.mjs +0 -9
  228. package/esm2022/lib/viewModel/interfaces.mjs +0 -6
  229. package/esm2022/lib/viewModel/reloadStrategies/noReloadStrategy.mjs +0 -22
  230. package/esm2022/lib/viewModel/reloadStrategies/reloadOnPushStrategy.mjs +0 -52
  231. package/esm2022/lib/viewModel/services/sessionIdInterceptor.service.mjs +0 -31
  232. package/esm2022/lib/viewModel/services/sessionIdProvider.service.mjs +0 -22
  233. package/esm2022/lib/viewModel/userSettings.service.mjs +0 -32
  234. package/esm2022/lib/viewModel/viewModelState.module.mjs +0 -31
  235. package/esm2022/lib/viewModel/viewModelState.service.mjs +0 -79
  236. package/esm2022/lib/viewModel/viewModelStateConfig.mjs +0 -30
  237. package/esm2022/public-api.mjs +0 -224
  238. package/esm2022/the-liberators-ngx-scrumteamsurvey-tools.mjs +0 -5
@@ -1,220 +0,0 @@
1
- import { Component, Input, forwardRef } from '@angular/core';
2
- import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { MatDialogConfig } from '@angular/material/dialog';
4
- import { SegmentEnum } from '../../models/modelStructureDto';
5
- import { DialogFactorInformationComponent } from '../../dialogs/dialog-factorinformation/dialog-factorinformation.component';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/forms";
8
- import * as i2 from "@angular/material/dialog";
9
- import * as i3 from "@angular/common";
10
- import * as i4 from "@angular/material/form-field";
11
- import * as i5 from "@angular/material/select";
12
- import * as i6 from "@angular/material/core";
13
- import * as i7 from "@angular/material/checkbox";
14
- import * as i8 from "../../pipes/slugify/ngx-slugify.pipe";
15
- export class TopicSelectorComponent {
16
- constructor(formBuilder, dialog) {
17
- this.formBuilder = formBuilder;
18
- this.dialog = dialog;
19
- this.warnings = [];
20
- this.selectedTopics = [];
21
- this.questionnaireAccuracy = 0;
22
- this.questionsTeamMembers = 0;
23
- this.questionsStakeholders = 0;
24
- this.questionsSupporters = 0;
25
- this.durationTeamMembers = 0;
26
- this.durationStakeholders = 0;
27
- this.durationSupporters = 0;
28
- this.questionsTotal = 0;
29
- this.disabled = false;
30
- this.topicKeys = [];
31
- this.presets = [];
32
- this.SegmentEnum = SegmentEnum;
33
- this.onChange = () => { };
34
- this.onTouch = () => { };
35
- }
36
- ngOnInit() {
37
- this.createForm();
38
- this.form.valueChanges.subscribe(() => {
39
- var output = this.getValue();
40
- this.onChange(output);
41
- this.updateMetaData(output);
42
- });
43
- }
44
- toggleTopic() {
45
- this.form.controls.preset.setValue("custom");
46
- }
47
- registerOnChange(fn) {
48
- this.onChange = fn;
49
- }
50
- registerOnTouched(fn) {
51
- this.onTouch = fn;
52
- }
53
- writeValue(dto) {
54
- if (!dto) {
55
- return;
56
- }
57
- var questionnaire = this.presets.find(p => p.publicKey == dto.presetKey);
58
- if (!questionnaire) {
59
- questionnaire = this.presets[0];
60
- dto.topicKeys = questionnaire.scaleKeys;
61
- dto.presetKey = questionnaire.publicKey;
62
- }
63
- this.selectedTopics = dto.topicKeys ?? [];
64
- this.form.controls.preset.setValue(dto.presetKey);
65
- if (questionnaire.publicKey == 'custom') {
66
- this.form.controls.showTopics.setValue(true, { emitEvent: false });
67
- }
68
- var topics = this.form.controls.topics;
69
- Object.keys(topics.controls)
70
- .forEach(p => topics.get(p).setValue(this.selectedTopics.includes(p), { emitEvent: false }));
71
- this.updateMetaData(dto);
72
- }
73
- setDisabledState(isDisabled) {
74
- if (isDisabled) {
75
- this.form.disable();
76
- }
77
- else {
78
- this.form.enable();
79
- }
80
- }
81
- selectPreset() {
82
- var questionnaire = this.presets.find(p => p.publicKey == this.form.controls.preset.value);
83
- if (!questionnaire) {
84
- return;
85
- }
86
- var topicKeys = questionnaire.scaleKeys;
87
- if (topicKeys.length == 0) {
88
- topicKeys = this.presets[0].scaleKeys;
89
- }
90
- this.selectedTopics = topicKeys ?? [];
91
- var topics = this.form.controls.topics;
92
- Object.keys(topics.controls)
93
- .forEach(p => topics.get(p).setValue(this.selectedTopics.includes(p)));
94
- if (questionnaire.publicKey == 'custom') {
95
- this.form.controls.showTopics.setValue(true, { emitEvent: false });
96
- }
97
- var dto = new TopicSelectorDto(questionnaire.publicKey, topicKeys);
98
- this.updateMetaData(dto);
99
- this.onChange(dto);
100
- }
101
- getValue() {
102
- var topics = this.form.controls.topics;
103
- var selected = Object.keys(topics.controls)
104
- .filter(p => topics.get(p).value == true)
105
- .map(p => p);
106
- var presetKey = this.form.controls.preset.value;
107
- return new TopicSelectorDto(presetKey, selected);
108
- }
109
- openFactorInformation(topicKey, $event) {
110
- var topic = this.topics.find(p => p.publicKey == topicKey);
111
- if (!topic) {
112
- return;
113
- }
114
- $event.preventDefault();
115
- const dialogConfig = new MatDialogConfig();
116
- dialogConfig.panelClass = ['dialog', 'factor'];
117
- dialogConfig.data = topic;
118
- dialogConfig.enterAnimationDuration = 0;
119
- dialogConfig.exitAnimationDuration = 0;
120
- this.dialog.open(DialogFactorInformationComponent, dialogConfig);
121
- }
122
- hasSegmentQuestions(factor, segment, useOwnQuestionCount) {
123
- if (useOwnQuestionCount) {
124
- return factor.segments.find(p => p.segment == segment.toString()).ownQuestionCount > 0 ?? false;
125
- }
126
- else {
127
- return factor.segments.find(p => p.segment == segment.toString()).questionCount > 0 ?? false;
128
- }
129
- }
130
- getCoreFactors() {
131
- return this.topics.filter(p => p.parentKey == null);
132
- }
133
- getSubFactors(parentKey) {
134
- return this.topics.filter(p => p.parentKey == parentKey).sort((a, b) => a.name.localeCompare(b.name));
135
- }
136
- selectAll(topic, $event) {
137
- $event.preventDefault();
138
- var topics = this.form.controls.topics;
139
- this.topics
140
- .filter(p => p.parentKey == topic.publicKey || (p.publicKey == topic.publicKey && p.ownQuestionCount > 0))
141
- .forEach(p => topics.get(p.publicKey).setValue(true));
142
- }
143
- selectNone(topic, $event) {
144
- $event.preventDefault();
145
- var topics = this.form.controls.topics;
146
- this.topics
147
- .filter(p => p.parentKey == topic.publicKey || (p.publicKey == topic.publicKey && p.ownQuestionCount > 0))
148
- .forEach(p => topics.get(p.publicKey).setValue(false));
149
- }
150
- createForm() {
151
- this.form = this.formBuilder.group({
152
- preset: [null],
153
- topicKeys: [[]],
154
- topics: this.formBuilder.group([]),
155
- showTopics: [false]
156
- });
157
- this.topics.filter(p => p.parentKey != null || (p.parentKey == null && p.ownQuestionCount > 0))
158
- .forEach(p => this.form.controls.topics.addControl(p.publicKey, new FormControl(false), { emitEvent: false }));
159
- }
160
- updateMetaData(output) {
161
- this.warnings = [];
162
- // only work with lower-level factors, as higher-level contain aggregated higher-level question counts
163
- var scalesToInclude = this.topics.filter(p => p.parentKey != null && output.topicKeys.includes(p.publicKey));
164
- var totalQuestions = this.topics.filter(p => p.parentKey != null).reduce((sum, current) => sum += current.questionCount, 0);
165
- this.questionsTotal = scalesToInclude.reduce((sum, current) => sum += current.questionCount, 0);
166
- this.questionsTeamMembers = scalesToInclude.flatMap(p => p.segments).filter(p => p.segment == SegmentEnum.TeamMember).reduce((sum, current) => sum += current.questionCount, 0);
167
- this.questionsStakeholders = scalesToInclude.flatMap(p => p.segments).filter(p => p.segment == SegmentEnum.Stakeholder).reduce((sum, current) => sum += current.questionCount, 0);
168
- this.questionsSupporters = scalesToInclude.flatMap(p => p.segments).filter(p => p.segment == SegmentEnum.Management).reduce((sum, current) => sum += current.questionCount, 0);
169
- this.durationTeamMembers = scalesToInclude.flatMap(p => p.segments).filter(p => p.segment == SegmentEnum.TeamMember).reduce((sum, current) => sum += current.durationInSeconds, 0) / 60;
170
- this.durationStakeholders = scalesToInclude.flatMap(p => p.segments).filter(p => p.segment == SegmentEnum.Stakeholder).reduce((sum, current) => sum += current.durationInSeconds, 0) / 60;
171
- this.durationSupporters = scalesToInclude.flatMap(p => p.segments).filter(p => p.segment == SegmentEnum.Management).reduce((sum, current) => sum += current.durationInSeconds, 0) / 60;
172
- if (this.durationTeamMembers < 1) {
173
- this.durationTeamMembers = 1;
174
- }
175
- if (this.durationStakeholders < 1) {
176
- this.durationStakeholders = 1;
177
- }
178
- if (this.durationSupporters < 1) {
179
- this.durationSupporters = 1;
180
- }
181
- if (this.questionsStakeholders == 0) {
182
- this.warnings.push("The selection does not include topics for stakeholders.");
183
- }
184
- if (this.questionsSupporters == 0) {
185
- this.warnings.push("The selection does not include topics for supporters / management.");
186
- }
187
- if (this.questionsTeamMembers == 0) {
188
- this.warnings.push("The selection does not include topics for team members.");
189
- }
190
- if (this.questionnaireAccuracy < 0.25) {
191
- this.warnings.push("The selection measures few topics, so its overall accuracy is low.");
192
- }
193
- this.questionnaireAccuracy = this.questionsTotal / totalQuestions;
194
- }
195
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TopicSelectorComponent, deps: [{ token: i1.FormBuilder }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
196
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: TopicSelectorComponent, selector: "topic-selector", inputs: { topics: "topics", disabled: "disabled", topicKeys: "topicKeys", presets: "presets" }, providers: [
197
- { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => TopicSelectorComponent), }
198
- ], ngImport: i0, template: "<form [formGroup]=\"form\">\n <div class=\"topicselector-container\">\n <div class=\"topicselector-metadata\">\n <div class=\"questionnaire-preset\">\n <mat-form-field class=\"questionnaire-preset-select\" appearance=\"fill\">\n <mat-label>Select predefined questionnaire</mat-label>\n <mat-select id=\"question-preset\" formControlName=\"preset\" (selectionChange)=\"selectPreset()\">\n <mat-option [value]=\"type.publicKey\" *ngFor=\"let type of presets\" class=\"select-option\">{{type.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"questionnaire-accuracy\">\n <div class=\"questionnaire-breakdown-label\">Accuracy</div>\n <div class=\"questionnaire-breakdown-bar-holder\">\n <div class=\"questionnaire-accuracy-bar\" [ngClass]=\"{'low': questionnaireAccuracy < 0.25, 'moderate' : questionnaireAccuracy < 0.5 && questionnaireAccuracy >= 0.25}\" [ngStyle]=\"{'width': (questionnaireAccuracy * 100) + '%' }\">{{questionnaireAccuracy * 100 | number:'1.0-0'}}%</div>\n </div>\n </div>\n <div class=\"questionnaire-segments\">\n <div class=\"questionnaire-segments-label\">Time investment</div>\n <div class=\"questionnaire-breakdowns\">\n <div class=\"questionnaire-breakdown\">\n <div class=\"questionnaire-breakdown-label\">Team members</div>\n <div class=\"progressbar progressbar-positive progressbar-teammember\">\n <div class=\"progressbar-bar\" *ngIf=\"questionsTeamMembers > 0\" [style.width]=\"((questionsTeamMembers / questionsTotal) * 100) + '%'\"></div>\n <div class=\"progressbar-score\">{{durationTeamMembers | number:'1.0-0'}} min</div>\n </div>\n </div>\n <div class=\"questionnaire-breakdown\">\n <div class=\"questionnaire-breakdown-label\">Stakeholders</div>\n <div class=\"progressbar progressbar-positive progressbar-stakeholder\">\n <div class=\"progressbar-bar\" *ngIf=\"questionsStakeholders > 0\" [style.width]=\"((questionsStakeholders / questionsTotal) * 100) + '%'\"></div>\n <div class=\"progressbar-score\">{{durationStakeholders | number:'1.0-0'}} min</div>\n </div>\n </div>\n <div class=\"questionnaire-breakdown\">\n <div class=\"questionnaire-breakdown-label\">Supporters</div>\n <div class=\"progressbar progressbar-positive progressbar-supporter\">\n <div class=\"progressbar-bar\" *ngIf=\"questionsSupporters > 0\" [style.width]=\"((questionsSupporters / questionsTotal) * 100) + '%'\"></div>\n <div class=\"progressbar-score\">{{durationSupporters | number:'1.0-0'}} min</div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"topicselector-warnings\" *ngIf=\"warnings.length > 0\">\n <div class=\"topicselector-warnings-warning\" *ngFor=\"let warning of warnings\">\n <span class=\"icon ph-info-fill\"></span>{{warning}}\n </div>\n </div>\n <a href=\"javascript:void(null)\" *ngIf=\"!form.controls.showTopics.value\" id=\"action-advancedviewtoggle\" class=\"topic-selector-advancedviewtoggle\" (click)=\"form.controls.showTopics.setValue(true)\"><span class=\"icon ph-caret-down-bold\"></span>Customize topics</a>\n <a href=\"javascript:void(null)\" *ngIf=\"form.controls.showTopics.value\" id=\"action-advancedviewtoggle\" class=\"topic-selector-advancedviewtoggle\" (click)=\"form.controls.showTopics.setValue(false)\"><span class=\"icon ph-caret-up-bold\"></span>Hide topics</a>\n </div>\n <div class=\"topicselector-topics\" *ngIf=\"form.controls.showTopics.value\"> \n <div class=\"topic-parent\" *ngFor=\"let topic of getCoreFactors()\" formArrayName=\"topics\">\n <div class=\"name\">\n <h4>{{topic.name}}</h4>\n <div class=\"helpers\">(<a href=\"#\" (click)=\"selectAll(topic, $event)\">all</a> | <a href=\"#\" (click)=\"selectNone(topic, $event)\">none</a>)</div>\n <div class=\"topic-child-moreinformation\">\n <span class=\"icon ph-info-bold\" (click)=\"openFactorInformation(topic.publicKey, $event)\"></span>\n </div>\n </div>\n\n <div *ngIf=\"topic.ownQuestionCount > 0\" class=\"topic-child\">\n <mat-checkbox class=\"topic-child-check\" [formControlName]=\"topic.publicKey\" (click)=\"toggleTopic()\" [id]=\"'topic-' + topic.name | slugify\"></mat-checkbox>\n <div class=\"topic-child-description\">\n {{topic.name}} ({{topic.ownQuestionCount}} questions)\n <div class=\"tags\">\n <div class=\"tags-tag recommended\" *ngIf=\"topic.recommended\">Recommended</div>\n <div class=\"tags-tag teammember\" *ngIf=\"hasSegmentQuestions(topic, SegmentEnum.TeamMember, true)\">For team members</div>\n <div class=\"tags-tag stakeholder\" *ngIf=\"hasSegmentQuestions(topic, SegmentEnum.Stakeholder, true)\">For stakeholders</div>\n <div class=\"tags-tag supporter\" *ngIf=\"hasSegmentQuestions(topic, SegmentEnum.Management, true)\">For supporters</div>\n </div>\n </div>\n <div class=\"topic-child-moreinformation\">\n <span class=\"icon ph-info-bold\" (click)=\"openFactorInformation(topic.publicKey, $event)\"></span>\n </div>\n </div>\n\n\n <div *ngFor=\"let subTopic of getSubFactors(topic.publicKey)\" class=\"topic-child\">\n <mat-checkbox class=\"topic-child-check\" [formControlName]=\"subTopic.publicKey\" (click)=\"toggleTopic()\" [id]=\"'topic-' + subTopic.name | slugify\"></mat-checkbox>\n <div class=\"topic-child-description\">\n {{subTopic.name}} ({{subTopic.questionCount}} questions)\n <div class=\"tags\">\n <div class=\"tags-tag recommended\" *ngIf=\"subTopic.recommended\">Recommended</div>\n <div class=\"tags-tag teammember\" *ngIf=\"hasSegmentQuestions(subTopic, SegmentEnum.TeamMember, false)\">For team members</div>\n <div class=\"tags-tag stakeholder\" *ngIf=\"hasSegmentQuestions(subTopic, SegmentEnum.Stakeholder, false)\">For stakeholders</div>\n <div class=\"tags-tag supporter\" *ngIf=\"hasSegmentQuestions(subTopic, SegmentEnum.Management, false)\">For supporters</div>\n </div>\n </div>\n <div class=\"topic-child-moreinformation\">\n <span class=\"icon ph-info-bold\" (click)=\"openFactorInformation(subTopic.publicKey, $event)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n</form>\n", styles: [".smallTextUppercase{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;text-transform:uppercase;line-height:100%}.bigletteredbutton{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;text-decoration:none;background:#ffffff1a;margin-bottom:10px;display:flex;align-content:center;border-radius:20px;padding:15px;font-size:24px;border:2px solid #1F3F8F;border-bottom:6px solid #1F3F8F;color:#fff;align-items:center;cursor:pointer}.bigletteredbutton .free{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;background:#fff73f;color:#2f2f2f;padding:3px 5px;margin-left:20px;border-radius:10px}.bigletteredbutton .plan{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;background:#fff;color:#2f2f2f;padding:3px 5px;margin-left:20px;border-radius:10px}.bigletteredbutton:hover,.bigletteredbutton.selected{border:2px solid #fff73f;border-bottom:6px solid #fff73f}.bigletteredbutton .button-letter{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;background:#fff73f;color:#1f3f8f;margin-right:20px}.bigletteredbutton .button-letter .ph{color:#1f3f8f}.bigletteredbutton .button-letter:hover{background:#1f3f8f;color:#fff73f}.bigletteredbutton .button-letter:hover .ph{color:#fff73f}.roundicon-yellow{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;background:#fff73f;color:#1f3f8f}.roundicon-yellow .ph{color:#1f3f8f}.roundicon-yellow:hover{background:#1f3f8f;color:#fff73f}.roundicon-yellow:hover .ph{color:#fff73f}.roundicon{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center}.roundicon-large{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;border-radius:60px;height:120px;width:120px}.topicselector-container .topicselector-metadata{background:#f0f0f0;border-radius:20px;padding:30px;display:flex;column-gap:30px;flex-direction:column}@media only screen and (max-width: 992px){.topicselector-container .topicselector-metadata{display:block}}.topicselector-container .topicselector-metadata .questionnaire-preset .questionnaire-preset-label{font-size:12px;font-weight:900;text-transform:uppercase;font-family:StevieSans,sans-serif;margin-bottom:5px}.topicselector-container .topicselector-metadata .questionnaire-preset .questionnaire-preset-select{width:100%}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-segments-label{font-size:12px;font-weight:900;text-transform:uppercase;font-family:StevieSans,sans-serif;margin-bottom:5px}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns{display:flex;gap:15px}@media only screen and (max-width: 992px){.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns{display:block}}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown{margin-bottom:15px;flex:auto}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .questionnaire-breakdown-label{font-size:14px;font-weight:700;font-family:StevieSans,sans-serif;margin-bottom:5px;margin-top:5px}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .questionnaire-breakdown-label .icon{color:#ef6f00;font-size:18px;vertical-align:middle;cursor:pointer}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar{margin:0;width:100%}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-teammember .progressbar-bar{background:#00af77}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-teammember .progressbar-score{color:#fff}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-stakeholder .progressbar-bar{background:#fff73f}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-stakeholder .progressbar-score{color:#fff}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-supporter .progressbar-bar{background:#ef4f9f}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-supporter .progressbar-score{color:#fff}.topicselector-container .topicselector-metadata .questionnaire-accuracy{margin-bottom:15px}.topicselector-container .topicselector-metadata .questionnaire-accuracy .questionnaire-breakdown-label{font-size:12px;font-weight:900;text-transform:uppercase;margin-bottom:5px;font-family:StevieSans,sans-serif}.topicselector-container .topicselector-metadata .questionnaire-accuracy .questionnaire-breakdown-bar-holder{margin-bottom:15px;background:#2f2f2f;height:20px;border-radius:15px;overflow:hidden}.topicselector-container .topicselector-metadata .questionnaire-accuracy .questionnaire-breakdown-bar-holder .questionnaire-accuracy-bar{flex:auto;min-width:50px;font-size:12px;font-weight:900;text-transform:uppercase;font-family:StevieSans,sans-serif;background:#00af77;height:100%;align-content:center;text-align:center}.topicselector-container .topicselector-metadata .questionnaire-accuracy .questionnaire-breakdown-bar-holder .questionnaire-accuracy-bar.low{background:#ef6f00}.topicselector-container .topicselector-metadata .questionnaire-accuracy .questionnaire-breakdown-bar-holder .questionnaire-accuracy-bar.moderate{background:#fff73f}.topicselector-container .topic-selector-advancedviewtoggle{margin-top:10px;text-align:center;font-weight:700;font-family:StevieSans,sans-serif;font-size:12pt;text-decoration:none}.topicselector-container .topic-selector-advancedviewtoggle .icon{margin-right:10px;vertical-align:middle}.topicselector-container .topicselector-warnings{margin-top:15px}.topicselector-container .topicselector-warnings .topicselector-warnings-warning{display:flex;align-items:center;font-size:12pt}.topicselector-container .topicselector-warnings .topicselector-warnings-warning .icon{color:#1f3f8f;font-size:16px;cursor:pointer;margin-right:10px}.topicselector-container .topicselector-topics{margin-top:30px}.topicselector-container .topicselector-topics .topic-parent{margin-bottom:60px;padding-left:30px}.topicselector-container .topicselector-topics .topic-parent .name{display:flex;align-items:baseline;gap:15px}.topicselector-container .topicselector-topics .topic-parent .name h4{font-weight:700!important;font-family:StevieSans,sans-serif!important;margin:0}.topicselector-container .topicselector-topics .topic-parent .name .helpers{font-size:12pt}.topicselector-container .topicselector-topics .topic-parent .name .helpers a{font-family:StevieSans,sans-serif}.topicselector-container .topicselector-topics .topic-parent .name .topic-child-moreinformation{margin-left:auto;cursor:pointer}.topicselector-container .topicselector-topics .topic-parent .name .topic-child-moreinformation .icon{vertical-align:middle}.topicselector-container .topicselector-topics .topic-parent .topic-child{display:flex;align-items:baseline;gap:15px;margin-bottom:15px;margin-top:15px;cursor:pointer}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description{font-family:StevieSans,sans-serif;font-size:16px;font-weight:500}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags{gap:5px;margin-top:5px;display:flex}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag{padding:4px 8px;border-radius:16px;font-weight:600;font-size:11px;white-space:pre}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag.recommended{background:#2f2f2f;color:#fff}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag.stakeholder{background:#fff73f}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag.teammember{background:#1f3f8f;color:#fff}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag.supporter,.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag.management{background:#ef4f9f}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-moreinformation{margin-left:auto}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-moreinformation .icon{vertical-align:middle;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i8.SlugifyPipe, name: "slugify" }] }); }
199
- }
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TopicSelectorComponent, decorators: [{
201
- type: Component,
202
- args: [{ selector: 'topic-selector', providers: [
203
- { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => TopicSelectorComponent), }
204
- ], template: "<form [formGroup]=\"form\">\n <div class=\"topicselector-container\">\n <div class=\"topicselector-metadata\">\n <div class=\"questionnaire-preset\">\n <mat-form-field class=\"questionnaire-preset-select\" appearance=\"fill\">\n <mat-label>Select predefined questionnaire</mat-label>\n <mat-select id=\"question-preset\" formControlName=\"preset\" (selectionChange)=\"selectPreset()\">\n <mat-option [value]=\"type.publicKey\" *ngFor=\"let type of presets\" class=\"select-option\">{{type.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"questionnaire-accuracy\">\n <div class=\"questionnaire-breakdown-label\">Accuracy</div>\n <div class=\"questionnaire-breakdown-bar-holder\">\n <div class=\"questionnaire-accuracy-bar\" [ngClass]=\"{'low': questionnaireAccuracy < 0.25, 'moderate' : questionnaireAccuracy < 0.5 && questionnaireAccuracy >= 0.25}\" [ngStyle]=\"{'width': (questionnaireAccuracy * 100) + '%' }\">{{questionnaireAccuracy * 100 | number:'1.0-0'}}%</div>\n </div>\n </div>\n <div class=\"questionnaire-segments\">\n <div class=\"questionnaire-segments-label\">Time investment</div>\n <div class=\"questionnaire-breakdowns\">\n <div class=\"questionnaire-breakdown\">\n <div class=\"questionnaire-breakdown-label\">Team members</div>\n <div class=\"progressbar progressbar-positive progressbar-teammember\">\n <div class=\"progressbar-bar\" *ngIf=\"questionsTeamMembers > 0\" [style.width]=\"((questionsTeamMembers / questionsTotal) * 100) + '%'\"></div>\n <div class=\"progressbar-score\">{{durationTeamMembers | number:'1.0-0'}} min</div>\n </div>\n </div>\n <div class=\"questionnaire-breakdown\">\n <div class=\"questionnaire-breakdown-label\">Stakeholders</div>\n <div class=\"progressbar progressbar-positive progressbar-stakeholder\">\n <div class=\"progressbar-bar\" *ngIf=\"questionsStakeholders > 0\" [style.width]=\"((questionsStakeholders / questionsTotal) * 100) + '%'\"></div>\n <div class=\"progressbar-score\">{{durationStakeholders | number:'1.0-0'}} min</div>\n </div>\n </div>\n <div class=\"questionnaire-breakdown\">\n <div class=\"questionnaire-breakdown-label\">Supporters</div>\n <div class=\"progressbar progressbar-positive progressbar-supporter\">\n <div class=\"progressbar-bar\" *ngIf=\"questionsSupporters > 0\" [style.width]=\"((questionsSupporters / questionsTotal) * 100) + '%'\"></div>\n <div class=\"progressbar-score\">{{durationSupporters | number:'1.0-0'}} min</div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"topicselector-warnings\" *ngIf=\"warnings.length > 0\">\n <div class=\"topicselector-warnings-warning\" *ngFor=\"let warning of warnings\">\n <span class=\"icon ph-info-fill\"></span>{{warning}}\n </div>\n </div>\n <a href=\"javascript:void(null)\" *ngIf=\"!form.controls.showTopics.value\" id=\"action-advancedviewtoggle\" class=\"topic-selector-advancedviewtoggle\" (click)=\"form.controls.showTopics.setValue(true)\"><span class=\"icon ph-caret-down-bold\"></span>Customize topics</a>\n <a href=\"javascript:void(null)\" *ngIf=\"form.controls.showTopics.value\" id=\"action-advancedviewtoggle\" class=\"topic-selector-advancedviewtoggle\" (click)=\"form.controls.showTopics.setValue(false)\"><span class=\"icon ph-caret-up-bold\"></span>Hide topics</a>\n </div>\n <div class=\"topicselector-topics\" *ngIf=\"form.controls.showTopics.value\"> \n <div class=\"topic-parent\" *ngFor=\"let topic of getCoreFactors()\" formArrayName=\"topics\">\n <div class=\"name\">\n <h4>{{topic.name}}</h4>\n <div class=\"helpers\">(<a href=\"#\" (click)=\"selectAll(topic, $event)\">all</a> | <a href=\"#\" (click)=\"selectNone(topic, $event)\">none</a>)</div>\n <div class=\"topic-child-moreinformation\">\n <span class=\"icon ph-info-bold\" (click)=\"openFactorInformation(topic.publicKey, $event)\"></span>\n </div>\n </div>\n\n <div *ngIf=\"topic.ownQuestionCount > 0\" class=\"topic-child\">\n <mat-checkbox class=\"topic-child-check\" [formControlName]=\"topic.publicKey\" (click)=\"toggleTopic()\" [id]=\"'topic-' + topic.name | slugify\"></mat-checkbox>\n <div class=\"topic-child-description\">\n {{topic.name}} ({{topic.ownQuestionCount}} questions)\n <div class=\"tags\">\n <div class=\"tags-tag recommended\" *ngIf=\"topic.recommended\">Recommended</div>\n <div class=\"tags-tag teammember\" *ngIf=\"hasSegmentQuestions(topic, SegmentEnum.TeamMember, true)\">For team members</div>\n <div class=\"tags-tag stakeholder\" *ngIf=\"hasSegmentQuestions(topic, SegmentEnum.Stakeholder, true)\">For stakeholders</div>\n <div class=\"tags-tag supporter\" *ngIf=\"hasSegmentQuestions(topic, SegmentEnum.Management, true)\">For supporters</div>\n </div>\n </div>\n <div class=\"topic-child-moreinformation\">\n <span class=\"icon ph-info-bold\" (click)=\"openFactorInformation(topic.publicKey, $event)\"></span>\n </div>\n </div>\n\n\n <div *ngFor=\"let subTopic of getSubFactors(topic.publicKey)\" class=\"topic-child\">\n <mat-checkbox class=\"topic-child-check\" [formControlName]=\"subTopic.publicKey\" (click)=\"toggleTopic()\" [id]=\"'topic-' + subTopic.name | slugify\"></mat-checkbox>\n <div class=\"topic-child-description\">\n {{subTopic.name}} ({{subTopic.questionCount}} questions)\n <div class=\"tags\">\n <div class=\"tags-tag recommended\" *ngIf=\"subTopic.recommended\">Recommended</div>\n <div class=\"tags-tag teammember\" *ngIf=\"hasSegmentQuestions(subTopic, SegmentEnum.TeamMember, false)\">For team members</div>\n <div class=\"tags-tag stakeholder\" *ngIf=\"hasSegmentQuestions(subTopic, SegmentEnum.Stakeholder, false)\">For stakeholders</div>\n <div class=\"tags-tag supporter\" *ngIf=\"hasSegmentQuestions(subTopic, SegmentEnum.Management, false)\">For supporters</div>\n </div>\n </div>\n <div class=\"topic-child-moreinformation\">\n <span class=\"icon ph-info-bold\" (click)=\"openFactorInformation(subTopic.publicKey, $event)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n</form>\n", styles: [".smallTextUppercase{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;text-transform:uppercase;line-height:100%}.bigletteredbutton{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;text-decoration:none;background:#ffffff1a;margin-bottom:10px;display:flex;align-content:center;border-radius:20px;padding:15px;font-size:24px;border:2px solid #1F3F8F;border-bottom:6px solid #1F3F8F;color:#fff;align-items:center;cursor:pointer}.bigletteredbutton .free{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;background:#fff73f;color:#2f2f2f;padding:3px 5px;margin-left:20px;border-radius:10px}.bigletteredbutton .plan{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;background:#fff;color:#2f2f2f;padding:3px 5px;margin-left:20px;border-radius:10px}.bigletteredbutton:hover,.bigletteredbutton.selected{border:2px solid #fff73f;border-bottom:6px solid #fff73f}.bigletteredbutton .button-letter{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;background:#fff73f;color:#1f3f8f;margin-right:20px}.bigletteredbutton .button-letter .ph{color:#1f3f8f}.bigletteredbutton .button-letter:hover{background:#1f3f8f;color:#fff73f}.bigletteredbutton .button-letter:hover .ph{color:#fff73f}.roundicon-yellow{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;background:#fff73f;color:#1f3f8f}.roundicon-yellow .ph{color:#1f3f8f}.roundicon-yellow:hover{background:#1f3f8f;color:#fff73f}.roundicon-yellow:hover .ph{color:#fff73f}.roundicon{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center}.roundicon-large{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;border-radius:60px;height:120px;width:120px}.topicselector-container .topicselector-metadata{background:#f0f0f0;border-radius:20px;padding:30px;display:flex;column-gap:30px;flex-direction:column}@media only screen and (max-width: 992px){.topicselector-container .topicselector-metadata{display:block}}.topicselector-container .topicselector-metadata .questionnaire-preset .questionnaire-preset-label{font-size:12px;font-weight:900;text-transform:uppercase;font-family:StevieSans,sans-serif;margin-bottom:5px}.topicselector-container .topicselector-metadata .questionnaire-preset .questionnaire-preset-select{width:100%}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-segments-label{font-size:12px;font-weight:900;text-transform:uppercase;font-family:StevieSans,sans-serif;margin-bottom:5px}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns{display:flex;gap:15px}@media only screen and (max-width: 992px){.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns{display:block}}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown{margin-bottom:15px;flex:auto}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .questionnaire-breakdown-label{font-size:14px;font-weight:700;font-family:StevieSans,sans-serif;margin-bottom:5px;margin-top:5px}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .questionnaire-breakdown-label .icon{color:#ef6f00;font-size:18px;vertical-align:middle;cursor:pointer}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar{margin:0;width:100%}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-teammember .progressbar-bar{background:#00af77}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-teammember .progressbar-score{color:#fff}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-stakeholder .progressbar-bar{background:#fff73f}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-stakeholder .progressbar-score{color:#fff}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-supporter .progressbar-bar{background:#ef4f9f}.topicselector-container .topicselector-metadata .questionnaire-segments .questionnaire-breakdowns .questionnaire-breakdown .progressbar.progressbar-supporter .progressbar-score{color:#fff}.topicselector-container .topicselector-metadata .questionnaire-accuracy{margin-bottom:15px}.topicselector-container .topicselector-metadata .questionnaire-accuracy .questionnaire-breakdown-label{font-size:12px;font-weight:900;text-transform:uppercase;margin-bottom:5px;font-family:StevieSans,sans-serif}.topicselector-container .topicselector-metadata .questionnaire-accuracy .questionnaire-breakdown-bar-holder{margin-bottom:15px;background:#2f2f2f;height:20px;border-radius:15px;overflow:hidden}.topicselector-container .topicselector-metadata .questionnaire-accuracy .questionnaire-breakdown-bar-holder .questionnaire-accuracy-bar{flex:auto;min-width:50px;font-size:12px;font-weight:900;text-transform:uppercase;font-family:StevieSans,sans-serif;background:#00af77;height:100%;align-content:center;text-align:center}.topicselector-container .topicselector-metadata .questionnaire-accuracy .questionnaire-breakdown-bar-holder .questionnaire-accuracy-bar.low{background:#ef6f00}.topicselector-container .topicselector-metadata .questionnaire-accuracy .questionnaire-breakdown-bar-holder .questionnaire-accuracy-bar.moderate{background:#fff73f}.topicselector-container .topic-selector-advancedviewtoggle{margin-top:10px;text-align:center;font-weight:700;font-family:StevieSans,sans-serif;font-size:12pt;text-decoration:none}.topicselector-container .topic-selector-advancedviewtoggle .icon{margin-right:10px;vertical-align:middle}.topicselector-container .topicselector-warnings{margin-top:15px}.topicselector-container .topicselector-warnings .topicselector-warnings-warning{display:flex;align-items:center;font-size:12pt}.topicselector-container .topicselector-warnings .topicselector-warnings-warning .icon{color:#1f3f8f;font-size:16px;cursor:pointer;margin-right:10px}.topicselector-container .topicselector-topics{margin-top:30px}.topicselector-container .topicselector-topics .topic-parent{margin-bottom:60px;padding-left:30px}.topicselector-container .topicselector-topics .topic-parent .name{display:flex;align-items:baseline;gap:15px}.topicselector-container .topicselector-topics .topic-parent .name h4{font-weight:700!important;font-family:StevieSans,sans-serif!important;margin:0}.topicselector-container .topicselector-topics .topic-parent .name .helpers{font-size:12pt}.topicselector-container .topicselector-topics .topic-parent .name .helpers a{font-family:StevieSans,sans-serif}.topicselector-container .topicselector-topics .topic-parent .name .topic-child-moreinformation{margin-left:auto;cursor:pointer}.topicselector-container .topicselector-topics .topic-parent .name .topic-child-moreinformation .icon{vertical-align:middle}.topicselector-container .topicselector-topics .topic-parent .topic-child{display:flex;align-items:baseline;gap:15px;margin-bottom:15px;margin-top:15px;cursor:pointer}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description{font-family:StevieSans,sans-serif;font-size:16px;font-weight:500}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags{gap:5px;margin-top:5px;display:flex}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag{padding:4px 8px;border-radius:16px;font-weight:600;font-size:11px;white-space:pre}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag.recommended{background:#2f2f2f;color:#fff}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag.stakeholder{background:#fff73f}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag.teammember{background:#1f3f8f;color:#fff}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag.supporter,.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-description .tags .tags-tag.management{background:#ef4f9f}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-moreinformation{margin-left:auto}.topicselector-container .topicselector-topics .topic-parent .topic-child .topic-child-moreinformation .icon{vertical-align:middle;cursor:pointer}\n"] }]
205
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.MatDialog }], propDecorators: { topics: [{
206
- type: Input
207
- }], disabled: [{
208
- type: Input
209
- }], topicKeys: [{
210
- type: Input
211
- }], presets: [{
212
- type: Input
213
- }] } });
214
- export class TopicSelectorDto {
215
- constructor(presetKey, topicKeys) {
216
- this.presetKey = presetKey;
217
- this.topicKeys = topicKeys ?? [];
218
- }
219
- }
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWMtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjcnVtdGVhbXN1cnZleS10b29scy9zcmMvbGliL2NvbXBvbmVudHMvdG9waWNzZWxlY3Rvci90b3BpYy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NydW10ZWFtc3VydmV5LXRvb2xzL3NyYy9saWIvY29tcG9uZW50cy90b3BpY3NlbGVjdG9yL3RvcGljLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQWlFLFdBQVcsRUFBYSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFJLE9BQU8sRUFBYSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RSxPQUFPLEVBQTRDLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDJFQUEyRSxDQUFDOzs7Ozs7Ozs7O0FBVTdILE1BQU0sT0FBTyxzQkFBc0I7SUFrQmhDLFlBQW9CLFdBQXdCLEVBQVUsTUFBaUI7UUFBbkQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBaEJoRSxhQUFRLEdBQWEsRUFBRSxDQUFBO1FBQ3RCLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQy9CLDBCQUFxQixHQUFXLENBQUMsQ0FBQztRQUNsQyx5QkFBb0IsR0FBVyxDQUFDLENBQUM7UUFDakMsMEJBQXFCLEdBQVcsQ0FBQyxDQUFDO1FBQ2xDLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUNoQyx3QkFBbUIsR0FBVyxDQUFDLENBQUM7UUFDaEMseUJB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SSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU1SCxJQUFJLENBQUMsY0FBYyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoTCxJQUFJLENBQUMscUJBQXFCLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsTCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUvSyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4TCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxTCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV2TCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFBQyxDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsRUFBRSxDQUFDO1lBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztRQUFDLENBQUM7UUFDckUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQUMsQ0FBQztRQUVqRSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1FBQzVGLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1FBQzVGLENBQUM7UUFFRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDckUsQ0FBQzsrR0FsTVMsc0JBQXNCO21HQUF0QixzQkFBc0IseUlBSnJCO1lBQ1IsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDLEdBQUc7U0FDckcsMEJDWkosdS9OQWlHQTs7NEZEbkZhLHNCQUFzQjtrQkFSbEMsU0FBUzsrQkFDRyxnQkFBZ0IsYUFHZjt3QkFDUixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHVCQUF1QixDQUFDLEdBQUc7cUJBQ3JHO3dHQWNRLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLOztBQXNMVCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzFCLFlBQVksU0FBaUIsRUFBRSxTQUFtQjtRQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztDQUlIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBGYWN0b3JTdHJ1Y3R1cmVEdG8sIFF1ZXN0aW9ubmFpcmVUeXBlRHRvLCBTZWdtZW50RW51bSB9IGZyb20gJy4uLy4uL21vZGVscy9tb2RlbFN0cnVjdHVyZUR0byc7XG5pbXBvcnQgeyBEaWFsb2dGYWN0b3JJbmZvcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvZGlhbG9nLWZhY3RvcmluZm9ybWF0aW9uL2RpYWxvZy1mYWN0b3JpbmZvcm1hdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgIHNlbGVjdG9yOiAndG9waWMtc2VsZWN0b3InLFxuICAgdGVtcGxhdGVVcmw6ICcuL3RvcGljLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgIHN0eWxlVXJsczogWycuL3RvcGljLXNlbGVjdG9yLmNvbXBvbmVudC5sZXNzJ10sXG4gICBwcm92aWRlcnM6IFtcbiAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIG11bHRpOiB0cnVlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUb3BpY1NlbGVjdG9yQ29tcG9uZW50KSwgfVxuICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUb3BpY1NlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcbiAgIHB1YmxpYyB3YXJuaW5nczogc3RyaW5nW10gPSBbXVxuICAgcHJpdmF0ZSBzZWxlY3RlZFRvcGljczogc3RyaW5nW10gPSBbXTtcbiAgIHB1YmxpYyBxdWVzdGlvbm5haXJlQWNjdXJhY3k6IG51bWJlciA9IDA7XG4gICBwdWJsaWMgcXVlc3Rpb25zVGVhbU1lbWJlcnM6IG51bWJlciA9IDA7XG4gICBwdWJsaWMgcXVlc3Rpb25zU3Rha2Vob2xkZXJzOiBudW1iZXIgPSAwO1xuICAgcHVibGljIHF1ZXN0aW9uc1N1cHBvcnRlcnM6IG51bWJlciA9IDA7XG4gICBwdWJsaWMgZHVyYXRpb25UZWFtTWVtYmVyczogbnVtYmVyID0gMDtcbiAgIHB1YmxpYyBkdXJhdGlvblN0YWtlaG9sZGVyczogbnVtYmVyID0gMDtcbiAgIHB1YmxpYyBkdXJhdGlvblN1cHBvcnRlcnM6IG51bWJlciA9IDA7XG4gICBwdWJsaWMgcXVlc3Rpb25zVG90YWw6IG51bWJlciA9IDA7XG4gICBASW5wdXQoKSB0b3BpY3M6IEZhY3RvclN0cnVjdHVyZUR0b1tdO1xuICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgIEBJbnB1dCgpIHRvcGljS2V5czogc3RyaW5nW10gPSBbXTtcbiAgIEBJbnB1dCgpIHByZXNldHM6IFF1ZXN0aW9ubmFpcmVUeXBlRHRvW10gPSBbXTtcbiAgIHB1YmxpYyBTZWdtZW50RW51bSA9IFNlZ21lbnRFbnVtO1xuXG4gICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZykge1xuICAgfVxuXG4gICBuZ09uSW5pdCgpIHtcbiAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgICAgIHRoaXMub25DaGFuZ2Uob3V0cHV0KTtcbiAgICAgICAgIHRoaXMudXBkYXRlTWV0YURhdGEob3V0cHV0KTtcbiAgICAgIH0pO1xuICAgfVxuXG4gICBwdWJsaWMgdG9nZ2xlVG9waWMoKSB7XG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMucHJlc2V0LnNldFZhbHVlKFwiY3VzdG9tXCIpO1xuICAgfVxuXG4gICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICB9XG5cbiAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgIH1cblxuICAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHsgfTtcbiAgIG9uVG91Y2g6IGFueSA9ICgpID0+IHsgfTtcblxuICAgd3JpdGVWYWx1ZShkdG86IFRvcGljU2VsZWN0b3JEdG8pOiB2b2lkIHtcbiAgICAgIGlmICghZHRvKSB7IHJldHVybjsgfVxuXG4gICAgICB2YXIgcXVlc3Rpb25uYWlyZSA9IHRoaXMucHJlc2V0cy5maW5kKHAgPT4gcC5wdWJsaWNLZXkgPT0gZHRvLnByZXNldEtleSk7XG5cbiAgICAgIGlmICghcXVlc3Rpb25uYWlyZSkge1xuICAgICAgICAgcXVlc3Rpb25uYWlyZSA9IHRoaXMucHJlc2V0c1swXTtcbiAgICAgICAgIGR0by50b3BpY0tleXMgPSBxdWVzdGlvbm5haXJlLnNjYWxlS2V5cztcbiAgICAgICAgIGR0by5wcmVzZXRLZXkgPSBxdWVzdGlvbm5haXJlLnB1YmxpY0tleTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZWxlY3RlZFRvcGljcyA9IGR0by50b3BpY0tleXMgPz8gW107XG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMucHJlc2V0LnNldFZhbHVlKGR0by5wcmVzZXRLZXkpO1xuICAgICAgaWYgKHF1ZXN0aW9ubmFpcmUucHVibGljS2V5ID09ICdjdXN0b20nKSB7IHRoaXMuZm9ybS5jb250cm9scy5zaG93VG9waWNzLnNldFZhbHVlKHRydWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTsgfVxuXG4gICAgICB2YXIgdG9waWNzID0gdGhpcy5mb3JtLmNvbnRyb2xzLnRvcGljcyBhcyBGb3JtR3JvdXA7XG4gICAgICBPYmplY3Qua2V5cyh0b3BpY3MuY29udHJvbHMpXG4gICAgICAgICAuZm9yRWFjaChwID0+IHRvcGljcy5nZXQocCkuc2V0VmFsdWUodGhpcy5zZWxlY3RlZFRvcGljcy5pbmNsdWRlcyhwKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKTtcblxuICAgICAgdGhpcy51cGRhdGVNZXRhRGF0YShkdG8pO1xuICAgfVxuXG4gICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICB0aGlzLmZvcm0uZW5hYmxlKCk7XG4gICAgICB9XG4gICB9XG4gICBwdWJsaWMgc2VsZWN0UHJlc2V0KCkge1xuICAgICAgdmFyIHF1ZXN0aW9ubmFpcmUgPSB0aGlzLnByZXNldHMuZmluZChwID0+IHAucHVibGljS2V5ID09IHRoaXMuZm9ybS5jb250cm9scy5wcmVzZXQudmFsdWUpO1xuICAgICAgaWYgKCFxdWVzdGlvbm5haXJlKSB7IHJldHVybjsgfVxuXG4gICAgICB2YXIgdG9waWNLZXlzID0gcXVlc3Rpb25uYWlyZS5zY2FsZUtleXM7XG4gICAgICBpZiAodG9waWNLZXlzLmxlbmd0aCA9PSAwKSB7IHRvcGljS2V5cyA9IHRoaXMucHJlc2V0c1swXS5zY2FsZUtleXM7IH1cblxuICAgICAgdGhpcy5zZWxlY3RlZFRvcGljcyA9IHRvcGljS2V5cyA/PyBbXTtcbiAgICAgIHZhciB0b3BpY3MgPSB0aGlzLmZvcm0uY29udHJvbHMudG9waWNzIGFzIEZvcm1Hcm91cDtcbiAgICAgIE9iamVjdC5rZXlzKHRvcGljcy5jb250cm9scylcbiAgICAgICAgIC5mb3JFYWNoKHAgPT4gdG9waWNzLmdldChwKS5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkVG9waWNzLmluY2x1ZGVzKHApKSk7XG5cbiAgICAgIGlmIChxdWVzdGlvbm5haXJlLnB1YmxpY0tleSA9PSAnY3VzdG9tJykgeyB0aGlzLmZvcm0uY29udHJvbHMuc2hvd1RvcGljcy5zZXRWYWx1ZSh0cnVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7IH1cbiAgICAgIHZhciBkdG8gPSBuZXcgVG9waWNTZWxlY3RvckR0byhxdWVzdGlvbm5haXJlLnB1YmxpY0tleSwgdG9waWNLZXlzKTtcbiAgICAgIHRoaXMudXBkYXRlTWV0YURhdGEoZHRvKTtcbiAgICAgIHRoaXMub25DaGFuZ2UoZHRvKTtcbiAgIH1cblxuICAgcHVibGljIGdldFZhbHVlKCk6IFRvcGljU2VsZWN0b3JEdG8ge1xuICAgICAgdmFyIHRvcGljcyA9IHRoaXMuZm9ybS5jb250cm9scy50b3BpY3MgYXMgRm9ybUdyb3VwO1xuICAgICAgdmFyIHNlbGVjdGVkID0gT2JqZWN0LmtleXModG9waWNzLmNvbnRyb2xzKVxuICAgICAgICAgLmZpbHRlcihwID0+IHRvcGljcy5nZXQocCkudmFsdWUgPT0gdHJ1ZSlcbiAgICAgICAgIC5tYXAocCA9PiBwKTtcblxuICAgICAgdmFyIHByZXNldEtleSA9IHRoaXMuZm9ybS5jb250cm9scy5wcmVzZXQudmFsdWU7XG4gICAgICByZXR1cm4gbmV3IFRvcGljU2VsZWN0b3JEdG8ocHJlc2V0S2V5LCBzZWxlY3RlZCk7XG4gICB9XG5cbiAgIHB1YmxpYyBvcGVuRmFjdG9ySW5mb3JtYXRpb24odG9waWNLZXk6IHN0cmluZywgJGV2ZW50OiBFdmVudCkge1xuICAgICAgdmFyIHRvcGljID0gdGhpcy50b3BpY3MuZmluZChwID0+IHAucHVibGljS2V5ID09IHRvcGljS2V5KTtcbiAgICAgIGlmICghdG9waWMpIHsgcmV0dXJuOyB9XG5cbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XG4gICAgICBkaWFsb2dDb25maWcucGFuZWxDbGFzcyA9IFsnZGlhbG9nJywgJ2ZhY3RvciddO1xuICAgICAgZGlhbG9nQ29uZmlnLmRhdGEgPSB0b3BpYztcbiAgICAgIGRpYWxvZ0NvbmZpZy5lbnRlckFuaW1hdGlvbkR1cmF0aW9uID0gMDtcbiAgICAgIGRpYWxvZ0NvbmZpZy5leGl0QW5pbWF0aW9uRHVyYXRpb24gPSAwO1xuICAgICAgdGhpcy5kaWFsb2cub3BlbihEaWFsb2dGYWN0b3JJbmZvcm1hdGlvbkNvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcbiAgIH1cblxuICAgcHVibGljIGhhc1NlZ21lbnRRdWVzdGlvbnMoZmFjdG9yOiBGYWN0b3JTdHJ1Y3R1cmVEdG8sIHNlZ21lbnQ6IFNlZ21lbnRFbnVtLCB1c2VPd25RdWVzdGlvbkNvdW50OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgICBpZiAodXNlT3duUXVlc3Rpb25Db3VudCkge1xuICAgICAgICAgcmV0dXJuIGZhY3Rvci5zZWdtZW50cy5maW5kKHAgPT4gcC5zZWdtZW50ID09IHNlZ21lbnQudG9TdHJpbmcoKSkub3duUXVlc3Rpb25Db3VudCA+IDAgPz8gZmFsc2U7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgIHJldHVybiBmYWN0b3Iuc2VnbWVudHMuZmluZChwID0+IHAuc2VnbWVudCA9PSBzZWdtZW50LnRvU3RyaW5nKCkpLnF1ZXN0aW9uQ291bnQgPiAwID8/IGZhbHNlO1xuICAgICAgfVxuICAgfVxuXG4gICBwdWJsaWMgZ2V0Q29yZUZhY3RvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy50b3BpY3MuZmlsdGVyKHAgPT4gcC5wYXJlbnRLZXkgPT0gbnVsbCk7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXRTdWJGYWN0b3JzKHBhcmVudEtleTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy50b3BpY3MuZmlsdGVyKHAgPT4gcC5wYXJlbnRLZXkgPT0gcGFyZW50S2V5KS5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgIH1cblxuICAgcHVibGljIHNlbGVjdEFsbCh0b3BpYzogRmFjdG9yU3RydWN0dXJlRHRvLCAkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHZhciB0b3BpY3MgPSB0aGlzLmZvcm0uY29udHJvbHMudG9waWNzIGFzIEZvcm1Hcm91cDtcbiAgICAgIHRoaXMudG9waWNzXG4gICAgICAgICAuZmlsdGVyKHAgPT4gcC5wYXJlbnRLZXkgPT0gdG9waWMucHVibGljS2V5IHx8IChwLnB1YmxpY0tleSA9PSB0b3BpYy5wdWJsaWNLZXkgJiYgcC5vd25RdWVzdGlvbkNvdW50ID4gMCkpXG4gICAgICAgICAuZm9yRWFjaChwID0+IHRvcGljcy5nZXQocC5wdWJsaWNLZXkpLnNldFZhbHVlKHRydWUpKVxuICAgfVxuXG4gICBwdWJsaWMgc2VsZWN0Tm9uZSh0b3BpYzogRmFjdG9yU3RydWN0dXJlRHRvLCAkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgdmFyIHRvcGljcyA9IHRoaXMuZm9ybS5jb250cm9scy50b3BpY3MgYXMgRm9ybUdyb3VwO1xuICAgICAgdGhpcy50b3BpY3NcbiAgICAgICAgIC5maWx0ZXIocCA9PiBwLnBhcmVudEtleSA9PSB0b3BpYy5wdWJsaWNLZXkgfHwgKHAucHVibGljS2V5ID09IHRvcGljLnB1YmxpY0tleSAmJiBwLm93blF1ZXN0aW9uQ291bnQgPiAwKSlcbiAgICAgICAgIC5mb3JFYWNoKHAgPT4gdG9waWNzLmdldChwLnB1YmxpY0tleSkuc2V0VmFsdWUoZmFsc2UpKVxuICAgfVxuXG4gICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgIHByZXNldDogW251bGxdLFxuICAgICAgICAgdG9waWNLZXlzOiBbW11dLFxuICAgICAgICAgdG9waWNzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFtdKSxcbiAgICAgICAgIHNob3dUb3BpY3M6IFtmYWxzZV1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnRvcGljcy5maWx0ZXIocCA9PiBwLnBhcmVudEtleSAhPSBudWxsIHx8IChwLnBhcmVudEtleSA9PSBudWxsICYmIHAub3duUXVlc3Rpb25Db3VudCA+IDApKVxuICAgICAgICAgLmZvckVhY2gocCA9PiAodGhpcy5mb3JtLmNvbnRyb2xzLnRvcGljcyBhcyBGb3JtR3JvdXApLmFkZENvbnRyb2wocC5wdWJsaWNLZXksIG5ldyBGb3JtQ29udHJvbChmYWxzZSksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KSlcbiAgIH1cblxuICAgcHJpdmF0ZSB1cGRhdGVNZXRhRGF0YShvdXRwdXQ6IFRvcGljU2VsZWN0b3JEdG8pIHtcbiAgICAgIHRoaXMud2FybmluZ3MgPSBbXTtcblxuICAgICAgLy8gb25seSB3b3JrIHdpdGggbG93ZXItbGV2ZWwgZmFjdG9ycywgYXMgaGlnaGVyLWxldmVsIGNvbnRhaW4gYWdncmVnYXRlZCBoaWdoZXItbGV2ZWwgcXVlc3Rpb24gY291bnRzXG4gICAgICB2YXIgc2NhbGVzVG9JbmNsdWRlID0gdGhpcy50b3BpY3MuZmlsdGVyKHAgPT4gcC5wYXJlbnRLZXkgIT0gbnVsbCAmJiBvdXRwdXQudG9waWNLZXlzLmluY2x1ZGVzKHAucHVibGljS2V5KSk7XG4gICAgICB2YXIgdG90YWxRdWVzdGlvbnMgPSB0aGlzLnRvcGljcy5maWx0ZXIocCA9PiBwLnBhcmVudEtleSAhPSBudWxsKS5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICs9IGN1cnJlbnQucXVlc3Rpb25Db3VudCwgMCk7XG5cbiAgICAgIHRoaXMucXVlc3Rpb25zVG90YWwgPSBzY2FsZXNUb0luY2x1ZGUucmVkdWNlKChzdW0sIGN1cnJlbnQpID0+IHN1bSArPSBjdXJyZW50LnF1ZXN0aW9uQ291bnQsIDApO1xuICAgICAgdGhpcy5xdWVzdGlvbnNUZWFtTWVtYmVycyA9IHNjYWxlc1RvSW5jbHVkZS5mbGF0TWFwKHAgPT4gcC5zZWdtZW50cykuZmlsdGVyKHAgPT4gcC5zZWdtZW50ID09IFNlZ21lbnRFbnVtLlRlYW1NZW1iZXIpLnJlZHVjZSgoc3VtLCBjdXJyZW50KSA9PiBzdW0gKz0gY3VycmVudC5xdWVzdGlvbkNvdW50LCAwKTtcbiAgICAgIHRoaXMucXVlc3Rpb25zU3Rha2Vob2xkZXJzID0gc2NhbGVzVG9JbmNsdWRlLmZsYXRNYXAocCA9PiBwLnNlZ21lbnRzKS5maWx0ZXIocCA9PiBwLnNlZ21lbnQgPT0gU2VnbWVudEVudW0uU3Rha2Vob2xkZXIpLnJlZHVjZSgoc3VtLCBjdXJyZW50KSA9PiBzdW0gKz0gY3VycmVudC5xdWVzdGlvbkNvdW50LCAwKTtcbiAgICAgIHRoaXMucXVlc3Rpb25zU3VwcG9ydGVycyA9IHNjYWxlc1RvSW5jbHVkZS5mbGF0TWFwKHAgPT4gcC5zZWdtZW50cykuZmlsdGVyKHAgPT4gcC5zZWdtZW50ID09IFNlZ21lbnRFbnVtLk1hbmFnZW1lbnQpLnJlZHVjZSgoc3VtLCBjdXJyZW50KSA9PiBzdW0gKz0gY3VycmVudC5xdWVzdGlvbkNvdW50LCAwKTtcblxuICAgICAgdGhpcy5kdXJhdGlvblRlYW1NZW1iZXJzID0gc2NhbGVzVG9JbmNsdWRlLmZsYXRNYXAocCA9PiBwLnNlZ21lbnRzKS5maWx0ZXIocCA9PiBwLnNlZ21lbnQgPT0gU2VnbWVudEVudW0uVGVhbU1lbWJlcikucmVkdWNlKChzdW0sIGN1cnJlbnQpID0+IHN1bSArPSBjdXJyZW50LmR1cmF0aW9uSW5TZWNvbmRzLCAwKSAvIDYwO1xuICAgICAgdGhpcy5kdXJhdGlvblN0YWtlaG9sZGVycyA9IHNjYWxlc1RvSW5jbHVkZS5mbGF0TWFwKHAgPT4gcC5zZWdtZW50cykuZmlsdGVyKHAgPT4gcC5zZWdtZW50ID09IFNlZ21lbnRFbnVtLlN0YWtlaG9sZGVyKS5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICs9IGN1cnJlbnQuZHVyYXRpb25JblNlY29uZHMsIDApIC8gNjA7XG4gICAgICB0aGlzLmR1cmF0aW9uU3VwcG9ydGVycyA9IHNjYWxlc1RvSW5jbHVkZS5mbGF0TWFwKHAgPT4gcC5zZWdtZW50cykuZmlsdGVyKHAgPT4gcC5zZWdtZW50ID09IFNlZ21lbnRFbnVtLk1hbmFnZW1lbnQpLnJlZHVjZSgoc3VtLCBjdXJyZW50KSA9PiBzdW0gKz0gY3VycmVudC5kdXJhdGlvbkluU2Vjb25kcywgMCkgLyA2MDtcblxuICAgICAgaWYgKHRoaXMuZHVyYXRpb25UZWFtTWVtYmVycyA8IDEpIHsgdGhpcy5kdXJhdGlvblRlYW1NZW1iZXJzID0gMTsgfVxuICAgICAgaWYgKHRoaXMuZHVyYXRpb25TdGFrZWhvbGRlcnMgPCAxKSB7IHRoaXMuZHVyYXRpb25TdGFrZWhvbGRlcnMgPSAxOyB9XG4gICAgICBpZiAodGhpcy5kdXJhdGlvblN1cHBvcnRlcnMgPCAxKSB7IHRoaXMuZHVyYXRpb25TdXBwb3J0ZXJzID0gMTsgfVxuXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbnNTdGFrZWhvbGRlcnMgPT0gMCkge1xuICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVGhlIHNlbGVjdGlvbiBkb2VzIG5vdCBpbmNsdWRlIHRvcGljcyBmb3Igc3Rha2Vob2xkZXJzLlwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uc1N1cHBvcnRlcnMgPT0gMCkge1xuICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVGhlIHNlbGVjdGlvbiBkb2VzIG5vdCBpbmNsdWRlIHRvcGljcyBmb3Igc3VwcG9ydGVycyAvIG1hbmFnZW1lbnQuXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25zVGVhbU1lbWJlcnMgPT0gMCkge1xuICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVGhlIHNlbGVjdGlvbiBkb2VzIG5vdCBpbmNsdWRlIHRvcGljcyBmb3IgdGVhbSBtZW1iZXJzLlwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVBY2N1cmFjeSA8IDAuMjUpIHtcbiAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRoZSBzZWxlY3Rpb24gbWVhc3VyZXMgZmV3IHRvcGljcywgc28gaXRzIG92ZXJhbGwgYWNjdXJhY3kgaXMgbG93LlwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlQWNjdXJhY3kgPSB0aGlzLnF1ZXN0aW9uc1RvdGFsIC8gdG90YWxRdWVzdGlvbnM7XG4gICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUb3BpY1NlbGVjdG9yRHRvIHtcbiAgIGNvbnN0cnVjdG9yKHByZXNldEtleTogc3RyaW5nLCB0b3BpY0tleXM6IHN0cmluZ1tdKSB7XG4gICAgICB0aGlzLnByZXNldEtleSA9IHByZXNldEtleTtcbiAgICAgIHRoaXMudG9waWNLZXlzID0gdG9waWNLZXlzID8/IFtdO1xuICAgfVxuXG4gICBwcmVzZXRLZXk6IHN0cmluZztcbiAgIHRvcGljS2V5czogc3RyaW5nW107XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgIDxkaXYgY2xhc3M9XCJ0b3BpY3NlbGVjdG9yLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRvcGljc2VsZWN0b3ItbWV0YWRhdGFcIj5cbiAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbm5haXJlLXByZXNldFwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicXVlc3Rpb25uYWlyZS1wcmVzZXQtc2VsZWN0XCIgYXBwZWFyYW5jZT1cImZpbGxcIj5cbiAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+U2VsZWN0IHByZWRlZmluZWQgcXVlc3Rpb25uYWlyZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgaWQ9XCJxdWVzdGlvbi1wcmVzZXRcIiBmb3JtQ29udHJvbE5hbWU9XCJwcmVzZXRcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdFByZXNldCgpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidHlwZS5wdWJsaWNLZXlcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBwcmVzZXRzXCIgY2xhc3M9XCJzZWxlY3Qtb3B0aW9uXCI+e3t0eXBlLm5hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICA8L2Rpdj5cbiAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbm5haXJlLWFjY3VyYWN5XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb25uYWlyZS1icmVha2Rvd24tbGFiZWxcIj5BY2N1cmFjeTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1ZXN0aW9ubmFpcmUtYnJlYWtkb3duLWJhci1ob2xkZXJcIj5cbiAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbm5haXJlLWFjY3VyYWN5LWJhclwiIFtuZ0NsYXNzXT1cInsnbG93JzogcXVlc3Rpb25uYWlyZUFjY3VyYWN5IDwgMC4yNSwgJ21vZGVyYXRlJyA6IHF1ZXN0aW9ubmFpcmVBY2N1cmFjeSA8IDAuNSAmJiBxdWVzdGlvbm5haXJlQWNjdXJhY3kgPj0gMC4yNX1cIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzogKHF1ZXN0aW9ubmFpcmVBY2N1cmFjeSAqIDEwMCkgKyAnJScgfVwiPnt7cXVlc3Rpb25uYWlyZUFjY3VyYWN5ICogMTAwIHwgbnVtYmVyOicxLjAtMCd9fSU8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgPC9kaXY+XG4gICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb25uYWlyZS1zZWdtZW50c1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1ZXN0aW9ubmFpcmUtc2VnbWVudHMtbGFiZWxcIj5UaW1lIGludmVzdG1lbnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbm5haXJlLWJyZWFrZG93bnNcIj5cbiAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbm5haXJlLWJyZWFrZG93blwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1ZXN0aW9ubmFpcmUtYnJlYWtkb3duLWxhYmVsXCI+VGVhbSBtZW1iZXJzPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NiYXIgcHJvZ3Jlc3NiYXItcG9zaXRpdmUgcHJvZ3Jlc3NiYXItdGVhbW1lbWJlclwiPlxuICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzYmFyLWJhclwiICpuZ0lmPVwicXVlc3Rpb25zVGVhbU1lbWJlcnMgPiAwXCIgW3N0eWxlLndpZHRoXT1cIigocXVlc3Rpb25zVGVhbU1lbWJlcnMgLyBxdWVzdGlvbnNUb3RhbCkgKiAxMDApICsgJyUnXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NiYXItc2NvcmVcIj57e2R1cmF0aW9uVGVhbU1lbWJlcnMgfCBudW1iZXI6JzEuMC0wJ319IG1pbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbm5haXJlLWJyZWFrZG93blwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1ZXN0aW9ubmFpcmUtYnJlYWtkb3duLWxhYmVsXCI+U3Rha2Vob2xkZXJzPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NiYXIgcHJvZ3Jlc3NiYXItcG9zaXRpdmUgcHJvZ3Jlc3NiYXItc3Rha2Vob2xkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc2Jhci1iYXJcIiAqbmdJZj1cInF1ZXN0aW9uc1N0YWtlaG9sZGVycyA+IDBcIiBbc3R5bGUud2lkdGhdPVwiKChxdWVzdGlvbnNTdGFrZWhvbGRlcnMgLyBxdWVzdGlvbnNUb3RhbCkgKiAxMDApICsgJyUnXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NiYXItc2NvcmVcIj57e2R1cmF0aW9uU3Rha2Vob2xkZXJzIHwgbnVtYmVyOicxLjAtMCd9fSBtaW48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb25uYWlyZS1icmVha2Rvd25cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbm5haXJlLWJyZWFrZG93bi1sYWJlbFwiPlN1cHBvcnRlcnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc2JhciBwcm9ncmVzc2Jhci1wb3NpdGl2ZSBwcm9ncmVzc2Jhci1zdXBwb3J0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc2Jhci1iYXJcIiAqbmdJZj1cInF1ZXN0aW9uc1N1cHBvcnRlcnMgPiAwXCIgW3N0eWxlLndpZHRoXT1cIigocXVlc3Rpb25zU3VwcG9ydGVycyAvIHF1ZXN0aW9uc1RvdGFsKSAqIDEwMCkgKyAnJSdcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc2Jhci1zY29yZVwiPnt7ZHVyYXRpb25TdXBwb3J0ZXJzIHwgbnVtYmVyOicxLjAtMCd9fSBtaW48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgIDwvZGl2PlxuICAgICAgICAgPGRpdiBjbGFzcz1cInRvcGljc2VsZWN0b3Itd2FybmluZ3NcIiAqbmdJZj1cIndhcm5pbmdzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3BpY3NlbGVjdG9yLXdhcm5pbmdzLXdhcm5pbmdcIiAqbmdGb3I9XCJsZXQgd2FybmluZyBvZiB3YXJuaW5nc1wiPlxuICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIHBoLWluZm8tZmlsbFwiPjwvc3Bhbj57e3dhcm5pbmd9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICA8L2Rpdj5cbiAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQobnVsbClcIiAqbmdJZj1cIiFmb3JtLmNvbnRyb2xzLnNob3dUb3BpY3MudmFsdWVcIiBpZD1cImFjdGlvbi1hZHZhbmNlZHZpZXd0b2dnbGVcIiBjbGFzcz1cInRvcGljLXNlbGVjdG9yLWFkdmFuY2Vkdmlld3RvZ2dsZVwiIChjbGljayk9XCJmb3JtLmNvbnRyb2xzLnNob3dUb3BpY3Muc2V0VmFsdWUodHJ1ZSlcIj48c3BhbiBjbGFzcz1cImljb24gcGgtY2FyZXQtZG93bi1ib2xkXCI+PC9zcGFuPkN1c3RvbWl6ZSB0b3BpY3M8L2E+XG4gICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKG51bGwpXCIgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLnNob3dUb3BpY3MudmFsdWVcIiBpZD1cImFjdGlvbi1hZHZhbmNlZHZpZXd0b2dnbGVcIiBjbGFzcz1cInRvcGljLXNlbGVjdG9yLWFkdmFuY2Vkdmlld3RvZ2dsZVwiIChjbGljayk9XCJmb3JtLmNvbnRyb2xzLnNob3dUb3BpY3Muc2V0VmFsdWUoZmFsc2UpXCI+PHNwYW4gY2xhc3M9XCJpY29uIHBoLWNhcmV0LXVwLWJvbGRcIj48L3NwYW4+SGlkZSB0b3BpY3M8L2E+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0b3BpY3NlbGVjdG9yLXRvcGljc1wiICpuZ0lmPVwiZm9ybS5jb250cm9scy5zaG93VG9waWNzLnZhbHVlXCI+IFxuICAgICAgICAgPGRpdiBjbGFzcz1cInRvcGljLXBhcmVudFwiICpuZ0Zvcj1cImxldCB0b3BpYyBvZiBnZXRDb3JlRmFjdG9ycygpXCIgZm9ybUFycmF5TmFtZT1cInRvcGljc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgIDxoND57e3RvcGljLm5hbWV9fTwvaDQ+XG4gICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscGVyc1wiPig8YSBocmVmPVwiI1wiIChjbGljayk9XCJzZWxlY3RBbGwodG9waWMsICRldmVudClcIj5hbGw8L2E+IHwgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwic2VsZWN0Tm9uZSh0b3BpYywgJGV2ZW50KVwiPm5vbmU8L2E+KTwvZGl2PlxuICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvcGljLWNoaWxkLW1vcmVpbmZvcm1hdGlvblwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIHBoLWluZm8tYm9sZFwiIChjbGljayk9XCJvcGVuRmFjdG9ySW5mb3JtYXRpb24odG9waWMucHVibGljS2V5LCAkZXZlbnQpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRvcGljLm93blF1ZXN0aW9uQ291bnQgPiAwXCIgY2xhc3M9XCJ0b3BpYy1jaGlsZFwiPlxuICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cInRvcGljLWNoaWxkLWNoZWNrXCIgW2Zvcm1Db250cm9sTmFtZV09XCJ0b3BpYy5wdWJsaWNLZXlcIiAoY2xpY2spPVwidG9nZ2xlVG9waWMoKVwiIFtpZF09XCIndG9waWMtJyArIHRvcGljLm5hbWUgfCBzbHVnaWZ5XCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9waWMtY2hpbGQtZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgIHt7dG9waWMubmFtZX19ICh7e3RvcGljLm93blF1ZXN0aW9uQ291bnR9fSBxdWVzdGlvbnMpXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFnc1wiPlxuICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZ3MtdGFnIHJlY29tbWVuZGVkXCIgKm5nSWY9XCJ0b3BpYy5yZWNvbW1lbmRlZFwiPlJlY29tbWVuZGVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFncy10YWcgdGVhbW1lbWJlclwiICpuZ0lmPVwiaGFzU2VnbWVudFF1ZXN0aW9ucyh0b3BpYywgU2VnbWVudEVudW0uVGVhbU1lbWJlciwgdHJ1ZSlcIj5Gb3IgdGVhbSBtZW1iZXJzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFncy10YWcgc3Rha2Vob2xkZXJcIiAqbmdJZj1cImhhc1NlZ21lbnRRdWVzdGlvbnModG9waWMsIFNlZ21lbnRFbnVtLlN0YWtlaG9sZGVyLCB0cnVlKVwiPkZvciBzdGFrZWhvbGRlcnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWdzLXRhZyBzdXBwb3J0ZXJcIiAqbmdJZj1cImhhc1NlZ21lbnRRdWVzdGlvbnModG9waWMsIFNlZ21lbnRFbnVtLk1hbmFnZW1lbnQsIHRydWUpXCI+Rm9yIHN1cHBvcnRlcnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9waWMtY2hpbGQtbW9yZWluZm9ybWF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gcGgtaW5mby1ib2xkXCIgKGNsaWNrKT1cIm9wZW5GYWN0b3JJbmZvcm1hdGlvbih0b3BpYy5wdWJsaWNLZXksICRldmVudClcIj48L3NwYW4+XG4gICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHN1YlRvcGljIG9mIGdldFN1YkZhY3RvcnModG9waWMucHVibGljS2V5KVwiIGNsYXNzPVwidG9waWMtY2hpbGRcIj5cbiAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJ0b3BpYy1jaGlsZC1jaGVja1wiIFtmb3JtQ29udHJvbE5hbWVdPVwic3ViVG9waWMucHVibGljS2V5XCIgKGNsaWNrKT1cInRvZ2dsZVRvcGljKClcIiBbaWRdPVwiJ3RvcGljLScgKyBzdWJUb3BpYy5uYW1lIHwgc2x1Z2lmeVwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvcGljLWNoaWxkLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICB7e3N1YlRvcGljLm5hbWV9fSAoe3tzdWJUb3BpYy5xdWVzdGlvbkNvdW50fX0gcXVlc3Rpb25zKVxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZ3NcIj5cbiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWdzLXRhZyByZWNvbW1lbmRlZFwiICpuZ0lmPVwic3ViVG9waWMucmVjb21tZW5kZWRcIj5SZWNvbW1lbmRlZDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZ3MtdGFnIHRlYW1tZW1iZXJcIiAqbmdJZj1cImhhc1NlZ21lbnRRdWVzdGlvbnMoc3ViVG9waWMsIFNlZ21lbnRFbnVtLlRlYW1NZW1iZXIsIGZhbHNlKVwiPkZvciB0ZWFtIG1lbWJlcnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWdzLXRhZyBzdGFrZWhvbGRlclwiICpuZ0lmPVwiaGFzU2VnbWVudFF1ZXN0aW9ucyhzdWJUb3BpYywgU2VnbWVudEVudW0uU3Rha2Vob2xkZXIsIGZhbHNlKVwiPkZvciBzdGFrZWhvbGRlcnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWdzLXRhZyBzdXBwb3J0ZXJcIiAqbmdJZj1cImhhc1NlZ21lbnRRdWVzdGlvbnMoc3ViVG9waWMsIFNlZ21lbnRFbnVtLk1hbmFnZW1lbnQsIGZhbHNlKVwiPkZvciBzdXBwb3J0ZXJzPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvcGljLWNoaWxkLW1vcmVpbmZvcm1hdGlvblwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIHBoLWluZm8tYm9sZFwiIChjbGljayk9XCJvcGVuRmFjdG9ySW5mb3JtYXRpb24oc3ViVG9waWMucHVibGljS2V5LCAkZXZlbnQpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
@@ -1,55 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { NgModule } from '@angular/core';
3
- import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
- import { MatFormFieldModule } from '@angular/material/form-field';
5
- import { MatSelectModule } from '@angular/material/select';
6
- import { FactorInformationDialogModule } from '../../dialogs/dialog-factorinformation/dialog-factorinformation.module';
7
- import { SlugifyPipeModule } from '../../pipes/slugify/ngx-slugify.module';
8
- import { TopicSelectorComponent } from './topic-selector.component';
9
- import { MatInputModule } from '@angular/material/input';
10
- import { MatCheckboxModule } from '@angular/material/checkbox';
11
- import * as i0 from "@angular/core";
12
- export class TopicSelectorModule {
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TopicSelectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
14
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: TopicSelectorModule, declarations: [TopicSelectorComponent], imports: [CommonModule,
15
- FormsModule,
16
- MatFormFieldModule,
17
- ReactiveFormsModule,
18
- MatInputModule,
19
- MatSelectModule,
20
- MatCheckboxModule,
21
- SlugifyPipeModule,
22
- FactorInformationDialogModule], exports: [TopicSelectorComponent] }); }
23
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TopicSelectorModule, imports: [CommonModule,
24
- FormsModule,
25
- MatFormFieldModule,
26
- ReactiveFormsModule,
27
- MatInputModule,
28
- MatSelectModule,
29
- MatCheckboxModule,
30
- SlugifyPipeModule,
31
- FactorInformationDialogModule] }); }
32
- }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TopicSelectorModule, decorators: [{
34
- type: NgModule,
35
- args: [{
36
- imports: [
37
- CommonModule,
38
- FormsModule,
39
- MatFormFieldModule,
40
- ReactiveFormsModule,
41
- MatInputModule,
42
- MatSelectModule,
43
- MatCheckboxModule,
44
- SlugifyPipeModule,
45
- FactorInformationDialogModule
46
- ],
47
- declarations: [
48
- TopicSelectorComponent
49
- ],
50
- exports: [
51
- TopicSelectorComponent
52
- ]
53
- }]
54
- }] });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWMtc2VsZWN0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjcnVtdGVhbXN1cnZleS10b29scy9zcmMvbGliL2NvbXBvbmVudHMvdG9waWNzZWxlY3Rvci90b3BpYy1zZWxlY3Rvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN2SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBbUIvRCxNQUFNLE9BQU8sbUJBQW1COytHQUFuQixtQkFBbUI7Z0hBQW5CLG1CQUFtQixpQkFKMUIsc0JBQXNCLGFBWHRCLFlBQVk7WUFDWixXQUFXO1lBQ1gsa0JBQWtCO1lBQ2xCLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsZUFBZTtZQUNmLGlCQUFpQjtZQUNqQixpQkFBaUI7WUFDakIsNkJBQTZCLGFBSzdCLHNCQUFzQjtnSEFFZixtQkFBbUIsWUFmMUIsWUFBWTtZQUNaLFdBQVc7WUFDWCxrQkFBa0I7WUFDbEIsbUJBQW1CO1lBQ25CLGNBQWM7WUFDZCxlQUFlO1lBQ2YsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQUNqQiw2QkFBNkI7OzRGQU90QixtQkFBbUI7a0JBakIvQixRQUFRO21CQUFDO29CQUNQLE9BQU8sRUFBRTt3QkFDTixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGlCQUFpQjt3QkFDakIsNkJBQTZCO3FCQUMvQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1gsc0JBQXNCO3FCQUFDO29CQUMxQixPQUFPLEVBQUU7d0JBQ04sc0JBQXNCO3FCQUFDO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBGYWN0b3JJbmZvcm1hdGlvbkRpYWxvZ01vZHVsZSB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvZGlhbG9nLWZhY3RvcmluZm9ybWF0aW9uL2RpYWxvZy1mYWN0b3JpbmZvcm1hdGlvbi5tb2R1bGUnO1xuaW1wb3J0IHsgU2x1Z2lmeVBpcGVNb2R1bGUgfSBmcm9tICcuLi8uLi9waXBlcy9zbHVnaWZ5L25neC1zbHVnaWZ5Lm1vZHVsZSc7XG5pbXBvcnQgeyBUb3BpY1NlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi90b3BpYy1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcblxuQE5nTW9kdWxlKHtcbiAgIGltcG9ydHM6IFtcbiAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICBTbHVnaWZ5UGlwZU1vZHVsZSxcbiAgICAgIEZhY3RvckluZm9ybWF0aW9uRGlhbG9nTW9kdWxlXG4gICBdLFxuICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICBUb3BpY1NlbGVjdG9yQ29tcG9uZW50XSxcbiAgIGV4cG9ydHM6IFtcbiAgICAgIFRvcGljU2VsZWN0b3JDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIFRvcGljU2VsZWN0b3JNb2R1bGUgeyB9XG4iXX0=
@@ -1,29 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { ApiConfig } from '../../apiUrlToken';
3
- import { ResetPasswordRequestDto } from './resetPasswordRequestDto.model';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common/http";
6
- import * as i2 from "../../apiUrlToken";
7
- export class AccountService {
8
- constructor(http, config) {
9
- this.http = http;
10
- this.config = config;
11
- }
12
- sendResetPassword(email) {
13
- var request = new ResetPasswordRequestDto();
14
- request.email = email;
15
- return this.http.post(this.config.get().apiUrl + 'account/resetpassword/', request);
16
- }
17
- getManageUrl() {
18
- return this.http.post(this.config.get().apiUrl + 'subscriptions/managesession/', null);
19
- }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AccountService, deps: [{ token: i1.HttpClient }, { token: ApiConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
21
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AccountService }); }
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AccountService, decorators: [{
24
- type: Injectable
25
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ApiConfig, decorators: [{
26
- type: Inject,
27
- args: [ApiConfig]
28
- }] }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjcnVtdGVhbXN1cnZleS10b29scy9zcmMvbGliL2RpYWxvZ3MvZGlhbG9nLWFjY291bnQvYWNjb3VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQUcxRSxNQUFNLE9BQU8sY0FBYztJQUN4QixZQUFvQixJQUFnQixFQUE2QixNQUFpQjtRQUE5RCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQTZCLFdBQU0sR0FBTixNQUFNLENBQVc7SUFBSSxDQUFDO0lBRXZGLGlCQUFpQixDQUFDLEtBQWE7UUFDNUIsSUFBSSxPQUFPLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELFlBQVk7UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFGLENBQUM7K0dBWFMsY0FBYyw0Q0FDc0IsU0FBUzttSEFEN0MsY0FBYzs7NEZBQWQsY0FBYztrQkFEMUIsVUFBVTs7MEJBRStCLE1BQU07MkJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaUNvbmZpZyB9IGZyb20gJy4uLy4uL2FwaVVybFRva2VuJztcbmltcG9ydCB7IFJlc2V0UGFzc3dvcmRSZXF1ZXN0RHRvIH0gZnJvbSAnLi9yZXNldFBhc3N3b3JkUmVxdWVzdER0by5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBY2NvdW50U2VydmljZSB7XG4gICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIEBJbmplY3QoQXBpQ29uZmlnKSBwcml2YXRlIGNvbmZpZzogQXBpQ29uZmlnKSB7IH1cblxuICAgc2VuZFJlc2V0UGFzc3dvcmQoZW1haWw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXNldFBhc3N3b3JkUmVxdWVzdER0bygpO1xuICAgICAgcmVxdWVzdC5lbWFpbCA9IGVtYWlsO1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuY29uZmlnLmdldCgpLmFwaVVybCArICdhY2NvdW50L3Jlc2V0cGFzc3dvcmQvJywgcmVxdWVzdCk7XG4gICB9XG5cbiAgIGdldE1hbmFnZVVybCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuY29uZmlnLmdldCgpLmFwaVVybCArICdzdWJzY3JpcHRpb25zL21hbmFnZXNlc3Npb24vJywgbnVsbCk7XG4gICB9XG59XG4iXX0=
@@ -1,86 +0,0 @@
1
- import { Component, Directive, HostListener, Inject } from '@angular/core';
2
- import { MatDialogConfig } from '@angular/material/dialog';
3
- import { ComponentWithViewStateBase } from '../../componentWithViewStateBase';
4
- import { VIEWSTATE_PROVIDER } from '../../viewModel/viewModelState.service';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@auth0/auth0-angular";
7
- import * as i2 from "@angular/material/snack-bar";
8
- import * as i3 from "./account.service";
9
- import * as i4 from "@angular/material/dialog";
10
- import * as i5 from "@angular/common";
11
- import * as i6 from "../../viewModel/viewModelState.service";
12
- export class DialogAccountComponent extends ComponentWithViewStateBase {
13
- constructor(authService, snackBar, accountService, dialogRef, state) {
14
- super(state, snackBar);
15
- this.authService = authService;
16
- this.snackBar = snackBar;
17
- this.accountService = accountService;
18
- this.dialogRef = dialogRef;
19
- this.state = state;
20
- }
21
- ngOnInit() {
22
- this.authService.user$.subscribe((profile) => {
23
- this.email = profile.email;
24
- });
25
- super.ngOnInit();
26
- }
27
- async redirectToPortal() {
28
- await this.authService.loginWithPopup({ authorizationParams: { max_age: 1 } }).subscribe(success => {
29
- this.accountService.getManageUrl().subscribe(success => {
30
- window.location.href = success.url;
31
- }, error => {
32
- });
33
- });
34
- }
35
- sendPasswordReset() {
36
- this.loading = true;
37
- this.accountService.sendResetPassword(this.email).subscribe(success => {
38
- this.loading = false;
39
- this.snackBar.open('Got it! We sent an e-mail to ' + this.email + ' to change your password', null, { duration: 3000 });
40
- setTimeout(() => {
41
- }, 2000);
42
- });
43
- }
44
- signout() {
45
- this.authService.logout();
46
- }
47
- onDataUpdate(data) {
48
- this.isAdmin = data.userInfo.isAdmin;
49
- this.subscriptionKey = data.userInfo.client.publicKey;
50
- this.userName = data.userInfo.profile.name;
51
- }
52
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DialogAccountComponent, deps: [{ token: i1.AuthService }, { token: i2.MatSnackBar }, { token: i3.AccountService }, { token: i4.MatDialogRef }, { token: VIEWSTATE_PROVIDER }], target: i0.ɵɵFactoryTarget.Component }); }
53
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: DialogAccountComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"dialog-header\">\n <h1 mat-dialog-title>{{userName}}<span class=\"email\">{{email}}</span></h1>\n <div class=\"close\" mat-dialog-close><i class=\"responsive icon ph-x-bold\"></i></div>\n</div>\n<mat-dialog-content>\n <hr />\n <ul>\n <li><a href=\"javascript:void(null);\" (click)=\"sendPasswordReset()\" mat-dialog-close id=\"account-passwordreset\">Send email to change password</a></li>\n <li><a href=\"javascript:void(null);\" (click)=\"redirectToPortal()\" mat-dialog-close *ngIf=\"isAdmin\">Subscription & invoices (admins only) <span class=\"icon ph-arrow-square-out\"></span></a></li>\n <li><a href=\"javascript:void(null);\" (click)=\"signout();\">Sign out</a></li>\n </ul>\n</mat-dialog-content>\n", styles: [".smallTextUppercase{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;text-transform:uppercase;line-height:100%}.bigletteredbutton{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;text-decoration:none;background:#ffffff1a;margin-bottom:10px;display:flex;align-content:center;border-radius:20px;padding:15px;font-size:24px;border:2px solid #1F3F8F;border-bottom:6px solid #1F3F8F;color:#fff;align-items:center;cursor:pointer}.bigletteredbutton .free{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;background:#fff73f;color:#2f2f2f;padding:3px 5px;margin-left:20px;border-radius:10px}.bigletteredbutton .plan{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;background:#fff;color:#2f2f2f;padding:3px 5px;margin-left:20px;border-radius:10px}.bigletteredbutton:hover,.bigletteredbutton.selected{border:2px solid #fff73f;border-bottom:6px solid #fff73f}.bigletteredbutton .button-letter{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;background:#fff73f;color:#1f3f8f;margin-right:20px}.bigletteredbutton .button-letter .ph{color:#1f3f8f}.bigletteredbutton .button-letter:hover{background:#1f3f8f;color:#fff73f}.bigletteredbutton .button-letter:hover .ph{color:#fff73f}.roundicon-yellow{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;background:#fff73f;color:#1f3f8f}.roundicon-yellow .ph{color:#1f3f8f}.roundicon-yellow:hover{background:#1f3f8f;color:#fff73f}.roundicon-yellow:hover .ph{color:#fff73f}.roundicon{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center}.roundicon-large{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;border-radius:60px;height:120px;width:120px}.dialog-header .email{display:block;font-family:StevieSansThin,sans-serif;font-size:19px;font-weight:300;font-weight:400}hr{margin-top:0;background:#d7d7d7;border:2px solid #d7d7d7}ul{padding-left:0;list-style:none;font-size:19px}ul li{margin-bottom:20px}ul li a{text-decoration:none}\n"], dependencies: [{ kind: "directive", type: i4.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
54
- }
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DialogAccountComponent, decorators: [{
56
- type: Component,
57
- args: [{ template: "<div class=\"dialog-header\">\n <h1 mat-dialog-title>{{userName}}<span class=\"email\">{{email}}</span></h1>\n <div class=\"close\" mat-dialog-close><i class=\"responsive icon ph-x-bold\"></i></div>\n</div>\n<mat-dialog-content>\n <hr />\n <ul>\n <li><a href=\"javascript:void(null);\" (click)=\"sendPasswordReset()\" mat-dialog-close id=\"account-passwordreset\">Send email to change password</a></li>\n <li><a href=\"javascript:void(null);\" (click)=\"redirectToPortal()\" mat-dialog-close *ngIf=\"isAdmin\">Subscription & invoices (admins only) <span class=\"icon ph-arrow-square-out\"></span></a></li>\n <li><a href=\"javascript:void(null);\" (click)=\"signout();\">Sign out</a></li>\n </ul>\n</mat-dialog-content>\n", styles: [".smallTextUppercase{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;text-transform:uppercase;line-height:100%}.bigletteredbutton{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;text-decoration:none;background:#ffffff1a;margin-bottom:10px;display:flex;align-content:center;border-radius:20px;padding:15px;font-size:24px;border:2px solid #1F3F8F;border-bottom:6px solid #1F3F8F;color:#fff;align-items:center;cursor:pointer}.bigletteredbutton .free{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;background:#fff73f;color:#2f2f2f;padding:3px 5px;margin-left:20px;border-radius:10px}.bigletteredbutton .plan{font-family:StevieSansThin,sans-serif;font-style:normal;font-weight:400;font-size:15px;line-height:140%;background:#fff;color:#2f2f2f;padding:3px 5px;margin-left:20px;border-radius:10px}.bigletteredbutton:hover,.bigletteredbutton.selected{border:2px solid #fff73f;border-bottom:6px solid #fff73f}.bigletteredbutton .button-letter{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;background:#fff73f;color:#1f3f8f;margin-right:20px}.bigletteredbutton .button-letter .ph{color:#1f3f8f}.bigletteredbutton .button-letter:hover{background:#1f3f8f;color:#fff73f}.bigletteredbutton .button-letter:hover .ph{color:#fff73f}.roundicon-yellow{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;background:#fff73f;color:#1f3f8f}.roundicon-yellow .ph{color:#1f3f8f}.roundicon-yellow:hover{background:#1f3f8f;color:#fff73f}.roundicon-yellow:hover .ph{color:#fff73f}.roundicon{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;border-radius:30px;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center}.roundicon-large{-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;font-family:StevieSans,sans-serif;height:52px;width:52px;min-width:52px;min-height:52px;font-weight:900;font-size:30px;line-height:100%;display:flex;align-items:center;justify-content:center;border-radius:60px;height:120px;width:120px}.dialog-header .email{display:block;font-family:StevieSansThin,sans-serif;font-size:19px;font-weight:300;font-weight:400}hr{margin-top:0;background:#d7d7d7;border:2px solid #d7d7d7}ul{padding-left:0;list-style:none;font-size:19px}ul li{margin-bottom:20px}ul li a{text-decoration:none}\n"] }]
58
- }], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.MatSnackBar }, { type: i3.AccountService }, { type: i4.MatDialogRef }, { type: i6.ViewModelStateBase, decorators: [{
59
- type: Inject,
60
- args: [VIEWSTATE_PROVIDER]
61
- }] }] });
62
- export class OpenAccountDialogDirective {
63
- constructor(dialog) {
64
- this.dialog = dialog;
65
- }
66
- onClick() {
67
- const dialogConfig = new MatDialogConfig();
68
- dialogConfig.panelClass = ['dialog', 'account'];
69
- dialogConfig.autoFocus = false;
70
- dialogConfig.enterAnimationDuration = 0;
71
- dialogConfig.exitAnimationDuration = 0;
72
- this.dialog.open(DialogAccountComponent, dialogConfig);
73
- }
74
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OpenAccountDialogDirective, deps: [{ token: i4.MatDialog }], target: i0.ɵɵFactoryTarget.Directive }); }
75
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: OpenAccountDialogDirective, selector: "[accountDialog]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
76
- }
77
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OpenAccountDialogDirective, decorators: [{
78
- type: Directive,
79
- args: [{
80
- selector: '[accountDialog]',
81
- }]
82
- }], ctorParameters: () => [{ type: i4.MatDialog }], propDecorators: { onClick: [{
83
- type: HostListener,
84
- args: ['click']
85
- }] } });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWFjY291bnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjcnVtdGVhbXN1cnZleS10b29scy9zcmMvbGliL2RpYWxvZ3MvZGlhbG9nLWFjY291bnQvZGlhbG9nLWFjY291bnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjcnVtdGVhbXN1cnZleS10b29scy9zcmMvbGliL2RpYWxvZ3MvZGlhbG9nLWFjY291bnQvZGlhbG9nLWFjY291bnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQWEsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBR3BGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTlFLE9BQU8sRUFBc0Isa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7QUFPaEcsTUFBTSxPQUFPLHNCQUF1QixTQUFRLDBCQUF5QztJQU9sRixZQUFvQixXQUF3QixFQUFZLFFBQXFCLEVBQVUsY0FBOEIsRUFBUyxTQUErQyxFQUFzQyxLQUF3QztRQUN4UCxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRE4sZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBWSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVMsY0FBUyxHQUFULFNBQVMsQ0FBc0M7UUFBc0MsVUFBSyxHQUFMLEtBQUssQ0FBbUM7SUFFM1AsQ0FBQztJQUVELFFBQVE7UUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQzdCLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxnQkFBZ0I7UUFDMUIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDaEcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3BELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDdEMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSxpQkFBaUI7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUN4RCxPQUFPLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQTBCLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEgsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNoQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRCxPQUFPO1FBQ0osSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVMsWUFBWSxDQUFDLElBQW1CO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDOUMsQ0FBQzsrR0FoRFMsc0JBQXNCLGtJQU91SixrQkFBa0I7bUdBUC9MLHNCQUFzQiwyRUNibkMsMnVCQVlBOzs0RkRDYSxzQkFBc0I7a0JBSmxDLFNBQVM7OzswQkFXeUssTUFBTTsyQkFBQyxrQkFBa0I7O0FBK0M1TSxNQUFNLE9BQU8sMEJBQTBCO0lBQ3BDLFlBQW9CLE1BQWlCO1FBQWpCLFdBQU0sR0FBTixNQUFNLENBQVc7SUFDckMsQ0FBQztJQUdELE9BQU87UUFDSixNQUFNLFlBQVksR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzNDLFlBQVksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDaEQsWUFBWSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDL0IsWUFBWSxDQUFDLHNCQUFzQixHQUFHLENBQUMsQ0FBQztRQUN4QyxZQUFZLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzFELENBQUM7K0dBWlMsMEJBQTBCO21HQUExQiwwQkFBMEI7OzRGQUExQiwwQkFBMEI7a0JBSHRDLFNBQVM7bUJBQUM7b0JBQ1IsUUFBUSxFQUFFLGlCQUFpQjtpQkFDN0I7OEVBTUUsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICdAYXV0aDAvYXV0aDAtYW5ndWxhcic7XG5pbXBvcnQgeyBDb21wb25lbnRXaXRoVmlld1N0YXRlQmFzZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudFdpdGhWaWV3U3RhdGVCYXNlJztcbmltcG9ydCB7IElSZXN1bHRzU3RhdGUgfSBmcm9tICcuLi8uLi9yZXN1bHRzL2ludGVyZmFjZXMvSVJlc3VsdHNTdGF0ZSc7XG5pbXBvcnQgeyBWaWV3TW9kZWxTdGF0ZUJhc2UsIFZJRVdTVEFURV9QUk9WSURFUiB9IGZyb20gJy4uLy4uL3ZpZXdNb2RlbC92aWV3TW9kZWxTdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi9hY2NvdW50LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2ctYWNjb3VudC5jb21wb25lbnQuaHRtbCcsXG4gICBzdHlsZVVybHM6IFsnLi9kaWFsb2ctYWNjb3VudC5jb21wb25lbnQubGVzcyddXG59KVxuZXhwb3J0IGNsYXNzIERpYWxvZ0FjY291bnRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRXaXRoVmlld1N0YXRlQmFzZTxJUmVzdWx0c1N0YXRlPiB7XG4gICBwdWJsaWMgc3Vic2NyaXB0aW9uS2V5OiBzdHJpbmc7XG4gICBwdWJsaWMgdXNlck5hbWU6IHN0cmluZztcbiAgIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xuICAgcHVibGljIGlzQWRtaW46IGJvb2xlYW47XG4gICBwdWJsaWMgZW1haWw6IHN0cmluZztcblxuICAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHByb3RlY3RlZCBzbmFja0JhcjogTWF0U25hY2tCYXIsIHByaXZhdGUgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLCBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RGlhbG9nQWNjb3VudENvbXBvbmVudD4sIEBJbmplY3QoVklFV1NUQVRFX1BST1ZJREVSKSBwcml2YXRlIHN0YXRlOiBWaWV3TW9kZWxTdGF0ZUJhc2U8SVJlc3VsdHNTdGF0ZT4pIHtcbiAgICAgIHN1cGVyKHN0YXRlLCBzbmFja0Jhcik7XG4gICB9XG5cbiAgIG5nT25Jbml0KCkge1xuICAgICAgdGhpcy5hdXRoU2VydmljZS51c2VyJC5zdWJzY3JpYmUoXG4gICAgICAgICAocHJvZmlsZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbWFpbCA9IHByb2ZpbGUuZW1haWw7XG4gICAgICAgICB9KTtcblxuICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgIH1cblxuICAgcHVibGljIGFzeW5jIHJlZGlyZWN0VG9Qb3J0YWwoKSB7XG4gICAgICBhd2FpdCB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2luV2l0aFBvcHVwKHsgYXV0aG9yaXphdGlvblBhcmFtczogeyBtYXhfYWdlOiAxIH0gfSkuc3Vic2NyaWJlKHN1Y2Nlc3MgPT4ge1xuICAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5nZXRNYW5hZ2VVcmwoKS5zdWJzY3JpYmUoc3VjY2VzcyA9PiB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHN1Y2Nlc3MudXJsO1xuICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgIH1cblxuICAgcHVibGljIHNlbmRQYXNzd29yZFJlc2V0KCkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uuc2VuZFJlc2V0UGFzc3dvcmQodGhpcy5lbWFpbCkuc3Vic2NyaWJlKFxuICAgICAgICAgc3VjY2VzcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignR290IGl0ISBXZSBzZW50IGFuIGUtbWFpbCB0byAnICsgdGhpcy5lbWFpbCArICcgdG8gY2hhbmdlIHlvdXIgcGFzc3dvcmQnLCBudWxsLCB7IGR1cmF0aW9uOiAzMDAwIH0pO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgIH0pO1xuICAgfVxuXG4gICBzaWdub3V0KCkge1xuICAgICAgdGhpcy5hdXRoU2VydmljZS5sb2dvdXQoKTtcbiAgIH1cblxuICAgcHJvdGVjdGVkIG9uRGF0YVVwZGF0ZShkYXRhOiBJUmVzdWx0c1N0YXRlKSB7XG4gICAgICB0aGlzLmlzQWRtaW4gPSBkYXRhLnVzZXJJbmZvLmlzQWRtaW47XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbktleSA9IGRhdGEudXNlckluZm8uY2xpZW50LnB1YmxpY0tleTtcbiAgICAgIHRoaXMudXNlck5hbWUgPSBkYXRhLnVzZXJJbmZvLnByb2ZpbGUubmFtZTtcbiAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICBzZWxlY3RvcjogJ1thY2NvdW50RGlhbG9nXScsXG59KVxuZXhwb3J0IGNsYXNzIE9wZW5BY2NvdW50RGlhbG9nRGlyZWN0aXZlIHtcbiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2cpIHtcbiAgIH1cblxuICAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICAgb25DbGljaygpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcbiAgICAgIGRpYWxvZ0NvbmZpZy5wYW5lbENsYXNzID0gWydkaWFsb2cnLCAnYWNjb3VudCddO1xuICAgICAgZGlhbG9nQ29uZmlnLmF1dG9Gb2N1cyA9IGZhbHNlO1xuICAgICAgZGlhbG9nQ29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb24gPSAwO1xuICAgICAgZGlhbG9nQ29uZmlnLmV4aXRBbmltYXRpb25EdXJhdGlvbiA9IDA7XG4gICAgICB0aGlzLmRpYWxvZy5vcGVuKERpYWxvZ0FjY291bnRDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGlhbG9nLWhlYWRlclwiPlxuICAgPGgxIG1hdC1kaWFsb2ctdGl0bGU+e3t1c2VyTmFtZX19PHNwYW4gY2xhc3M9XCJlbWFpbFwiPnt7ZW1haWx9fTwvc3Bhbj48L2gxPlxuICAgPGRpdiBjbGFzcz1cImNsb3NlXCIgbWF0LWRpYWxvZy1jbG9zZT48aSBjbGFzcz1cInJlc3BvbnNpdmUgaWNvbiBwaC14LWJvbGRcIj48L2k+PC9kaXY+XG48L2Rpdj5cbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICA8aHIgLz5cbiAgIDx1bD5cbiAgICAgIDxsaT48YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKG51bGwpO1wiIChjbGljayk9XCJzZW5kUGFzc3dvcmRSZXNldCgpXCIgbWF0LWRpYWxvZy1jbG9zZSBpZD1cImFjY291bnQtcGFzc3dvcmRyZXNldFwiPlNlbmQgZW1haWwgdG8gY2hhbmdlIHBhc3N3b3JkPC9hPjwvbGk+XG4gICAgICA8bGk+PGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZChudWxsKTtcIiAoY2xpY2spPVwicmVkaXJlY3RUb1BvcnRhbCgpXCIgbWF0LWRpYWxvZy1jbG9zZSAqbmdJZj1cImlzQWRtaW5cIj5TdWJzY3JpcHRpb24gJiBpbnZvaWNlcyAoYWRtaW5zIG9ubHkpIDxzcGFuIGNsYXNzPVwiaWNvbiBwaC1hcnJvdy1zcXVhcmUtb3V0XCI+PC9zcGFuPjwvYT48L2xpPlxuICAgICAgPGxpPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQobnVsbCk7XCIgKGNsaWNrKT1cInNpZ25vdXQoKTtcIj5TaWduIG91dDwvYT48L2xpPlxuICAgPC91bD5cbjwvbWF0LWRpYWxvZy1jb250ZW50PlxuIl19