@reusa/ngx-reusa-app-lib 0.0.732 → 0.1.731
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.
- package/{esm2020 → esm2022}/lib/annimations/app-animations.mjs +36 -36
- package/esm2022/lib/components/add-employer/add-employer.component.mjs +3027 -0
- package/esm2022/lib/components/add-participant/add-participant.component.mjs +394 -0
- package/esm2022/lib/components/add-payment/add-payment.component.mjs +187 -0
- package/esm2022/lib/components/address/address.component.mjs +487 -0
- package/esm2022/lib/components/bank-details/bank-details.component.mjs +276 -0
- package/esm2022/lib/components/captcha/captcha.component.mjs +181 -0
- package/esm2022/lib/components/card/card.component.mjs +55 -0
- package/esm2022/lib/components/contact-us/contact-us.component.mjs +970 -0
- package/esm2022/lib/components/content/content.component.mjs +61 -0
- package/esm2022/lib/components/correspondence-download/correspondence-download.component.mjs +83 -0
- package/esm2022/lib/components/dashboard-card/dashboard-card.component.mjs +223 -0
- package/esm2022/lib/components/dependent-grid/dependent-grid.component.mjs +292 -0
- package/esm2022/lib/components/disclosure/disclosure.component.mjs +60 -0
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +1974 -0
- package/esm2022/lib/components/dropdown/dropdown.interface.mjs +2 -0
- package/esm2022/lib/components/email-update/email-update.component.mjs +283 -0
- package/esm2022/lib/components/employer-grid/employer-grid.component.mjs +794 -0
- package/esm2022/lib/components/error/error.component.mjs +86 -0
- package/esm2022/lib/components/fav-menu/fav-menu.component.mjs +163 -0
- package/{esm2020 → esm2022}/lib/components/file-download/file-download.component.mjs +104 -104
- package/esm2022/lib/components/file-uploader/file-uploader.component.mjs +315 -0
- package/esm2022/lib/components/footer/footer.component.mjs +332 -0
- package/esm2022/lib/components/header/header.component.mjs +558 -0
- package/esm2022/lib/components/help/help.component.mjs +49 -0
- package/esm2022/lib/components/idle-detector/idle-detector.component.mjs +65 -0
- package/{esm2020 → esm2022}/lib/components/info/info.component.mjs +187 -188
- package/esm2022/lib/components/job-search-result-page/job-search-result-page.component.mjs +206 -0
- package/esm2022/lib/components/legal-disclaimar/legal-disclaimar.component.mjs +193 -0
- package/esm2022/lib/components/maintenance-detector/maintenance-detector.component.mjs +43 -0
- package/esm2022/lib/components/mask/mask.component.mjs +48 -0
- package/esm2022/lib/components/menu/menu.component.mjs +423 -0
- package/esm2022/lib/components/mfa/mfa.component.mjs +444 -0
- package/esm2022/lib/components/mfa-popup/mfa-popup.component.mjs +50 -0
- package/esm2022/lib/components/money-expect/money-expect.component.mjs +90 -0
- package/esm2022/lib/components/msg/msg.component.mjs +48 -0
- package/esm2022/lib/components/news/news.component.mjs +90 -0
- package/esm2022/lib/components/overlay-info/overlay-info.component.mjs +213 -0
- package/esm2022/lib/components/page/page.component.mjs +136 -0
- package/esm2022/lib/components/profile/profile.component.mjs +177 -0
- package/esm2022/lib/components/profile-redirect/profile-redirect.component.mjs +63 -0
- package/esm2022/lib/components/questionnaire/AppValidators.mjs +487 -0
- package/{esm2020 → esm2022}/lib/components/questionnaire/FbConstants.mjs +7 -7
- package/{esm2020 → esm2022}/lib/components/questionnaire/SelectItem.mjs +1 -1
- package/esm2022/lib/components/questionnaire/account-success/account-success.page.mjs +256 -0
- package/esm2022/lib/components/questionnaire/common-success/common-success.page.mjs +475 -0
- package/esm2022/lib/components/questionnaire/dynamic-form-panel.component.mjs +1094 -0
- package/esm2022/lib/components/questionnaire/dynamic-form-question.component.mjs +1882 -0
- package/esm2022/lib/components/questionnaire/dynamic-form.component.mjs +1263 -0
- package/esm2022/lib/components/questionnaire/form-builder/form-builder.page.mjs +244 -0
- package/{esm2020 → esm2022}/lib/components/questionnaire/input-focus.directive.mjs +44 -44
- package/esm2022/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.mjs +256 -0
- package/{esm2020 → esm2022}/lib/components/questionnaire/question-base.mjs +2 -2
- package/{esm2020 → esm2022}/lib/components/questionnaire/question-control.service.mjs +420 -419
- package/{esm2020 → esm2022}/lib/components/questionnaire/question.service.mjs +33 -33
- package/esm2022/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.mjs +262 -0
- package/{esm2020 → esm2022}/lib/components/read-more/read-more.component.mjs +67 -67
- package/esm2022/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.mjs +690 -0
- package/esm2022/lib/components/search-employer/search-employer.component.mjs +142 -0
- package/esm2022/lib/components/select/select.component.mjs +154 -0
- package/esm2022/lib/components/ssn/ssn.component.mjs +44 -0
- package/esm2022/lib/components/ssn-reverify/ssn-reverify.component.mjs +151 -0
- package/esm2022/lib/components/test/test.component.mjs +19 -0
- package/esm2022/lib/components/user-login/user-login.component.mjs +398 -0
- package/esm2022/lib/components/weekly-cert-employer/weekly-cert-employer.component.mjs +442 -0
- package/esm2022/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.mjs +307 -0
- package/{esm2020 → esm2022}/lib/directives/auto-focus/auto-focus.directive.mjs +31 -31
- package/{esm2020 → esm2022}/lib/directives/caps-lock.directive.mjs +38 -38
- package/{esm2020 → esm2022}/lib/directives/required-roles/required-roles.directive.mjs +30 -30
- package/{esm2020 → esm2022}/lib/enums/EmailStatusEnum.mjs +8 -8
- package/{esm2020 → esm2022}/lib/guards/auth.guard.mjs +138 -138
- package/esm2022/lib/guards/no-login/no-login.guard.mjs +21 -0
- package/{esm2020 → esm2022}/lib/interceptors/error-interceptor/http-error-interceptor.mjs +107 -107
- package/{esm2020 → esm2022}/lib/interceptors/header-interceptor/http-header.interceptor.mjs +99 -99
- package/{esm2020 → esm2022}/lib/models/AddressComponentModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/BankDetailsComponentModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/BankDetailsModel.mjs +3 -3
- package/{esm2020 → esm2022}/lib/models/CinRequalificationCriteriaModel.mjs +3 -3
- package/{esm2020 → esm2022}/lib/models/EmployerDetailSearchResult.mjs +5 -5
- package/{esm2020 → esm2022}/lib/models/ErrorModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/models/FileModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/LibConstants.mjs +119 -119
- package/{esm2020 → esm2022}/lib/models/NewsAndAnnouncementModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/NotificationModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/models/OtpAuthModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/PaymentComponentModel.mjs +2 -2
- package/esm2022/lib/models/RequalifyLiftPageModel.mjs +11 -0
- package/{esm2020 → esm2022}/lib/models/SsaVerificationModel.mjs +3 -3
- package/{esm2020 → esm2022}/lib/models/TrendModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/UserDetailsModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/UserModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/models/case/CaseAttachmentModel.mjs +3 -3
- package/{esm2020 → esm2022}/lib/models/claimant/ClaimantModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/claimant/JobResultsData.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/claimant/MatchingJobs.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/claimant/ResetPasswordModel.mjs +2 -2
- package/esm2022/lib/models/cmp/CaseCoreModel.mjs +3 -0
- package/{esm2020 → esm2022}/lib/models/cmp/ComplaintCategoryModel.mjs +3 -3
- package/{esm2020 → esm2022}/lib/models/cmp/ComplaintCategoryOutputModel.mjs +5 -5
- package/esm2022/lib/models/cmp/ContactUsModel.mjs +3 -0
- package/{esm2020 → esm2022}/lib/models/cmp/EmailTemplateModel.mjs +3 -3
- package/esm2022/lib/models/cmp/contactUsInqueryModel.mjs +7 -0
- package/{esm2020 → esm2022}/lib/models/cmp/messageRourceModel.mjs +3 -3
- package/esm2022/lib/models/dashboard-model.mjs +3 -0
- package/esm2022/lib/models/dependent.model.mjs +8 -0
- package/{esm2020 → esm2022}/lib/models/questionnaire/ClaimAppEmpRequestModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/questionnaire/ClaimAppEmpResponseModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/models/questionnaire/ClaimAppEmployerDetailsModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/models/questionnaire/ClaimOnlyEmployerDataModel.mjs +2 -2
- package/esm2022/lib/models/questionnaire/ComboModel.mjs +337 -0
- package/{esm2020 → esm2022}/lib/models/questionnaire/ElementsModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/models/questionnaire/EmployerDetailSearchResult.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/questionnaire/EmployerWagesModel.mjs +3 -3
- package/{esm2020 → esm2022}/lib/models/questionnaire/FBConfigModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/models/questionnaire/KeyValueModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/questionnaire/LegalDiscaimarModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/questionnaire/LoaderModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/questionnaire/PollingStatusModel.mjs +3 -3
- package/{esm2020 → esm2022}/lib/models/questionnaire/QtrYearEmployerWageModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/questionnaire/QuestionnaireQueryModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/models/questionnaire/QuestionnaireReturnModel.mjs +10 -10
- package/{esm2020 → esm2022}/lib/models/questionnaire/QuestionnaireSaveModel.mjs +2 -2
- package/esm2022/lib/models/questionnaire/RequalifyLiftIssuesModel.mjs +3 -0
- package/{esm2020 → esm2022}/lib/models/questionnaire/ServiceActionResponseModel.mjs +3 -3
- package/esm2022/lib/models/questionnaire/StatusModel.mjs +6 -0
- package/{esm2020 → esm2022}/lib/models/questionnaire/SuccessPageElement.mjs +2 -2
- package/esm2022/lib/models/questionnaire/UI512AResponseModel.mjs +3 -0
- package/{esm2020 → esm2022}/lib/models/questionnaire/ValidationModel.mjs +2 -2
- package/esm2022/lib/ngx-reusa-app-lib.component.mjs +23 -0
- package/esm2022/lib/ngx-reusa-app-lib.module.mjs +402 -0
- package/{esm2020 → esm2022}/lib/ngx-reusa-app-lib.service.mjs +14 -14
- package/{esm2020 → esm2022}/lib/pages/BasePage.mjs +76 -76
- package/esm2022/lib/pages/common/accessibility-policy/accessibility-policy.page.mjs +81 -0
- package/esm2022/lib/pages/common/change-password/change-password.page.mjs +463 -0
- package/esm2022/lib/pages/common/landing/landing.component.mjs +208 -0
- package/esm2022/lib/pages/common/landing2/landing2.component.mjs +244 -0
- package/esm2022/lib/pages/common/login/login.component.mjs +526 -0
- package/esm2022/lib/pages/common/not-found/not-found.page.mjs +24 -0
- package/esm2022/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.mjs +306 -0
- package/esm2022/lib/pages/common/security-policy/security-policy.page.mjs +61 -0
- package/esm2022/lib/pages/common/unauthorized/unauthorized.page.mjs +24 -0
- package/esm2022/lib/pages/popovers/language/language.page.mjs +61 -0
- package/esm2022/lib/pages/popovers/my-notifications/my-notifications.page.mjs +204 -0
- package/esm2022/lib/pages/popovers/my-profile/my-profile.page.mjs +129 -0
- package/esm2022/lib/pages/popovers/user-search/user-search.component.mjs +251 -0
- package/{esm2020 → esm2022}/lib/pipes/filter.pipe.mjs +30 -30
- package/{esm2020 → esm2022}/lib/pipes/mask/mask.email.pipe.mjs +23 -23
- package/{esm2020 → esm2022}/lib/pipes/proper-case/proper-case.pipe.mjs +27 -27
- package/{esm2020 → esm2022}/lib/pipes/translate/dynamic-translate.pipe.mjs +44 -44
- package/{esm2020 → esm2022}/lib/pipes/trust-html/trust-html.pipe.mjs +20 -20
- package/{esm2020 → esm2022}/lib/services/base-service.mjs +49 -49
- package/{esm2020 → esm2022}/lib/services/captcha/captcha.service.mjs +46 -46
- package/{esm2020 → esm2022}/lib/services/case-service/case.service.mjs +47 -47
- package/{esm2020 → esm2022}/lib/services/chatbot/chatbot.service.mjs +257 -257
- package/esm2022/lib/services/chatbot/script.const.mjs +42 -0
- package/{esm2020 → esm2022}/lib/services/claimant/claimant.service.mjs +31 -31
- package/esm2022/lib/services/claimant-context/claimant-context.service.mjs +48 -0
- package/{esm2020 → esm2022}/lib/services/claimant-service/claimant.service.mjs +47 -47
- package/{esm2020 → esm2022}/lib/services/claims/claims.service.mjs +99 -99
- package/{esm2020 → esm2022}/lib/services/cmp-service/cmp.service.mjs +84 -84
- package/{esm2020 → esm2022}/lib/services/dms-service/dms.service.mjs +60 -60
- package/{esm2020 → esm2022}/lib/services/fpjs/fingerprint.service.mjs +70 -70
- package/{esm2020 → esm2022}/lib/services/google-analytics/google-analytics.service.mjs +29 -29
- package/{esm2020 → esm2022}/lib/services/help/help.service.mjs +63 -63
- package/{esm2020 → esm2022}/lib/services/idle/idle.service.mjs +159 -159
- package/{esm2020 → esm2022}/lib/services/logger/logger.service.mjs +67 -67
- package/esm2022/lib/services/login/login.service.mjs +330 -0
- package/{esm2020 → esm2022}/lib/services/maintenance/maintenance.service.mjs +21 -21
- package/{esm2020 → esm2022}/lib/services/notification/notification.service.mjs +113 -113
- package/{esm2020 → esm2022}/lib/services/questionnaire/questionnaire.service.mjs +69 -69
- package/{esm2020 → esm2022}/lib/services/questionnaire/validation.service.mjs +59 -59
- package/{esm2020 → esm2022}/lib/services/security-service/security.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/services/tour/tour.service.mjs +60 -60
- package/{esm2020 → esm2022}/lib/services/util/util.service.mjs +424 -424
- package/esm2022/lib/validations/AppRegex.mjs +45 -0
- package/{esm2020 → esm2022}/lib/validations/AppValidators.mjs +165 -165
- package/{esm2020 → esm2022}/public-api.mjs +131 -131
- package/{esm2020 → esm2022}/reusa-ngx-reusa-app-lib.mjs +4 -4
- package/{fesm2020 → fesm2022}/reusa-ngx-reusa-app-lib.mjs +27966 -27877
- package/fesm2022/reusa-ngx-reusa-app-lib.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/annimations/app-animations.d.ts +3 -3
- package/lib/components/add-employer/add-employer.component.d.ts +276 -276
- package/lib/components/add-participant/add-participant.component.d.ts +45 -45
- package/lib/components/add-payment/add-payment.component.d.ts +33 -33
- package/lib/components/address/address.component.d.ts +68 -68
- package/lib/components/address/address.component.d.ts.map +1 -1
- package/lib/components/bank-details/bank-details.component.d.ts +39 -39
- package/lib/components/captcha/captcha.component.d.ts +44 -44
- package/lib/components/card/card.component.d.ts +11 -11
- package/lib/components/contact-us/contact-us.component.d.ts +105 -107
- package/lib/components/contact-us/contact-us.component.d.ts.map +1 -1
- package/lib/components/content/content.component.d.ts +13 -13
- package/lib/components/correspondence-download/correspondence-download.component.d.ts +21 -21
- package/lib/components/dashboard-card/dashboard-card.component.d.ts +25 -25
- package/lib/components/dashboard-card/dashboard-card.component.d.ts.map +1 -1
- package/lib/components/dependent-grid/dependent-grid.component.d.ts +35 -35
- package/lib/components/disclosure/disclosure.component.d.ts +12 -12
- package/lib/components/dropdown/dropdown.component.d.ts +581 -207
- package/lib/components/dropdown/dropdown.component.d.ts.map +1 -1
- package/lib/components/dropdown/dropdown.interface.d.ts +155 -0
- package/lib/components/dropdown/dropdown.interface.d.ts.map +1 -0
- package/lib/components/email-update/email-update.component.d.ts +31 -31
- package/lib/components/employer-grid/employer-grid.component.d.ts +95 -94
- package/lib/components/employer-grid/employer-grid.component.d.ts.map +1 -1
- package/lib/components/error/error.component.d.ts +17 -17
- package/lib/components/fav-menu/fav-menu.component.d.ts +21 -21
- package/lib/components/file-download/file-download.component.d.ts +22 -22
- package/lib/components/file-uploader/file-uploader.component.d.ts +47 -47
- package/lib/components/footer/footer.component.d.ts +36 -36
- package/lib/components/header/header.component.d.ts +59 -58
- package/lib/components/header/header.component.d.ts.map +1 -1
- package/lib/components/help/help.component.d.ts +10 -10
- package/lib/components/idle-detector/idle-detector.component.d.ts +15 -15
- package/lib/components/info/info.component.d.ts +22 -22
- package/lib/components/job-search-result-page/job-search-result-page.component.d.ts +21 -21
- package/lib/components/legal-disclaimar/legal-disclaimar.component.d.ts +33 -33
- package/lib/components/maintenance-detector/maintenance-detector.component.d.ts +15 -15
- package/lib/components/mask/mask.component.d.ts +11 -11
- package/lib/components/menu/menu.component.d.ts +43 -43
- package/lib/components/mfa/mfa.component.d.ts +59 -59
- package/lib/components/mfa-popup/mfa-popup.component.d.ts +16 -16
- package/lib/components/money-expect/money-expect.component.d.ts +18 -18
- package/lib/components/msg/msg.component.d.ts +10 -10
- package/lib/components/news/news.component.d.ts +14 -14
- package/lib/components/overlay-info/overlay-info.component.d.ts +34 -34
- package/lib/components/page/page.component.d.ts +23 -23
- package/lib/components/profile/profile.component.d.ts +28 -28
- package/lib/components/profile-redirect/profile-redirect.component.d.ts +13 -13
- package/lib/components/questionnaire/AppValidators.d.ts +14 -14
- package/lib/components/questionnaire/AppValidators.d.ts.map +1 -1
- package/lib/components/questionnaire/FbConstants.d.ts +7 -7
- package/lib/components/questionnaire/SelectItem.d.ts +4 -4
- package/lib/components/questionnaire/account-success/account-success.page.d.ts +53 -53
- package/lib/components/questionnaire/common-success/common-success.page.d.ts +75 -75
- package/lib/components/questionnaire/common-success/common-success.page.d.ts.map +1 -1
- package/lib/components/questionnaire/dynamic-form-panel.component.d.ts +46 -46
- package/lib/components/questionnaire/dynamic-form-question.component.d.ts +82 -82
- package/lib/components/questionnaire/dynamic-form-question.component.d.ts.map +1 -1
- package/lib/components/questionnaire/dynamic-form.component.d.ts +130 -130
- package/lib/components/questionnaire/dynamic-form.component.d.ts.map +1 -1
- package/lib/components/questionnaire/form-builder/form-builder.page.d.ts +66 -64
- package/lib/components/questionnaire/form-builder/form-builder.page.d.ts.map +1 -1
- package/lib/components/questionnaire/input-focus.directive.d.ts +11 -11
- package/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.d.ts +38 -38
- package/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.d.ts.map +1 -1
- package/lib/components/questionnaire/question-base.d.ts +16 -16
- package/lib/components/questionnaire/question-control.service.d.ts +19 -19
- package/lib/components/questionnaire/question-control.service.d.ts.map +1 -1
- package/lib/components/questionnaire/question.service.d.ts +18 -18
- package/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.d.ts +75 -74
- package/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.d.ts.map +1 -1
- package/lib/components/read-more/read-more.component.d.ts +14 -14
- package/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.d.ts +67 -67
- package/lib/components/search-employer/search-employer.component.d.ts +37 -36
- package/lib/components/search-employer/search-employer.component.d.ts.map +1 -1
- package/lib/components/select/select.component.d.ts +55 -55
- package/lib/components/ssn/ssn.component.d.ts +11 -11
- package/lib/components/ssn-reverify/ssn-reverify.component.d.ts +22 -22
- package/lib/components/test/test.component.d.ts +8 -8
- package/lib/components/user-login/user-login.component.d.ts +48 -48
- package/lib/components/weekly-cert-employer/weekly-cert-employer.component.d.ts +59 -59
- package/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.d.ts +45 -45
- package/lib/directives/auto-focus/auto-focus.directive.d.ts +12 -12
- package/lib/directives/caps-lock.directive.d.ts +11 -11
- package/lib/directives/required-roles/required-roles.directive.d.ts +14 -14
- package/lib/enums/EmailStatusEnum.d.ts +7 -7
- package/lib/guards/auth.guard.d.ts +28 -28
- package/lib/guards/auth.guard.d.ts.map +1 -1
- package/lib/guards/no-login/no-login.guard.d.ts +11 -11
- package/lib/guards/no-login/no-login.guard.d.ts.map +1 -1
- package/lib/interceptors/error-interceptor/http-error-interceptor.d.ts +22 -22
- package/lib/interceptors/header-interceptor/http-header.interceptor.d.ts +21 -21
- package/lib/interceptors/header-interceptor/http-header.interceptor.d.ts.map +1 -1
- package/lib/models/AddressComponentModel.d.ts +12 -12
- package/lib/models/BankDetailsComponentModel.d.ts +11 -11
- package/lib/models/BankDetailsModel.d.ts +4 -4
- package/lib/models/CinRequalificationCriteriaModel.d.ts +10 -10
- package/lib/models/EmployerDetailSearchResult.d.ts +47 -47
- package/lib/models/ErrorModel.d.ts +6 -6
- package/lib/models/FileModel.d.ts +4 -4
- package/lib/models/LibConstants.d.ts +112 -112
- package/lib/models/NewsAndAnnouncementModel.d.ts +5 -5
- package/lib/models/NotificationModel.d.ts +10 -10
- package/lib/models/OtpAuthModel.d.ts +6 -6
- package/lib/models/PaymentComponentModel.d.ts +7 -7
- package/lib/models/RequalifyLiftPageModel.d.ts +11 -11
- package/lib/models/SsaVerificationModel.d.ts +8 -8
- package/lib/models/TrendModel.d.ts +13 -13
- package/lib/models/UserDetailsModel.d.ts +9 -9
- package/lib/models/UserModel.d.ts +46 -46
- package/lib/models/case/CaseAttachmentModel.d.ts +5 -5
- package/lib/models/claimant/ClaimantModel.d.ts +22 -22
- package/lib/models/claimant/JobResultsData.d.ts +7 -7
- package/lib/models/claimant/MatchingJobs.d.ts +12 -12
- package/lib/models/claimant/ResetPasswordModel.d.ts +8 -8
- package/lib/models/cmp/CaseCoreModel.d.ts +20 -20
- package/lib/models/cmp/ComplaintCategoryModel.d.ts +8 -8
- package/lib/models/cmp/ComplaintCategoryOutputModel.d.ts +5 -5
- package/lib/models/cmp/ContactUsModel.d.ts +22 -22
- package/lib/models/cmp/EmailTemplateModel.d.ts +6 -6
- package/lib/models/cmp/contactUsInqueryModel.d.ts +46 -46
- package/lib/models/cmp/messageRourceModel.d.ts +5 -5
- package/lib/models/dashboard-model.d.ts +43 -43
- package/lib/models/dependent.model.d.ts +11 -18
- package/lib/models/dependent.model.d.ts.map +1 -1
- package/lib/models/questionnaire/ClaimAppEmpRequestModel.d.ts +8 -8
- package/lib/models/questionnaire/ClaimAppEmpResponseModel.d.ts +16 -16
- package/lib/models/questionnaire/ClaimAppEmployerDetailsModel.d.ts +151 -151
- package/lib/models/questionnaire/ClaimOnlyEmployerDataModel.d.ts +16 -16
- package/lib/models/questionnaire/ComboModel.d.ts +85 -85
- package/lib/models/questionnaire/ElementsModel.d.ts +68 -68
- package/lib/models/questionnaire/EmployerDetailSearchResult.d.ts +17 -17
- package/lib/models/questionnaire/EmployerWagesModel.d.ts +4 -4
- package/lib/models/questionnaire/FBConfigModel.d.ts +11 -11
- package/lib/models/questionnaire/KeyValueModel.d.ts +10 -10
- package/lib/models/questionnaire/LegalDiscaimarModel.d.ts +10 -10
- package/lib/models/questionnaire/LoaderModel.d.ts +4 -4
- package/lib/models/questionnaire/PollingStatusModel.d.ts +6 -6
- package/lib/models/questionnaire/QtrYearEmployerWageModel.d.ts +8 -8
- package/lib/models/questionnaire/QuestionnaireQueryModel.d.ts +23 -23
- package/lib/models/questionnaire/QuestionnaireReturnModel.d.ts +20 -20
- package/lib/models/questionnaire/QuestionnaireSaveModel.d.ts +24 -24
- package/lib/models/questionnaire/RequalifyLiftIssuesModel.d.ts +13 -13
- package/lib/models/questionnaire/ServiceActionResponseModel.d.ts +6 -6
- package/lib/models/questionnaire/StatusModel.d.ts +15 -15
- package/lib/models/questionnaire/SuccessPageElement.d.ts +8 -8
- package/lib/models/questionnaire/UI512AResponseModel.d.ts +12 -12
- package/lib/models/questionnaire/ValidationModel.d.ts +17 -17
- package/lib/ngx-reusa-app-lib.component.d.ts +8 -8
- package/lib/ngx-reusa-app-lib.module.d.ts +148 -145
- package/lib/ngx-reusa-app-lib.module.d.ts.map +1 -1
- package/lib/ngx-reusa-app-lib.service.d.ts +6 -6
- package/lib/pages/BasePage.d.ts +26 -26
- package/lib/pages/common/accessibility-policy/accessibility-policy.page.d.ts +11 -11
- package/lib/pages/common/change-password/change-password.page.d.ts +40 -40
- package/lib/pages/common/landing/landing.component.d.ts +24 -24
- package/lib/pages/common/landing2/landing2.component.d.ts +30 -30
- package/lib/pages/common/login/login.component.d.ts +64 -64
- package/lib/pages/common/not-found/not-found.page.d.ts +8 -8
- package/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.d.ts +11 -11
- package/lib/pages/common/security-policy/security-policy.page.d.ts +11 -11
- package/lib/pages/common/unauthorized/unauthorized.page.d.ts +8 -8
- package/lib/pages/popovers/language/language.page.d.ts +16 -16
- package/lib/pages/popovers/my-notifications/my-notifications.page.d.ts +21 -21
- package/lib/pages/popovers/my-profile/my-profile.page.d.ts +20 -20
- package/lib/pages/popovers/user-search/user-search.component.d.ts +31 -31
- package/lib/pipes/filter.pipe.d.ts +7 -7
- package/lib/pipes/mask/mask.email.pipe.d.ts +10 -10
- package/lib/pipes/proper-case/proper-case.pipe.d.ts +8 -8
- package/lib/pipes/translate/dynamic-translate.pipe.d.ts +10 -10
- package/lib/pipes/trust-html/trust-html.pipe.d.ts +10 -10
- package/lib/services/base-service.d.ts +92 -92
- package/lib/services/captcha/captcha.service.d.ts +15 -15
- package/lib/services/case-service/case.service.d.ts +19 -19
- package/lib/services/chatbot/chatbot.service.d.ts +60 -60
- package/lib/services/chatbot/script.const.d.ts +15 -15
- package/lib/services/claimant/claimant.service.d.ts +17 -17
- package/lib/services/claimant-context/claimant-context.service.d.ts +18 -18
- package/lib/services/claimant-context/claimant-context.service.d.ts.map +1 -1
- package/lib/services/claimant-service/claimant.service.d.ts +19 -19
- package/lib/services/claims/claims.service.d.ts +39 -39
- package/lib/services/cmp-service/cmp.service.d.ts +33 -33
- package/lib/services/dms-service/dms.service.d.ts +23 -23
- package/lib/services/fpjs/fingerprint.service.d.ts +18 -18
- package/lib/services/google-analytics/google-analytics.service.d.ts +8 -8
- package/lib/services/help/help.service.d.ts +25 -25
- package/lib/services/help/help.service.d.ts.map +1 -1
- package/lib/services/idle/idle.service.d.ts +43 -43
- package/lib/services/logger/logger.service.d.ts +31 -31
- package/lib/services/logger/logger.service.d.ts.map +1 -1
- package/lib/services/login/login.service.d.ts +75 -75
- package/lib/services/login/login.service.d.ts.map +1 -1
- package/lib/services/maintenance/maintenance.service.d.ts +15 -15
- package/lib/services/notification/notification.service.d.ts +38 -38
- package/lib/services/questionnaire/questionnaire.service.d.ts +35 -35
- package/lib/services/questionnaire/validation.service.d.ts +81 -81
- package/lib/services/security-service/security.service.d.ts +14 -14
- package/lib/services/tour/tour.service.d.ts +24 -24
- package/lib/services/util/util.service.d.ts +190 -190
- package/lib/validations/AppRegex.d.ts +43 -43
- package/lib/validations/AppValidators.d.ts +53 -53
- package/package.json +6 -11
- package/public-api.d.ts +121 -121
- package/esm2020/lib/components/add-employer/add-employer.component.mjs +0 -3099
- package/esm2020/lib/components/add-participant/add-participant.component.mjs +0 -396
- package/esm2020/lib/components/add-payment/add-payment.component.mjs +0 -186
- package/esm2020/lib/components/address/address.component.mjs +0 -480
- package/esm2020/lib/components/bank-details/bank-details.component.mjs +0 -275
- package/esm2020/lib/components/captcha/captcha.component.mjs +0 -180
- package/esm2020/lib/components/card/card.component.mjs +0 -54
- package/esm2020/lib/components/contact-us/contact-us.component.mjs +0 -1004
- package/esm2020/lib/components/content/content.component.mjs +0 -60
- package/esm2020/lib/components/correspondence-download/correspondence-download.component.mjs +0 -82
- package/esm2020/lib/components/dashboard-card/dashboard-card.component.mjs +0 -219
- package/esm2020/lib/components/dependent-grid/dependent-grid.component.mjs +0 -297
- package/esm2020/lib/components/disclosure/disclosure.component.mjs +0 -59
- package/esm2020/lib/components/dropdown/dropdown.component.mjs +0 -1552
- package/esm2020/lib/components/email-update/email-update.component.mjs +0 -287
- package/esm2020/lib/components/employer-grid/employer-grid.component.mjs +0 -800
- package/esm2020/lib/components/error/error.component.mjs +0 -85
- package/esm2020/lib/components/fav-menu/fav-menu.component.mjs +0 -163
- package/esm2020/lib/components/file-uploader/file-uploader.component.mjs +0 -317
- package/esm2020/lib/components/footer/footer.component.mjs +0 -337
- package/esm2020/lib/components/header/header.component.mjs +0 -566
- package/esm2020/lib/components/help/help.component.mjs +0 -48
- package/esm2020/lib/components/idle-detector/idle-detector.component.mjs +0 -64
- package/esm2020/lib/components/job-search-result-page/job-search-result-page.component.mjs +0 -209
- package/esm2020/lib/components/legal-disclaimar/legal-disclaimar.component.mjs +0 -192
- package/esm2020/lib/components/maintenance-detector/maintenance-detector.component.mjs +0 -42
- package/esm2020/lib/components/mask/mask.component.mjs +0 -48
- package/esm2020/lib/components/menu/menu.component.mjs +0 -430
- package/esm2020/lib/components/mfa/mfa.component.mjs +0 -451
- package/esm2020/lib/components/mfa-popup/mfa-popup.component.mjs +0 -49
- package/esm2020/lib/components/money-expect/money-expect.component.mjs +0 -89
- package/esm2020/lib/components/msg/msg.component.mjs +0 -48
- package/esm2020/lib/components/news/news.component.mjs +0 -89
- package/esm2020/lib/components/overlay-info/overlay-info.component.mjs +0 -235
- package/esm2020/lib/components/page/page.component.mjs +0 -138
- package/esm2020/lib/components/profile/profile.component.mjs +0 -182
- package/esm2020/lib/components/profile-redirect/profile-redirect.component.mjs +0 -62
- package/esm2020/lib/components/questionnaire/AppValidators.mjs +0 -523
- package/esm2020/lib/components/questionnaire/account-success/account-success.page.mjs +0 -259
- package/esm2020/lib/components/questionnaire/common-success/common-success.page.mjs +0 -483
- package/esm2020/lib/components/questionnaire/dynamic-form-panel.component.mjs +0 -1137
- package/esm2020/lib/components/questionnaire/dynamic-form-question.component.mjs +0 -1948
- package/esm2020/lib/components/questionnaire/dynamic-form.component.mjs +0 -1257
- package/esm2020/lib/components/questionnaire/form-builder/form-builder.page.mjs +0 -240
- package/esm2020/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.mjs +0 -259
- package/esm2020/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.mjs +0 -260
- package/esm2020/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.mjs +0 -703
- package/esm2020/lib/components/search-employer/search-employer.component.mjs +0 -142
- package/esm2020/lib/components/select/select.component.mjs +0 -153
- package/esm2020/lib/components/ssn/ssn.component.mjs +0 -43
- package/esm2020/lib/components/ssn-reverify/ssn-reverify.component.mjs +0 -150
- package/esm2020/lib/components/test/test.component.mjs +0 -18
- package/esm2020/lib/components/user-login/user-login.component.mjs +0 -401
- package/esm2020/lib/components/weekly-cert-employer/weekly-cert-employer.component.mjs +0 -445
- package/esm2020/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.mjs +0 -308
- package/esm2020/lib/guards/no-login/no-login.guard.mjs +0 -21
- package/esm2020/lib/models/RequalifyLiftPageModel.mjs +0 -11
- package/esm2020/lib/models/cmp/CaseCoreModel.mjs +0 -3
- package/esm2020/lib/models/cmp/ContactUsModel.mjs +0 -3
- package/esm2020/lib/models/cmp/contactUsInqueryModel.mjs +0 -7
- package/esm2020/lib/models/dashboard-model.mjs +0 -3
- package/esm2020/lib/models/dependent.model.mjs +0 -8
- package/esm2020/lib/models/questionnaire/ComboModel.mjs +0 -337
- package/esm2020/lib/models/questionnaire/RequalifyLiftIssuesModel.mjs +0 -3
- package/esm2020/lib/models/questionnaire/StatusModel.mjs +0 -6
- package/esm2020/lib/models/questionnaire/UI512AResponseModel.mjs +0 -3
- package/esm2020/lib/ngx-reusa-app-lib.component.mjs +0 -22
- package/esm2020/lib/ngx-reusa-app-lib.module.mjs +0 -390
- package/esm2020/lib/pages/common/accessibility-policy/accessibility-policy.page.mjs +0 -80
- package/esm2020/lib/pages/common/change-password/change-password.page.mjs +0 -477
- package/esm2020/lib/pages/common/landing/landing.component.mjs +0 -207
- package/esm2020/lib/pages/common/landing2/landing2.component.mjs +0 -244
- package/esm2020/lib/pages/common/login/login.component.mjs +0 -542
- package/esm2020/lib/pages/common/not-found/not-found.page.mjs +0 -23
- package/esm2020/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.mjs +0 -305
- package/esm2020/lib/pages/common/security-policy/security-policy.page.mjs +0 -60
- package/esm2020/lib/pages/common/unauthorized/unauthorized.page.mjs +0 -23
- package/esm2020/lib/pages/popovers/language/language.page.mjs +0 -60
- package/esm2020/lib/pages/popovers/my-notifications/my-notifications.page.mjs +0 -205
- package/esm2020/lib/pages/popovers/my-profile/my-profile.page.mjs +0 -129
- package/esm2020/lib/pages/popovers/user-search/user-search.component.mjs +0 -253
- package/esm2020/lib/services/chatbot/script.const.mjs +0 -42
- package/esm2020/lib/services/claimant-context/claimant-context.service.mjs +0 -47
- package/esm2020/lib/services/login/login.service.mjs +0 -330
- package/esm2020/lib/validations/AppRegex.mjs +0 -45
- package/fesm2015/reusa-ngx-reusa-app-lib.mjs +0 -30728
- package/fesm2015/reusa-ngx-reusa-app-lib.mjs.map +0 -1
- package/fesm2020/reusa-ngx-reusa-app-lib.mjs.map +0 -1
|
@@ -0,0 +1,1263 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { Validators } from '@angular/forms';
|
|
3
|
+
import { QuestionControlService } from './question-control.service';
|
|
4
|
+
import { AppValidators } from './AppValidators';
|
|
5
|
+
import { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';
|
|
6
|
+
import { ClaimAppEmployerDetailsModel } from '../../models/questionnaire/ClaimAppEmployerDetailsModel';
|
|
7
|
+
import { BasePage } from '../../pages/BasePage';
|
|
8
|
+
import { FbConstants } from './FbConstants';
|
|
9
|
+
import { HttpParams } from '@angular/common/http';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "./question.service";
|
|
12
|
+
import * as i2 from "../../services/questionnaire/questionnaire.service";
|
|
13
|
+
import * as i3 from "@ionic/angular";
|
|
14
|
+
import * as i4 from "./question-control.service";
|
|
15
|
+
import * as i5 from "../../services/util/util.service";
|
|
16
|
+
import * as i6 from "@ngx-translate/core";
|
|
17
|
+
import * as i7 from "../../services/logger/logger.service";
|
|
18
|
+
import * as i8 from "../../services/questionnaire/validation.service";
|
|
19
|
+
import * as i9 from "@angular/router";
|
|
20
|
+
import * as i10 from "@ionic/storage-angular";
|
|
21
|
+
import * as i11 from "../../services/login/login.service";
|
|
22
|
+
import * as i12 from "../../services/captcha/captcha.service";
|
|
23
|
+
import * as i13 from "@angular/common";
|
|
24
|
+
import * as i14 from "@angular/forms";
|
|
25
|
+
import * as i15 from "@angular/material/stepper";
|
|
26
|
+
import * as i16 from "@angular/material/button";
|
|
27
|
+
import * as i17 from "primeng/blockui";
|
|
28
|
+
import * as i18 from "../mfa/mfa.component";
|
|
29
|
+
import * as i19 from "./dynamic-form-question.component";
|
|
30
|
+
import * as i20 from "./input-focus.directive";
|
|
31
|
+
import * as i21 from "../../pipes/translate/dynamic-translate.pipe";
|
|
32
|
+
import * as i22 from "../../pipes/trust-html/trust-html.pipe";
|
|
33
|
+
const _c0 = ["mfa"];
|
|
34
|
+
const _c1 = ["questionnaireForm"];
|
|
35
|
+
const _c2 = ["matHorizontalStepper"];
|
|
36
|
+
function DynamicFormComponent_div_2_ion_row_5_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
+
i0.ɵɵelementStart(0, "ion-row")(1, "ion-col", 12)(2, "div", 13);
|
|
38
|
+
i0.ɵɵelement(3, "div", 14);
|
|
39
|
+
i0.ɵɵpipe(4, "trustHtml");
|
|
40
|
+
i0.ɵɵpipe(5, "dynamicTranslate");
|
|
41
|
+
i0.ɵɵelementEnd()()();
|
|
42
|
+
} if (rf & 2) {
|
|
43
|
+
const ctx_r4 = i0.ɵɵnextContext(2);
|
|
44
|
+
i0.ɵɵadvance(1);
|
|
45
|
+
i0.ɵɵproperty("sizeXs", ctx_r4.sizeXs)("sizeSm", ctx_r4.sizeSm)("sizeMd", ctx_r4.sizeMd)("sizeLg", ctx_r4.sizeLg)("sizeXl", ctx_r4.sizeXl)("offsetXs", ctx_r4.offsetXs)("offsetSm", ctx_r4.offsetSm)("offsetMd", ctx_r4.offsetMd)("offsetLg", ctx_r4.offsetLg)("offsetXl", ctx_r4.offsetXl);
|
|
46
|
+
i0.ɵɵadvance(2);
|
|
47
|
+
i0.ɵɵproperty("innerHtml", i0.ɵɵpipeBind1(4, 12, i0.ɵɵpipeBind2(5, 14, (ctx_r4.questionNumber ? ctx_r4.questionNumber + " " : "") + ctx_r4.questions[0].pages[ctx_r4.activeIndex].name, ctx_r4.dynamicParam)), i0.ɵɵsanitizeHtml)("ngClass", ctx_r4.multiMode ? "fb-heading-followup" : "fb-heading");
|
|
48
|
+
} }
|
|
49
|
+
function DynamicFormComponent_div_2_ng_container_9_ng_container_1_ion_row_1_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
+
i0.ɵɵelementStart(0, "ion-row")(1, "div", 15);
|
|
51
|
+
i0.ɵɵtext(2);
|
|
52
|
+
i0.ɵɵelementEnd()();
|
|
53
|
+
} if (rf & 2) {
|
|
54
|
+
const element_r8 = i0.ɵɵnextContext(2).$implicit;
|
|
55
|
+
i0.ɵɵadvance(2);
|
|
56
|
+
i0.ɵɵtextInterpolate1(" ", element_r8.title, " ");
|
|
57
|
+
} }
|
|
58
|
+
function DynamicFormComponent_div_2_ng_container_9_ng_container_1_ng_container_3_ion_col_1_Template(rf, ctx) { if (rf & 1) {
|
|
59
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
60
|
+
i0.ɵɵelementStart(0, "ion-col", 17)(1, "app-question", 18);
|
|
61
|
+
i0.ɵɵlistener("onDynamicParamUpdate", function DynamicFormComponent_div_2_ng_container_9_ng_container_1_ng_container_3_ion_col_1_Template_app_question_onDynamicParamUpdate_1_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r17.updateDynamicParam($event)); });
|
|
62
|
+
i0.ɵɵelementEnd()();
|
|
63
|
+
} if (rf & 2) {
|
|
64
|
+
const panelElement_r15 = i0.ɵɵnextContext().$implicit;
|
|
65
|
+
const element_r8 = i0.ɵɵnextContext(2).$implicit;
|
|
66
|
+
const ctx_r16 = i0.ɵɵnextContext(2);
|
|
67
|
+
i0.ɵɵproperty("sizeXl", panelElement_r15.sizeXL ? panelElement_r15.sizeXL : 3)("sizeLg", panelElement_r15.sizeLG ? panelElement_r15.sizeLG : 3)("sizeSm", panelElement_r15.sizeSM ? panelElement_r15.sizeSM : 12)("sizeXs", panelElement_r15.sizeXS ? panelElement_r15.sizeXS : 12)("sizeMd", panelElement_r15.sizeMD ? panelElement_r15.sizeMD : 4)("ngClass", ctx_r16.shouldFitContent(element_r8.elements) ? "col-fit-content" : "");
|
|
68
|
+
i0.ɵɵadvance(1);
|
|
69
|
+
i0.ɵɵproperty("potentialIssueId", ctx_r16.potentialIssueId)("question", panelElement_r15)("form", ctx_r16.formGroupArray[ctx_r16.activeIndex])("forScreenQuestionnaire", ctx_r16.forScreenQuestionnaire)("dynamicParam", ctx_r16.dynamicParam);
|
|
70
|
+
} }
|
|
71
|
+
function DynamicFormComponent_div_2_ng_container_9_ng_container_1_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
72
|
+
i0.ɵɵelementContainerStart(0);
|
|
73
|
+
i0.ɵɵtemplate(1, DynamicFormComponent_div_2_ng_container_9_ng_container_1_ng_container_3_ion_col_1_Template, 2, 11, "ion-col", 16);
|
|
74
|
+
i0.ɵɵelementContainerEnd();
|
|
75
|
+
} if (rf & 2) {
|
|
76
|
+
const panelElement_r15 = ctx.$implicit;
|
|
77
|
+
const ctx_r13 = i0.ɵɵnextContext(4);
|
|
78
|
+
i0.ɵɵadvance(1);
|
|
79
|
+
i0.ɵɵproperty("ngIf", panelElement_r15.colElement === "COL1" && ctx_r13.visibleIf(panelElement_r15.visibleIf, panelElement_r15.name, ctx_r13.formGroupArray[ctx_r13.activeIndex], panelElement_r15));
|
|
80
|
+
} }
|
|
81
|
+
function DynamicFormComponent_div_2_ng_container_9_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
82
|
+
i0.ɵɵelementContainerStart(0);
|
|
83
|
+
i0.ɵɵtemplate(1, DynamicFormComponent_div_2_ng_container_9_ng_container_1_ion_row_1_Template, 3, 1, "ion-row", 2);
|
|
84
|
+
i0.ɵɵelementStart(2, "ion-row");
|
|
85
|
+
i0.ɵɵtemplate(3, DynamicFormComponent_div_2_ng_container_9_ng_container_1_ng_container_3_Template, 2, 1, "ng-container", 9);
|
|
86
|
+
i0.ɵɵelementEnd();
|
|
87
|
+
i0.ɵɵelementContainerEnd();
|
|
88
|
+
} if (rf & 2) {
|
|
89
|
+
const element_r8 = i0.ɵɵnextContext().$implicit;
|
|
90
|
+
const ctx_r10 = i0.ɵɵnextContext(2);
|
|
91
|
+
i0.ɵɵadvance(1);
|
|
92
|
+
i0.ɵɵproperty("ngIf", ctx_r10.visibleIf(element_r8.visibleIf, "", ctx_r10.formGroupArray[ctx_r10.activeIndex], element_r8));
|
|
93
|
+
i0.ɵɵadvance(2);
|
|
94
|
+
i0.ɵɵproperty("ngForOf", element_r8.elements);
|
|
95
|
+
} }
|
|
96
|
+
function DynamicFormComponent_div_2_ng_container_9_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
97
|
+
const _r23 = i0.ɵɵgetCurrentView();
|
|
98
|
+
i0.ɵɵelementContainerStart(0);
|
|
99
|
+
i0.ɵɵelementStart(1, "ion-row")(2, "ion-col", 19)(3, "app-question", 18);
|
|
100
|
+
i0.ɵɵlistener("onDynamicParamUpdate", function DynamicFormComponent_div_2_ng_container_9_ng_container_2_Template_app_question_onDynamicParamUpdate_3_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r22 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r22.updateDynamicParam($event)); });
|
|
101
|
+
i0.ɵɵelementEnd()()();
|
|
102
|
+
i0.ɵɵelementContainerEnd();
|
|
103
|
+
} if (rf & 2) {
|
|
104
|
+
const element_r8 = i0.ɵɵnextContext().$implicit;
|
|
105
|
+
const ctx_r11 = i0.ɵɵnextContext(2);
|
|
106
|
+
i0.ɵɵadvance(2);
|
|
107
|
+
i0.ɵɵproperty("sizeLg", element_r8.sizeLG > 0 ? element_r8.sizeLG : "")("sizeSm", element_r8.sizeSM)("sizeXs", element_r8.sizeXS)("sizeXl", element_r8.sizeXL > 0 ? element_r8.sizeXL : "")("sizeMd", element_r8.sizeMD > 0 ? element_r8.sizeMD : "");
|
|
108
|
+
i0.ɵɵadvance(1);
|
|
109
|
+
i0.ɵɵproperty("potentialIssueId", ctx_r11.potentialIssueId)("question", element_r8)("form", ctx_r11.formGroupArray[ctx_r11.activeIndex])("forScreenQuestionnaire", ctx_r11.forScreenQuestionnaire)("dynamicParam", ctx_r11.dynamicParam);
|
|
110
|
+
} }
|
|
111
|
+
function DynamicFormComponent_div_2_ng_container_9_Template(rf, ctx) { if (rf & 1) {
|
|
112
|
+
i0.ɵɵelementContainerStart(0);
|
|
113
|
+
i0.ɵɵtemplate(1, DynamicFormComponent_div_2_ng_container_9_ng_container_1_Template, 4, 2, "ng-container", 2)(2, DynamicFormComponent_div_2_ng_container_9_ng_container_2_Template, 4, 10, "ng-container", 2);
|
|
114
|
+
i0.ɵɵelementContainerEnd();
|
|
115
|
+
} if (rf & 2) {
|
|
116
|
+
const element_r8 = ctx.$implicit;
|
|
117
|
+
const ctx_r5 = i0.ɵɵnextContext(2);
|
|
118
|
+
i0.ɵɵadvance(1);
|
|
119
|
+
i0.ɵɵproperty("ngIf", element_r8.type === "panel");
|
|
120
|
+
i0.ɵɵadvance(1);
|
|
121
|
+
i0.ɵɵproperty("ngIf", element_r8.type != "panel" && element_r8.type != "hidden" && ctx_r5.visibleIf(element_r8.visibleIf, element_r8.name, ctx_r5.formGroupArray[ctx_r5.activeIndex], element_r8));
|
|
122
|
+
} }
|
|
123
|
+
function DynamicFormComponent_div_2_ng_container_12_ng_container_1_ng_container_2_ion_col_1_Template(rf, ctx) { if (rf & 1) {
|
|
124
|
+
i0.ɵɵelementStart(0, "ion-col", 21)(1, "div");
|
|
125
|
+
i0.ɵɵelement(2, "panel-app", 22);
|
|
126
|
+
i0.ɵɵelementEnd()();
|
|
127
|
+
} if (rf & 2) {
|
|
128
|
+
const panelElement_r29 = i0.ɵɵnextContext().$implicit;
|
|
129
|
+
const ctx_r30 = i0.ɵɵnextContext(4);
|
|
130
|
+
i0.ɵɵproperty("sizeSm", panelElement_r29.sizeSM)("sizeXs", panelElement_r29.sizeXS)("sizeLg", panelElement_r29.sizeLG > 0 ? panelElement_r29.sizeLG : "")("sizeXl", panelElement_r29.sizeXL > 0 ? panelElement_r29.sizeXL : "")("sizeMd", panelElement_r29.sizeMD > 0 ? panelElement_r29.sizeMD : "");
|
|
131
|
+
i0.ɵɵadvance(2);
|
|
132
|
+
i0.ɵɵproperty("question", panelElement_r29)("form", ctx_r30.formGroupArray[ctx_r30.activeIndex])("forScreenQuestionnaire", ctx_r30.forScreenQuestionnaire);
|
|
133
|
+
} }
|
|
134
|
+
function DynamicFormComponent_div_2_ng_container_12_ng_container_1_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
135
|
+
i0.ɵɵelementContainerStart(0);
|
|
136
|
+
i0.ɵɵtemplate(1, DynamicFormComponent_div_2_ng_container_12_ng_container_1_ng_container_2_ion_col_1_Template, 3, 8, "ion-col", 20);
|
|
137
|
+
i0.ɵɵelementContainerEnd();
|
|
138
|
+
} if (rf & 2) {
|
|
139
|
+
const panelElement_r29 = ctx.$implicit;
|
|
140
|
+
const ctx_r28 = i0.ɵɵnextContext(4);
|
|
141
|
+
i0.ɵɵadvance(1);
|
|
142
|
+
i0.ɵɵproperty("ngIf", panelElement_r29.colElement === "COL2" && ctx_r28.visibleIf(panelElement_r29.visibleIf, panelElement_r29.name, ctx_r28.formGroupArray[ctx_r28.activeIndex], panelElement_r29));
|
|
143
|
+
} }
|
|
144
|
+
function DynamicFormComponent_div_2_ng_container_12_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
145
|
+
i0.ɵɵelementContainerStart(0);
|
|
146
|
+
i0.ɵɵelementStart(1, "ion-row");
|
|
147
|
+
i0.ɵɵtemplate(2, DynamicFormComponent_div_2_ng_container_12_ng_container_1_ng_container_2_Template, 2, 1, "ng-container", 9);
|
|
148
|
+
i0.ɵɵelementEnd();
|
|
149
|
+
i0.ɵɵelementContainerEnd();
|
|
150
|
+
} if (rf & 2) {
|
|
151
|
+
const element_r25 = i0.ɵɵnextContext().$implicit;
|
|
152
|
+
i0.ɵɵadvance(2);
|
|
153
|
+
i0.ɵɵproperty("ngForOf", element_r25.elements);
|
|
154
|
+
} }
|
|
155
|
+
function DynamicFormComponent_div_2_ng_container_12_Template(rf, ctx) { if (rf & 1) {
|
|
156
|
+
i0.ɵɵelementContainerStart(0);
|
|
157
|
+
i0.ɵɵtemplate(1, DynamicFormComponent_div_2_ng_container_12_ng_container_1_Template, 3, 1, "ng-container", 2);
|
|
158
|
+
i0.ɵɵelementContainerEnd();
|
|
159
|
+
} if (rf & 2) {
|
|
160
|
+
const element_r25 = ctx.$implicit;
|
|
161
|
+
const ctx_r6 = i0.ɵɵnextContext(2);
|
|
162
|
+
i0.ɵɵadvance(1);
|
|
163
|
+
i0.ɵɵproperty("ngIf", ctx_r6.visibleIf(element_r25.visibleIf, "", ctx_r6.formGroupArray[ctx_r6.activeIndex], element_r25));
|
|
164
|
+
} }
|
|
165
|
+
function DynamicFormComponent_div_2_ion_footer_13_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
166
|
+
const _r38 = i0.ɵɵgetCurrentView();
|
|
167
|
+
i0.ɵɵelementStart(0, "div", 25)(1, "div", 26)(2, "div", 27)(3, "ion-button", 28);
|
|
168
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_1_Template_ion_button_click_3_listener() { i0.ɵɵrestoreView(_r38); const ctx_r37 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r37.cancelAction()); });
|
|
169
|
+
i0.ɵɵtext(4, " Cancel ");
|
|
170
|
+
i0.ɵɵelementEnd()();
|
|
171
|
+
i0.ɵɵelementStart(5, "div", 29)(6, "ion-button", 30);
|
|
172
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_1_Template_ion_button_click_6_listener() { i0.ɵɵrestoreView(_r38); const ctx_r39 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r39.complete()); });
|
|
173
|
+
i0.ɵɵtext(7, " Next ");
|
|
174
|
+
i0.ɵɵelementEnd()()()();
|
|
175
|
+
} }
|
|
176
|
+
function DynamicFormComponent_div_2_ion_footer_13_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
177
|
+
const _r41 = i0.ɵɵgetCurrentView();
|
|
178
|
+
i0.ɵɵelementStart(0, "div", 25)(1, "div", 26)(2, "div", 27)(3, "ion-button", 28);
|
|
179
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_2_Template_ion_button_click_3_listener() { i0.ɵɵrestoreView(_r41); const ctx_r40 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r40.cancelAction()); });
|
|
180
|
+
i0.ɵɵtext(4, " Cancel ");
|
|
181
|
+
i0.ɵɵelementEnd()();
|
|
182
|
+
i0.ɵɵelementStart(5, "div", 29)(6, "ion-button", 30);
|
|
183
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_2_Template_ion_button_click_6_listener() { i0.ɵɵrestoreView(_r41); const ctx_r42 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r42.complete()); });
|
|
184
|
+
i0.ɵɵtext(7, " Done ");
|
|
185
|
+
i0.ɵɵelementEnd()()()();
|
|
186
|
+
} }
|
|
187
|
+
function DynamicFormComponent_div_2_ion_footer_13_ion_grid_3_Template(rf, ctx) { if (rf & 1) {
|
|
188
|
+
const _r44 = i0.ɵɵgetCurrentView();
|
|
189
|
+
i0.ɵɵelementStart(0, "ion-grid")(1, "ion-row")(2, "ion-col", 31)(3, "ion-button", 28);
|
|
190
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_ion_grid_3_Template_ion_button_click_3_listener() { i0.ɵɵrestoreView(_r44); const ctx_r43 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r43.cancelPopUp()); });
|
|
191
|
+
i0.ɵɵtext(4, " Cancel ");
|
|
192
|
+
i0.ɵɵelementEnd()();
|
|
193
|
+
i0.ɵɵelementStart(5, "ion-col", 32)(6, "ion-button", 30);
|
|
194
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_ion_grid_3_Template_ion_button_click_6_listener() { i0.ɵɵrestoreView(_r44); const ctx_r45 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r45.complete()); });
|
|
195
|
+
i0.ɵɵtext(7, " Add ");
|
|
196
|
+
i0.ɵɵelementEnd()()()();
|
|
197
|
+
} }
|
|
198
|
+
function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
199
|
+
i0.ɵɵtext(0);
|
|
200
|
+
} if (rf & 2) {
|
|
201
|
+
const i_r49 = i0.ɵɵnextContext().index;
|
|
202
|
+
const ctx_r50 = i0.ɵɵnextContext(4);
|
|
203
|
+
i0.ɵɵtextInterpolate(ctx_r50.questions[0].pages[i_r49].navigationTitle);
|
|
204
|
+
} }
|
|
205
|
+
function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
206
|
+
const _r58 = i0.ɵɵgetCurrentView();
|
|
207
|
+
i0.ɵɵelementStart(0, "div")(1, "button", 38);
|
|
208
|
+
i0.ɵɵtext(2, "Back");
|
|
209
|
+
i0.ɵɵelementEnd();
|
|
210
|
+
i0.ɵɵelementStart(3, "button", 39);
|
|
211
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r58); const ctx_r57 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r57.nextPage(ctx_r57.activeIndex)); });
|
|
212
|
+
i0.ɵɵtext(4, "Next");
|
|
213
|
+
i0.ɵɵelementEnd()();
|
|
214
|
+
} }
|
|
215
|
+
function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
216
|
+
const _r60 = i0.ɵɵgetCurrentView();
|
|
217
|
+
i0.ɵɵelementStart(0, "div")(1, "button", 40);
|
|
218
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r60); const ctx_r59 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r59.cancelAction()); });
|
|
219
|
+
i0.ɵɵtext(2, "Back");
|
|
220
|
+
i0.ɵɵelementEnd();
|
|
221
|
+
i0.ɵɵelementStart(3, "button", 39);
|
|
222
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r60); const ctx_r61 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r61.complete()); });
|
|
223
|
+
i0.ɵɵtext(4, "Next");
|
|
224
|
+
i0.ɵɵelementEnd()();
|
|
225
|
+
} }
|
|
226
|
+
function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
227
|
+
const _r63 = i0.ɵɵgetCurrentView();
|
|
228
|
+
i0.ɵɵelementStart(0, "div")(1, "button", 40);
|
|
229
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r63); const ctx_r62 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r62.prevPage(ctx_r62.activeIndex)); });
|
|
230
|
+
i0.ɵɵtext(2, "Back");
|
|
231
|
+
i0.ɵɵelementEnd();
|
|
232
|
+
i0.ɵɵelementStart(3, "button", 39);
|
|
233
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r63); const ctx_r64 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r64.complete()); });
|
|
234
|
+
i0.ɵɵtext(4, "Done");
|
|
235
|
+
i0.ɵɵelementEnd()();
|
|
236
|
+
} }
|
|
237
|
+
function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
238
|
+
const _r66 = i0.ɵɵgetCurrentView();
|
|
239
|
+
i0.ɵɵelementStart(0, "div")(1, "button", 41);
|
|
240
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r66); const ctx_r65 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r65.prevPage(ctx_r65.activeIndex)); });
|
|
241
|
+
i0.ɵɵtext(2, "Back");
|
|
242
|
+
i0.ɵɵelementEnd();
|
|
243
|
+
i0.ɵɵelementStart(3, "button", 39);
|
|
244
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r66); const ctx_r67 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r67.nextPage(ctx_r67.activeIndex)); });
|
|
245
|
+
i0.ɵɵtext(4, "Next");
|
|
246
|
+
i0.ɵɵelementEnd()();
|
|
247
|
+
} }
|
|
248
|
+
function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template(rf, ctx) { if (rf & 1) {
|
|
249
|
+
const _r69 = i0.ɵɵgetCurrentView();
|
|
250
|
+
i0.ɵɵelementStart(0, "div")(1, "button", 41);
|
|
251
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r69); const ctx_r68 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r68.cancelAction()); });
|
|
252
|
+
i0.ɵɵtext(2, "Back");
|
|
253
|
+
i0.ɵɵelementEnd();
|
|
254
|
+
i0.ɵɵelementStart(3, "button", 39);
|
|
255
|
+
i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r69); const ctx_r70 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r70.nextPage(ctx_r70.activeIndex)); });
|
|
256
|
+
i0.ɵɵtext(4, "Next");
|
|
257
|
+
i0.ɵɵelementEnd()();
|
|
258
|
+
} }
|
|
259
|
+
function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_Template(rf, ctx) { if (rf & 1) {
|
|
260
|
+
i0.ɵɵelementStart(0, "mat-step", 36)(1, "div");
|
|
261
|
+
i0.ɵɵtemplate(2, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_ng_template_2_Template, 1, 1, "ng-template", 37);
|
|
262
|
+
i0.ɵɵelementEnd();
|
|
263
|
+
i0.ɵɵtemplate(3, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Template, 5, 0, "div", 2)(4, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template, 5, 0, "div", 2)(5, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template, 5, 0, "div", 2)(6, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template, 5, 0, "div", 2)(7, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template, 5, 0, "div", 2);
|
|
264
|
+
i0.ɵɵelementEnd();
|
|
265
|
+
} if (rf & 2) {
|
|
266
|
+
const i_r49 = ctx.index;
|
|
267
|
+
const ctx_r47 = i0.ɵɵnextContext(4);
|
|
268
|
+
i0.ɵɵproperty("stepControl", ctx_r47.formGroupArray[i_r49])("completed", i_r49 < ctx_r47.activeIndex);
|
|
269
|
+
i0.ɵɵadvance(3);
|
|
270
|
+
i0.ɵɵproperty("ngIf", !ctx_r47.questions[0].isFirstPageSubmit && !ctx_r47.isLast && ctx_r47.isFirst && !ctx_r47.isEnableBackButton);
|
|
271
|
+
i0.ɵɵadvance(1);
|
|
272
|
+
i0.ɵɵproperty("ngIf", ctx_r47.questions[0].isFirstPageSubmit);
|
|
273
|
+
i0.ɵɵadvance(1);
|
|
274
|
+
i0.ɵɵproperty("ngIf", !ctx_r47.questions[0].isFirstPageSubmit && ctx_r47.isLast && !ctx_r47.isFirst);
|
|
275
|
+
i0.ɵɵadvance(1);
|
|
276
|
+
i0.ɵɵproperty("ngIf", !ctx_r47.questions[0].isFirstPageSubmit && !ctx_r47.isLast && !ctx_r47.isFirst);
|
|
277
|
+
i0.ɵɵadvance(1);
|
|
278
|
+
i0.ɵɵproperty("ngIf", ctx_r47.isEnableBackButton && !ctx_r47.questions[0].isFirstPageSubmit && !ctx_r47.isLast && ctx_r47.isFirst);
|
|
279
|
+
} }
|
|
280
|
+
function DynamicFormComponent_div_2_ion_footer_13_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
281
|
+
const _r72 = i0.ɵɵgetCurrentView();
|
|
282
|
+
i0.ɵɵelementStart(0, "div")(1, "mat-horizontal-stepper", 33, 34);
|
|
283
|
+
i0.ɵɵlistener("selectionChange", function DynamicFormComponent_div_2_ion_footer_13_div_4_Template_mat_horizontal_stepper_selectionChange_1_listener($event) { i0.ɵɵrestoreView(_r72); const ctx_r71 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r71.stepChanged($event)); });
|
|
284
|
+
i0.ɵɵtemplate(3, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_Template, 8, 7, "mat-step", 35);
|
|
285
|
+
i0.ɵɵelementEnd()();
|
|
286
|
+
} if (rf & 2) {
|
|
287
|
+
const ctx_r36 = i0.ɵɵnextContext(3);
|
|
288
|
+
i0.ɵɵadvance(1);
|
|
289
|
+
i0.ɵɵproperty("selectedIndex", ctx_r36.questions[0].stepCounter);
|
|
290
|
+
i0.ɵɵadvance(2);
|
|
291
|
+
i0.ɵɵproperty("ngForOf", ctx_r36.questions[0].pages);
|
|
292
|
+
} }
|
|
293
|
+
function DynamicFormComponent_div_2_ion_footer_13_Template(rf, ctx) { if (rf & 1) {
|
|
294
|
+
i0.ɵɵelementStart(0, "ion-footer", 23);
|
|
295
|
+
i0.ɵɵtemplate(1, DynamicFormComponent_div_2_ion_footer_13_div_1_Template, 8, 0, "div", 24)(2, DynamicFormComponent_div_2_ion_footer_13_div_2_Template, 8, 0, "div", 24)(3, DynamicFormComponent_div_2_ion_footer_13_ion_grid_3_Template, 8, 0, "ion-grid", 2)(4, DynamicFormComponent_div_2_ion_footer_13_div_4_Template, 4, 2, "div", 2);
|
|
296
|
+
i0.ɵɵelementEnd();
|
|
297
|
+
} if (rf & 2) {
|
|
298
|
+
const ctx_r7 = i0.ɵɵnextContext(2);
|
|
299
|
+
i0.ɵɵproperty("ngClass", "footer-fixed");
|
|
300
|
+
i0.ɵɵadvance(1);
|
|
301
|
+
i0.ɵɵproperty("ngIf", ctx_r7.hideStep && ctx_r7.pageType != "POPUP" && ctx_r7.pageType != "SCREEN");
|
|
302
|
+
i0.ɵɵadvance(1);
|
|
303
|
+
i0.ɵɵproperty("ngIf", ctx_r7.hideStep && ctx_r7.pageType == "SCREEN" && ctx_r7.questions[0].isFirstPageSubmit);
|
|
304
|
+
i0.ɵɵadvance(1);
|
|
305
|
+
i0.ɵɵproperty("ngIf", ctx_r7.hideStep && ctx_r7.pageType === "POPUP");
|
|
306
|
+
i0.ɵɵadvance(1);
|
|
307
|
+
i0.ɵɵproperty("ngIf", !ctx_r7.hideStep);
|
|
308
|
+
} }
|
|
309
|
+
function DynamicFormComponent_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
310
|
+
const _r74 = i0.ɵɵgetCurrentView();
|
|
311
|
+
i0.ɵɵelementStart(0, "div", null, 4)(2, "form", 5, 6);
|
|
312
|
+
i0.ɵɵlistener("ngSubmit", function DynamicFormComponent_div_2_Template_form_ngSubmit_2_listener() { i0.ɵɵrestoreView(_r74); const ctx_r73 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r73.onSubmit()); });
|
|
313
|
+
i0.ɵɵelementStart(4, "ion-grid");
|
|
314
|
+
i0.ɵɵtemplate(5, DynamicFormComponent_div_2_ion_row_5_Template, 6, 17, "ion-row", 2);
|
|
315
|
+
i0.ɵɵelementStart(6, "ion-row")(7, "ion-col", 7)(8, "div", 8);
|
|
316
|
+
i0.ɵɵtemplate(9, DynamicFormComponent_div_2_ng_container_9_Template, 3, 2, "ng-container", 9);
|
|
317
|
+
i0.ɵɵelementEnd()();
|
|
318
|
+
i0.ɵɵelementStart(10, "ion-col", 10)(11, "div", 8);
|
|
319
|
+
i0.ɵɵtemplate(12, DynamicFormComponent_div_2_ng_container_12_Template, 2, 1, "ng-container", 9);
|
|
320
|
+
i0.ɵɵelementEnd()()()();
|
|
321
|
+
i0.ɵɵtemplate(13, DynamicFormComponent_div_2_ion_footer_13_Template, 5, 5, "ion-footer", 11);
|
|
322
|
+
i0.ɵɵelementEnd()();
|
|
323
|
+
} if (rf & 2) {
|
|
324
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
325
|
+
i0.ɵɵadvance(2);
|
|
326
|
+
i0.ɵɵproperty("formGroup", ctx_r0.formGroupArray[ctx_r0.activeIndex])("ngClass", ctx_r0.multiMode ? "qe-form-multiple" : "qe-form");
|
|
327
|
+
i0.ɵɵadvance(3);
|
|
328
|
+
i0.ɵɵproperty("ngIf", ctx_r0.questions[0].pages[ctx_r0.activeIndex].name);
|
|
329
|
+
i0.ɵɵadvance(2);
|
|
330
|
+
i0.ɵɵproperty("sizeXs", ctx_r0.sizeXs)("sizeSm", ctx_r0.sizeSm)("sizeMd", ctx_r0.sizeMd)("sizeLg", ctx_r0.sizeLg)("sizeXl", ctx_r0.sizeXl)("offsetXs", ctx_r0.offsetXs)("offsetSm", ctx_r0.offsetSm)("offsetMd", ctx_r0.offsetMd)("offsetLg", ctx_r0.offsetLg)("offsetXl", ctx_r0.offsetXl);
|
|
331
|
+
i0.ɵɵadvance(2);
|
|
332
|
+
i0.ɵɵproperty("ngForOf", ctx_r0.questions[0].pages[ctx_r0.activeIndex].elements);
|
|
333
|
+
i0.ɵɵadvance(1);
|
|
334
|
+
i0.ɵɵproperty("sizeMd", ctx_r0.pageType === "POPUP" ? 6 : 12)("sizeLg", ctx_r0.pageType === "POPUP" ? 6 : 10)("sizeXl", ctx_r0.pageType === "POPUP" ? 5 : 10)("offsetXl", ctx_r0.pageType === "POPUP" ? 0 : 1)("offsetLg", ctx_r0.pageType === "POPUP" ? 0 : 1);
|
|
335
|
+
i0.ɵɵadvance(2);
|
|
336
|
+
i0.ɵɵproperty("ngForOf", ctx_r0.questions[0].pages[ctx_r0.activeIndex].elements);
|
|
337
|
+
i0.ɵɵadvance(1);
|
|
338
|
+
i0.ɵɵproperty("ngIf", !ctx_r0.hideFooter);
|
|
339
|
+
} }
|
|
340
|
+
function DynamicFormComponent_app_mfa_3_Template(rf, ctx) { if (rf & 1) {
|
|
341
|
+
const _r77 = i0.ɵɵgetCurrentView();
|
|
342
|
+
i0.ɵɵelementStart(0, "app-mfa", 42, 43);
|
|
343
|
+
i0.ɵɵlistener("success", function DynamicFormComponent_app_mfa_3_Template_app_mfa_success_0_listener($event) { i0.ɵɵrestoreView(_r77); const ctx_r76 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r76.saveScreenQuestionnaire($event)); });
|
|
344
|
+
i0.ɵɵelementEnd();
|
|
345
|
+
} if (rf & 2) {
|
|
346
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
347
|
+
i0.ɵɵproperty("user", ctx_r1.ls.getUser())("data", ctx_r1.mfaData)("requestCode", true)("mfaError", ctx_r1.mfaError)("hideButtons", true);
|
|
348
|
+
} }
|
|
349
|
+
export class DynamicFormComponent extends BasePage {
|
|
350
|
+
constructor(qes, questionnaireService, navCtrl, qcs, util, translate, logger, validationService, el, activatedRoute, storage, ls, captcha) {
|
|
351
|
+
super();
|
|
352
|
+
this.qes = qes;
|
|
353
|
+
this.questionnaireService = questionnaireService;
|
|
354
|
+
this.navCtrl = navCtrl;
|
|
355
|
+
this.qcs = qcs;
|
|
356
|
+
this.util = util;
|
|
357
|
+
this.translate = translate;
|
|
358
|
+
this.logger = logger;
|
|
359
|
+
this.validationService = validationService;
|
|
360
|
+
this.el = el;
|
|
361
|
+
this.activatedRoute = activatedRoute;
|
|
362
|
+
this.storage = storage;
|
|
363
|
+
this.ls = ls;
|
|
364
|
+
this.captcha = captcha;
|
|
365
|
+
this.focusables = ["pinputtext", "p-inputmask", "input", "select", "textarea", "p-calendar", "radio", "p-dropdown", "p-selectButton", "p-autocomplete", "p-password", "p-checkbox", "p-inputtextarea"];
|
|
366
|
+
this.blockUi = false;
|
|
367
|
+
this.showMfa = false;
|
|
368
|
+
this.questions = [];
|
|
369
|
+
this.hideFooter = false;
|
|
370
|
+
this.multiMode = false; //when multiple forms are displayed one below the another
|
|
371
|
+
/**
|
|
372
|
+
* when autoSave is false, component will only emit the value of the form builer data which needs to be saved by the calling component
|
|
373
|
+
* only applicable when pageType is not POPUP and JSON
|
|
374
|
+
**/
|
|
375
|
+
this.autoSave = true;
|
|
376
|
+
this.mfaRequired = false;
|
|
377
|
+
this.modelCancel = new EventEmitter();
|
|
378
|
+
this.onComplete = new EventEmitter();
|
|
379
|
+
this.onError = new EventEmitter();
|
|
380
|
+
this.questionNumber = null;
|
|
381
|
+
// form: FormGroup;
|
|
382
|
+
this.formGroupArray = [];
|
|
383
|
+
this.payLoad = '';
|
|
384
|
+
this.items = [];
|
|
385
|
+
this.isFirst = true;
|
|
386
|
+
this.isLast = false;
|
|
387
|
+
this.submitted = false;
|
|
388
|
+
this.hideStep = false;
|
|
389
|
+
this.identifier = "";
|
|
390
|
+
this.activeIndex = 0;
|
|
391
|
+
this.errorOccured = false;
|
|
392
|
+
}
|
|
393
|
+
/*This will be called whenever @Input 'formData' value is changed for this control*/
|
|
394
|
+
ngOnChanges(changes) {
|
|
395
|
+
console.log("before ==> ", this.formGroupArray[this.activeIndex]);
|
|
396
|
+
if (changes.formData?.currentValue) {
|
|
397
|
+
if (changes.formData.currentValue) {
|
|
398
|
+
this.setFormValues(changes.formData.currentValue);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
if (changes.readOnlyFields?.currentValue) {
|
|
402
|
+
for (let cntrlName of changes.readOnlyFields.currentValue) {
|
|
403
|
+
if (this.formGroupArray[this.activeIndex]?.get(cntrlName)) {
|
|
404
|
+
this.formGroupArray[this.activeIndex]?.get(cntrlName).disable();
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
else if (changes.readOnlyFields?.previousValue && changes.readOnlyFields.currentValue == null) {
|
|
409
|
+
for (let cntrlName of changes.readOnlyFields.previousValue) {
|
|
410
|
+
if (this.formGroupArray[this.activeIndex]?.get(cntrlName)) {
|
|
411
|
+
this.formGroupArray[this.activeIndex]?.get(cntrlName).enable();
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
console.log("after ==> ", this.formGroupArray[this.activeIndex]);
|
|
416
|
+
}
|
|
417
|
+
setFormValues(data) {
|
|
418
|
+
Object.keys(data)
|
|
419
|
+
.forEach(key => {
|
|
420
|
+
let question = this.getFormControlConfiguration(key);
|
|
421
|
+
let valueToSet = data[key];
|
|
422
|
+
if (question) {
|
|
423
|
+
/** For dropdown form control, expecting to get data in form {value : "someValue", text: null}.
|
|
424
|
+
* Based on the value attribute, option will be set on form control after reading it from choices
|
|
425
|
+
* array.
|
|
426
|
+
*/
|
|
427
|
+
if (valueToSet) {
|
|
428
|
+
let choice = question.choices.filter(o => o.value == (valueToSet?.value ? valueToSet.value : valueToSet))[0];
|
|
429
|
+
this.setValueInFormControl(key, choice);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
this.setValueInFormControl(key, valueToSet);
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
setValueInFormControl(name, value) {
|
|
438
|
+
if (this.formGroupArray && this.formGroupArray.length > 0) {
|
|
439
|
+
let control = this.formGroupArray[this.activeIndex]?.controls[name];
|
|
440
|
+
if (control) {
|
|
441
|
+
control.patchValue(value);
|
|
442
|
+
}
|
|
443
|
+
else if (name == 'dependentTable') {
|
|
444
|
+
console.error('No form control present dependentTable ', name);
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
console.error('No form control present with name ', name);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
console.warn("No form group present so skipping value assignment from data.");
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
/* To get the dropdown element so that value from the choices can be read and set into the form control*/
|
|
455
|
+
getFormControlConfiguration(name) {
|
|
456
|
+
let filteredValues = this.questions[0].pages[this.activeIndex].elements.filter(q => q.name == name && q.type == 'dropdown');
|
|
457
|
+
if (filteredValues && filteredValues.length > 0) {
|
|
458
|
+
return filteredValues[0];
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
return null;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
setupLoaderModel() {
|
|
465
|
+
if (this.loaderService) {
|
|
466
|
+
let serviceUrls = this.loaderService.split(',');
|
|
467
|
+
let serviceUrl = serviceUrls[this.activeIndex];
|
|
468
|
+
if (serviceUrl.trim() != 'null') {
|
|
469
|
+
this.blockFormUi();
|
|
470
|
+
let serviceUrlValue = serviceUrl.trim();
|
|
471
|
+
if (this.ls.isCsr()) {
|
|
472
|
+
serviceUrlValue = serviceUrlValue;
|
|
473
|
+
}
|
|
474
|
+
const options = this.ls.isCsr() ? { params: new HttpParams().set('ssn', this.ssnForCSR) } : {};
|
|
475
|
+
this.validationService
|
|
476
|
+
.get(`${serviceUrlValue}`, options)
|
|
477
|
+
.subscribe(res => {
|
|
478
|
+
this.loaderModel = res;
|
|
479
|
+
this.logger.debug("loader model = " + this.loaderModel);
|
|
480
|
+
this.unblockFormUi();
|
|
481
|
+
if (this.loaderModel && this.loaderModel.disableControlNames) {
|
|
482
|
+
this.readOnlyFields = this.loaderModel.disableControlNames;
|
|
483
|
+
for (let cntrlName of this.readOnlyFields) {
|
|
484
|
+
if (this.formGroupArray[this.activeIndex]?.get(cntrlName)) {
|
|
485
|
+
this.formGroupArray[this.activeIndex]?.get(cntrlName).disable();
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
if (this.qcs.getData(this.activeIndex) != null) {
|
|
490
|
+
this.formData = JSON.parse(this.qcs.getData(this.activeIndex));
|
|
491
|
+
this.formGroupArray[this.activeIndex].patchValue(this.formData);
|
|
492
|
+
}
|
|
493
|
+
if (this.loaderModel && this.loaderModel.data) {
|
|
494
|
+
this.formData = this.loaderModel.data;
|
|
495
|
+
this.setFormValues(this.formData);
|
|
496
|
+
}
|
|
497
|
+
}, err => {
|
|
498
|
+
this.util.hideLoader();
|
|
499
|
+
this.util.errorHandler(err);
|
|
500
|
+
this.unblockFormUi();
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
else {
|
|
505
|
+
if (this.qcs.getData(this.activeIndex) != null) {
|
|
506
|
+
this.formData = JSON.parse(this.qcs.getData(this.activeIndex));
|
|
507
|
+
this.formGroupArray[this.activeIndex].patchValue(this.formData);
|
|
508
|
+
}
|
|
509
|
+
if (this.data) {
|
|
510
|
+
this.formData = this.data;
|
|
511
|
+
this.setFormValues(this.formData);
|
|
512
|
+
}
|
|
513
|
+
else if (this.formData) {
|
|
514
|
+
this.setFormValues(this.formData);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
ngOnInit() {
|
|
519
|
+
console.log("ngoninit before ==> ", this.formGroupArray[this.activeIndex]);
|
|
520
|
+
this.logger.debug('Init method called from dynamic form', this.questions);
|
|
521
|
+
this.logger.debug(' backButtonPage ', this.backButtonPage, ' nextButtonPage', this.nextButtonPage);
|
|
522
|
+
if (!this.questions) {
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
if (this.questions[0].pages.length === 1) {
|
|
526
|
+
this.hideStep = true;
|
|
527
|
+
}
|
|
528
|
+
else {
|
|
529
|
+
this.isFirst = true;
|
|
530
|
+
}
|
|
531
|
+
let strKey = [];
|
|
532
|
+
let paramMap = new Map();
|
|
533
|
+
this.activatedRoute.queryParamMap.subscribe(params => {
|
|
534
|
+
strKey = [] = params.keys;
|
|
535
|
+
this.identifier = params.get('identifier');
|
|
536
|
+
for (var i = 0; i < strKey.length; i++) {
|
|
537
|
+
this.logger.debug('stringKey ', strKey[i], params.get(strKey[i]));
|
|
538
|
+
paramMap.set(strKey[i], params.get(strKey[i]));
|
|
539
|
+
}
|
|
540
|
+
if (paramMap.get("key") != null) {
|
|
541
|
+
this.ssnForCSR = atob(paramMap.get("key"));
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
let counter = this.questions[0].stepCounter;
|
|
545
|
+
this.activeIndex = counter ? counter : 0;
|
|
546
|
+
//this.stepper
|
|
547
|
+
for (let i = 0; i < this.questions[0].pages.length; i++) {
|
|
548
|
+
let formGroup;
|
|
549
|
+
this.logger.debug("Block statement execution no.", this.questions[0].pages.length);
|
|
550
|
+
formGroup = this.qcs.toFormGroup(this.questions, i, paramMap);
|
|
551
|
+
this.setValidation(i, formGroup);
|
|
552
|
+
this.setValueSubscription(i, formGroup);
|
|
553
|
+
this.setReadOnly(i, formGroup);
|
|
554
|
+
var pages = this.questions[0].pages[i];
|
|
555
|
+
this.logger.debug('pages', pages);
|
|
556
|
+
let validatorFunctionList = [];
|
|
557
|
+
if (pages.elements) {
|
|
558
|
+
pages.elements.forEach((element) => {
|
|
559
|
+
let contrlType = element.type;
|
|
560
|
+
if (contrlType === 'panel') {
|
|
561
|
+
//this.logger.debug('Inside If',element)
|
|
562
|
+
element.elements.forEach(panelElement => {
|
|
563
|
+
if (panelElement.requiredIf && panelElement.type != 'button' && panelElement.type != 'simpleLabel') {
|
|
564
|
+
validatorFunctionList.push(AppValidators.setRequiredIfValidation(panelElement, this.qcs.getAllData()));
|
|
565
|
+
}
|
|
566
|
+
if (panelElement.validators) {
|
|
567
|
+
let validatorList = panelElement.validators;
|
|
568
|
+
//this.logger.debug("panel validation.111",panelElement);
|
|
569
|
+
validatorList.forEach(validator => {
|
|
570
|
+
if (validator.type === 'expression' && panelElement.inputType && panelElement.inputType === 'date') {
|
|
571
|
+
this.logger.debug('Inside expression');
|
|
572
|
+
validatorFunctionList.push(AppValidators.setDateValidation(panelElement, this.qcs.getAllData()));
|
|
573
|
+
}
|
|
574
|
+
if (validator.type === 'expression' && panelElement.inputType && panelElement.inputType === 'text'
|
|
575
|
+
&& panelElement.customTag && (panelElement.customTag === 'password' || panelElement.customTag === 'email' || panelElement.customTag === 'ssn')) {
|
|
576
|
+
this.logger.debug('Inside expression');
|
|
577
|
+
validatorFunctionList.push(AppValidators.setPasswordValidation(panelElement, this.qcs.getAllData()));
|
|
578
|
+
}
|
|
579
|
+
if (validator.type === 'customvalidation') {
|
|
580
|
+
validatorFunctionList.push(AppValidators.customValidation(panelElement, validator, this.util.getState()));
|
|
581
|
+
}
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
});
|
|
585
|
+
}
|
|
586
|
+
else {
|
|
587
|
+
//this.logger.debug('Inside else',element)
|
|
588
|
+
if (element.requiredIf && element.type != 'button' && element.type != 'simpleLabel') {
|
|
589
|
+
validatorFunctionList.push(AppValidators.setRequiredIfValidation(element, this.qcs.getAllData()));
|
|
590
|
+
}
|
|
591
|
+
if (element.validators) {
|
|
592
|
+
let validatorList = element.validators;
|
|
593
|
+
validatorList.forEach(validator => {
|
|
594
|
+
if (validator.type === 'expression' && element.inputType && element.inputType === 'date') {
|
|
595
|
+
this.logger.debug('Inside expression');
|
|
596
|
+
validatorFunctionList.push(AppValidators.setDateValidation(element, this.qcs.getAllData()));
|
|
597
|
+
}
|
|
598
|
+
if (validator.type === 'customvalidation') {
|
|
599
|
+
validatorFunctionList.push(AppValidators.customValidation(element, validator, this.util.getState()));
|
|
600
|
+
}
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
if (element.serviceType && element.serviceType === 'VALIDATE') {
|
|
604
|
+
//validatorFunctionList.push(AppValidators.createValidator(this.validationService,element));
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
formGroup.setValidators(validatorFunctionList);
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
this.formGroupArray.push(formGroup);
|
|
611
|
+
this.logger.debug("pages.qeData", pages.qeData);
|
|
612
|
+
if (pages.qeData) {
|
|
613
|
+
formGroup.patchValue(pages.qeData);
|
|
614
|
+
}
|
|
615
|
+
this.logger.debug("set values as per loader service = ", this.formData);
|
|
616
|
+
if (this.formData && this.formData) {
|
|
617
|
+
this.setFormValues(this.formData);
|
|
618
|
+
}
|
|
619
|
+
if (this.formReadOnly) {
|
|
620
|
+
this.formGroupArray[i].disable();
|
|
621
|
+
}
|
|
622
|
+
if (this.readOnlyFields && this.readOnlyFields) {
|
|
623
|
+
for (let cntrlName of this.readOnlyFields) {
|
|
624
|
+
if (this.formGroupArray[i].get(cntrlName)) {
|
|
625
|
+
this.formGroupArray[i].get(cntrlName).disable();
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
this.setupLoaderModel();
|
|
631
|
+
if (this.pageType === 'POPUP') {
|
|
632
|
+
let model = new ClaimAppEmployerDetailsModel();
|
|
633
|
+
model = this.data;
|
|
634
|
+
this.formGroupArray[0].patchValue(model);
|
|
635
|
+
this.logger.debug('this.formGroupArray after IF', this.formGroupArray);
|
|
636
|
+
}
|
|
637
|
+
if (this.pageType === 'Json' && this.formData) {
|
|
638
|
+
this.formGroupArray[0].patchValue(this.formData);
|
|
639
|
+
if (this.formReadOnly) {
|
|
640
|
+
this.formGroupArray[0].disable();
|
|
641
|
+
}
|
|
642
|
+
else {
|
|
643
|
+
for (let cntrlName of this.readOnlyFields) {
|
|
644
|
+
if (this.formGroupArray[0].get(cntrlName)) {
|
|
645
|
+
this.formGroupArray[0].get(cntrlName).disable();
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
let currentQe = this.qes.searchBs.getValue();
|
|
651
|
+
this.potentialIssueId = currentQe?.potentialIssueId;
|
|
652
|
+
console.log("ngoninit after ==> ", this.formGroupArray[this.activeIndex]);
|
|
653
|
+
}
|
|
654
|
+
setValueSubscription(pageIndex, formGroup) {
|
|
655
|
+
var pages = this.questions[0].pages[pageIndex];
|
|
656
|
+
if (pages.elements) {
|
|
657
|
+
pages.elements.forEach(element => {
|
|
658
|
+
let contrlType = element.type;
|
|
659
|
+
if (element.subscribeValueOf) {
|
|
660
|
+
formGroup.controls[element.subscribeValueOf]
|
|
661
|
+
.valueChanges
|
|
662
|
+
.subscribe(value => formGroup.controls[element.name].setValue(value));
|
|
663
|
+
}
|
|
664
|
+
if (contrlType === 'panel') {
|
|
665
|
+
// this.logger.debug('Inside panelContrlType', element.elements)
|
|
666
|
+
element.elements.forEach(panelElement => {
|
|
667
|
+
if (panelElement.subscribeValueOf) {
|
|
668
|
+
formGroup.controls[panelElement.subscribeValueOf].valueChanges.
|
|
669
|
+
subscribe((change) => formGroup.controls[panelElement.name].setValue(change));
|
|
670
|
+
}
|
|
671
|
+
});
|
|
672
|
+
}
|
|
673
|
+
});
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
setReadOnly(pageIndex, formGroup) {
|
|
677
|
+
var pages = this.questions[0].pages[pageIndex];
|
|
678
|
+
if (pages.elements) {
|
|
679
|
+
pages.elements.forEach(element => {
|
|
680
|
+
let contrlType = element.type;
|
|
681
|
+
if (element.readonly) {
|
|
682
|
+
formGroup.controls[element.name].disable();
|
|
683
|
+
}
|
|
684
|
+
if (contrlType === 'panel') {
|
|
685
|
+
// this.logger.debug('Inside panelContrlType', element.elements)
|
|
686
|
+
element.elements.forEach(panelElement => {
|
|
687
|
+
if (element.readonly) {
|
|
688
|
+
formGroup.controls[panelElement.name].disable();
|
|
689
|
+
}
|
|
690
|
+
});
|
|
691
|
+
}
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
setValidation(pageIndex, formGroup) {
|
|
696
|
+
var pages = this.questions[0].pages[pageIndex];
|
|
697
|
+
//this.questions[0].pages.forEach(pages => {
|
|
698
|
+
if (pages.elements) {
|
|
699
|
+
pages.elements.forEach(element => {
|
|
700
|
+
let contrlType = element.type;
|
|
701
|
+
// this.logger.debug('element == ',element);
|
|
702
|
+
if (contrlType === 'text' || contrlType === 'number') {
|
|
703
|
+
this.setValidationForTextControl(element, formGroup);
|
|
704
|
+
}
|
|
705
|
+
if (contrlType === 'comment') {
|
|
706
|
+
this.setValidationForCommentControl(element, formGroup);
|
|
707
|
+
}
|
|
708
|
+
if (contrlType === 'dropdown') {
|
|
709
|
+
this.setValidationForDropDownControl(element, formGroup);
|
|
710
|
+
}
|
|
711
|
+
if (contrlType === 'radiogroup' || contrlType === 'autocomplete') {
|
|
712
|
+
this.setValidationForRadioControl(element, formGroup);
|
|
713
|
+
}
|
|
714
|
+
if (contrlType === 'checkbox' || contrlType === 'singleselectcheckbox' || contrlType === 'simplecheckbox' || contrlType === 'multicheckbox') {
|
|
715
|
+
// this.logger.debug('singleselectcheckbox called',element);
|
|
716
|
+
this.setValidationForCheckBoxControl(element, formGroup);
|
|
717
|
+
}
|
|
718
|
+
if (contrlType === 'panel') {
|
|
719
|
+
// this.logger.debug('Inside panelContrlType', element.elements)
|
|
720
|
+
element.elements.forEach(panelElement => {
|
|
721
|
+
let panelContrlType = panelElement.type;
|
|
722
|
+
if (panelContrlType === 'dropdown') {
|
|
723
|
+
// this.logger.debug('Inside panelContrlType', panelElement)
|
|
724
|
+
this.setValidationForDropDownControl(panelElement, formGroup);
|
|
725
|
+
}
|
|
726
|
+
if (panelContrlType === 'text' || panelContrlType === 'number') {
|
|
727
|
+
// this.logger.debug('panelContrlType', panelContrlType,'panelElement',panelElement)
|
|
728
|
+
this.setValidationForTextControl(panelElement, formGroup);
|
|
729
|
+
}
|
|
730
|
+
if (panelContrlType === 'radiogroup' || panelContrlType === 'autocomplete') {
|
|
731
|
+
this.setValidationForRadioControl(panelElement, formGroup);
|
|
732
|
+
}
|
|
733
|
+
if (panelContrlType === 'checkbox' || panelContrlType === 'singleselectcheckbox') {
|
|
734
|
+
this.setValidationForCheckBoxControl(panelElement, formGroup);
|
|
735
|
+
}
|
|
736
|
+
});
|
|
737
|
+
}
|
|
738
|
+
});
|
|
739
|
+
}
|
|
740
|
+
//});
|
|
741
|
+
}
|
|
742
|
+
setValidationForCheckBoxControl(element, formGroup) {
|
|
743
|
+
if (formGroup && formGroup.controls[element.name]) {
|
|
744
|
+
let validatorFunctionList = [];
|
|
745
|
+
if (element.isRequired && !element.requiredIf) {
|
|
746
|
+
validatorFunctionList.push(Validators.required);
|
|
747
|
+
}
|
|
748
|
+
formGroup.controls[element.name].setValidators(validatorFunctionList);
|
|
749
|
+
formGroup.controls[element.name].updateValueAndValidity();
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
setValidationForRadioControl(element, formGroup) {
|
|
753
|
+
if (formGroup && formGroup.controls[element.name]) {
|
|
754
|
+
let validatorFunctionList = [];
|
|
755
|
+
if (element.isRequired && !element.requiredIf) {
|
|
756
|
+
validatorFunctionList.push(Validators.required);
|
|
757
|
+
}
|
|
758
|
+
formGroup.controls[element.name].setValidators(validatorFunctionList);
|
|
759
|
+
formGroup.controls[element.name].updateValueAndValidity();
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
setValidationForDropDownControl(element, formGroup) {
|
|
763
|
+
if (formGroup && formGroup.controls[element.name]) {
|
|
764
|
+
let validatorFunctionList = [];
|
|
765
|
+
//Validation need to be check
|
|
766
|
+
if (element.isRequired && !element.requiredIf) {
|
|
767
|
+
//this.logger.debug('setValidationForDropDownControl', element.name)
|
|
768
|
+
validatorFunctionList.push(Validators.required);
|
|
769
|
+
}
|
|
770
|
+
formGroup.controls[element.name].setValidators(validatorFunctionList);
|
|
771
|
+
formGroup.controls[element.name].updateValueAndValidity();
|
|
772
|
+
}
|
|
773
|
+
//this.logger.debug(element.name,'formGroup.controls[element.name]',formGroup.controls[element.name]);
|
|
774
|
+
}
|
|
775
|
+
setValidationForCommentControl(element, formGroup) {
|
|
776
|
+
if (formGroup && formGroup.controls[element.name]) {
|
|
777
|
+
let validatorFunctionList = [];
|
|
778
|
+
if (element.isRequired && !element.requiredIf) {
|
|
779
|
+
validatorFunctionList.push(Validators.required);
|
|
780
|
+
}
|
|
781
|
+
formGroup.controls[element.name].setValidators(validatorFunctionList);
|
|
782
|
+
formGroup.controls[element.name].updateValueAndValidity();
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
setValidationForTextControl(element, formGroup) {
|
|
786
|
+
// this.logger.debug('setValidationForTextControl',element);
|
|
787
|
+
if (formGroup && formGroup.controls[element.name]) {
|
|
788
|
+
let validatorFunctionList = [];
|
|
789
|
+
if (element.isRequired && !element.requiredIf) {
|
|
790
|
+
// this.logger.debug('setValidationForTextControl isRequired ',element);
|
|
791
|
+
validatorFunctionList.push(Validators.required);
|
|
792
|
+
}
|
|
793
|
+
if (element.validators) {
|
|
794
|
+
let validatorList = element.validators;
|
|
795
|
+
validatorList.forEach(validator => {
|
|
796
|
+
if (validator.type === 'expression' && element.inputType && element.inputType === 'date') {
|
|
797
|
+
//this.logger.debug('Inside expression')
|
|
798
|
+
// validatorFunctionList.push(AppValidators.setDateValidation(validator.expression, this.qcs.getAllData(), { dateComparision: true }));
|
|
799
|
+
}
|
|
800
|
+
if (validator.type === 'regex') {
|
|
801
|
+
validatorFunctionList.push(Validators.pattern(validator.regex));
|
|
802
|
+
}
|
|
803
|
+
if (validator.type === 'text' && validator.minLength) {
|
|
804
|
+
validatorFunctionList.push(Validators.minLength(validator.minLength));
|
|
805
|
+
}
|
|
806
|
+
if (validator.type === 'text' && validator.maxLength) {
|
|
807
|
+
validatorFunctionList.push(Validators.maxLength(validator.maxLength));
|
|
808
|
+
}
|
|
809
|
+
if (validator.type === 'numeric') {
|
|
810
|
+
validatorFunctionList.push(Validators.max(validator.maxValue));
|
|
811
|
+
}
|
|
812
|
+
});
|
|
813
|
+
}
|
|
814
|
+
formGroup.controls[element.name].setValidators(validatorFunctionList);
|
|
815
|
+
formGroup.controls[element.name].updateValueAndValidity();
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
nextPage(index) {
|
|
819
|
+
this.logger.debug("next page called ---- ");
|
|
820
|
+
let formGroup = this.formGroupArray[index];
|
|
821
|
+
if (formGroup.invalid) {
|
|
822
|
+
this.logger.debug('Inside if', formGroup);
|
|
823
|
+
formGroup.markAllAsTouched();
|
|
824
|
+
Object.values(formGroup.controls).forEach(control => {
|
|
825
|
+
control.markAsDirty();
|
|
826
|
+
});
|
|
827
|
+
return;
|
|
828
|
+
}
|
|
829
|
+
this.qcs.setData(this.activeIndex, JSON.stringify(formGroup.getRawValue()));
|
|
830
|
+
//Logic to save start
|
|
831
|
+
let strIntoObj;
|
|
832
|
+
this.qcs.getAllData().forEach(data => {
|
|
833
|
+
strIntoObj = (data);
|
|
834
|
+
this.payLoad = (this.payLoad + strIntoObj);
|
|
835
|
+
});
|
|
836
|
+
let saveData = {};
|
|
837
|
+
let currentQe = this.qes.searchBs.getValue();
|
|
838
|
+
let employeeData = this.qes.employeeBs.getValue();
|
|
839
|
+
this.logger.debug('employeeData ', employeeData);
|
|
840
|
+
if (this.forScreenQuestionnaire) {
|
|
841
|
+
let dataArr = [];
|
|
842
|
+
this.qcs.getAllData().forEach(data => {
|
|
843
|
+
dataArr.push(data);
|
|
844
|
+
});
|
|
845
|
+
saveData.screenQuestionnaireData = dataArr;
|
|
846
|
+
saveData.userType = currentQe.userType;
|
|
847
|
+
saveData.flowFrom = currentQe.flowFrom;
|
|
848
|
+
saveData.questionnaireIds = currentQe.questionnaireIds;
|
|
849
|
+
saveData.empModel = employeeData;
|
|
850
|
+
saveData.uuid = this.identifier; //currentQe.uuid;
|
|
851
|
+
saveData.flowKey = currentQe.flowKey;
|
|
852
|
+
saveData.activePageIndex = this.activeIndex;
|
|
853
|
+
saveData.questionnaireId = currentQe.questionnaireId;
|
|
854
|
+
this.logger.debug('save Data ', saveData);
|
|
855
|
+
this.util.showLoader();
|
|
856
|
+
this.questionnaireService
|
|
857
|
+
.saveScreenQuestionnaire(saveData)
|
|
858
|
+
.subscribe(async (res) => {
|
|
859
|
+
this.util.hideLoader();
|
|
860
|
+
if (res) {
|
|
861
|
+
this.logger.debug(res);
|
|
862
|
+
this.logger.debug("res uuid ==== ", res[FbConstants.uuid]);
|
|
863
|
+
this.questionnaireService.uuid.next(res[FbConstants.uuid]);
|
|
864
|
+
await this.storage.set(FbConstants.uuid, res[FbConstants.uuid]);
|
|
865
|
+
if (res['redirectToEnd'] === true) {
|
|
866
|
+
this.questionnaireService.successElement.next(res[FbConstants.successPageElement]);
|
|
867
|
+
this.questionnaireService.waitForProcessing.next(res[FbConstants.waitForProcessing]);
|
|
868
|
+
this.questionnaireService.pageToOpen.next(res[FbConstants.pageToOpen]);
|
|
869
|
+
await this.storage.set(FbConstants.successPageElement, res[FbConstants.successPageElement]);
|
|
870
|
+
await this.storage.set(FbConstants.waitForProcessing, res[FbConstants.waitForProcessing]);
|
|
871
|
+
await this.storage.set(FbConstants.pageToOpen, res[FbConstants.pageToOpen]);
|
|
872
|
+
this.navCtrl.navigateRoot(`/${this.nextButtonPage}?identifier=${res['uuid']}`);
|
|
873
|
+
}
|
|
874
|
+
else {
|
|
875
|
+
this.activeIndex = index + 1;
|
|
876
|
+
this.setPrevAndNextButton();
|
|
877
|
+
}
|
|
878
|
+
this.identifier = res['uuid'];
|
|
879
|
+
}
|
|
880
|
+
}, err => {
|
|
881
|
+
this.qcs.sharedData.clear();
|
|
882
|
+
this.errorOccured = true;
|
|
883
|
+
this.util.hideLoader();
|
|
884
|
+
this.util.errorHandler(err);
|
|
885
|
+
});
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
prevPage(index) {
|
|
889
|
+
this.activeIndex = index - 1;
|
|
890
|
+
this.setPrevAndNextButton();
|
|
891
|
+
}
|
|
892
|
+
visibleIf(strExp, elementName, formGroup, element) {
|
|
893
|
+
if (!strExp) {
|
|
894
|
+
return true;
|
|
895
|
+
}
|
|
896
|
+
let isVisible = false;
|
|
897
|
+
if (strExp.includes('&&')) {
|
|
898
|
+
let expr = strExp.split('&&');
|
|
899
|
+
isVisible = AppValidators.calculateOperandValue(expr[0].trim(), formGroup) && AppValidators.calculateOperandValue(expr[1].trim(), formGroup);
|
|
900
|
+
}
|
|
901
|
+
if (strExp.includes('||')) {
|
|
902
|
+
let expr = strExp.split('||');
|
|
903
|
+
isVisible = AppValidators.calculateOperandValue(expr[0].trim(), formGroup) || AppValidators.calculateOperandValue(expr[1].trim(), formGroup);
|
|
904
|
+
}
|
|
905
|
+
if (!strExp.includes('||') && !strExp.includes('&&')) {
|
|
906
|
+
isVisible = AppValidators.calculateOperandValue(strExp.trim(), formGroup);
|
|
907
|
+
}
|
|
908
|
+
if (isVisible) {
|
|
909
|
+
return isVisible;
|
|
910
|
+
}
|
|
911
|
+
if (elementName && formGroup.controls[elementName] && !element.subscribeValueOf) {
|
|
912
|
+
if (this.formData && !this.formData[elementName]) {
|
|
913
|
+
formGroup.controls[elementName].setValue(null);
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
return false;
|
|
917
|
+
}
|
|
918
|
+
complete() {
|
|
919
|
+
this.logger.debug('complete method called =======');
|
|
920
|
+
if (this.mfaRequired && this.showMfa && this.mfa) {
|
|
921
|
+
this.mfa.submit();
|
|
922
|
+
}
|
|
923
|
+
let formGroup;
|
|
924
|
+
this.logger.debug('Submit called from complete method in dynamic form');
|
|
925
|
+
for (var i = 0; i < this.formGroupArray.length; i++) {
|
|
926
|
+
formGroup = this.formGroupArray[i];
|
|
927
|
+
this.logger.debug('Inside if', formGroup);
|
|
928
|
+
if (formGroup.invalid) {
|
|
929
|
+
this.logger.debug('Inside if', formGroup);
|
|
930
|
+
formGroup.markAllAsTouched();
|
|
931
|
+
Object.values(formGroup.controls).forEach(control => {
|
|
932
|
+
//this.logger.debug('control', control);
|
|
933
|
+
control.markAsDirty();
|
|
934
|
+
});
|
|
935
|
+
this.questionnaireForm.onSubmit(undefined);
|
|
936
|
+
return;
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
formGroup = this.formGroupArray[this.activeIndex];
|
|
940
|
+
this.logger.debug('formGroup', formGroup);
|
|
941
|
+
this.qcs.setData(this.activeIndex, JSON.stringify(formGroup.getRawValue()));
|
|
942
|
+
let strIntoObj;
|
|
943
|
+
this.payLoad = '';
|
|
944
|
+
this.qcs.getAllData().forEach(data => {
|
|
945
|
+
strIntoObj = (data);
|
|
946
|
+
this.payLoad = (this.payLoad + strIntoObj);
|
|
947
|
+
});
|
|
948
|
+
let saveData = {};
|
|
949
|
+
let currentQe = this.autoSave ? this.qes.searchBs.getValue() : this.queryModel;
|
|
950
|
+
if (this.pageType === 'POPUP' || this.pageType === 'Json') {
|
|
951
|
+
this.onComplete.emit(formGroup.getRawValue());
|
|
952
|
+
this.qcs.sharedData.clear();
|
|
953
|
+
return;
|
|
954
|
+
}
|
|
955
|
+
if (!this.forScreenQuestionnaire) {
|
|
956
|
+
saveData.data = this.payLoad; //JSON.stringify(this.payLoad);
|
|
957
|
+
saveData.potentialIssueId = currentQe.potentialIssueId;
|
|
958
|
+
saveData.flowAbleAndAvailable = currentQe.flowAbleAndAvailable;
|
|
959
|
+
saveData.userType = currentQe.userType;
|
|
960
|
+
saveData.flowFrom = currentQe.flowFrom;
|
|
961
|
+
saveData.flowWCAbleAndAvailable = currentQe.flowWCAbleAndAvailable;
|
|
962
|
+
saveData.claimApplicationId = currentQe.claimApplicationId;
|
|
963
|
+
saveData.questionnaireIds = currentQe.questionnaireIds;
|
|
964
|
+
saveData.questionnaireId = currentQe.questionnaireId;
|
|
965
|
+
saveData.activePageIndex = this.activeIndex;
|
|
966
|
+
if (!this.autoSave) {
|
|
967
|
+
saveData.autoSave = false;
|
|
968
|
+
this.onComplete.emit(saveData);
|
|
969
|
+
this.qcs.sharedData.clear();
|
|
970
|
+
return;
|
|
971
|
+
}
|
|
972
|
+
this.blockFormUi();
|
|
973
|
+
this.questionnaireService
|
|
974
|
+
.saveQuestionnaire(saveData)
|
|
975
|
+
.subscribe(res => {
|
|
976
|
+
this.unblockFormUi();
|
|
977
|
+
this.qes.searchModel.splice(this.qes.searchModel.findIndex(item => item.potentialIssueId == currentQe.potentialIssueId), 1);
|
|
978
|
+
this.logger.debug('remaining elements', this.qes.searchModel);
|
|
979
|
+
if (this.qes.searchModel.length > 0) {
|
|
980
|
+
this.qes.searchBs.next(this.qes.searchModel[0]);
|
|
981
|
+
}
|
|
982
|
+
else {
|
|
983
|
+
this.logger.debug('No Element Present');
|
|
984
|
+
}
|
|
985
|
+
this.onComplete.emit(res);
|
|
986
|
+
}, err => {
|
|
987
|
+
this.qcs.sharedData.clear();
|
|
988
|
+
this.unblockFormUi();
|
|
989
|
+
this.captcha.resetCaptcha();
|
|
990
|
+
this.onError.emit(err);
|
|
991
|
+
});
|
|
992
|
+
}
|
|
993
|
+
else {
|
|
994
|
+
let dataArr = [];
|
|
995
|
+
this.qcs.getAllData().forEach(data => {
|
|
996
|
+
dataArr.push(data);
|
|
997
|
+
});
|
|
998
|
+
saveData.screenQuestionnaireData = dataArr;
|
|
999
|
+
saveData.userType = currentQe.userType;
|
|
1000
|
+
saveData.flowFrom = currentQe.flowFrom;
|
|
1001
|
+
saveData.isScreenQuestionnaire = true;
|
|
1002
|
+
saveData.questionnaireIds = currentQe.questionnaireIds;
|
|
1003
|
+
saveData.uuid = this.identifier; //currentQe.uuid;
|
|
1004
|
+
saveData.flowKey = currentQe.flowKey;
|
|
1005
|
+
saveData.questionnaireId = currentQe.questionnaireId;
|
|
1006
|
+
saveData.activePageIndex = this.activeIndex;
|
|
1007
|
+
if (!this.autoSave) {
|
|
1008
|
+
this.onComplete.emit(saveData);
|
|
1009
|
+
this.qcs.sharedData.clear();
|
|
1010
|
+
return;
|
|
1011
|
+
}
|
|
1012
|
+
if (this.mfaRequired) {
|
|
1013
|
+
this.showMfa = true;
|
|
1014
|
+
this.mfaData = saveData;
|
|
1015
|
+
return;
|
|
1016
|
+
}
|
|
1017
|
+
this.saveScreenQuestionnaire(saveData);
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
saveScreenQuestionnaire(data) {
|
|
1021
|
+
this.blockFormUi();
|
|
1022
|
+
this.questionnaireService
|
|
1023
|
+
.saveScreenQuestionnaire(data)
|
|
1024
|
+
.subscribe(async (res) => {
|
|
1025
|
+
if (res) {
|
|
1026
|
+
this.questionnaireService.successElement.next(res[FbConstants.successPageElement]);
|
|
1027
|
+
this.questionnaireService.uuid.next(res[FbConstants.uuid]);
|
|
1028
|
+
this.questionnaireService.waitForProcessing.next(res[FbConstants.waitForProcessing]);
|
|
1029
|
+
this.questionnaireService.waitCheckServiceUri.next(res[FbConstants.waitCheckServiceUri]);
|
|
1030
|
+
this.questionnaireService.pageToOpen.next(res[FbConstants.pageToOpen]);
|
|
1031
|
+
await this.storage.set(FbConstants.successPageElement, res[FbConstants.successPageElement]);
|
|
1032
|
+
await this.storage.set(FbConstants.waitForProcessing, res[FbConstants.waitForProcessing]);
|
|
1033
|
+
await this.storage.set(FbConstants.waitCheckServiceUri, res[FbConstants.waitCheckServiceUri]);
|
|
1034
|
+
await this.storage.set(FbConstants.pageToOpen, res[FbConstants.pageToOpen]);
|
|
1035
|
+
await this.storage.set(FbConstants.uuid, res[FbConstants.uuid]);
|
|
1036
|
+
if (this.nextButtonPage) {
|
|
1037
|
+
this.navCtrl.navigateRoot(`/${this.nextButtonPage}?identifier=${res['uuid']}`);
|
|
1038
|
+
}
|
|
1039
|
+
else {
|
|
1040
|
+
this.onComplete.emit(data);
|
|
1041
|
+
this.qcs.sharedData.clear();
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
this.unblockFormUi();
|
|
1045
|
+
this.showMfa = false;
|
|
1046
|
+
}, err => {
|
|
1047
|
+
this.logger.debug('Error occured', err);
|
|
1048
|
+
if (this.mfaRequired) {
|
|
1049
|
+
this.mfaError = err;
|
|
1050
|
+
}
|
|
1051
|
+
else {
|
|
1052
|
+
this.onError.emit(err);
|
|
1053
|
+
}
|
|
1054
|
+
this.unblockFormUi();
|
|
1055
|
+
this.captcha.resetCaptcha();
|
|
1056
|
+
});
|
|
1057
|
+
}
|
|
1058
|
+
setPrevAndNextButton() {
|
|
1059
|
+
let compareValue = 0;
|
|
1060
|
+
if (this.activeIndex > 0) {
|
|
1061
|
+
compareValue = 1;
|
|
1062
|
+
}
|
|
1063
|
+
if (this.activeIndex > 0) {
|
|
1064
|
+
this.isFirst = false;
|
|
1065
|
+
}
|
|
1066
|
+
if (this.activeIndex === 1 && this.isPreviousPageAPlaceholder(this.questions[0].pages[0])) {
|
|
1067
|
+
this.isFirst = true;
|
|
1068
|
+
this.isLast = false;
|
|
1069
|
+
}
|
|
1070
|
+
if (this.activeIndex === 0) {
|
|
1071
|
+
this.isFirst = true;
|
|
1072
|
+
this.isLast = false;
|
|
1073
|
+
}
|
|
1074
|
+
if (this.activeIndex === this.questions[0].pages.length - 1) {
|
|
1075
|
+
this.isLast = true;
|
|
1076
|
+
this.isFirst = false;
|
|
1077
|
+
}
|
|
1078
|
+
if (this.activeIndex < this.questions[0].pages.length - 1) {
|
|
1079
|
+
this.isLast = false;
|
|
1080
|
+
}
|
|
1081
|
+
this.setupLoaderModel();
|
|
1082
|
+
}
|
|
1083
|
+
isPreviousPageAPlaceholder(page) {
|
|
1084
|
+
this.logger.debug("isPlaceHolder = " + page["isPlaceHolder"]);
|
|
1085
|
+
let placeHolder = page["isPlaceHolder"];
|
|
1086
|
+
return placeHolder.valueOf();
|
|
1087
|
+
}
|
|
1088
|
+
stepChanged(event) {
|
|
1089
|
+
if (event.previouslySelectedIndex > event.selectedIndex) {
|
|
1090
|
+
event.previouslySelectedStep.interacted = false;
|
|
1091
|
+
}
|
|
1092
|
+
}
|
|
1093
|
+
cancelAction() {
|
|
1094
|
+
this.navCtrl.navigateRoot(this.backButtonPage);
|
|
1095
|
+
}
|
|
1096
|
+
cancelPopUp() {
|
|
1097
|
+
let formGroup = this.formGroupArray[this.activeIndex];
|
|
1098
|
+
this.modelCancel.emit(false);
|
|
1099
|
+
this.logger.debug('cancelPopUp called', formGroup);
|
|
1100
|
+
}
|
|
1101
|
+
uploadFile(queue) {
|
|
1102
|
+
this.logger.debug('queue111 ', queue);
|
|
1103
|
+
//queue[0].size
|
|
1104
|
+
}
|
|
1105
|
+
blockFormUi() {
|
|
1106
|
+
this.blockUi = true;
|
|
1107
|
+
}
|
|
1108
|
+
unblockFormUi() {
|
|
1109
|
+
this.blockUi = false;
|
|
1110
|
+
}
|
|
1111
|
+
shouldFitContent(elements) {
|
|
1112
|
+
let shouldFitContent = true;
|
|
1113
|
+
elements.forEach(element => {
|
|
1114
|
+
if (element.customTag == 'component') {
|
|
1115
|
+
shouldFitContent = false;
|
|
1116
|
+
}
|
|
1117
|
+
});
|
|
1118
|
+
return shouldFitContent;
|
|
1119
|
+
}
|
|
1120
|
+
updateDynamicParam(event) {
|
|
1121
|
+
if (Array.isArray(event)) {
|
|
1122
|
+
this.dynamicParam = [...event];
|
|
1123
|
+
}
|
|
1124
|
+
else {
|
|
1125
|
+
this.dynamicParam = Object.assign({}, event);
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
onSubmit() {
|
|
1129
|
+
this.focusOnSubmit();
|
|
1130
|
+
}
|
|
1131
|
+
focusOnSubmit() {
|
|
1132
|
+
var element = this.el.nativeElement.querySelector(this.focusables.map(x => `${x}.ng-invalid`).join(","));
|
|
1133
|
+
if (element) {
|
|
1134
|
+
var primeNgComponent = element.querySelector(this.focusables.map(x => `${x}.p-component`).join(","));
|
|
1135
|
+
if (primeNgComponent) {
|
|
1136
|
+
primeNgComponent.focus();
|
|
1137
|
+
}
|
|
1138
|
+
else {
|
|
1139
|
+
element.focus();
|
|
1140
|
+
}
|
|
1141
|
+
//Block for Radio Button Start
|
|
1142
|
+
var primeNgComponent1 = element.querySelector("div.p-selectbutton");
|
|
1143
|
+
if (primeNgComponent1) {
|
|
1144
|
+
var primeNgComponent2 = primeNgComponent1.querySelector("div.p-component");
|
|
1145
|
+
if (primeNgComponent2) {
|
|
1146
|
+
primeNgComponent2.focus();
|
|
1147
|
+
}
|
|
1148
|
+
}
|
|
1149
|
+
//Block for Radio Button End
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
static { this.ɵfac = function DynamicFormComponent_Factory(t) { return new (t || DynamicFormComponent)(i0.ɵɵdirectiveInject(i1.QuestionService), i0.ɵɵdirectiveInject(i2.QuestionnaireService), i0.ɵɵdirectiveInject(i3.NavController), i0.ɵɵdirectiveInject(i4.QuestionControlService), i0.ɵɵdirectiveInject(i5.UtilService), i0.ɵɵdirectiveInject(i6.TranslateService), i0.ɵɵdirectiveInject(i7.LoggerService), i0.ɵɵdirectiveInject(i8.ValidationService), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i9.ActivatedRoute), i0.ɵɵdirectiveInject(i10.Storage), i0.ɵɵdirectiveInject(i11.LoginService), i0.ɵɵdirectiveInject(i12.CaptchaService)); }; }
|
|
1153
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DynamicFormComponent, selectors: [["app-dynamic-form"]], viewQuery: function DynamicFormComponent_Query(rf, ctx) { if (rf & 1) {
|
|
1154
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
1155
|
+
i0.ɵɵviewQuery(_c1, 5);
|
|
1156
|
+
i0.ɵɵviewQuery(_c2, 5);
|
|
1157
|
+
} if (rf & 2) {
|
|
1158
|
+
let _t;
|
|
1159
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.mfa = _t.first);
|
|
1160
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.questionnaireForm = _t.first);
|
|
1161
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.stepper = _t.first);
|
|
1162
|
+
} }, inputs: { questions: "questions", forScreenQuestionnaire: "forScreenQuestionnaire", isEnableBackButton: "isEnableBackButton", backButtonPage: "backButtonPage", nextButtonPage: "nextButtonPage", pageType: "pageType", hideFooter: "hideFooter", multiMode: "multiMode", loaderService: "loaderService", autoSave: "autoSave", mfaRequired: "mfaRequired", data: "data", readOnlyFields: "readOnlyFields", formReadOnly: "formReadOnly", queryModel: "queryModel", dynamicParam: "dynamicParam", formData: "formData", questionNumber: "questionNumber", sizeXs: "sizeXs", sizeSm: "sizeSm", sizeMd: "sizeMd", sizeLg: "sizeLg", sizeXl: "sizeXl", offsetXs: "offsetXs", offsetSm: "offsetSm", offsetMd: "offsetMd", offsetLg: "offsetLg", offsetXl: "offsetXl" }, outputs: { modelCancel: "modelCancel", onComplete: "onComplete", onError: "onError" }, features: [i0.ɵɵProvidersFeature([QuestionControlService, {
|
|
1163
|
+
provide: STEPPER_GLOBAL_OPTIONS,
|
|
1164
|
+
useValue: {
|
|
1165
|
+
showError: true,
|
|
1166
|
+
displayDefaultIndicatorType: false
|
|
1167
|
+
}
|
|
1168
|
+
}]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 4, vars: 3, consts: [[3, "blocked"], ["name", "crescent"], [4, "ngIf"], [3, "user", "data", "requestCode", "mfaError", "hideButtons", "success", 4, "ngIf"], ["formMainDiv", ""], ["focusInvalidInput", "", 3, "formGroup", "ngClass", "ngSubmit"], ["questionnaireForm", "ngForm"], ["size", "12", 1, "ion-padding-end", 2, "padding-left", "0px", 3, "sizeXs", "sizeSm", "sizeMd", "sizeLg", "sizeXl", "offsetXs", "offsetSm", "offsetMd", "offsetLg", "offsetXl"], [1, "p-formgrid", 2, "padding-left", "8px"], [4, "ngFor", "ngForOf"], ["size", "12", "sizeSm", "12", "sizeXs", "12", 1, "ion-padding-start", 2, "padding-left", "0px", 3, "sizeMd", "sizeLg", "sizeXl", "offsetXl", "offsetLg"], [3, "ngClass", 4, "ngIf"], ["size", "12", 3, "sizeXs", "sizeSm", "sizeMd", "sizeLg", "sizeXl", "offsetXs", "offsetSm", "offsetMd", "offsetLg", "offsetXl"], [1, "p-formgrid"], [3, "innerHtml", "ngClass"], [1, "heading", 2, "padding-left", "0px"], ["size", "12", "style", "padding-left: 0px; max-width: fit-content;", 3, "sizeXl", "sizeLg", "sizeSm", "sizeXs", "sizeMd", "ngClass", 4, "ngIf"], ["size", "12", 2, "padding-left", "0px", "max-width", "fit-content", 3, "sizeXl", "sizeLg", "sizeSm", "sizeXs", "sizeMd", "ngClass"], [3, "potentialIssueId", "question", "form", "forScreenQuestionnaire", "dynamicParam", "onDynamicParamUpdate"], [2, "padding-left", "0px", 3, "sizeLg", "sizeSm", "sizeXs", "sizeXl", "sizeMd"], ["style", "padding-left: 0px;", 3, "sizeSm", "sizeXs", "sizeLg", "sizeXl", "sizeMd", 4, "ngIf"], [2, "padding-left", "0px", 3, "sizeSm", "sizeXs", "sizeLg", "sizeXl", "sizeMd"], [3, "question", "form", "forScreenQuestionnaire"], [3, "ngClass"], ["style", "text-align: right; background: white; margin-left: -5px;", 4, "ngIf"], [2, "text-align", "right", "background", "white", "margin-left", "-5px"], [1, "grid", "p-nogutter", 2, "height", "60px"], [1, "col-6", "ion-text-left", 2, "padding", "8px"], ["shape", "round", "fill", "outline", "type", "submit", 1, "button", 3, "click"], [1, "col-6", "ion-text-right", 2, "padding", "8px"], ["shape", "round", "fill", "solid", "type", "submit", 3, "click"], [1, "ion-text-left", "ion-padding-start"], [1, "ion-text-right", "ion-padding-end"], ["linear", "", "aria-busy", "true", 2, "text-align", "-webkit-center", 3, "selectedIndex", "selectionChange"], ["matHorizontalStepper", ""], [3, "stepControl", "completed", 4, "ngFor", "ngForOf"], [3, "stepControl", "completed"], ["matStepLabel", ""], ["editable", "false", "disabled", "", "mat-button", "", "matStepperPrevious", "", 1, "reverse"], ["mat-button", "", "matStepperNext", "", 1, "forward", 3, "click"], ["mat-button", "", "matStepperPrevious", "", 1, "reverse", 3, "click"], ["editable", "false", "mat-button", "", "matStepperPrevious", "", 1, "reverse", 3, "click"], [3, "user", "data", "requestCode", "mfaError", "hideButtons", "success"], ["mfa", ""]], template: function DynamicFormComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1169
|
+
i0.ɵɵelementStart(0, "p-blockUI", 0);
|
|
1170
|
+
i0.ɵɵelement(1, "ion-spinner", 1);
|
|
1171
|
+
i0.ɵɵelementEnd();
|
|
1172
|
+
i0.ɵɵtemplate(2, DynamicFormComponent_div_2_Template, 14, 21, "div", 2)(3, DynamicFormComponent_app_mfa_3_Template, 2, 5, "app-mfa", 3);
|
|
1173
|
+
} if (rf & 2) {
|
|
1174
|
+
i0.ɵɵproperty("blocked", ctx.blockUi);
|
|
1175
|
+
i0.ɵɵadvance(2);
|
|
1176
|
+
i0.ɵɵproperty("ngIf", ctx.questions && ctx.questions[0] && !ctx.showMfa);
|
|
1177
|
+
i0.ɵɵadvance(1);
|
|
1178
|
+
i0.ɵɵproperty("ngIf", ctx.showMfa);
|
|
1179
|
+
} }, dependencies: [i3.IonButton, i3.IonCol, i3.IonFooter, i3.IonGrid, i3.IonRow, i3.IonSpinner, i13.NgClass, i13.NgForOf, i13.NgIf, i14.ɵNgNoValidate, i14.NgControlStatusGroup, i14.FormGroupDirective, i15.MatStep, i15.MatStepLabel, i15.MatStepper, i15.MatStepperNext, i15.MatStepperPrevious, i16.MatButton, i17.BlockUI, i18.MfaComponent, i19.DynamicFormQuestionComponent, i20.InputFocus, i21.DynamicTranslatePipe, i22.TrustHtmlPipe], styles: ["[_nghost-%COMP%] .flex-container.ng-star-inserted{display:inline-flex!important}[_nghost-%COMP%] .p-fluid .p-buttonset{display:initial!important}[_nghost-%COMP%] form{margin-left:5px}[_nghost-%COMP%] .p-fluid .p-calendar{display:inline-flex!important;width:60%!important}[_nghost-%COMP%] .p-fluid .p-calendar .p-inputtext{width:100%!important}[_nghost-%COMP%] .p-fluid .p-autocomplete{display:inline-flex!important}.pageTitle[_ngcontent-%COMP%]{font-weight:600;position:absolute;right:48%}@media (max-width: 280px){[_nghost-%COMP%] span.start{font-size:18px;top:46px;position:relative}[_nghost-%COMP%] .mat-stepper-horizontal-line{display:none}[_nghost-%COMP%] .mat-horizontal-stepper-header{padding:0 28px!important}[_nghost-%COMP%] .mat-horizontal-stepper-header-container{left:46px!important}[_nghost-%COMP%] .mat-step-label{display:none!important}}@media (max-width: 576px){[_nghost-%COMP%] span.p-steps-title.ng-star-inserted{display:none!important}[_nghost-%COMP%] .p-steps.p-steps-item.p-menuitem-link.p-steps-title{display:none!important}[_nghost-%COMP%] .backinc{position:absolute;left:25px}[_nghost-%COMP%] .mat-step-label{display:none!important}[_nghost-%COMP%] .mat-step-label.mat-step-label-active{display:none!important;position:absolute;bottom:0;right:0}}@media (max-width: 576px) and (min-width: 576px){.pageTitle[_ngcontent-%COMP%]{display:none!important}.backinc[_ngcontent-%COMP%]{position:absolute;left:125px}}@media (max-width: 415px){[_nghost-%COMP%] .mat-horizontal-stepper-header-container{width:60%!important;left:46px!important}[_nghost-%COMP%] .reverse{left:5px!important}[_nghost-%COMP%] .forward{right:5px!important}}[_nghost-%COMP%] .mat-stepper-horizontal, [_nghost-%COMP%] .mat-stepper-vertical{height:70px}[_nghost-%COMP%] .mat-horizontal-stepper-header{padding:0 40px}[_nghost-%COMP%] .mat-step-label{min-width:120px;bottom:5px}[_nghost-%COMP%] .mat-step-header .mat-step-label.mat-step-label-active{bottom:5px}[_nghost-%COMP%] .mat-step-header:hover:hover{background-color:#fff!important}[_nghost-%COMP%] .mat-horizontal-stepper-header{pointer-events:none!important}[_nghost-%COMP%] .mat-step-header .mat-step-icon{background-color:#bdcad2;color:#bdcad2}[_nghost-%COMP%] .mat-step-header .mat-step-icon-selected{color:#fff;background-color:var(--ion-color-primary)}[_nghost-%COMP%] .mat-step-header .mat-step-label.mat-step-label-selected{color:var(--ion-color-primary)}[_nghost-%COMP%] mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:var(--ion-color-primary)!important;font-weight:700}[_nghost-%COMP%] .mat-step-header .mat-step-icon-selected mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:#fff!important;font-weight:700}[_nghost-%COMP%] button{background-color:var(--ion-color-primary);color:#fff}[_nghost-%COMP%] .reverse{background-color:#fff;border:1px solid var(--ion-color-primary);border-radius:30px;color:var(--ion-color-primary)!important;position:absolute;bottom:15px;left:40px;cursor:pointer}[_nghost-%COMP%] .mat-horizontal-stepper-header-container{width:50%;position:sticky;left:100px}[_nghost-%COMP%] .forward{position:absolute;right:40px;bottom:15px;border-radius:30px;cursor:pointer}[_nghost-%COMP%] .reset{position:absolute;right:50px;bottom:40px;border-radius:30px}[_nghost-%COMP%] .placeholder{visibility:hidden}[_nghost-%COMP%] .ui-state-complete .ui-steps-number{background-color:green!important}[_nghost-%COMP%] .p-steps .p-steps-item.p-highlight .p-steps-number{background-color:var(--ion-color-primary)!important;background-size:20px;color:var(--ion-color-primary)!important}[_nghost-%COMP%] .p-steps .p-steps-item .p-menuitem-link .p-steps-number{color:var(--ion-color-grey);background-size:15px;font-size:.857rem;min-width:1.714rem;height:1.714rem;line-height:1.714rem}[_nghost-%COMP%] div.p-formgrid.p-grid.ng-star-inserted{flex-wrap:wrap!important}[_nghost-%COMP%] .p-steps .p-steps-item.p-menuitem-link .p-steps-number{background-color:var(--ion-color-primary-shade)}[_nghost-%COMP%] ion-footer{bottom:0}[_nghost-%COMP%] .second{right:45%}[_nghost-%COMP%] .mat-button.mat-primary[disabled], [_nghost-%COMP%] .mat-button.mat-accent[disabled], [_nghost-%COMP%] .mat-button.mat-warn[disabled], [_nghost-%COMP%] .mat-button[disabled][disabled], [_nghost-%COMP%] .mat-icon-button.mat-primary[disabled], [_nghost-%COMP%] .mat-icon-button.mat-accent[disabled], [_nghost-%COMP%] .mat-icon-button.mat-warn[disabled], [_nghost-%COMP%] .mat-icon-button[disabled][disabled], [_nghost-%COMP%] .mat-stroked-button.mat-primary[disabled], [_nghost-%COMP%] .mat-stroked-button.mat-accent[disabled], [_nghost-%COMP%] .mat-stroked-button.mat-warn[disabled], [_nghost-%COMP%] .mat-stroked-button[disabled][disabled]{border:1px solid lightgray}[_nghost-%COMP%] h1, [_nghost-%COMP%] h2, [_nghost-%COMP%] h3, [_nghost-%COMP%] h4, [_nghost-%COMP%] h5, [_nghost-%COMP%] h6{margin-top:0!important;margin-bottom:0!important}.footer-fixed[_ngcontent-%COMP%]{position:fixed!important}.footer-sticky[_ngcontent-%COMP%]{position:sticky}@media (max-width: 768px){.footer-fixed[_ngcontent-%COMP%]{position:sticky}}.fb-heading[_ngcontent-%COMP%]{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:36px}.fb-heading-followup[_ngcontent-%COMP%]{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:24px}.qe-form[_ngcontent-%COMP%]{margin-bottom:96px}.qe-form-multiple[_ngcontent-%COMP%]{margin-bottom:8px}"] }); }
|
|
1180
|
+
}
|
|
1181
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DynamicFormComponent, [{
|
|
1182
|
+
type: Component,
|
|
1183
|
+
args: [{ selector: 'app-dynamic-form', changeDetection: ChangeDetectionStrategy.Default, providers: [QuestionControlService, {
|
|
1184
|
+
provide: STEPPER_GLOBAL_OPTIONS,
|
|
1185
|
+
useValue: {
|
|
1186
|
+
showError: true,
|
|
1187
|
+
displayDefaultIndicatorType: false
|
|
1188
|
+
}
|
|
1189
|
+
}], template: "<p-blockUI [blocked]=\"blockUi\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n</p-blockUI>\n<div *ngIf=\"questions && questions[0] && !showMfa\" #formMainDiv>\n <form focusInvalidInput [formGroup]=\"formGroupArray[activeIndex]\" [ngClass]=\"multiMode ? 'qe-form-multiple' : 'qe-form'\" (ngSubmit)=\"onSubmit()\" #questionnaireForm=\"ngForm\">\n <ion-grid>\n <ion-row *ngIf=\"questions[0].pages[activeIndex].name\">\n <ion-col size=\"12\" [sizeXs]=\"sizeXs\" [sizeSm]=\"sizeSm\" [sizeMd]=\"sizeMd\" [sizeLg]=\"sizeLg\" [sizeXl]=\"sizeXl\"\n [offsetXs]=\"offsetXs\" [offsetSm]=\"offsetSm\" [offsetMd]=\"offsetMd\" [offsetLg]=\"offsetLg\" [offsetXl]=\"offsetXl\">\n <div class=\"p-formgrid\">\n <div [innerHtml]=\"(questionNumber ? questionNumber + ' ' : '') + questions[0].pages[activeIndex].name | dynamicTranslate:dynamicParam | trustHtml\" [ngClass]=\"multiMode ? 'fb-heading-followup' : 'fb-heading'\">\n </div>\n </div>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col style=\"padding-left: 0px;\" class=\"ion-padding-end\" size=\"12\" [sizeXs]=\"sizeXs\" [sizeSm]=\"sizeSm\"\n [sizeMd]=\"sizeMd\" [sizeLg]=\"sizeLg\" [sizeXl]=\"sizeXl\" [offsetXs]=\"offsetXs\" [offsetSm]=\"offsetSm\"\n [offsetMd]=\"offsetMd\" [offsetLg]=\"offsetLg\" [offsetXl]=\"offsetXl\">\n <div class=\"p-formgrid\" style=\"padding-left: 8px;\">\n <ng-container *ngFor=\"let element of questions[0].pages[activeIndex].elements; let i = index\">\n <ng-container *ngIf=\"element.type==='panel'\">\n\n <ion-row *ngIf=\"visibleIf(element.visibleIf,'',formGroupArray[activeIndex],element)\">\n <!-- <ion-col style=\"padding-left: 0px;\"> -->\n <div style=\"padding-left: 0px;\" class=\"heading\">\n {{element.title}}\n </div>\n <!-- </ion-col> -->\n </ion-row>\n <ion-row>\n <ng-container *ngFor=\"let panelElement of element.elements\">\n <ion-col size=\"12\" [sizeXl]=\"panelElement.sizeXL ? panelElement.sizeXL : 3\" style=\"padding-left: 0px; max-width: fit-content;\"\n [sizeLg]=\"panelElement.sizeLG ? panelElement.sizeLG : 3\" [sizeSm]=\"panelElement.sizeSM ? panelElement.sizeSM : 12\"\n [sizeXs]=\"panelElement.sizeXS ? panelElement.sizeXS : 12\" [sizeMd]=\"panelElement.sizeMD ? panelElement.sizeMD : 4\"\n *ngIf=\"panelElement.colElement==='COL1' && visibleIf(panelElement.visibleIf,panelElement.name,formGroupArray[activeIndex],panelElement)\"\n [ngClass]=\"shouldFitContent(element.elements) ? 'col-fit-content' : ''\">\n\n <app-question [potentialIssueId]=\"potentialIssueId\" [question]=\"panelElement\" [form]=\"formGroupArray[activeIndex]\"\n [forScreenQuestionnaire]=\"forScreenQuestionnaire\" (onDynamicParamUpdate)=\"updateDynamicParam($event)\" [dynamicParam]=\"dynamicParam\">\n </app-question>\n\n </ion-col>\n <!-- <ion-col size=\"1\" *ngIf=\"panelElement.description\" style=\"padding-top: 28px\">\n <app-overlay-info [overlayText]=\"panelElement.description\"></app-overlay-info>\n </ion-col> -->\n </ng-container>\n </ion-row>\n <!-- </ion-col>\n </ion-row> -->\n\n </ng-container>\n <ng-container\n *ngIf=\"element.type!='panel' && element.type!='hidden' && visibleIf(element.visibleIf,element.name,formGroupArray[activeIndex],element)\">\n <ion-row>\n <ion-col [sizeLg]=\"element.sizeLG>0?element.sizeLG:''\" [sizeSm]=\"element.sizeSM\"\n [sizeXs]=\"element.sizeXS\" [sizeXl]=\"element.sizeXL>0 ?element.sizeXL:''\"\n [sizeMd]=\"element.sizeMD>0 ?element.sizeMD:''\" style=\"padding-left: 0px;\">\n <!-- <div class=\"field\"> -->\n <app-question [potentialIssueId]=\"potentialIssueId\" [question]=\"element\" [form]=\"formGroupArray[activeIndex]\"\n [forScreenQuestionnaire]=\"forScreenQuestionnaire\" [dynamicParam]=\"dynamicParam\" \n (onDynamicParamUpdate)=\"updateDynamicParam($event)\" >\n </app-question>\n <!-- </div> -->\n </ion-col>\n <!-- <ion-col size=\"1\" *ngIf=\"element.description\" style=\"padding-top: 35px\">\n <app-overlay-info [overlayText]=\"element.description\"></app-overlay-info>\n </ion-col> -->\n </ion-row>\n </ng-container>\n </ng-container>\n </div>\n </ion-col>\n <ion-col class=\"ion-padding-start\" size=\"12\" sizeSm=\"12\" sizeXs=\"12\" [sizeMd]=\"pageType==='POPUP'?6:12\"\n [sizeLg]=\"pageType==='POPUP'?6:10\" [sizeXl]=\"pageType==='POPUP'?5:10\" style=\"padding-left: 0px;\"\n [offsetXl]=\"pageType==='POPUP'?0:1\" [offsetLg]=\"pageType==='POPUP'?0:1\">\n <div class=\"p-formgrid\" style=\"padding-left: 8px;\">\n <ng-container *ngFor=\"let element of questions[0].pages[activeIndex].elements; let i = index\">\n <ng-container *ngIf=\" visibleIf(element.visibleIf,'',formGroupArray[activeIndex],element)\">\n <ion-row>\n <ng-container *ngFor=\"let panelElement of element.elements\">\n <ion-col [sizeSm]=\"panelElement.sizeSM\" [sizeXs]=\"panelElement.sizeXS\"\n [sizeLg]=\"panelElement.sizeLG>0?panelElement.sizeLG:''\"\n [sizeXl]=\"panelElement.sizeXL>0 ?panelElement.sizeXL:''\" style=\"padding-left: 0px;\"\n [sizeMd]=\"panelElement.sizeMD>0?panelElement.sizeMD:''\" *ngIf=\"panelElement.colElement==='COL2' &&\n visibleIf(panelElement.visibleIf,panelElement.name,formGroupArray[activeIndex],panelElement)\">\n <div>\n <panel-app [question]=\"panelElement\" [form]=\"formGroupArray[activeIndex]\"\n [forScreenQuestionnaire]=\"forScreenQuestionnaire\">\n </panel-app>\n </div>\n </ion-col>\n </ng-container>\n </ion-row>\n </ng-container>\n </ng-container>\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <ion-footer *ngIf=\"!hideFooter\"\n [ngClass]=\"'footer-fixed'\">\n <div style=\"text-align: right; background: white; margin-left: -5px;\"\n *ngIf=\"hideStep && pageType!='POPUP' && pageType!='SCREEN'\">\n <div class=\"grid p-nogutter\" style=\"height: 60px;\">\n <div class=\"col-6 ion-text-left\" style=\"padding: 8px;\">\n <ion-button shape=\"round\" fill=\"outline\" class=\"button\" (click)=\"cancelAction()\" type=\"submit\">\n Cancel\n </ion-button>\n </div>\n <div class=\"col-6 ion-text-right\" style=\"padding: 8px;\">\n <ion-button shape=\"round\" (click)=\"complete()\" fill=\"solid\" type=\"submit\">\n Next\n </ion-button>\n </div>\n </div>\n </div>\n <div style=\"text-align: right; background: white; margin-left: -5px;\"\n *ngIf=\"hideStep && pageType=='SCREEN' && questions[0].isFirstPageSubmit\">\n <div class=\"grid p-nogutter\" style=\"height: 60px;\">\n <div class=\"col-6 ion-text-left\" style=\"padding: 8px;\">\n <ion-button shape=\"round\" fill=\"outline\" class=\"button\" (click)=\"cancelAction()\" type=\"submit\">\n Cancel\n </ion-button>\n </div>\n <div class=\"col-6 ion-text-right\" style=\"padding: 8px;\">\n <ion-button shape=\"round\" (click)=\"complete()\" fill=\"solid\" type=\"submit\">\n Done\n </ion-button>\n </div>\n </div>\n </div>\n <ion-grid *ngIf=\"hideStep && pageType==='POPUP'\">\n <ion-row>\n <ion-col class=\"ion-text-left ion-padding-start\">\n <ion-button shape=\"round\" fill=\"outline\" class=\"button\" (click)=\"cancelPopUp()\" type=\"submit\">\n Cancel\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right ion-padding-end\">\n <ion-button shape=\"round\" (click)=\"complete()\" fill=\"solid\" type=\"submit\">\n Add\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n\n\n <div *ngIf=\"!hideStep\">\n <mat-horizontal-stepper linear #matHorizontalStepper [selectedIndex]=\"questions[0].stepCounter\"\n (selectionChange)=\"stepChanged($event);\" style=\"text-align: -webkit-center;\" aria-busy=\"true\">\n <mat-step *ngFor=\"let element of questions[0].pages; let i = index;\" [stepControl]=\"formGroupArray[i]\"\n [completed]=\" i < activeIndex \">\n\n <div>\n <ng-template matStepLabel>{{questions[0].pages[i].navigationTitle}}</ng-template>\n </div>\n\n <div *ngIf=\"!questions[0].isFirstPageSubmit && !isLast && isFirst && !isEnableBackButton\">\n <button class=\"reverse\" editable=\"false\" disabled mat-button matStepperPrevious>Back</button>\n <button class=\"forward\" mat-button matStepperNext (click)=\"nextPage(activeIndex)\">Next</button>\n </div>\n\n <div *ngIf=\"questions[0].isFirstPageSubmit\">\n <button class=\"reverse\" (click)=\"cancelAction()\" mat-button matStepperPrevious>Back</button>\n <button class=\"forward\" mat-button matStepperNext (click)=\"complete()\">Next</button>\n </div>\n\n <div *ngIf=\"!questions[0].isFirstPageSubmit && isLast && !isFirst\">\n <button class=\"reverse\" mat-button matStepperPrevious (click)=\"prevPage(activeIndex)\">Back</button>\n <button class=\"forward\" mat-button matStepperNext (click)=\"complete()\">Done</button>\n </div>\n\n <div *ngIf=\"!questions[0].isFirstPageSubmit && !isLast && !isFirst\">\n <button class=\"reverse\" editable=\"false\" mat-button matStepperPrevious \n (click)=\"prevPage(activeIndex)\">Back</button>\n <button class=\"forward\" mat-button matStepperNext (click)=\"nextPage(activeIndex)\">Next</button>\n </div>\n\n <div *ngIf=\"isEnableBackButton && !questions[0].isFirstPageSubmit && !isLast && isFirst\">\n <button class=\"reverse\" editable=\"false\" mat-button matStepperPrevious \n (click)=\"cancelAction()\">Back</button>\n <button class=\"forward\" mat-button matStepperNext (click)=\"nextPage(activeIndex)\">Next</button>\n </div>\n\n\n </mat-step>\n\n </mat-horizontal-stepper>\n\n </div>\n\n </ion-footer>\n </form>\n\n\n\n\n <!-- <div *ngIf=\"payLoad\" class=\"form-row\">\n <strong>Saved the following values</strong><br>{{payLoad}}\n </div> -->\n\n\n</div>\n\n<app-mfa #mfa [user]=\"ls.getUser()\" *ngIf=\"showMfa\" (success)=\"saveScreenQuestionnaire($event)\" [data]=\"mfaData\" [requestCode]=\"true\" \n [mfaError]=\"mfaError\" [hideButtons]=\"true\"></app-mfa>", styles: [":host ::ng-deep .flex-container.ng-star-inserted{display:inline-flex!important}:host ::ng-deep .p-fluid .p-buttonset{display:initial!important}:host ::ng-deep form{margin-left:5px}:host ::ng-deep .p-fluid .p-calendar{display:inline-flex!important;width:60%!important}:host ::ng-deep .p-fluid .p-calendar .p-inputtext{width:100%!important}:host ::ng-deep .p-fluid .p-autocomplete{display:inline-flex!important}.pageTitle{font-weight:600;position:absolute;right:48%}@media (max-width: 280px){:host ::ng-deep span.start{font-size:18px;top:46px;position:relative}:host ::ng-deep .mat-stepper-horizontal-line{display:none}:host ::ng-deep .mat-horizontal-stepper-header{padding:0 28px!important}:host ::ng-deep .mat-horizontal-stepper-header-container{left:46px!important}:host ::ng-deep .mat-step-label{display:none!important}}@media (max-width: 576px){:host ::ng-deep span.p-steps-title.ng-star-inserted{display:none!important}:host ::ng-deep .p-steps.p-steps-item.p-menuitem-link.p-steps-title{display:none!important}:host ::ng-deep .backinc{position:absolute;left:25px}:host ::ng-deep .mat-step-label{display:none!important}:host ::ng-deep .mat-step-label.mat-step-label-active{display:none!important;position:absolute;bottom:0;right:0}}@media (max-width: 576px) and (min-width: 576px){.pageTitle{display:none!important}.backinc{position:absolute;left:125px}}@media (max-width: 415px){:host ::ng-deep .mat-horizontal-stepper-header-container{width:60%!important;left:46px!important}:host ::ng-deep .reverse{left:5px!important}:host ::ng-deep .forward{right:5px!important}}:host ::ng-deep .mat-stepper-horizontal,:host ::ng-deep .mat-stepper-vertical{height:70px}:host ::ng-deep .mat-horizontal-stepper-header{padding:0 40px}:host ::ng-deep .mat-step-label{min-width:120px;bottom:5px}:host ::ng-deep .mat-step-header .mat-step-label.mat-step-label-active{bottom:5px}:host ::ng-deep .mat-step-header:hover:hover{background-color:#fff!important}:host ::ng-deep .mat-horizontal-stepper-header{pointer-events:none!important}:host ::ng-deep .mat-step-header .mat-step-icon{background-color:#bdcad2;color:#bdcad2}:host ::ng-deep .mat-step-header .mat-step-icon-selected{color:#fff;background-color:var(--ion-color-primary)}:host ::ng-deep .mat-step-header .mat-step-label.mat-step-label-selected{color:var(--ion-color-primary)}:host ::ng-deep mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:var(--ion-color-primary)!important;font-weight:700}:host ::ng-deep .mat-step-header .mat-step-icon-selected mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:#fff!important;font-weight:700}:host ::ng-deep button{background-color:var(--ion-color-primary);color:#fff}:host ::ng-deep .reverse{background-color:#fff;border:1px solid var(--ion-color-primary);border-radius:30px;color:var(--ion-color-primary)!important;position:absolute;bottom:15px;left:40px;cursor:pointer}:host ::ng-deep .mat-horizontal-stepper-header-container{width:50%;position:sticky;left:100px}:host ::ng-deep .forward{position:absolute;right:40px;bottom:15px;border-radius:30px;cursor:pointer}:host ::ng-deep .reset{position:absolute;right:50px;bottom:40px;border-radius:30px}:host ::ng-deep .placeholder{visibility:hidden}:host ::ng-deep .ui-state-complete .ui-steps-number{background-color:green!important}:host ::ng-deep .p-steps .p-steps-item.p-highlight .p-steps-number{background-color:var(--ion-color-primary)!important;background-size:20px;color:var(--ion-color-primary)!important}:host ::ng-deep .p-steps .p-steps-item .p-menuitem-link .p-steps-number{color:var(--ion-color-grey);background-size:15px;font-size:.857rem;min-width:1.714rem;height:1.714rem;line-height:1.714rem}:host ::ng-deep div.p-formgrid.p-grid.ng-star-inserted{flex-wrap:wrap!important}:host ::ng-deep .p-steps .p-steps-item.p-menuitem-link .p-steps-number{background-color:var(--ion-color-primary-shade)}:host ::ng-deep ion-footer{bottom:0}:host ::ng-deep .second{right:45%}:host ::ng-deep .mat-button.mat-primary[disabled],:host ::ng-deep .mat-button.mat-accent[disabled],:host ::ng-deep .mat-button.mat-warn[disabled],:host ::ng-deep .mat-button[disabled][disabled],:host ::ng-deep .mat-icon-button.mat-primary[disabled],:host ::ng-deep .mat-icon-button.mat-accent[disabled],:host ::ng-deep .mat-icon-button.mat-warn[disabled],:host ::ng-deep .mat-icon-button[disabled][disabled],:host ::ng-deep .mat-stroked-button.mat-primary[disabled],:host ::ng-deep .mat-stroked-button.mat-accent[disabled],:host ::ng-deep .mat-stroked-button.mat-warn[disabled],:host ::ng-deep .mat-stroked-button[disabled][disabled]{border:1px solid lightgray}:host ::ng-deep h1,:host ::ng-deep h2,:host ::ng-deep h3,:host ::ng-deep h4,:host ::ng-deep h5,:host ::ng-deep h6{margin-top:0!important;margin-bottom:0!important}.footer-fixed{position:fixed!important}.footer-sticky{position:sticky}@media (max-width: 768px){.footer-fixed{position:sticky}}.fb-heading{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:36px}.fb-heading-followup{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:24px}.qe-form{margin-bottom:96px}.qe-form-multiple{margin-bottom:8px}\n"] }]
|
|
1190
|
+
}], () => [{ type: i1.QuestionService }, { type: i2.QuestionnaireService }, { type: i3.NavController }, { type: i4.QuestionControlService }, { type: i5.UtilService }, { type: i6.TranslateService }, { type: i7.LoggerService }, { type: i8.ValidationService }, { type: i0.ElementRef }, { type: i9.ActivatedRoute }, { type: i10.Storage }, { type: i11.LoginService }, { type: i12.CaptchaService }], { mfa: [{
|
|
1191
|
+
type: ViewChild,
|
|
1192
|
+
args: ['mfa']
|
|
1193
|
+
}], questionnaireForm: [{
|
|
1194
|
+
type: ViewChild,
|
|
1195
|
+
args: ['questionnaireForm', { static: false }]
|
|
1196
|
+
}], questions: [{
|
|
1197
|
+
type: Input
|
|
1198
|
+
}], forScreenQuestionnaire: [{
|
|
1199
|
+
type: Input
|
|
1200
|
+
}], isEnableBackButton: [{
|
|
1201
|
+
type: Input
|
|
1202
|
+
}], backButtonPage: [{
|
|
1203
|
+
type: Input
|
|
1204
|
+
}], nextButtonPage: [{
|
|
1205
|
+
type: Input
|
|
1206
|
+
}], pageType: [{
|
|
1207
|
+
type: Input
|
|
1208
|
+
}], hideFooter: [{
|
|
1209
|
+
type: Input
|
|
1210
|
+
}], multiMode: [{
|
|
1211
|
+
type: Input
|
|
1212
|
+
}], loaderService: [{
|
|
1213
|
+
type: Input
|
|
1214
|
+
}], autoSave: [{
|
|
1215
|
+
type: Input
|
|
1216
|
+
}], mfaRequired: [{
|
|
1217
|
+
type: Input
|
|
1218
|
+
}], modelCancel: [{
|
|
1219
|
+
type: Output
|
|
1220
|
+
}], onComplete: [{
|
|
1221
|
+
type: Output
|
|
1222
|
+
}], onError: [{
|
|
1223
|
+
type: Output
|
|
1224
|
+
}], stepper: [{
|
|
1225
|
+
type: ViewChild,
|
|
1226
|
+
args: ['matHorizontalStepper']
|
|
1227
|
+
}], data: [{
|
|
1228
|
+
type: Input
|
|
1229
|
+
}], readOnlyFields: [{
|
|
1230
|
+
type: Input
|
|
1231
|
+
}], formReadOnly: [{
|
|
1232
|
+
type: Input
|
|
1233
|
+
}], queryModel: [{
|
|
1234
|
+
type: Input
|
|
1235
|
+
}], dynamicParam: [{
|
|
1236
|
+
type: Input
|
|
1237
|
+
}], formData: [{
|
|
1238
|
+
type: Input
|
|
1239
|
+
}], questionNumber: [{
|
|
1240
|
+
type: Input
|
|
1241
|
+
}], sizeXs: [{
|
|
1242
|
+
type: Input
|
|
1243
|
+
}], sizeSm: [{
|
|
1244
|
+
type: Input
|
|
1245
|
+
}], sizeMd: [{
|
|
1246
|
+
type: Input
|
|
1247
|
+
}], sizeLg: [{
|
|
1248
|
+
type: Input
|
|
1249
|
+
}], sizeXl: [{
|
|
1250
|
+
type: Input
|
|
1251
|
+
}], offsetXs: [{
|
|
1252
|
+
type: Input
|
|
1253
|
+
}], offsetSm: [{
|
|
1254
|
+
type: Input
|
|
1255
|
+
}], offsetMd: [{
|
|
1256
|
+
type: Input
|
|
1257
|
+
}], offsetLg: [{
|
|
1258
|
+
type: Input
|
|
1259
|
+
}], offsetXl: [{
|
|
1260
|
+
type: Input
|
|
1261
|
+
}] }); })();
|
|
1262
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DynamicFormComponent, { className: "DynamicFormComponent" }); })();
|
|
1263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL2R5bmFtaWMtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmV1c2EtYXBwLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb25uYWlyZS9keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQW9CLFVBQVUsRUFBb0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJaEQsT0FBTyxFQUF5QixzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBS3JGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBSXZHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUloRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ3RCNUMsK0JBQXNELGtCQUFBLGNBQUE7SUFJaEQsMEJBQ007OztJQUNSLGlCQUFNLEVBQUEsRUFBQTs7O0lBTFcsZUFBaUI7SUFBakIsc0NBQWlCLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLDZCQUFB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QUFoQixNQUFNO1lBQzRCLE9BQU87a0JBQXpDLFNBQVM7bUJBQUMsc0JBQXNCO1lBQ3hCLElBQUk7a0JBQVosS0FBSztZQUNHLGNBQWM7a0JBQXRCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csVUFBVTtrQkFBbEIsS0FBSztZQUNHLFlBQVk7a0JBQXBCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUVHLE1BQU07a0JBQWQsS0FBSztZQUNHLE1BQU07a0JBQWQsS0FBSztZQUNHLE1BQU07a0JBQWQsS0FBSztZQUNHLE1BQU07a0JBQWQsS0FBSztZQUNHLE1BQU07a0JBQWQsS0FBSztZQUVHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLOztrRkFqREssb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBWYWxpZGF0b3JGbiwgRm9ybUNvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgUXVlc3Rpb25CYXNlIH0gZnJvbSAnLi9xdWVzdGlvbi1iYXNlJztcbmltcG9ydCB7IFF1ZXN0aW9uQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuL3F1ZXN0aW9uLWNvbnRyb2wuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBWYWxpZGF0b3JzIH0gZnJvbSAnLi9BcHBWYWxpZGF0b3JzJztcblxuaW1wb3J0IHsgUXVlc3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9xdWVzdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBTdGVwcGVyU2VsZWN0aW9uRXZlbnQsIFNURVBQRVJfR0xPQkFMX09QVElPTlMgfSBmcm9tICdAYW5ndWxhci9jZGsvc3RlcHBlcic7XG5pbXBvcnQgeyBNYXRTdGVwcGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUvdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFF1ZXN0aW9ubmFpcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0NsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwnO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZVNhdmVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL1F1ZXN0aW9ubmFpcmVTYXZlTW9kZWwnO1xuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91dGlsL3V0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VQYWdlIH0gZnJvbSAnLi4vLi4vcGFnZXMvQmFzZVBhZ2UnO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZVF1ZXJ5TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9RdWVzdGlvbm5haXJlUXVlcnlNb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5pbXBvcnQgeyBGYkNvbnN0YW50cyB9IGZyb20gJy4vRmJDb25zdGFudHMnO1xuaW1wb3J0IHsgRWxlbWVudHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0VsZW1lbnRzTW9kZWwnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9naW4vbG9naW4uc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0Vycm9yTW9kZWwnO1xuaW1wb3J0IHsgTWZhQ29tcG9uZW50IH0gZnJvbSAnLi4vbWZhL21mYS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZGVyTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9Mb2FkZXJNb2RlbCc7XG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2FwdGNoYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXB0Y2hhL2NhcHRjaGEuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZHluYW1pYy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXG4gIHByb3ZpZGVyczogW1F1ZXN0aW9uQ29udHJvbFNlcnZpY2UsIHtcbiAgICBwcm92aWRlOiBTVEVQUEVSX0dMT0JBTF9PUFRJT05TLFxuICAgIHVzZVZhbHVlOiB7XG4gICAgICBzaG93RXJyb3I6IHRydWUsXG4gICAgICBkaXNwbGF5RGVmYXVsdEluZGljYXRvclR5cGU6IGZhbHNlXG4gICAgfVxuICB9XSxcbn0pXG5cbmV4cG9ydCBjbGFzcyBEeW5hbWljRm9ybUNvbXBvbmVudCBleHRlbmRzIEJhc2VQYWdlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBcbiAgZm9jdXNhYmxlcyA9IFtcInBpbnB1dHRleHRcIiwgXCJwLWlucHV0bWFza1wiLCBcImlucHV0XCIsIFwic2VsZWN0XCIsIFwidGV4dGFyZWFcIiwgXCJwLWNhbGVuZGFyXCIsIFwicmFkaW9cIiwgXCJwLWRyb3Bkb3duXCIsIFwicC1zZWxlY3RCdXR0b25cIiwgXCJwLWF1dG9jb21wbGV0ZVwiLCBcInAtcGFzc3dvcmRcIixcInAtY2hlY2tib3hcIiwgXCJwLWlucHV0dGV4dGFyZWFcIl07XG5cbiAgQFZpZXdDaGlsZCgnbWZhJykgbWZhOiBNZmFDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgncXVlc3Rpb25uYWlyZUZvcm0nLCB7c3RhdGljIDogZmFsc2V9KSBcbiAgcHVibGljIHF1ZXN0aW9ubmFpcmVGb3JtOiBOZ0Zvcm07XG4gIHB1YmxpYyBwb3RlbnRpYWxJc3N1ZUlkOiBudW1iZXI7XG4gIHB1YmxpYyBibG9ja1VpID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93TWZhID0gZmFsc2U7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uczogUXVlc3Rpb25CYXNlPHN0cmluZz5bXSA9IFtdO1xuICBASW5wdXQoKSBmb3JTY3JlZW5RdWVzdGlvbm5haXJlOiBRdWVzdGlvbkJhc2U8Ym9vbGVhbj47XG4gIEBJbnB1dCgpIGlzRW5hYmxlQmFja0J1dHRvbjpCb29sZWFuO1xuICBASW5wdXQoKSBiYWNrQnV0dG9uUGFnZTogc3RyaW5nO1xuICBASW5wdXQoKSBuZXh0QnV0dG9uUGFnZTogc3RyaW5nO1xuICBASW5wdXQoKSBwYWdlVHlwZTogc3RyaW5nO1xuICBASW5wdXQoKSBoaWRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG11bHRpTW9kZTogYm9vbGVhbiA9IGZhbHNlOyAvL3doZW4gbXVsdGlwbGUgZm9ybXMgYXJlIGRpc3BsYXllZCBvbmUgYmVsb3cgdGhlIGFub3RoZXJcbiAgQElucHV0KCkgbG9hZGVyU2VydmljZTpzdHJpbmc7XG4gIHB1YmxpYyBsb2FkZXJNb2RlbCA6IExvYWRlck1vZGVsO1xuICAvKipcbiAgICogd2hlbiBhdXRvU2F2ZSBpcyBmYWxzZSwgY29tcG9uZW50IHdpbGwgb25seSBlbWl0IHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBidWlsZXIgZGF0YSB3aGljaCBuZWVkcyB0byBiZSBzYXZlZCBieSB0aGUgY2FsbGluZyBjb21wb25lbnRcbiAgICogb25seSBhcHBsaWNhYmxlIHdoZW4gcGFnZVR5cGUgaXMgbm90IFBPUFVQIGFuZCBKU09OXG4gICoqL1xuICBASW5wdXQoKSBhdXRvU2F2ZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIG1mYVJlcXVpcmVkIDogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgbW9kZWxDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvbkNvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25FcnJvciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZCgnbWF0SG9yaXpvbnRhbFN0ZXBwZXInKSBzdGVwcGVyOiBNYXRTdGVwcGVyO1xuICBASW5wdXQoKSBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpIHJlYWRPbmx5RmllbGRzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgZm9ybVJlYWRPbmx5OiBCb29sZWFuO1xuICBASW5wdXQoKSBxdWVyeU1vZGVsOiBRdWVzdGlvbm5haXJlUXVlcnlNb2RlbDtcbiAgQElucHV0KCkgZHluYW1pY1BhcmFtIDogYW55O1xuICBASW5wdXQoKSBmb3JtRGF0YTogYW55O1xuICBASW5wdXQoKSBxdWVzdGlvbk51bWJlcjogbnVtYmVyID0gbnVsbDtcblxuICBASW5wdXQoKSBzaXplWHMgOiBudW1iZXI7XG4gIEBJbnB1dCgpIHNpemVTbSA6IG51bWJlcjtcbiAgQElucHV0KCkgc2l6ZU1kIDogbnVtYmVyO1xuICBASW5wdXQoKSBzaXplTGcgOiBudW1iZXI7XG4gIEBJbnB1dCgpIHNpemVYbCA6IG51bWJlcjtcblxuICBASW5wdXQoKSBvZmZzZXRYcyA6IG51bWJlcjtcbiAgQElucHV0KCkgb2Zmc2V0U20gOiBudW1iZXI7XG4gIEBJbnB1dCgpIG9mZnNldE1kIDogbnVtYmVyO1xuICBASW5wdXQoKSBvZmZzZXRMZyA6IG51bWJlcjtcbiAgQElucHV0KCkgb2Zmc2V0WGwgOiBudW1iZXI7XG5cbiAgLy8gZm9ybTogRm9ybUdyb3VwO1xuICBmb3JtR3JvdXBBcnJheTogVW50eXBlZEZvcm1Hcm91cFtdID0gW107XG4gIHBheUxvYWQgPSAnJztcbiAgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgaXNGaXJzdDogYm9vbGVhbiA9IHRydWU7XG4gIGlzTGFzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBzdWJtaXR0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaGlkZVN0ZXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaWRlbnRpZmllcjogc3RyaW5nID0gXCJcIjtcbiAgYWN0aXZlSW5kZXg6IG51bWJlciA9IDA7XG4gIGVycm9yT2NjdXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBtZmFEYXRhIDogYW55O1xuICBtZmFFcnJvciA6IEVycm9yTW9kZWw7XG4gIHNzbkZvckNTUiA6IHN0cmluZztcbiAgXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBxZXM6IFF1ZXN0aW9uU2VydmljZSwgcHVibGljIHF1ZXN0aW9ubmFpcmVTZXJ2aWNlOiBRdWVzdGlvbm5haXJlU2VydmljZSwgcHVibGljIG5hdkN0cmw6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBxY3M6IFF1ZXN0aW9uQ29udHJvbFNlcnZpY2UsIHB1YmxpYyB1dGlsOiBVdGlsU2VydmljZSxwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSwgcHVibGljIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSwgcHVibGljIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwdWJsaWMgc3RvcmFnZSA6IFN0b3JhZ2UsIHB1YmxpYyBscyA6IExvZ2luU2VydmljZSwgcHVibGljIGNhcHRjaGEgOiBDYXB0Y2hhU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKlRoaXMgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgQElucHV0ICdmb3JtRGF0YScgdmFsdWUgaXMgY2hhbmdlZCBmb3IgdGhpcyBjb250cm9sKi8gICBcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiYmVmb3JlID09PiBcIiwgdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XSk7XG4gICAgaWYoY2hhbmdlcy5mb3JtRGF0YT8uY3VycmVudFZhbHVlKXtcbiAgICAgIGlmKGNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlKXtcbiAgICAgICAgdGhpcy5zZXRGb3JtVmFsdWVzKGNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoY2hhbmdlcy5yZWFkT25seUZpZWxkcz8uY3VycmVudFZhbHVlKXtcbiAgICAgIGZvciAobGV0IGNudHJsTmFtZSBvZiBjaGFuZ2VzLnJlYWRPbmx5RmllbGRzLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdPy5nZXQoY250cmxOYW1lKS5kaXNhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYoY2hhbmdlcy5yZWFkT25seUZpZWxkcz8ucHJldmlvdXNWYWx1ZSAmJiBjaGFuZ2VzLnJlYWRPbmx5RmllbGRzLmN1cnJlbnRWYWx1ZSA9PSBudWxsKXtcbiAgICAgIGZvciAobGV0IGNudHJsTmFtZSBvZiBjaGFuZ2VzLnJlYWRPbmx5RmllbGRzLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0/LmdldChjbnRybE5hbWUpKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coXCJhZnRlciA9PT4gXCIsIHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0pO1xuICB9XG5cbiAgc2V0Rm9ybVZhbHVlcyhkYXRhKXtcbiAgICBPYmplY3Qua2V5cyhkYXRhKVxuICAgICAgICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbiA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWd1cmF0aW9uKGtleSk7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlVG9TZXQgPSBkYXRhW2tleV07XG4gICAgICAgICAgICAgICAgaWYocXVlc3Rpb24pe1xuICAgICAgICAgICAgICAgICAgLyoqIEZvciBkcm9wZG93biBmb3JtIGNvbnRyb2wsIGV4cGVjdGluZyB0byBnZXQgZGF0YSBpbiBmb3JtIHt2YWx1ZSA6IFwic29tZVZhbHVlXCIsIHRleHQ6IG51bGx9LlxuICAgICAgICAgICAgICAgICAgICogQmFzZWQgb24gdGhlIHZhbHVlIGF0dHJpYnV0ZSwgb3B0aW9uIHdpbGwgYmUgc2V0IG9uIGZvcm0gY29udHJvbCBhZnRlciByZWFkaW5nIGl0IGZyb20gY2hvaWNlc1xuICAgICAgICAgICAgICAgICAgICogYXJyYXkuXG4gICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgaWYodmFsdWVUb1NldCl7XG4gICAgICAgICAgICAgICAgICBsZXQgY2hvaWNlID0gcXVlc3Rpb24uY2hvaWNlcy5maWx0ZXIobyA9PiBvLnZhbHVlID09ICh2YWx1ZVRvU2V0Py52YWx1ZSA/IHZhbHVlVG9TZXQudmFsdWUgOiB2YWx1ZVRvU2V0KSlbMF07XG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlSW5Gb3JtQ29udHJvbChrZXksIGNob2ljZSk7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVJbkZvcm1Db250cm9sKGtleSwgdmFsdWVUb1NldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgfVxuXG4gIHNldFZhbHVlSW5Gb3JtQ29udHJvbChuYW1lLCB2YWx1ZSl7XG4gICAgaWYodGhpcy5mb3JtR3JvdXBBcnJheSAmJiB0aGlzLmZvcm1Hcm91cEFycmF5Lmxlbmd0aCA+IDApe1xuICAgICAgbGV0IGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdPy5jb250cm9sc1tuYW1lXTtcbiAgICAgIGlmKGNvbnRyb2wpe1xuICAgICAgICBjb250cm9sLnBhdGNoVmFsdWUodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmKG5hbWUgPT0gJ2RlcGVuZGVudFRhYmxlJyl7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGZvcm0gY29udHJvbCBwcmVzZW50IGRlcGVuZGVudFRhYmxlICcsIG5hbWUpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGZvcm0gY29udHJvbCBwcmVzZW50IHdpdGggbmFtZSAnLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFwiTm8gZm9ybSBncm91cCBwcmVzZW50IHNvIHNraXBwaW5nIHZhbHVlIGFzc2lnbm1lbnQgZnJvbSBkYXRhLlwiKTtcbiAgICB9XG4gIH1cblxuICAvKiBUbyBnZXQgdGhlIGRyb3Bkb3duIGVsZW1lbnQgc28gdGhhdCB2YWx1ZSBmcm9tIHRoZSBjaG9pY2VzIGNhbiBiZSByZWFkIGFuZCBzZXQgaW50byB0aGUgZm9ybSBjb250cm9sKi9cbiAgZ2V0Rm9ybUNvbnRyb2xDb25maWd1cmF0aW9uKG5hbWUpe1xuICAgIGxldCBmaWx0ZXJlZFZhbHVlcyA9IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzW3RoaXMuYWN0aXZlSW5kZXhdLmVsZW1lbnRzLmZpbHRlcihxID0+IHEubmFtZSA9PSBuYW1lICYmIHEudHlwZSA9PSAnZHJvcGRvd24nKTtcbiAgICBpZihmaWx0ZXJlZFZhbHVlcyAmJiBmaWx0ZXJlZFZhbHVlcy5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiBmaWx0ZXJlZFZhbHVlc1swXTtcbiAgICB9ZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzZXR1cExvYWRlck1vZGVsKCkge1xuICBcbiAgICBpZiAodGhpcy5sb2FkZXJTZXJ2aWNlKSB7XG4gICAgICBsZXQgc2VydmljZVVybHM6IHN0cmluZ1tdID0gdGhpcy5sb2FkZXJTZXJ2aWNlLnNwbGl0KCcsJyk7XG4gICAgICBsZXQgc2VydmljZVVybCA9IHNlcnZpY2VVcmxzW3RoaXMuYWN0aXZlSW5kZXhdO1xuICAgICAgaWYoc2VydmljZVVybC50cmltKCkgIT0gJ251bGwnKXtcbiAgICAgIHRoaXMuYmxvY2tGb3JtVWkoKTtcbiAgICAgIGxldCBzZXJ2aWNlVXJsVmFsdWUgPSBzZXJ2aWNlVXJsLnRyaW0oKTtcbiAgICAgIGlmKHRoaXMubHMuaXNDc3IoKSl7XG4gICAgICAgIHNlcnZpY2VVcmxWYWx1ZSA9IHNlcnZpY2VVcmxWYWx1ZTsgICAgICAgXG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5scy5pc0NzcigpID8geyBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdzc24nLCB0aGlzLnNzbkZvckNTUikgfSA6IHt9O1xuICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZVxuICAgICAgICAuZ2V0PExvYWRlck1vZGVsPihgJHtzZXJ2aWNlVXJsVmFsdWV9YCwgb3B0aW9ucylcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkZXJNb2RlbCA9IHJlcztcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwibG9hZGVyIG1vZGVsICA9IFwiICsgdGhpcy5sb2FkZXJNb2RlbCk7ICAgICAgIFxuICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XG4gICAgICAgICAgICBpZih0aGlzLmxvYWRlck1vZGVsICYmIHRoaXMubG9hZGVyTW9kZWwuZGlzYWJsZUNvbnRyb2xOYW1lcyl7XG4gICAgICAgICAgICAgIHRoaXMucmVhZE9ubHlGaWVsZHMgPSB0aGlzLmxvYWRlck1vZGVsLmRpc2FibGVDb250cm9sTmFtZXM7XG4gICAgICAgICAgICAgIGZvciAobGV0IGNudHJsTmFtZSBvZiB0aGlzLnJlYWRPbmx5RmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0/LmdldChjbnRybE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdPy5nZXQoY250cmxOYW1lKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLnFjcy5nZXREYXRhKHRoaXMuYWN0aXZlSW5kZXgpICE9IG51bGwpe1xuICAgICAgICAgICAgICB0aGlzLmZvcm1EYXRhID0gSlNPTi5wYXJzZSh0aGlzLnFjcy5nZXREYXRhKHRoaXMuYWN0aXZlSW5kZXgpKTtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XS5wYXRjaFZhbHVlKHRoaXMuZm9ybURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5sb2FkZXJNb2RlbCAmJiB0aGlzLmxvYWRlck1vZGVsLmRhdGEpe1xuICAgICAgICAgICAgICB0aGlzLmZvcm1EYXRhID0gdGhpcy5sb2FkZXJNb2RlbC5kYXRhO1xuICAgICAgICAgICAgICB0aGlzLnNldEZvcm1WYWx1ZXModGhpcy5mb3JtRGF0YSk7XG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy51dGlsLmhpZGVMb2FkZXIoKTtcbiAgICAgICAgICAgIHRoaXMudXRpbC5lcnJvckhhbmRsZXIoZXJyKTtcbiAgICAgICAgICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xuICAgICAgICAgIH0pXG4gICAgfSBcbiAgfSBlbHNlIHtcbiAgICBpZih0aGlzLnFjcy5nZXREYXRhKHRoaXMuYWN0aXZlSW5kZXgpICE9IG51bGwpe1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IEpTT04ucGFyc2UodGhpcy5xY3MuZ2V0RGF0YSh0aGlzLmFjdGl2ZUluZGV4KSk7XG4gICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdLnBhdGNoVmFsdWUodGhpcy5mb3JtRGF0YSk7XG4gICAgfVxuICAgIGlmKHRoaXMuZGF0YSl7XG4gICAgICB0aGlzLmZvcm1EYXRhID0gdGhpcy5kYXRhO1xuICAgICAgdGhpcy5zZXRGb3JtVmFsdWVzKHRoaXMuZm9ybURhdGEpO1xuICAgIH0gZWxzZSBpZih0aGlzLmZvcm1EYXRhKXtcbiAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyh0aGlzLmZvcm1EYXRhKTtcbiAgICB9ICBcbiAgfSBcbn1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zb2xlLmxvZyhcIm5nb25pbml0IGJlZm9yZSA9PT4gXCIsIHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0pO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJbml0IG1ldGhvZCBjYWxsZWQgZnJvbSBkeW5hbWljIGZvcm0nLCB0aGlzLnF1ZXN0aW9ucylcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnIGJhY2tCdXR0b25QYWdlICcsIHRoaXMuYmFja0J1dHRvblBhZ2UsICcgbmV4dEJ1dHRvblBhZ2UnLCB0aGlzLm5leHRCdXR0b25QYWdlKTtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uc1swXS5wYWdlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuaGlkZVN0ZXAgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRmlyc3QgPSB0cnVlO1xuICAgIH1cbiAgICBsZXQgc3RyS2V5ID0gW107XG4gICAgbGV0IHBhcmFtTWFwID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIHN0cktleSA9IFtdID0gcGFyYW1zLmtleXM7XG4gICAgICB0aGlzLmlkZW50aWZpZXIgPSBwYXJhbXMuZ2V0KCdpZGVudGlmaWVyJyk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cktleS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1Zygnc3RyaW5nS2V5ICcsIHN0cktleVtpXSwgcGFyYW1zLmdldChzdHJLZXlbaV0pKTtcbiAgICAgICAgcGFyYW1NYXAuc2V0KHN0cktleVtpXSwgcGFyYW1zLmdldChzdHJLZXlbaV0pKTtcbiAgICAgIH1cbiAgICAgIGlmKHBhcmFtTWFwLmdldChcImtleVwiKSAhPSBudWxsKXtcbiAgICAgICAgdGhpcy5zc25Gb3JDU1IgPSBhdG9iKHBhcmFtTWFwLmdldChcImtleVwiKSk7XG4gICAgICB9XG4gICAgfVxuICAgICk7XG4gICAgXG4gICAgbGV0IGNvdW50ZXIgPSB0aGlzLnF1ZXN0aW9uc1swXS5zdGVwQ291bnRlcjtcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gY291bnRlciA/IGNvdW50ZXIgOiAwIDtcbiAgICAvL3RoaXMuc3RlcHBlclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXA7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIkJsb2NrIHN0YXRlbWVudCBleGVjdXRpb24gbm8uXCIsIHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzLmxlbmd0aCk7XG4gICAgICBmb3JtR3JvdXAgPSB0aGlzLnFjcy50b0Zvcm1Hcm91cCh0aGlzLnF1ZXN0aW9ucywgaSwgcGFyYW1NYXApO1xuICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uKGksIGZvcm1Hcm91cCk7XG5cbiAgICAgIHRoaXMuc2V0VmFsdWVTdWJzY3JpcHRpb24oaSwgZm9ybUdyb3VwKTtcbiAgICAgIHRoaXMuc2V0UmVhZE9ubHkoaSwgZm9ybUdyb3VwKTtcbiAgICAgIHZhciBwYWdlczogYW55ID0gdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXNbaV07XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygncGFnZXMnLCBwYWdlcylcbiAgICAgIGxldCB2YWxpZGF0b3JGdW5jdGlvbkxpc3Q6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xuICAgICAgaWYgKHBhZ2VzLmVsZW1lbnRzKSB7XG4gICAgICAgIHBhZ2VzLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQgOiBFbGVtZW50c01vZGVsKSA9PiB7XG5cbiAgICAgICAgICBsZXQgY29udHJsVHlwZTogc3RyaW5nID0gZWxlbWVudC50eXBlO1xuICAgICAgICAgIGlmIChjb250cmxUeXBlID09PSAncGFuZWwnKSB7XG4gICAgICAgICAgICAvL3RoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgSWYnLGVsZW1lbnQpXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRzLmZvckVhY2gocGFuZWxFbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgaWYgKHBhbmVsRWxlbWVudC5yZXF1aXJlZElmICYmIHBhbmVsRWxlbWVudC50eXBlICE9ICdidXR0b24nICYmIHBhbmVsRWxlbWVudC50eXBlICE9ICdzaW1wbGVMYWJlbCcpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldFJlcXVpcmVkSWZWYWxpZGF0aW9uKHBhbmVsRWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocGFuZWxFbGVtZW50LnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IHBhbmVsRWxlbWVudC52YWxpZGF0b3JzO1xuICAgICAgICAgICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoXCJwYW5lbCB2YWxpZGF0aW9uLjExMVwiLHBhbmVsRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdleHByZXNzaW9uJyAmJiBwYW5lbEVsZW1lbnQuaW5wdXRUeXBlICYmIHBhbmVsRWxlbWVudC5pbnB1dFR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGV4cHJlc3Npb24nKVxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldERhdGVWYWxpZGF0aW9uKHBhbmVsRWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdleHByZXNzaW9uJyAmJiBwYW5lbEVsZW1lbnQuaW5wdXRUeXBlICYmIHBhbmVsRWxlbWVudC5pbnB1dFR5cGUgPT09ICd0ZXh0J1xuICAgICAgICAgICAgICAgICAgICAmJiBwYW5lbEVsZW1lbnQuY3VzdG9tVGFnICYmIChwYW5lbEVsZW1lbnQuY3VzdG9tVGFnID09PSAncGFzc3dvcmQnIHx8ICBwYW5lbEVsZW1lbnQuY3VzdG9tVGFnID09PSAnZW1haWwnIHx8ICBwYW5lbEVsZW1lbnQuY3VzdG9tVGFnID09PSAnc3NuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBleHByZXNzaW9uJylcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goQXBwVmFsaWRhdG9ycy5zZXRQYXNzd29yZFZhbGlkYXRpb24ocGFuZWxFbGVtZW50LCB0aGlzLnFjcy5nZXRBbGxEYXRhKCkpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2N1c3RvbXZhbGlkYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuY3VzdG9tVmFsaWRhdGlvbihwYW5lbEVsZW1lbnQsIHZhbGlkYXRvciwgdGhpcy51dGlsLmdldFN0YXRlKCkpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGVsc2UnLGVsZW1lbnQpXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmICYmIGVsZW1lbnQudHlwZSAhPSAnYnV0dG9uJyAmJiBlbGVtZW50LnR5cGUgIT0gJ3NpbXBsZUxhYmVsJykge1xuICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldFJlcXVpcmVkSWZWYWxpZGF0aW9uKGVsZW1lbnQsIHRoaXMucWNzLmdldEFsbERhdGEoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsaWRhdG9ycykge1xuICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IGVsZW1lbnQudmFsaWRhdG9ycztcbiAgICAgICAgICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicgJiYgZWxlbWVudC5pbnB1dFR5cGUgJiYgZWxlbWVudC5pbnB1dFR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBleHByZXNzaW9uJylcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuc2V0RGF0ZVZhbGlkYXRpb24oZWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2N1c3RvbXZhbGlkYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLmN1c3RvbVZhbGlkYXRpb24oZWxlbWVudCwgdmFsaWRhdG9yLCB0aGlzLnV0aWwuZ2V0U3RhdGUoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnNlcnZpY2VUeXBlICYmIGVsZW1lbnQuc2VydmljZVR5cGUgPT09ICdWQUxJREFURScpIHtcbiAgICAgICAgICAgICAgLy92YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLmNyZWF0ZVZhbGlkYXRvcih0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLGVsZW1lbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybUdyb3VwLnNldFZhbGlkYXRvcnModmFsaWRhdG9yRnVuY3Rpb25MaXN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Hcm91cEFycmF5LnB1c2goZm9ybUdyb3VwKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwicGFnZXMucWVEYXRhXCIsIHBhZ2VzLnFlRGF0YSk7XG4gICAgICBpZihwYWdlcy5xZURhdGEpe1xuICAgICAgICBmb3JtR3JvdXAucGF0Y2hWYWx1ZShwYWdlcy5xZURhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJzZXQgdmFsdWVzIGFzIHBlciBsb2FkZXIgc2VydmljZSA9IFwiLCB0aGlzLmZvcm1EYXRhKTtcbiAgICAgIGlmICh0aGlzLmZvcm1EYXRhICYmIHRoaXMuZm9ybURhdGEpIHtcbiAgICAgICAgdGhpcy5zZXRGb3JtVmFsdWVzKHRoaXMuZm9ybURhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9ybVJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbaV0uZGlzYWJsZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVhZE9ubHlGaWVsZHMgJiYgdGhpcy5yZWFkT25seUZpZWxkcykge1xuICAgICAgICBmb3IgKGxldCBjbnRybE5hbWUgb2YgdGhpcy5yZWFkT25seUZpZWxkcykge1xuICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cEFycmF5W2ldLmdldChjbnRybE5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W2ldLmdldChjbnRybE5hbWUpLmRpc2FibGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldHVwTG9hZGVyTW9kZWwoKTtcbiAgICBcbiAgICBpZiAodGhpcy5wYWdlVHlwZSA9PT0gJ1BPUFVQJykge1xuICAgICAgbGV0IG1vZGVsID0gbmV3IENsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwoKTtcbiAgICAgIG1vZGVsID0gdGhpcy5kYXRhO1xuICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVswXS5wYXRjaFZhbHVlKG1vZGVsKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCd0aGlzLmZvcm1Hcm91cEFycmF5IGFmdGVyIElGJywgdGhpcy5mb3JtR3JvdXBBcnJheSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnZVR5cGUgPT09ICdKc29uJyAmJiB0aGlzLmZvcm1EYXRhKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cEFycmF5WzBdLnBhdGNoVmFsdWUodGhpcy5mb3JtRGF0YSk7XG4gICAgICBpZiAodGhpcy5mb3JtUmVhZE9ubHkpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVswXS5kaXNhYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBjbnRybE5hbWUgb2YgdGhpcy5yZWFkT25seUZpZWxkcykge1xuICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cEFycmF5WzBdLmdldChjbnRybE5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5WzBdLmdldChjbnRybE5hbWUpLmRpc2FibGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY3VycmVudFFlID0gdGhpcy5xZXMuc2VhcmNoQnMuZ2V0VmFsdWUoKTtcbiAgICB0aGlzLnBvdGVudGlhbElzc3VlSWQgPSBjdXJyZW50UWU/LnBvdGVudGlhbElzc3VlSWQ7XG4gICAgY29uc29sZS5sb2coXCJuZ29uaW5pdCBhZnRlciA9PT4gXCIsIHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0pO1xuICB9XG5cbiAgc2V0VmFsdWVTdWJzY3JpcHRpb24ocGFnZUluZGV4OiBudW1iZXIsIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIHZhciBwYWdlczogYW55ID0gdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXNbcGFnZUluZGV4XTtcbiAgICBpZiAocGFnZXMuZWxlbWVudHMpIHtcbiAgICAgIHBhZ2VzLmVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGxldCBjb250cmxUeXBlOiBzdHJpbmcgPSBlbGVtZW50LnR5cGU7XG4gICAgICAgIGlmIChlbGVtZW50LnN1YnNjcmliZVZhbHVlT2YpIHtcbiAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5zdWJzY3JpYmVWYWx1ZU9mXVxuICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0VmFsdWUodmFsdWUpKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdwYW5lbCcpIHtcbiAgICAgICAgICAvLyAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBwYW5lbENvbnRybFR5cGUnLCAgZWxlbWVudC5lbGVtZW50cylcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnRzLmZvckVhY2gocGFuZWxFbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChwYW5lbEVsZW1lbnQuc3Vic2NyaWJlVmFsdWVPZikge1xuICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbcGFuZWxFbGVtZW50LnN1YnNjcmliZVZhbHVlT2ZdLnZhbHVlQ2hhbmdlcy5cbiAgICAgICAgICAgICAgICBzdWJzY3JpYmUoKGNoYW5nZSkgPT4gZm9ybUdyb3VwLmNvbnRyb2xzW3BhbmVsRWxlbWVudC5uYW1lXS5zZXRWYWx1ZShjaGFuZ2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRSZWFkT25seShwYWdlSW5kZXg6IG51bWJlciwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgdmFyIHBhZ2VzOiBhbnkgPSB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlc1twYWdlSW5kZXhdO1xuICAgIGlmIChwYWdlcy5lbGVtZW50cykge1xuICAgICAgcGFnZXMuZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgbGV0IGNvbnRybFR5cGU6IHN0cmluZyA9IGVsZW1lbnQudHlwZTtcbiAgICAgICAgaWYgKGVsZW1lbnQucmVhZG9ubHkpIHtcbiAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5kaXNhYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ3BhbmVsJykge1xuICAgICAgICAgIC8vICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIHBhbmVsQ29udHJsVHlwZScsICBlbGVtZW50LmVsZW1lbnRzKVxuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudHMuZm9yRWFjaChwYW5lbEVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVhZG9ubHkpIHtcbiAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW3BhbmVsRWxlbWVudC5uYW1lXS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0VmFsaWRhdGlvbihwYWdlSW5kZXg6IG51bWJlciwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgdmFyIHBhZ2VzOiBhbnkgPSB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlc1twYWdlSW5kZXhdO1xuICAgIC8vdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXMuZm9yRWFjaChwYWdlcyA9PiB7XG4gICAgaWYgKHBhZ2VzLmVsZW1lbnRzKSB7XG4gICAgICBwYWdlcy5lbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBsZXQgY29udHJsVHlwZTogc3RyaW5nID0gZWxlbWVudC50eXBlO1xuICAgICAgICAvLyAgdGhpcy5sb2dnZXIuZGVidWcoJ2VsZW1lbnQgPT0gJyxlbGVtZW50KTtcbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICd0ZXh0JyB8fCBjb250cmxUeXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvclRleHRDb250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdjb21tZW50Jykge1xuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvckNvbW1lbnRDb250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdkcm9wZG93bicpIHtcbiAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JEcm9wRG93bkNvbnRyb2woZWxlbWVudCwgZm9ybUdyb3VwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ3JhZGlvZ3JvdXAnIHx8IGNvbnRybFR5cGUgPT09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yUmFkaW9Db250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdjaGVja2JveCcgfHwgY29udHJsVHlwZSA9PT0gJ3NpbmdsZXNlbGVjdGNoZWNrYm94JyB8fCBjb250cmxUeXBlID09PSAnc2ltcGxlY2hlY2tib3gnIHx8IGNvbnRybFR5cGUgPT09ICdtdWx0aWNoZWNrYm94Jykge1xuICAgICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdzaW5nbGVzZWxlY3RjaGVja2JveCBjYWxsZWQnLGVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvckNoZWNrQm94Q29udHJvbChlbGVtZW50LCBmb3JtR3JvdXApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdwYW5lbCcpIHtcbiAgICAgICAgICAvLyAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBwYW5lbENvbnRybFR5cGUnLCAgZWxlbWVudC5lbGVtZW50cylcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnRzLmZvckVhY2gocGFuZWxFbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGxldCBwYW5lbENvbnRybFR5cGU6IHN0cmluZyA9IHBhbmVsRWxlbWVudC50eXBlO1xuXG4gICAgICAgICAgICBpZiAocGFuZWxDb250cmxUeXBlID09PSAnZHJvcGRvd24nKSB7XG4gICAgICAgICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgcGFuZWxDb250cmxUeXBlJywgcGFuZWxFbGVtZW50KVxuICAgICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JEcm9wRG93bkNvbnRyb2wocGFuZWxFbGVtZW50LCBmb3JtR3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhbmVsQ29udHJsVHlwZSA9PT0gJ3RleHQnIHx8IHBhbmVsQ29udHJsVHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ3BhbmVsQ29udHJsVHlwZScsICBwYW5lbENvbnRybFR5cGUsJ3BhbmVsRWxlbWVudCcscGFuZWxFbGVtZW50KVxuICAgICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JUZXh0Q29udHJvbChwYW5lbEVsZW1lbnQsIGZvcm1Hcm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFuZWxDb250cmxUeXBlID09PSAncmFkaW9ncm91cCcgfHwgcGFuZWxDb250cmxUeXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JSYWRpb0NvbnRyb2wocGFuZWxFbGVtZW50LCBmb3JtR3JvdXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGFuZWxDb250cmxUeXBlID09PSAnY2hlY2tib3gnIHx8IHBhbmVsQ29udHJsVHlwZSA9PT0gJ3NpbmdsZXNlbGVjdGNoZWNrYm94Jykge1xuICAgICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JDaGVja0JveENvbnRyb2wocGFuZWxFbGVtZW50LCBmb3JtR3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICApXG4gICAgfVxuICAgIC8vfSk7XG4gIH1cblxuXG4gIHNldFZhbGlkYXRpb25Gb3JDaGVja0JveENvbnRyb2woZWxlbWVudDogYW55LCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICBpZiAoZm9ybUdyb3VwICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XG4gICAgICBsZXQgdmFsaWRhdG9yRnVuY3Rpb25MaXN0OiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcbiAgICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZWQgJiYgIWVsZW1lbnQucmVxdWlyZWRJZikge1xuICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIH1cbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldFZhbGlkYXRvcnModmFsaWRhdG9yRnVuY3Rpb25MaXN0KTtcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gIH1cblxuICBzZXRWYWxpZGF0aW9uRm9yUmFkaW9Db250cm9sKGVsZW1lbnQ6IGFueSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgaWYgKGZvcm1Hcm91cCAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xuICAgICAgbGV0IHZhbGlkYXRvckZ1bmN0aW9uTGlzdDogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XG5cbiAgICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZWQgJiYgIWVsZW1lbnQucmVxdWlyZWRJZikge1xuICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIH1cbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldFZhbGlkYXRvcnModmFsaWRhdG9yRnVuY3Rpb25MaXN0KTtcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gIH1cblxuXG4gIHNldFZhbGlkYXRpb25Gb3JEcm9wRG93bkNvbnRyb2woZWxlbWVudDogYW55LCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICBpZiAoZm9ybUdyb3VwICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XG4gICAgICBsZXQgdmFsaWRhdG9yRnVuY3Rpb25MaXN0OiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcbiAgICAgIC8vVmFsaWRhdGlvbiBuZWVkIHRvIGJlIGNoZWNrXG4gICAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVkICYmICFlbGVtZW50LnJlcXVpcmVkSWYpIHtcbiAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1Zygnc2V0VmFsaWRhdGlvbkZvckRyb3BEb3duQ29udHJvbCcsIGVsZW1lbnQubmFtZSlcbiAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICB9XG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvckZ1bmN0aW9uTGlzdCk7XG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cbiAgICB9XG4gICAgLy90aGlzLmxvZ2dlci5kZWJ1ZyhlbGVtZW50Lm5hbWUsJ2Zvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdJyxmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSk7XG4gIH1cblxuXG4gIHNldFZhbGlkYXRpb25Gb3JDb21tZW50Q29udHJvbChlbGVtZW50OiBhbnksIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIGlmIChmb3JtR3JvdXAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcbiAgICAgIGxldCB2YWxpZGF0b3JGdW5jdGlvbkxpc3Q6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xuICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCAmJiAhZWxlbWVudC5yZXF1aXJlZElmKSB7XG4gICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgfVxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JGdW5jdGlvbkxpc3QpO1xuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFZhbGlkYXRpb25Gb3JUZXh0Q29udHJvbChlbGVtZW50OiBhbnksIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdzZXRWYWxpZGF0aW9uRm9yVGV4dENvbnRyb2wnLGVsZW1lbnQpO1xuICAgIGlmIChmb3JtR3JvdXAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcbiAgICAgIGxldCB2YWxpZGF0b3JGdW5jdGlvbkxpc3Q6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xuICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCAmJiAhZWxlbWVudC5yZXF1aXJlZElmKSB7XG4gICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdzZXRWYWxpZGF0aW9uRm9yVGV4dENvbnRyb2wgaXNSZXF1aXJlZCAnLGVsZW1lbnQpO1xuICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50LnZhbGlkYXRvcnMpIHtcbiAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XG4gICAgICAgIHZhbGlkYXRvckxpc3QuZm9yRWFjaCh2YWxpZGF0b3IgPT4ge1xuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nICYmIGVsZW1lbnQuaW5wdXRUeXBlICYmIGVsZW1lbnQuaW5wdXRUeXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBleHByZXNzaW9uJylcbiAgICAgICAgICAgIC8vIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuc2V0RGF0ZVZhbGlkYXRpb24odmFsaWRhdG9yLmV4cHJlc3Npb24sIHRoaXMucWNzLmdldEFsbERhdGEoKSwgeyBkYXRlQ29tcGFyaXNpb246IHRydWUgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdyZWdleCcpIHtcbiAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMucGF0dGVybih2YWxpZGF0b3IucmVnZXgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAndGV4dCcgJiYgdmFsaWRhdG9yLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodmFsaWRhdG9yLm1pbkxlbmd0aCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICd0ZXh0JyAmJiB2YWxpZGF0b3IubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh2YWxpZGF0b3IubWF4TGVuZ3RoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ251bWVyaWMnKSB7XG4gICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLm1heCh2YWxpZGF0b3IubWF4VmFsdWUpKTtcbiAgICAgICAgICB9XG5cblxuICAgICAgICB9KVxuXG4gICAgICB9XG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvckZ1bmN0aW9uTGlzdCk7XG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cbiAgICB9XG4gIH1cblxuICBuZXh0UGFnZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXCJuZXh0IHBhZ2UgY2FsbGVkIC0tLS0gXCIpXG4gICAgbGV0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwQXJyYXlbaW5kZXhdO1xuICAgIGlmIChmb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBpZicsIGZvcm1Hcm91cCk7XG4gICAgICBmb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgT2JqZWN0LnZhbHVlcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucWNzLnNldERhdGEodGhpcy5hY3RpdmVJbmRleCwgSlNPTi5zdHJpbmdpZnkoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkpKTtcbiAgICAvL0xvZ2ljIHRvIHNhdmUgc3RhcnRcbiAgICBsZXQgc3RySW50b09iajtcbiAgICB0aGlzLnFjcy5nZXRBbGxEYXRhKCkuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgIHN0ckludG9PYmogPSAoZGF0YSk7XG4gICAgICB0aGlzLnBheUxvYWQgPSAodGhpcy5wYXlMb2FkICsgc3RySW50b09iaik7XG4gICAgfSk7XG5cbiAgICBsZXQgc2F2ZURhdGEgPSB7fSBhcyBRdWVzdGlvbm5haXJlU2F2ZU1vZGVsO1xuICAgIGxldCBjdXJyZW50UWUgPSB0aGlzLnFlcy5zZWFyY2hCcy5nZXRWYWx1ZSgpO1xuICAgIGxldCBlbXBsb3llZURhdGEgPSB0aGlzLnFlcy5lbXBsb3llZUJzLmdldFZhbHVlKCk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ2VtcGxveWVlRGF0YSAnLCBlbXBsb3llZURhdGEpO1xuICAgIGlmICh0aGlzLmZvclNjcmVlblF1ZXN0aW9ubmFpcmUpIHtcbiAgICAgIGxldCBkYXRhQXJyOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICAgIGRhdGFBcnIucHVzaChkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgc2F2ZURhdGEuc2NyZWVuUXVlc3Rpb25uYWlyZURhdGEgPSBkYXRhQXJyO1xuICAgICAgc2F2ZURhdGEudXNlclR5cGUgPSBjdXJyZW50UWUudXNlclR5cGU7XG4gICAgICBzYXZlRGF0YS5mbG93RnJvbSA9IGN1cnJlbnRRZS5mbG93RnJvbTtcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZHMgPSBjdXJyZW50UWUucXVlc3Rpb25uYWlyZUlkcztcbiAgICAgIHNhdmVEYXRhLmVtcE1vZGVsID0gZW1wbG95ZWVEYXRhO1xuICAgICAgc2F2ZURhdGEudXVpZCA9IHRoaXMuaWRlbnRpZmllcjsvL2N1cnJlbnRRZS51dWlkO1xuICAgICAgc2F2ZURhdGEuZmxvd0tleSA9IGN1cnJlbnRRZS5mbG93S2V5O1xuICAgICAgc2F2ZURhdGEuYWN0aXZlUGFnZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZCA9IGN1cnJlbnRRZS5xdWVzdGlvbm5haXJlSWQ7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1Zygnc2F2ZSBEYXRhICcsIHNhdmVEYXRhKVxuICAgICAgdGhpcy51dGlsLnNob3dMb2FkZXIoKTtcbiAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2VcbiAgICAgICAgLnNhdmVTY3JlZW5RdWVzdGlvbm5haXJlKHNhdmVEYXRhKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnV0aWwuaGlkZUxvYWRlcigpO1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhyZXMpO1xuICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcInJlcyB1dWlkID09PT0gXCIgLCByZXNbRmJDb25zdGFudHMudXVpZF0pO1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnV1aWQubmV4dChyZXNbRmJDb25zdGFudHMudXVpZF0pO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnV1aWQsIHJlc1tGYkNvbnN0YW50cy51dWlkXSk7XG4gICAgICAgICAgICAgIGlmKHJlc1sncmVkaXJlY3RUb0VuZCddID09PSB0cnVlKXtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnN1Y2Nlc3NFbGVtZW50Lm5leHQocmVzW0ZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudF0pO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2Uud2FpdEZvclByb2Nlc3NpbmcubmV4dChyZXNbRmJDb25zdGFudHMud2FpdEZvclByb2Nlc3NpbmddKTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnBhZ2VUb09wZW4ubmV4dChyZXNbRmJDb25zdGFudHMucGFnZVRvT3Blbl0pO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy5zdWNjZXNzUGFnZUVsZW1lbnQsIHJlc1tGYkNvbnN0YW50cy5zdWNjZXNzUGFnZUVsZW1lbnRdKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLndhaXRGb3JQcm9jZXNzaW5nLCByZXNbRmJDb25zdGFudHMud2FpdEZvclByb2Nlc3NpbmddKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnBhZ2VUb09wZW4sIHJlc1tGYkNvbnN0YW50cy5wYWdlVG9PcGVuXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdChgLyR7dGhpcy5uZXh0QnV0dG9uUGFnZX0/aWRlbnRpZmllcj0ke3Jlc1sndXVpZCddfWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQcmV2QW5kTmV4dEJ1dHRvbigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9IHJlc1sndXVpZCddOyAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JPY2N1cmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXRpbC5oaWRlTG9hZGVyKCk7XG4gICAgICAgICAgICB0aGlzLnV0aWwuZXJyb3JIYW5kbGVyKGVycik7XG5cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgfVxuXG4gIHByZXZQYWdlKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaW5kZXggLSAxO1xuICAgIHRoaXMuc2V0UHJldkFuZE5leHRCdXR0b24oKTtcbiAgfVxuXG4gIHZpc2libGVJZihzdHJFeHA6IHN0cmluZywgZWxlbWVudE5hbWU6IHN0cmluZywgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCBlbGVtZW50OiBhbnkpIHtcblxuXG4gICAgaWYgKCFzdHJFeHApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgaXNWaXNpYmxlIDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmKHN0ckV4cC5pbmNsdWRlcygnJiYnKSl7XG4gICAgICBsZXQgZXhwciA6IHN0cmluZ1tdID0gc3RyRXhwLnNwbGl0KCcmJicpO1xuICAgICAgaXNWaXNpYmxlID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCkgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cClcbiAgICB9XG5cbiAgICBpZihzdHJFeHAuaW5jbHVkZXMoJ3x8Jykpe1xuICAgICAgbGV0IGV4cHIgOiBzdHJpbmdbXSA9IHN0ckV4cC5zcGxpdCgnfHwnKTtcbiAgICAgIGlzVmlzaWJsZSA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXApIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXApXG4gICAgfVxuXG4gICAgaWYoIXN0ckV4cC5pbmNsdWRlcygnfHwnKSAmJiAhc3RyRXhwLmluY2x1ZGVzKCcmJicpKXtcbiAgICAgIGlzVmlzaWJsZSA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKHN0ckV4cC50cmltKCksIGZvcm1Hcm91cCk7XG4gICAgfVxuXG4gICAgaWYoaXNWaXNpYmxlKXtcbiAgICAgIHJldHVybiBpc1Zpc2libGU7XG4gICAgfVxuICAgIFxuICAgIGlmIChlbGVtZW50TmFtZSAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudE5hbWVdICYmICFlbGVtZW50LnN1YnNjcmliZVZhbHVlT2YpIHtcbiAgICAgIGlmKHRoaXMuZm9ybURhdGEgJiYgIXRoaXMuZm9ybURhdGFbZWxlbWVudE5hbWVdKXtcbiAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnROYW1lXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuXG4gIGNvbXBsZXRlKCkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdjb21wbGV0ZSBtZXRob2QgY2FsbGVkID09PT09PT0nKTtcbiAgICBpZih0aGlzLm1mYVJlcXVpcmVkICYmIHRoaXMuc2hvd01mYSAmJiB0aGlzLm1mYSl7XG4gICAgICB0aGlzLm1mYS5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICBsZXQgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTdWJtaXQgY2FsbGVkIGZyb20gY29tcGxldGUgbWV0aG9kIGluIGR5bmFtaWMgZm9ybScpXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZm9ybUdyb3VwQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwQXJyYXlbaV07XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGlmJywgZm9ybUdyb3VwKTtcbiAgICAgIGlmIChmb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGlmJywgZm9ybUdyb3VwKTtcbiAgICAgICAgZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1ZygnY29udHJvbCcsIGNvbnRyb2wpO1xuICAgICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucXVlc3Rpb25uYWlyZUZvcm0ub25TdWJtaXQodW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdmb3JtR3JvdXAnLCBmb3JtR3JvdXApO1xuICAgIHRoaXMucWNzLnNldERhdGEodGhpcy5hY3RpdmVJbmRleCwgSlNPTi5zdHJpbmdpZnkoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkpKTtcbiAgICBsZXQgc3RySW50b09iajtcbiAgICB0aGlzLnBheUxvYWQgPSAnJztcbiAgICB0aGlzLnFjcy5nZXRBbGxEYXRhKCkuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgIHN0ckludG9PYmogPSAoZGF0YSk7XG4gICAgICB0aGlzLnBheUxvYWQgPSAodGhpcy5wYXlMb2FkICsgc3RySW50b09iaik7XG4gICAgfSk7XG5cbiAgICBsZXQgc2F2ZURhdGEgPSB7fSBhcyBRdWVzdGlvbm5haXJlU2F2ZU1vZGVsO1xuICAgIGxldCBjdXJyZW50UWUgPSB0aGlzLmF1dG9TYXZlID8gdGhpcy5xZXMuc2VhcmNoQnMuZ2V0VmFsdWUoKSA6IHRoaXMucXVlcnlNb2RlbDtcblxuICAgIGlmICh0aGlzLnBhZ2VUeXBlID09PSAnUE9QVVAnIHx8IHRoaXMucGFnZVR5cGUgPT09ICdKc29uJykge1xuICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5mb3JTY3JlZW5RdWVzdGlvbm5haXJlKSB7XG4gICAgICBzYXZlRGF0YS5kYXRhID0gdGhpcy5wYXlMb2FkLy9KU09OLnN0cmluZ2lmeSh0aGlzLnBheUxvYWQpO1xuICAgICAgc2F2ZURhdGEucG90ZW50aWFsSXNzdWVJZCA9IGN1cnJlbnRRZS5wb3RlbnRpYWxJc3N1ZUlkO1xuICAgICAgc2F2ZURhdGEuZmxvd0FibGVBbmRBdmFpbGFibGUgPSBjdXJyZW50UWUuZmxvd0FibGVBbmRBdmFpbGFibGU7XG4gICAgICBzYXZlRGF0YS51c2VyVHlwZSA9IGN1cnJlbnRRZS51c2VyVHlwZTtcbiAgICAgIHNhdmVEYXRhLmZsb3dGcm9tID0gY3VycmVudFFlLmZsb3dGcm9tO1xuICAgICAgc2F2ZURhdGEuZmxvd1dDQWJsZUFuZEF2YWlsYWJsZSA9IGN1cnJlbnRRZS5mbG93V0NBYmxlQW5kQXZhaWxhYmxlO1xuICAgICAgc2F2ZURhdGEuY2xhaW1BcHBsaWNhdGlvbklkID0gY3VycmVudFFlLmNsYWltQXBwbGljYXRpb25JZDtcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZHMgPSBjdXJyZW50UWUucXVlc3Rpb25uYWlyZUlkcztcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZCA9IGN1cnJlbnRRZS5xdWVzdGlvbm5haXJlSWQ7XG4gICAgICBzYXZlRGF0YS5hY3RpdmVQYWdlSW5kZXggPSB0aGlzLmFjdGl2ZUluZGV4O1xuICAgICAgaWYoIXRoaXMuYXV0b1NhdmUpe1xuICAgICAgICBzYXZlRGF0YS5hdXRvU2F2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdChzYXZlRGF0YSk7XG4gICAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmJsb2NrRm9ybVVpKClcbiAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2VcbiAgICAgICAgLnNhdmVRdWVzdGlvbm5haXJlKHNhdmVEYXRhKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmxvY2tGb3JtVWkoKTtcbiAgICAgICAgICAgIHRoaXMucWVzLnNlYXJjaE1vZGVsLnNwbGljZSh0aGlzLnFlcy5zZWFyY2hNb2RlbC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnBvdGVudGlhbElzc3VlSWQgPT0gY3VycmVudFFlLnBvdGVudGlhbElzc3VlSWQpLCAxKTtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdyZW1haW5pbmcgZWxlbWVudHMnLCB0aGlzLnFlcy5zZWFyY2hNb2RlbCk7XG4gICAgICAgICAgICBpZiAodGhpcy5xZXMuc2VhcmNoTW9kZWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLnFlcy5zZWFyY2hCcy5uZXh0KHRoaXMucWVzLnNlYXJjaE1vZGVsWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdObyBFbGVtZW50IFByZXNlbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZS5lbWl0KHJlcyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XG4gICAgICAgICAgICB0aGlzLmNhcHRjaGEucmVzZXRDYXB0Y2hhKCk7XG4gICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGRhdGFBcnI6IHN0cmluZ1tdID0gW107XG4gICAgICB0aGlzLnFjcy5nZXRBbGxEYXRhKCkuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgICAgZGF0YUFyci5wdXNoKGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBzYXZlRGF0YS5zY3JlZW5RdWVzdGlvbm5haXJlRGF0YSA9IGRhdGFBcnI7XG4gICAgICBzYXZlRGF0YS51c2VyVHlwZSA9IGN1cnJlbnRRZS51c2VyVHlwZTtcbiAgICAgIHNhdmVEYXRhLmZsb3dGcm9tID0gY3VycmVudFFlLmZsb3dGcm9tO1xuICAgICAgc2F2ZURhdGEuaXNTY3JlZW5RdWVzdGlvbm5haXJlID0gdHJ1ZTtcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZHMgPSBjdXJyZW50UWUucXVlc3Rpb25uYWlyZUlkcztcbiAgICAgIHNhdmVEYXRhLnV1aWQgPSB0aGlzLmlkZW50aWZpZXI7Ly9jdXJyZW50UWUudXVpZDtcbiAgICAgIHNhdmVEYXRhLmZsb3dLZXkgPSBjdXJyZW50UWUuZmxvd0tleTtcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZCA9IGN1cnJlbnRRZS5xdWVzdGlvbm5haXJlSWQ7XG4gICAgICBzYXZlRGF0YS5hY3RpdmVQYWdlSW5kZXggPSB0aGlzLmFjdGl2ZUluZGV4O1xuXG4gICAgICBpZighdGhpcy5hdXRvU2F2ZSl7XG4gICAgICAgIHRoaXMub25Db21wbGV0ZS5lbWl0KHNhdmVEYXRhKTtcbiAgICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZih0aGlzLm1mYVJlcXVpcmVkKXtcbiAgICAgICAgdGhpcy5zaG93TWZhID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tZmFEYXRhID0gc2F2ZURhdGE7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2F2ZVNjcmVlblF1ZXN0aW9ubmFpcmUoc2F2ZURhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHNhdmVTY3JlZW5RdWVzdGlvbm5haXJlKGRhdGEpe1xuICAgIHRoaXMuYmxvY2tGb3JtVWkoKVxuICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2VcbiAgICAgICAgLnNhdmVTY3JlZW5RdWVzdGlvbm5haXJlKGRhdGEpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS5zdWNjZXNzRWxlbWVudC5uZXh0KHJlc1tGYkNvbnN0YW50cy5zdWNjZXNzUGFnZUVsZW1lbnRdKTtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS51dWlkLm5leHQocmVzW0ZiQ29uc3RhbnRzLnV1aWRdKTtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS53YWl0Rm9yUHJvY2Vzc2luZy5uZXh0KHJlc1tGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZ10pO1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLndhaXRDaGVja1NlcnZpY2VVcmkubmV4dChyZXNbRmJDb25zdGFudHMud2FpdENoZWNrU2VydmljZVVyaV0pO1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnBhZ2VUb09wZW4ubmV4dChyZXNbRmJDb25zdGFudHMucGFnZVRvT3Blbl0pO1xuXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMuc3VjY2Vzc1BhZ2VFbGVtZW50LCByZXNbRmJDb25zdGFudHMuc3VjY2Vzc1BhZ2VFbGVtZW50XSk7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMud2FpdEZvclByb2Nlc3NpbmcsIHJlc1tGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZ10pO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLndhaXRDaGVja1NlcnZpY2VVcmksIHJlc1tGYkNvbnN0YW50cy53YWl0Q2hlY2tTZXJ2aWNlVXJpXSk7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMucGFnZVRvT3BlbiwgcmVzW0ZiQ29uc3RhbnRzLnBhZ2VUb09wZW5dKTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy51dWlkLCByZXNbRmJDb25zdGFudHMudXVpZF0pO1xuXG4gICAgICAgICAgICAgIGlmKHRoaXMubmV4dEJ1dHRvblBhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KGAvJHt0aGlzLm5leHRCdXR0b25QYWdlfT9pZGVudGlmaWVyPSR7cmVzWyd1dWlkJ119YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVuYmxvY2tGb3JtVWkoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd01mYSA9IGZhbHNlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFcnJvciBvY2N1cmVkJywgZXJyKTtcbiAgICAgICAgICAgIGlmKHRoaXMubWZhUmVxdWlyZWQpe1xuICAgICAgICAgICAgICB0aGlzLm1mYUVycm9yID0gZXJyO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVuYmxvY2tGb3JtVWkoKTtcbiAgICAgICAgICAgIHRoaXMuY2FwdGNoYS5yZXNldENhcHRjaGEoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gIH1cblxuICBzZXRQcmV2QW5kTmV4dEJ1dHRvbigpIHtcbiAgICBsZXQgY29tcGFyZVZhbHVlOiBudW1iZXIgPSAwO1xuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4ID4gMCkge1xuICAgICAgY29tcGFyZVZhbHVlID0gMTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA+IDApIHtcbiAgICAgIHRoaXMuaXNGaXJzdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4ID09PSAxICYmIHRoaXMuaXNQcmV2aW91c1BhZ2VBUGxhY2Vob2xkZXIodGhpcy5xdWVzdGlvbnNbMF0ucGFnZXNbMF0pKSB7XG4gICAgICB0aGlzLmlzRmlyc3QgPSB0cnVlO1xuICAgICAgdGhpcy5pc0xhc3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0ZpcnN0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNMYXN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPT09IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMuaXNMYXN0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNGaXJzdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4IDwgdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5pc0xhc3QgPSBmYWxzZTtcbiAgICB9ICAgXG4gICAgdGhpcy5zZXR1cExvYWRlck1vZGVsKCk7XG4gIH1cblxuICBpc1ByZXZpb3VzUGFnZUFQbGFjZWhvbGRlcihwYWdlIDogYW55KXtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcImlzUGxhY2VIb2xkZXIgPSBcIiArIHBhZ2VbXCJpc1BsYWNlSG9sZGVyXCJdKTtcbiAgICBsZXQgcGxhY2VIb2xkZXI6IGJvb2xlYW4gPSAgcGFnZVtcImlzUGxhY2VIb2xkZXJcIl07XG4gICAgcmV0dXJuIHBsYWNlSG9sZGVyLnZhbHVlT2YoKTtcbiAgfVxuXG4gIHN0ZXBDaGFuZ2VkKGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQucHJldmlvdXNseVNlbGVjdGVkSW5kZXggPiBldmVudC5zZWxlY3RlZEluZGV4KSB7XG4gICAgICBldmVudC5wcmV2aW91c2x5U2VsZWN0ZWRTdGVwLmludGVyYWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWxBY3Rpb24oKSB7XG4gICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdCh0aGlzLmJhY2tCdXR0b25QYWdlKTtcbiAgfVxuXG4gIGNhbmNlbFBvcFVwKCkge1xuICAgIGxldCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdO1xuICAgIHRoaXMubW9kZWxDYW5jZWwuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ2NhbmNlbFBvcFVwIGNhbGxlZCcsIGZvcm1Hcm91cClcbiAgfVxuXG4gIHVwbG9hZEZpbGUocXVldWU6IEZpbGVbXSkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdxdWV1ZTExMSAnLCBxdWV1ZSk7XG4gICAgLy9xdWV1ZVswXS5zaXplXG4gIH1cblxuICBibG9ja0Zvcm1VaSgpe1xuICAgIHRoaXMuYmxvY2tVaSA9IHRydWU7XG4gIH1cblxuICB1bmJsb2NrRm9ybVVpKCl7XG4gICAgdGhpcy5ibG9ja1VpID0gZmFsc2U7XG4gIH1cblxuICBzaG91bGRGaXRDb250ZW50KGVsZW1lbnRzIDogRWxlbWVudHNNb2RlbFtdKXtcbiAgICBsZXQgc2hvdWxkRml0Q29udGVudCA6IGJvb2xlYW4gPSB0cnVlOyBcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgaWYoZWxlbWVudC5jdXN0b21UYWcgPT0gJ2NvbXBvbmVudCcpe1xuICAgICAgICBzaG91bGRGaXRDb250ZW50ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2hvdWxkRml0Q29udGVudDtcbiAgfVxuXG4gIHVwZGF0ZUR5bmFtaWNQYXJhbShldmVudCl7XG4gICAgaWYoQXJyYXkuaXNBcnJheShldmVudCkpe1xuICAgICAgdGhpcy5keW5hbWljUGFyYW0gPSBbLi4uZXZlbnRdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmR5bmFtaWNQYXJhbSA9IE9iamVjdC5hc3NpZ24oe30gLCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgb25TdWJtaXQoKXtcbiAgICB0aGlzLmZvY3VzT25TdWJtaXQoKTtcbiAgfVxuXG4gIGZvY3VzT25TdWJtaXQoKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIHRoaXMuZm9jdXNhYmxlcy5tYXAoeCA9PiBgJHt4fS5uZy1pbnZhbGlkYCkuam9pbihcIixcIilcbiAgICApO1xuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBwcmltZU5nQ29tcG9uZW50ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICB0aGlzLmZvY3VzYWJsZXMubWFwKHggPT4gYCR7eH0ucC1jb21wb25lbnRgKS5qb2luKFwiLFwiKVxuICAgICAgKTtcbiAgICAgIGlmIChwcmltZU5nQ29tcG9uZW50KSB7XG4gICAgICAgIHByaW1lTmdDb21wb25lbnQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgLy9CbG9jayBmb3IgUmFkaW8gQnV0dG9uIFN0YXJ0XG4gICAgICB2YXIgcHJpbWVOZ0NvbXBvbmVudDEgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXYucC1zZWxlY3RidXR0b25cIik7XG4gICAgICBpZiAocHJpbWVOZ0NvbXBvbmVudDEpIHtcbiAgICAgICAgdmFyIHByaW1lTmdDb21wb25lbnQyID0gcHJpbWVOZ0NvbXBvbmVudDEucXVlcnlTZWxlY3RvcihcImRpdi5wLWNvbXBvbmVudFwiKTtcbiAgICAgICAgaWYgKHByaW1lTmdDb21wb25lbnQyKSB7XG4gICAgICAgICAgcHJpbWVOZ0NvbXBvbmVudDIuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy9CbG9jayBmb3IgUmFkaW8gQnV0dG9uIEVuZFxuICAgIH1cbiAgfVxufVxuIiwiPHAtYmxvY2tVSSBbYmxvY2tlZF09XCJibG9ja1VpXCI+XG4gIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIj48L2lvbi1zcGlubmVyPlxuPC9wLWJsb2NrVUk+XG48ZGl2ICpuZ0lmPVwicXVlc3Rpb25zICYmIHF1ZXN0aW9uc1swXSAmJiAhc2hvd01mYVwiICNmb3JtTWFpbkRpdj5cbiAgPGZvcm0gZm9jdXNJbnZhbGlkSW5wdXQgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF1cIiBbbmdDbGFzc109XCJtdWx0aU1vZGUgPyAncWUtZm9ybS1tdWx0aXBsZScgOiAncWUtZm9ybSdcIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiICNxdWVzdGlvbm5haXJlRm9ybT1cIm5nRm9ybVwiPlxuICAgIDxpb24tZ3JpZD5cbiAgICAgIDxpb24tcm93ICpuZ0lmPVwicXVlc3Rpb25zWzBdLnBhZ2VzW2FjdGl2ZUluZGV4XS5uYW1lXCI+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiIFtzaXplWHNdPVwic2l6ZVhzXCIgW3NpemVTbV09XCJzaXplU21cIiBbc2l6ZU1kXT1cInNpemVNZFwiIFtzaXplTGddPVwic2l6ZUxnXCIgW3NpemVYbF09XCJzaXplWGxcIlxuICAgICAgICAgIFtvZmZzZXRYc109XCJvZmZzZXRYc1wiIFtvZmZzZXRTbV09XCJvZmZzZXRTbVwiIFtvZmZzZXRNZF09XCJvZmZzZXRNZFwiIFtvZmZzZXRMZ109XCJvZmZzZXRMZ1wiIFtvZmZzZXRYbF09XCJvZmZzZXRYbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZvcm1ncmlkXCI+XG4gICAgICAgICAgICA8ZGl2IFtpbm5lckh0bWxdPVwiKHF1ZXN0aW9uTnVtYmVyID8gcXVlc3Rpb25OdW1iZXIgKyAnICcgOiAnJykgKyBxdWVzdGlvbnNbMF0ucGFnZXNbYWN0aXZlSW5kZXhdLm5hbWUgfCBkeW5hbWljVHJhbnNsYXRlOmR5bmFtaWNQYXJhbSB8IHRydXN0SHRtbFwiIFtuZ0NsYXNzXT1cIm11bHRpTW9kZSA/ICdmYi1oZWFkaW5nLWZvbGxvd3VwJyA6ICdmYi1oZWFkaW5nJ1wiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbCBzdHlsZT1cInBhZGRpbmctbGVmdDogMHB4O1wiIGNsYXNzPVwiaW9uLXBhZGRpbmctZW5kXCIgc2l6ZT1cIjEyXCIgW3NpemVYc109XCJzaXplWHNcIiBbc2l6ZVNtXT1cInNpemVTbVwiXG4gICAgICAgICAgW3NpemVNZF09XCJzaXplTWRcIiBbc2l6ZUxnXT1cInNpemVMZ1wiIFtzaXplWGxdPVwic2l6ZVhsXCIgW29mZnNldFhzXT1cIm9mZnNldFhzXCIgW29mZnNldFNtXT1cIm9mZnNldFNtXCJcbiAgICAgICAgICBbb2Zmc2V0TWRdPVwib2Zmc2V0TWRcIiBbb2Zmc2V0TGddPVwib2Zmc2V0TGdcIiBbb2Zmc2V0WGxdPVwib2Zmc2V0WGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mb3JtZ3JpZFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHg7XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHF1ZXN0aW9uc1swXS5wYWdlc1thY3RpdmVJbmRleF0uZWxlbWVudHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVsZW1lbnQudHlwZT09PSdwYW5lbCdcIj5cblxuICAgICAgICAgICAgICAgIDxpb24tcm93ICpuZ0lmPVwidmlzaWJsZUlmKGVsZW1lbnQudmlzaWJsZUlmLCcnLGZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XSxlbGVtZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSA8aW9uLWNvbCBzdHlsZT1cInBhZGRpbmctbGVmdDogMHB4O1wiPiAtLT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtcIiBjbGFzcz1cImhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAge3tlbGVtZW50LnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPCEtLSA8L2lvbi1jb2w+IC0tPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhbmVsRWxlbWVudCBvZiBlbGVtZW50LmVsZW1lbnRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiIFtzaXplWGxdPVwicGFuZWxFbGVtZW50LnNpemVYTCA/IHBhbmVsRWxlbWVudC5zaXplWEwgOiAzXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDsgbWF4LXdpZHRoOiBmaXQtY29udGVudDtcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaXplTGddPVwicGFuZWxFbGVtZW50LnNpemVMRyA/IHBhbmVsRWxlbWVudC5zaXplTEcgOiAzXCIgW3NpemVTbV09XCJwYW5lbEVsZW1lbnQuc2l6ZVNNID8gcGFuZWxFbGVtZW50LnNpemVTTSA6IDEyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2l6ZVhzXT1cInBhbmVsRWxlbWVudC5zaXplWFMgPyBwYW5lbEVsZW1lbnQuc2l6ZVhTIDogMTJcIiBbc2l6ZU1kXT1cInBhbmVsRWxlbWVudC5zaXplTUQgPyBwYW5lbEVsZW1lbnQuc2l6ZU1EIDogNFwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYW5lbEVsZW1lbnQuY29sRWxlbWVudD09PSdDT0wxJyAmJiB2aXNpYmxlSWYocGFuZWxFbGVtZW50LnZpc2libGVJZixwYW5lbEVsZW1lbnQubmFtZSxmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF0scGFuZWxFbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2hvdWxkRml0Q29udGVudChlbGVtZW50LmVsZW1lbnRzKSA/ICdjb2wtZml0LWNvbnRlbnQnIDogJydcIj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxhcHAtcXVlc3Rpb24gW3BvdGVudGlhbElzc3VlSWRdPVwicG90ZW50aWFsSXNzdWVJZFwiIFtxdWVzdGlvbl09XCJwYW5lbEVsZW1lbnRcIiBbZm9ybV09XCJmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZvclNjcmVlblF1ZXN0aW9ubmFpcmVdPVwiZm9yU2NyZWVuUXVlc3Rpb25uYWlyZVwiIChvbkR5bmFtaWNQYXJhbVVwZGF0ZSk9XCJ1cGRhdGVEeW5hbWljUGFyYW0oJGV2ZW50KVwiIFtkeW5hbWljUGFyYW1dPVwiZHluYW1pY1BhcmFtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9hcHAtcXVlc3Rpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxpb24tY29sIHNpemU9XCIxXCIgKm5nSWY9XCJwYW5lbEVsZW1lbnQuZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctdG9wOiAyOHB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1vdmVybGF5LWluZm8gW292ZXJsYXlUZXh0XT1cInBhbmVsRWxlbWVudC5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPiAtLT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgICA8IS0tIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz4gLS0+XG5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImVsZW1lbnQudHlwZSE9J3BhbmVsJyAmJiBlbGVtZW50LnR5cGUhPSdoaWRkZW4nICYmIHZpc2libGVJZihlbGVtZW50LnZpc2libGVJZixlbGVtZW50Lm5hbWUsZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdLGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbCBbc2l6ZUxnXT1cImVsZW1lbnQuc2l6ZUxHPjA/ZWxlbWVudC5zaXplTEc6JydcIiBbc2l6ZVNtXT1cImVsZW1lbnQuc2l6ZVNNXCJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVYc109XCJlbGVtZW50LnNpemVYU1wiIFtzaXplWGxdPVwiZWxlbWVudC5zaXplWEw+MCA/ZWxlbWVudC5zaXplWEw6JydcIlxuICAgICAgICAgICAgICAgICAgICBbc2l6ZU1kXT1cImVsZW1lbnQuc2l6ZU1EPjAgP2VsZW1lbnQuc2l6ZU1EOicnXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmllbGRcIj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtcXVlc3Rpb24gW3BvdGVudGlhbElzc3VlSWRdPVwicG90ZW50aWFsSXNzdWVJZFwiIFtxdWVzdGlvbl09XCJlbGVtZW50XCIgW2Zvcm1dPVwiZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9yU2NyZWVuUXVlc3Rpb25uYWlyZV09XCJmb3JTY3JlZW5RdWVzdGlvbm5haXJlXCIgW2R5bmFtaWNQYXJhbV09XCJkeW5hbWljUGFyYW1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAob25EeW5hbWljUGFyYW1VcGRhdGUpPVwidXBkYXRlRHluYW1pY1BhcmFtKCRldmVudClcIiA+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLXF1ZXN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1jb2wgc2l6ZT1cIjFcIiAqbmdJZj1cImVsZW1lbnQuZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctdG9wOiAzNXB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGFwcC1vdmVybGF5LWluZm8gW292ZXJsYXlUZXh0XT1cImVsZW1lbnQuZGVzY3JpcHRpb25cIj48L2FwcC1vdmVybGF5LWluZm8+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD4gLS0+XG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXBhZGRpbmctc3RhcnRcIiBzaXplPVwiMTJcIiBzaXplU209XCIxMlwiIHNpemVYcz1cIjEyXCIgW3NpemVNZF09XCJwYWdlVHlwZT09PSdQT1BVUCc/NjoxMlwiXG4gICAgICAgICAgW3NpemVMZ109XCJwYWdlVHlwZT09PSdQT1BVUCc/NjoxMFwiIFtzaXplWGxdPVwicGFnZVR5cGU9PT0nUE9QVVAnPzU6MTBcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMHB4O1wiXG4gICAgICAgICAgW29mZnNldFhsXT1cInBhZ2VUeXBlPT09J1BPUFVQJz8wOjFcIiBbb2Zmc2V0TGddPVwicGFnZVR5cGU9PT0nUE9QVVAnPzA6MVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZvcm1ncmlkXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDhweDtcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2YgcXVlc3Rpb25zWzBdLnBhZ2VzW2FjdGl2ZUluZGV4XS5lbGVtZW50czsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIHZpc2libGVJZihlbGVtZW50LnZpc2libGVJZiwnJyxmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF0sZWxlbWVudClcIj5cbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhbmVsRWxlbWVudCBvZiBlbGVtZW50LmVsZW1lbnRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tY29sIFtzaXplU21dPVwicGFuZWxFbGVtZW50LnNpemVTTVwiIFtzaXplWHNdPVwicGFuZWxFbGVtZW50LnNpemVYU1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3NpemVMZ109XCJwYW5lbEVsZW1lbnQuc2l6ZUxHPjA/cGFuZWxFbGVtZW50LnNpemVMRzonJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3NpemVYbF09XCJwYW5lbEVsZW1lbnQuc2l6ZVhMPjAgP3BhbmVsRWxlbWVudC5zaXplWEw6JydcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMHB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3NpemVNZF09XCJwYW5lbEVsZW1lbnQuc2l6ZU1EPjA/cGFuZWxFbGVtZW50LnNpemVNRDonJ1wiICpuZ0lmPVwicGFuZWxFbGVtZW50LmNvbEVsZW1lbnQ9PT0nQ09MMicgJiZcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZUlmKHBhbmVsRWxlbWVudC52aXNpYmxlSWYscGFuZWxFbGVtZW50Lm5hbWUsZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdLHBhbmVsRWxlbWVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhbmVsLWFwcCBbcXVlc3Rpb25dPVwicGFuZWxFbGVtZW50XCIgW2Zvcm1dPVwiZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZvclNjcmVlblF1ZXN0aW9ubmFpcmVdPVwiZm9yU2NyZWVuUXVlc3Rpb25uYWlyZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wYW5lbC1hcHA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG5cbiAgICA8aW9uLWZvb3RlciAqbmdJZj1cIiFoaWRlRm9vdGVyXCJcbiAgICAgIFtuZ0NsYXNzXT1cIidmb290ZXItZml4ZWQnXCI+XG4gICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7IGJhY2tncm91bmQ6IHdoaXRlOyBtYXJnaW4tbGVmdDogLTVweDtcIlxuICAgICAgICAqbmdJZj1cImhpZGVTdGVwICYmIHBhZ2VUeXBlIT0nUE9QVVAnICYmIHBhZ2VUeXBlIT0nU0NSRUVOJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBwLW5vZ3V0dGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDYwcHg7XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IGlvbi10ZXh0LWxlZnRcIiBzdHlsZT1cInBhZGRpbmc6IDhweDtcIj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiBmaWxsPVwib3V0bGluZVwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbEFjdGlvbigpXCIgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgaW9uLXRleHQtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmc6IDhweDtcIj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiY29tcGxldGUoKVwiIGZpbGw9XCJzb2xpZFwiIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICAgICAgTmV4dFxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0OyBiYWNrZ3JvdW5kOiB3aGl0ZTsgbWFyZ2luLWxlZnQ6IC01cHg7XCJcbiAgICAgICAgKm5nSWY9XCJoaWRlU3RlcCAmJiBwYWdlVHlwZT09J1NDUkVFTicgJiYgcXVlc3Rpb25zWzBdLmlzRmlyc3RQYWdlU3VibWl0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIHAtbm9ndXR0ZXJcIiBzdHlsZT1cImhlaWdodDogNjBweDtcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgaW9uLXRleHQtbGVmdFwiIHN0eWxlPVwicGFkZGluZzogOHB4O1wiPlxuICAgICAgICAgICAgPGlvbi1idXR0b24gc2hhcGU9XCJyb3VuZFwiIGZpbGw9XCJvdXRsaW5lXCIgY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsQWN0aW9uKClcIiB0eXBlPVwic3VibWl0XCI+XG4gICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBpb24tdGV4dC1yaWdodFwiIHN0eWxlPVwicGFkZGluZzogOHB4O1wiPlxuICAgICAgICAgICAgPGlvbi1idXR0b24gc2hhcGU9XCJyb3VuZFwiIChjbGljayk9XCJjb21wbGV0ZSgpXCIgZmlsbD1cInNvbGlkXCIgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgICAgICBEb25lXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8aW9uLWdyaWQgKm5nSWY9XCJoaWRlU3RlcCAmJiBwYWdlVHlwZT09PSdQT1BVUCdcIj5cbiAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1sZWZ0IGlvbi1wYWRkaW5nLXN0YXJ0XCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgZmlsbD1cIm91dGxpbmVcIiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWxQb3BVcCgpXCIgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1yaWdodCBpb24tcGFkZGluZy1lbmRcIj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiY29tcGxldGUoKVwiIGZpbGw9XCJzb2xpZFwiIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICAgICAgQWRkXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8L2lvbi1yb3c+XG4gICAgICA8L2lvbi1ncmlkPlxuXG5cblxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWhpZGVTdGVwXCI+XG4gICAgICAgIDxtYXQtaG9yaXpvbnRhbC1zdGVwcGVyIGxpbmVhciAjbWF0SG9yaXpvbnRhbFN0ZXBwZXIgW3NlbGVjdGVkSW5kZXhdPVwicXVlc3Rpb25zWzBdLnN0ZXBDb3VudGVyXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInN0ZXBDaGFuZ2VkKCRldmVudCk7XCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiAtd2Via2l0LWNlbnRlcjtcIiBhcmlhLWJ1c3k9XCJ0cnVlXCI+XG4gICAgICAgICAgPG1hdC1zdGVwICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mICBxdWVzdGlvbnNbMF0ucGFnZXM7ICBsZXQgaSA9IGluZGV4O1wiIFtzdGVwQ29udHJvbF09XCJmb3JtR3JvdXBBcnJheVtpXVwiXG4gICAgICAgICAgICBbY29tcGxldGVkXT1cIiAgaSA8IGFjdGl2ZUluZGV4IFwiPlxuXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPnt7cXVlc3Rpb25zWzBdLnBhZ2VzW2ldLm5hdmlnYXRpb25UaXRsZX19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXN0aW9uc1swXS5pc0ZpcnN0UGFnZVN1Ym1pdCAmJiAhaXNMYXN0ICYmIGlzRmlyc3QgJiYgIWlzRW5hYmxlQmFja0J1dHRvblwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmV2ZXJzZVwiIGVkaXRhYmxlPVwiZmFsc2VcIiBkaXNhYmxlZCBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cz5CYWNrPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmb3J3YXJkXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyTmV4dCAoY2xpY2spPVwibmV4dFBhZ2UoYWN0aXZlSW5kZXgpXCI+TmV4dDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbnNbMF0uaXNGaXJzdFBhZ2VTdWJtaXRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJldmVyc2VcIiAoY2xpY2spPVwiY2FuY2VsQWN0aW9uKClcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cz5CYWNrPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmb3J3YXJkXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyTmV4dCAoY2xpY2spPVwiY29tcGxldGUoKVwiPk5leHQ8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXN0aW9uc1swXS5pc0ZpcnN0UGFnZVN1Ym1pdCAmJiBpc0xhc3QgJiYgIWlzRmlyc3RcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJldmVyc2VcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cyAoY2xpY2spPVwicHJldlBhZ2UoYWN0aXZlSW5kZXgpXCI+QmFjazwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZm9yd2FyZFwiIG1hdC1idXR0b24gbWF0U3RlcHBlck5leHQgKGNsaWNrKT1cImNvbXBsZXRlKClcIj5Eb25lPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzdGlvbnNbMF0uaXNGaXJzdFBhZ2VTdWJtaXQgJiYgIWlzTGFzdCAmJiAhaXNGaXJzdFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmV2ZXJzZVwiIGVkaXRhYmxlPVwiZmFsc2VcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cyBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZQYWdlKGFjdGl2ZUluZGV4KVwiPkJhY2s8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImZvcndhcmRcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0IChjbGljayk9XCJuZXh0UGFnZShhY3RpdmVJbmRleClcIj5OZXh0PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRW5hYmxlQmFja0J1dHRvbiAmJiAhcXVlc3Rpb25zWzBdLmlzRmlyc3RQYWdlU3VibWl0ICYmICFpc0xhc3QgJiYgaXNGaXJzdFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmV2ZXJzZVwiIGVkaXRhYmxlPVwiZmFsc2VcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cyBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEFjdGlvbigpXCI+QmFjazwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZm9yd2FyZFwiIG1hdC1idXR0b24gbWF0U3RlcHBlck5leHQgKGNsaWNrKT1cIm5leHRQYWdlKGFjdGl2ZUluZGV4KVwiPk5leHQ8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICA8L21hdC1zdGVwPlxuXG4gICAgICAgIDwvbWF0LWhvcml6b250YWwtc3RlcHBlcj5cblxuICAgICAgPC9kaXY+XG5cbiAgICA8L2lvbi1mb290ZXI+XG4gIDwvZm9ybT5cblxuXG5cblxuICA8IS0tIDxkaXYgKm5nSWY9XCJwYXlMb2FkXCIgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgPHN0cm9uZz5TYXZlZCB0aGUgZm9sbG93aW5nIHZhbHVlczwvc3Ryb25nPjxicj57e3BheUxvYWR9fVxuICAgIDwvZGl2PiAgLS0+XG5cblxuPC9kaXY+XG5cbjxhcHAtbWZhICNtZmEgW3VzZXJdPVwibHMuZ2V0VXNlcigpXCIgKm5nSWY9XCJzaG93TWZhXCIgKHN1Y2Nlc3MpPVwic2F2ZVNjcmVlblF1ZXN0aW9ubmFpcmUoJGV2ZW50KVwiIFtkYXRhXT1cIm1mYURhdGFcIiBbcmVxdWVzdENvZGVdPVwidHJ1ZVwiIFxuICAgICAgICAgW21mYUVycm9yXT1cIm1mYUVycm9yXCIgW2hpZGVCdXR0b25zXT1cInRydWVcIj48L2FwcC1tZmE+Il19
|