monkey-front-core 0.0.263 → 0.0.264
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/lib/components/alerts/alerts.component.mjs +35 -35
- package/esm2020/lib/components/alerts/alerts.module.mjs +21 -21
- package/esm2020/lib/components/alerts/index.mjs +2 -2
- package/esm2020/lib/components/closed-to-maintenance/closed-to-maintenance.component.mjs +29 -29
- package/esm2020/lib/components/closed-to-maintenance/closed-to-maintenance.module.mjs +43 -43
- package/esm2020/lib/components/closed-to-maintenance/index.mjs +2 -2
- package/esm2020/lib/components/index.mjs +4 -4
- package/esm2020/lib/components/progress-bar/index.mjs +3 -3
- package/esm2020/lib/components/progress-bar/progress-bar.component.mjs +23 -23
- package/esm2020/lib/components/progress-bar/progress-bar.module.mjs +18 -18
- package/esm2020/lib/components/progress-bar/progress-bar.service.mjs +50 -50
- package/esm2020/lib/components/version-changed/index.mjs +2 -2
- package/esm2020/lib/components/version-changed/version-changed.component.mjs +24 -24
- package/esm2020/lib/components/version-changed/version-changed.module.mjs +39 -39
- package/esm2020/lib/core/decorators/index.mjs +5 -5
- package/esm2020/lib/core/decorators/monkeyecx-charts-decorators.mjs +40 -40
- package/esm2020/lib/core/decorators/monkeyecx-decorators.mjs +110 -110
- package/esm2020/lib/core/decorators/monkeyecx-download-decorators.mjs +25 -25
- package/esm2020/lib/core/decorators/monkeyecx-upload-decorators.mjs +25 -25
- package/esm2020/lib/core/directives/index.mjs +12 -12
- package/esm2020/lib/core/directives/monkeyecx-directives-module.mjs +73 -73
- package/esm2020/lib/core/directives/monkeyecx-drag-drop.mjs +57 -57
- package/esm2020/lib/core/directives/monkeyecx-feature-by-program-directive.mjs +50 -50
- package/esm2020/lib/core/directives/monkeyecx-feature-directive.mjs +68 -68
- package/esm2020/lib/core/directives/monkeyecx-format-currency.mjs +44 -44
- package/esm2020/lib/core/directives/monkeyecx-format-upper.mjs +67 -67
- package/esm2020/lib/core/directives/monkeyecx-only-alpha-numeric-directive.mjs +28 -28
- package/esm2020/lib/core/directives/monkeyecx-only-number-directive.mjs +28 -28
- package/esm2020/lib/core/directives/monkeyecx-popover-options.directive.mjs +39 -39
- package/esm2020/lib/core/directives/monkeyecx-popover.directive.mjs +212 -212
- package/esm2020/lib/core/directives/monkeyecx-security-directive.mjs +69 -69
- package/esm2020/lib/core/directives/monkeyecx-tooltip-directive.mjs +123 -123
- package/esm2020/lib/core/index.mjs +9 -9
- package/esm2020/lib/core/interceptors/index.mjs +5 -5
- package/esm2020/lib/core/interceptors/monkeyecx-http-config-error.interceptor.mjs +39 -39
- package/esm2020/lib/core/interceptors/monkeyecx-http-config-header.interceptor.mjs +60 -60
- package/esm2020/lib/core/interceptors/monkeyecx-http-config-interceptor.module.mjs +47 -47
- package/esm2020/lib/core/interceptors/monkeyecx-http-config-loading-in-progress.interceptor.mjs +43 -43
- package/esm2020/lib/core/interceptors/monkeyecx-http-config-queue.interceptor.mjs +37 -37
- package/esm2020/lib/core/interfaces/index.mjs +29 -29
- package/esm2020/lib/core/interfaces/monkeyecx-auth-credentials.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-company-pendencies.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-company.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-config-boostrap.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-config.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-country-security.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-error-response.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-filter.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-handled-error-response.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-header-credentials.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-intercom-options.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-me-credentials.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-navigation.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-program.mjs +2 -2
- package/esm2020/lib/core/interfaces/monkeyecx-releases.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-request-in-progress.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-request-paged.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-response-links.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-response-paged.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-saved-state.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-scroll-options.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-service-credentials.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-support-options.mjs +1 -1
- package/esm2020/lib/core/interfaces/monkeyecx-token-credentials.mjs +2 -2
- package/esm2020/lib/core/interfaces/monkeyecx-translate-options.mjs +1 -1
- package/esm2020/lib/core/interfaces/request-download/index.mjs +3 -3
- package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-download.mjs +1 -1
- package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-downloaded.mjs +1 -1
- package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-item-download.mjs +1 -1
- package/esm2020/lib/core/interfaces/request-queue/index.mjs +3 -3
- package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-item-queue.mjs +1 -1
- package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-progress-queue.mjs +1 -1
- package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-queue.mjs +1 -1
- package/esm2020/lib/core/interfaces/request-upload/index.mjs +2 -2
- package/esm2020/lib/core/interfaces/request-upload/monkeyecx-request-item-upload.mjs +1 -1
- package/esm2020/lib/core/interfaces/request-upload/monkeyecx-request-upload.mjs +1 -1
- package/esm2020/lib/core/interfaces/schedules/index.mjs +1 -1
- package/esm2020/lib/core/interfaces/schedules/monkeyecx-request-schedule.mjs +1 -1
- package/esm2020/lib/core/model/index.mjs +1 -1
- package/esm2020/lib/core/model/monkeyecx-model.mjs +25 -25
- package/esm2020/lib/core/pipes/index.mjs +20 -20
- package/esm2020/lib/core/pipes/monkeyecx-blob-secure.mjs +26 -26
- package/esm2020/lib/core/pipes/monkeyecx-display-first-name.mjs +19 -19
- package/esm2020/lib/core/pipes/monkeyecx-display-initials.mjs +21 -21
- package/esm2020/lib/core/pipes/monkeyecx-format-address.mjs +20 -20
- package/esm2020/lib/core/pipes/monkeyecx-format-beautify-json.mjs +38 -38
- package/esm2020/lib/core/pipes/monkeyecx-format-currency.mjs +27 -27
- package/esm2020/lib/core/pipes/monkeyecx-format-date-group.mjs +45 -45
- package/esm2020/lib/core/pipes/monkeyecx-format-date-timelapse.mjs +32 -32
- package/esm2020/lib/core/pipes/monkeyecx-format-date-unix-timelapse.mjs +36 -36
- package/esm2020/lib/core/pipes/monkeyecx-format-document.mjs +19 -19
- package/esm2020/lib/core/pipes/monkeyecx-format-number.mjs +20 -20
- package/esm2020/lib/core/pipes/monkeyecx-format-phone.mjs +42 -42
- package/esm2020/lib/core/pipes/monkeyecx-format-size.mjs +20 -20
- package/esm2020/lib/core/pipes/monkeyecx-format-tax.mjs +23 -23
- package/esm2020/lib/core/pipes/monkeyecx-format-type-document.mjs +19 -19
- package/esm2020/lib/core/pipes/monkeyecx-format-value.mjs +19 -19
- package/esm2020/lib/core/pipes/monkeyecx-format-zipcode.mjs +19 -19
- package/esm2020/lib/core/pipes/monkeyecx-pipes.module.mjs +112 -112
- package/esm2020/lib/core/pipes/monkeyecx-text-truncate.mjs +23 -23
- package/esm2020/lib/core/pipes/monkeyecx-truncate-qtd.mjs +16 -16
- package/esm2020/lib/core/services/alerts/index.mjs +1 -1
- package/esm2020/lib/core/services/alerts/monkeyecx-alerts.service.mjs +42 -42
- package/esm2020/lib/core/services/auth/index.mjs +4 -4
- package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-company.service.mjs +28 -28
- package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-login.service.mjs +27 -27
- package/esm2020/lib/core/services/auth/monkeyecx-auth-guard.service.mjs +26 -26
- package/esm2020/lib/core/services/auth/monkeyecx-authentication.service.mjs +69 -69
- package/esm2020/lib/core/services/commons/index.mjs +1 -1
- package/esm2020/lib/core/services/commons/monkeyecx-commons.service.mjs +404 -404
- package/esm2020/lib/core/services/config/monkeyecx-alerts-config.service.mjs +40 -40
- package/esm2020/lib/core/services/config/monkeyecx-config.module.mjs +28 -28
- package/esm2020/lib/core/services/config/monkeyecx-config.service.mjs +111 -111
- package/esm2020/lib/core/services/config/monkeyecx-error-config.service.mjs +85 -85
- package/esm2020/lib/core/services/config/monkeyecx-feature-toggle.service.mjs +67 -67
- package/esm2020/lib/core/services/config/monkeyecx-ga-config.service.mjs +57 -57
- package/esm2020/lib/core/services/config/monkeyecx-i18n-config.service.mjs +92 -92
- package/esm2020/lib/core/services/config/monkeyecx-logs-config.service.mjs +34 -34
- package/esm2020/lib/core/services/config/monkeyecx-maintenance-config.service.mjs +37 -37
- package/esm2020/lib/core/services/config/monkeyecx-security-console-config.service.mjs +42 -42
- package/esm2020/lib/core/services/config/monkeyecx-service-worker-config.service.mjs +53 -53
- package/esm2020/lib/core/services/error/index.mjs +4 -4
- package/esm2020/lib/core/services/error/monkeyecx-error-handling.module.mjs +27 -27
- package/esm2020/lib/core/services/error/monkeyecx-error-handling.service.mjs +37 -37
- package/esm2020/lib/core/services/error/monkeyecx-http-error-handling.service.mjs +135 -135
- package/esm2020/lib/core/services/error/monkeyecx-others-errors-handling.service.mjs +29 -29
- package/esm2020/lib/core/services/index.mjs +23 -23
- package/esm2020/lib/core/services/logged/index.mjs +1 -1
- package/esm2020/lib/core/services/logged/monkeyecx-logged-handling.service.mjs +40 -40
- package/esm2020/lib/core/services/monkeyecx-handling.service.mjs +50 -50
- package/esm2020/lib/core/services/monkeyecx-service.service.mjs +104 -104
- package/esm2020/lib/core/services/pagination/index.mjs +1 -1
- package/esm2020/lib/core/services/pagination/monkeyecx-pagination.service.mjs +29 -29
- package/esm2020/lib/core/services/request-download/index.mjs +2 -2
- package/esm2020/lib/core/services/request-download/monkeyecx-request-download-handling.service.mjs +93 -93
- package/esm2020/lib/core/services/request-download/monkeyecx-request-downloaded-handling.service.mjs +61 -61
- package/esm2020/lib/core/services/request-paged/index.mjs +1 -1
- package/esm2020/lib/core/services/request-paged/monkeyecx-request-request-paged-handling.mjs +42 -42
- package/esm2020/lib/core/services/request-queue/index.mjs +2 -2
- package/esm2020/lib/core/services/request-queue/monkeyecx-request-queue-handling.service.mjs +114 -114
- package/esm2020/lib/core/services/request-queue/monkeyecx-request-queue-modal-handling.service.mjs +119 -119
- package/esm2020/lib/core/services/routes/index.mjs +1 -1
- package/esm2020/lib/core/services/routes/monkeyecx-dicovery-params.service.mjs +54 -54
- package/esm2020/lib/core/services/schedules/index.mjs +1 -1
- package/esm2020/lib/core/services/schedules/monkeyecx-request-schedule.service.mjs +188 -188
- package/esm2020/lib/core/services/storage/index.mjs +2 -2
- package/esm2020/lib/core/services/storage/monkeyecx-cookie-storage.service.mjs +32 -32
- package/esm2020/lib/core/services/storage/monkeyecx-token-storage.service.mjs +127 -127
- package/esm2020/lib/core/specification-search/index.mjs +1 -1
- package/esm2020/lib/core/specification-search/monkeyecx-specification-search.mjs +107 -107
- package/esm2020/lib/core/utils/decorators-utils.mjs +39 -39
- package/esm2020/lib/core/utils/index.mjs +7 -7
- package/esm2020/lib/core/utils/statics.mjs +37 -37
- package/esm2020/lib/core/utils/utils.mjs +221 -221
- package/esm2020/lib/core/utils/validate-utils.mjs +206 -206
- package/esm2020/lib/core/utils/validators.mjs +212 -212
- package/esm2020/lib/monkey-front-core.module.mjs +64 -64
- package/esm2020/monkey-front-core.mjs +4 -4
- package/esm2020/public-api.mjs +6 -6
- package/fesm2015/monkey-front-core.mjs +4942 -4942
- package/fesm2015/monkey-front-core.mjs.map +1 -1
- package/fesm2020/monkey-front-core.mjs +4999 -4999
- package/fesm2020/monkey-front-core.mjs.map +1 -1
- package/lib/components/alerts/alerts.component.d.ts +16 -16
- package/lib/components/alerts/alerts.module.d.ts +10 -10
- package/lib/components/alerts/index.d.ts +2 -2
- package/lib/components/closed-to-maintenance/closed-to-maintenance.component.d.ts +13 -13
- package/lib/components/closed-to-maintenance/closed-to-maintenance.module.d.ts +11 -11
- package/lib/components/closed-to-maintenance/index.d.ts +2 -2
- package/lib/components/index.d.ts +4 -4
- package/lib/components/progress-bar/index.d.ts +3 -3
- package/lib/components/progress-bar/progress-bar.component.d.ts +11 -11
- package/lib/components/progress-bar/progress-bar.module.d.ts +8 -8
- package/lib/components/progress-bar/progress-bar.service.d.ts +14 -14
- package/lib/components/version-changed/index.d.ts +2 -2
- package/lib/components/version-changed/version-changed.component.d.ts +9 -9
- package/lib/components/version-changed/version-changed.module.d.ts +10 -10
- package/lib/core/decorators/index.d.ts +4 -4
- package/lib/core/decorators/monkeyecx-charts-decorators.d.ts +1 -1
- package/lib/core/decorators/monkeyecx-decorators.d.ts +7 -7
- package/lib/core/decorators/monkeyecx-download-decorators.d.ts +2 -2
- package/lib/core/decorators/monkeyecx-upload-decorators.d.ts +2 -2
- package/lib/core/directives/index.d.ts +12 -12
- package/lib/core/directives/monkeyecx-directives-module.d.ts +19 -19
- package/lib/core/directives/monkeyecx-drag-drop.d.ts +12 -12
- package/lib/core/directives/monkeyecx-feature-by-program-directive.d.ts +15 -15
- package/lib/core/directives/monkeyecx-feature-directive.d.ts +17 -17
- package/lib/core/directives/monkeyecx-format-currency.d.ts +16 -16
- package/lib/core/directives/monkeyecx-format-upper.d.ts +18 -18
- package/lib/core/directives/monkeyecx-only-alpha-numeric-directive.d.ts +9 -9
- package/lib/core/directives/monkeyecx-only-number-directive.d.ts +9 -9
- package/lib/core/directives/monkeyecx-popover-options.directive.d.ts +19 -19
- package/lib/core/directives/monkeyecx-popover.directive.d.ts +43 -43
- package/lib/core/directives/monkeyecx-security-directive.d.ts +17 -17
- package/lib/core/directives/monkeyecx-tooltip-directive.d.ts +23 -23
- package/lib/core/index.d.ts +9 -9
- package/lib/core/interceptors/index.d.ts +5 -5
- package/lib/core/interceptors/monkeyecx-http-config-error.interceptor.d.ts +17 -17
- package/lib/core/interceptors/monkeyecx-http-config-header.interceptor.d.ts +16 -16
- package/lib/core/interceptors/monkeyecx-http-config-interceptor.module.d.ts +9 -9
- package/lib/core/interceptors/monkeyecx-http-config-loading-in-progress.interceptor.d.ts +12 -12
- package/lib/core/interceptors/monkeyecx-http-config-queue.interceptor.d.ts +14 -14
- package/lib/core/interfaces/index.d.ts +29 -29
- package/lib/core/interfaces/monkeyecx-auth-credentials.d.ts +15 -15
- package/lib/core/interfaces/monkeyecx-company-pendencies.d.ts +14 -14
- package/lib/core/interfaces/monkeyecx-company.d.ts +10 -10
- package/lib/core/interfaces/monkeyecx-config-boostrap.d.ts +14 -14
- package/lib/core/interfaces/monkeyecx-config.d.ts +126 -126
- package/lib/core/interfaces/monkeyecx-country-security.d.ts +4 -4
- package/lib/core/interfaces/monkeyecx-error-response.d.ts +5 -5
- package/lib/core/interfaces/monkeyecx-filter.d.ts +24 -24
- package/lib/core/interfaces/monkeyecx-handled-error-response.d.ts +10 -10
- package/lib/core/interfaces/monkeyecx-header-credentials.d.ts +4 -4
- package/lib/core/interfaces/monkeyecx-intercom-options.d.ts +4 -4
- package/lib/core/interfaces/monkeyecx-me-credentials.d.ts +22 -22
- package/lib/core/interfaces/monkeyecx-navigation.d.ts +27 -27
- package/lib/core/interfaces/monkeyecx-program.d.ts +10 -10
- package/lib/core/interfaces/monkeyecx-releases.d.ts +9 -9
- package/lib/core/interfaces/monkeyecx-request-in-progress.d.ts +3 -3
- package/lib/core/interfaces/monkeyecx-request-paged.d.ts +23 -23
- package/lib/core/interfaces/monkeyecx-response-links.d.ts +11 -11
- package/lib/core/interfaces/monkeyecx-response-paged.d.ts +6 -6
- package/lib/core/interfaces/monkeyecx-saved-state.d.ts +5 -5
- package/lib/core/interfaces/monkeyecx-scroll-options.d.ts +5 -5
- package/lib/core/interfaces/monkeyecx-service-credentials.d.ts +12 -12
- package/lib/core/interfaces/monkeyecx-support-options.d.ts +4 -4
- package/lib/core/interfaces/monkeyecx-token-credentials.d.ts +20 -20
- package/lib/core/interfaces/monkeyecx-translate-options.d.ts +4 -4
- package/lib/core/interfaces/request-download/index.d.ts +3 -3
- package/lib/core/interfaces/request-download/monkeyecx-request-download.d.ts +10 -10
- package/lib/core/interfaces/request-download/monkeyecx-request-downloaded.d.ts +7 -7
- package/lib/core/interfaces/request-download/monkeyecx-request-item-download.d.ts +7 -7
- package/lib/core/interfaces/request-queue/index.d.ts +3 -3
- package/lib/core/interfaces/request-queue/monkeyecx-request-item-queue.d.ts +7 -7
- package/lib/core/interfaces/request-queue/monkeyecx-request-progress-queue.d.ts +6 -6
- package/lib/core/interfaces/request-queue/monkeyecx-request-queue.d.ts +8 -8
- package/lib/core/interfaces/request-upload/index.d.ts +2 -2
- package/lib/core/interfaces/request-upload/monkeyecx-request-item-upload.d.ts +5 -5
- package/lib/core/interfaces/request-upload/monkeyecx-request-upload.d.ts +10 -10
- package/lib/core/interfaces/schedules/index.d.ts +1 -1
- package/lib/core/interfaces/schedules/monkeyecx-request-schedule.d.ts +13 -13
- package/lib/core/model/index.d.ts +1 -1
- package/lib/core/model/monkeyecx-model.d.ts +13 -13
- package/lib/core/pipes/index.d.ts +20 -20
- package/lib/core/pipes/monkeyecx-blob-secure.d.ts +13 -13
- package/lib/core/pipes/monkeyecx-display-first-name.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-display-initials.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-format-address.d.ts +14 -14
- package/lib/core/pipes/monkeyecx-format-beautify-json.d.ts +8 -8
- package/lib/core/pipes/monkeyecx-format-currency.d.ts +11 -11
- package/lib/core/pipes/monkeyecx-format-date-group.d.ts +11 -11
- package/lib/core/pipes/monkeyecx-format-date-timelapse.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-format-date-unix-timelapse.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-format-document.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-format-number.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-format-phone.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-format-size.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-format-tax.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-format-type-document.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-format-value.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-format-zipcode.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-pipes.module.d.ts +25 -25
- package/lib/core/pipes/monkeyecx-text-truncate.d.ts +7 -7
- package/lib/core/pipes/monkeyecx-truncate-qtd.d.ts +7 -7
- package/lib/core/services/alerts/index.d.ts +1 -1
- package/lib/core/services/alerts/monkeyecx-alerts.service.d.ts +21 -21
- package/lib/core/services/auth/index.d.ts +4 -4
- package/lib/core/services/auth/monkeyecx-auth-guard-company.service.d.ts +11 -11
- package/lib/core/services/auth/monkeyecx-auth-guard-login.service.d.ts +11 -11
- package/lib/core/services/auth/monkeyecx-auth-guard.service.d.ts +11 -11
- package/lib/core/services/auth/monkeyecx-authentication.service.d.ts +30 -30
- package/lib/core/services/commons/index.d.ts +1 -1
- package/lib/core/services/commons/monkeyecx-commons.service.d.ts +124 -124
- package/lib/core/services/config/monkeyecx-alerts-config.service.d.ts +11 -11
- package/lib/core/services/config/monkeyecx-config.module.d.ts +9 -9
- package/lib/core/services/config/monkeyecx-config.service.d.ts +36 -36
- package/lib/core/services/config/monkeyecx-error-config.service.d.ts +8 -8
- package/lib/core/services/config/monkeyecx-feature-toggle.service.d.ts +16 -16
- package/lib/core/services/config/monkeyecx-ga-config.service.d.ts +10 -10
- package/lib/core/services/config/monkeyecx-i18n-config.service.d.ts +16 -16
- package/lib/core/services/config/monkeyecx-logs-config.service.d.ts +7 -7
- package/lib/core/services/config/monkeyecx-maintenance-config.service.d.ts +13 -13
- package/lib/core/services/config/monkeyecx-security-console-config.service.d.ts +11 -11
- package/lib/core/services/config/monkeyecx-service-worker-config.service.d.ts +16 -16
- package/lib/core/services/error/index.d.ts +4 -4
- package/lib/core/services/error/monkeyecx-error-handling.module.d.ts +9 -9
- package/lib/core/services/error/monkeyecx-error-handling.service.d.ts +9 -9
- package/lib/core/services/error/monkeyecx-http-error-handling.service.d.ts +26 -26
- package/lib/core/services/error/monkeyecx-others-errors-handling.service.d.ts +9 -9
- package/lib/core/services/index.d.ts +23 -23
- package/lib/core/services/logged/index.d.ts +1 -1
- package/lib/core/services/logged/monkeyecx-logged-handling.service.d.ts +14 -14
- package/lib/core/services/monkeyecx-handling.service.d.ts +22 -22
- package/lib/core/services/monkeyecx-service.service.d.ts +18 -18
- package/lib/core/services/pagination/index.d.ts +1 -1
- package/lib/core/services/pagination/monkeyecx-pagination.service.d.ts +9 -9
- package/lib/core/services/request-download/index.d.ts +2 -2
- package/lib/core/services/request-download/monkeyecx-request-download-handling.service.d.ts +18 -18
- package/lib/core/services/request-download/monkeyecx-request-downloaded-handling.service.d.ts +16 -16
- package/lib/core/services/request-paged/index.d.ts +1 -1
- package/lib/core/services/request-paged/monkeyecx-request-request-paged-handling.d.ts +11 -11
- package/lib/core/services/request-queue/index.d.ts +2 -2
- package/lib/core/services/request-queue/monkeyecx-request-queue-handling.service.d.ts +21 -21
- package/lib/core/services/request-queue/monkeyecx-request-queue-modal-handling.service.d.ts +23 -23
- package/lib/core/services/routes/index.d.ts +1 -1
- package/lib/core/services/routes/monkeyecx-dicovery-params.service.d.ts +13 -13
- package/lib/core/services/schedules/index.d.ts +1 -1
- package/lib/core/services/schedules/monkeyecx-request-schedule.service.d.ts +47 -47
- package/lib/core/services/storage/index.d.ts +2 -2
- package/lib/core/services/storage/monkeyecx-cookie-storage.service.d.ts +11 -11
- package/lib/core/services/storage/monkeyecx-token-storage.service.d.ts +29 -29
- package/lib/core/specification-search/index.d.ts +1 -1
- package/lib/core/specification-search/monkeyecx-specification-search.d.ts +20 -20
- package/lib/core/utils/decorators-utils.d.ts +5 -5
- package/lib/core/utils/index.d.ts +6 -6
- package/lib/core/utils/statics.d.ts +28 -28
- package/lib/core/utils/utils.d.ts +22 -22
- package/lib/core/utils/validate-utils.d.ts +66 -66
- package/lib/core/utils/validators.d.ts +30 -30
- package/lib/monkey-front-core.module.d.ts +17 -17
- package/monkey-front-core-0.0.264.tgz +0 -0
- package/monkey-front-core.d.ts +5 -5
- package/package.json +3 -3
- package/public-api.d.ts +3 -3
- package/monkey-front-core-0.0.263.tgz +0 -0
|
@@ -1,405 +1,405 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { NavigationStart } from '@angular/router';
|
|
3
|
-
import { BehaviorSubject, throwError } from 'rxjs';
|
|
4
|
-
import { filter, take, takeWhile } from 'rxjs/operators';
|
|
5
|
-
import { MonkeyEcxRequestPagedHandling } from '../request-paged/monkeyecx-request-request-paged-handling';
|
|
6
|
-
import { MonkeyEcxUtils } from '../../utils/utils';
|
|
7
|
-
import { MonkeyEcxCoreService } from '../../decorators/monkeyecx-decorators';
|
|
8
|
-
import { MonkeyEcxModel } from '../../model';
|
|
9
|
-
class LinksModel extends MonkeyEcxModel {
|
|
10
|
-
constructor(data) {
|
|
11
|
-
super();
|
|
12
|
-
this._links = data?._links;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
export class MonkeyEcxCommonsService {
|
|
16
|
-
constructor(monkeyecxService, tokenStorage, otherArgs) {
|
|
17
|
-
this.monkeyecxService = monkeyecxService;
|
|
18
|
-
this.tokenStorage = tokenStorage;
|
|
19
|
-
this.otherArgs = otherArgs;
|
|
20
|
-
this.flagValidator = true;
|
|
21
|
-
this.__data$ = null;
|
|
22
|
-
this.__pagination$ = null;
|
|
23
|
-
this.__control$ = null;
|
|
24
|
-
this.__savedState = null;
|
|
25
|
-
this.__error = null;
|
|
26
|
-
this.__handledError = null;
|
|
27
|
-
this.__page = null;
|
|
28
|
-
this.__links = null;
|
|
29
|
-
this.__requestPaged = null;
|
|
30
|
-
this.__onSearchChanged$ = new BehaviorSubject(null);
|
|
31
|
-
this.__onDataChanged$ = new BehaviorSubject(null);
|
|
32
|
-
this.__onLoadingInProgress$ = new BehaviorSubject(false);
|
|
33
|
-
this.__onUploadInProgress$ = new BehaviorSubject(false);
|
|
34
|
-
this.__onDataDeleted$ = new BehaviorSubject(null);
|
|
35
|
-
this.__onErrorChanged$ = new BehaviorSubject(null);
|
|
36
|
-
this.__onGovernmentIdDataChanged$ = new BehaviorSubject(null);
|
|
37
|
-
this.__onZipCodeDataChanged$ = new BehaviorSubject(null);
|
|
38
|
-
this.__oni18nDataChanged$ = new BehaviorSubject(null);
|
|
39
|
-
this.__onDoSearch$ = new BehaviorSubject({});
|
|
40
|
-
this.__tokenCredentials = null;
|
|
41
|
-
this.__schedule = null;
|
|
42
|
-
this.__callbackPagination = () => {
|
|
43
|
-
// eslint-disable-next-line no-console
|
|
44
|
-
return console.error('Method callbackPagination needs to be declared');
|
|
45
|
-
};
|
|
46
|
-
this.__isAbleToDoPagination = {};
|
|
47
|
-
this.handleInit();
|
|
48
|
-
}
|
|
49
|
-
handleInit() {
|
|
50
|
-
if (this.tokenStorage) {
|
|
51
|
-
this.__tokenCredentials = this.tokenStorage.getToken();
|
|
52
|
-
}
|
|
53
|
-
if (this.otherArgs?.router) {
|
|
54
|
-
const { clearOnChangeRoute } = this.otherArgs?.schedule?.options || {
|
|
55
|
-
clearOnChangeRoute: false
|
|
56
|
-
};
|
|
57
|
-
this.otherArgs.router.events
|
|
58
|
-
.pipe(filter((event) => {
|
|
59
|
-
return event instanceof NavigationStart;
|
|
60
|
-
}), take(1))
|
|
61
|
-
.subscribe(() => {
|
|
62
|
-
if (this.__schedule && clearOnChangeRoute) {
|
|
63
|
-
this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
|
|
64
|
-
this.__schedule = null;
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
navigateToPendencyPage(arg, router) {
|
|
70
|
-
const { companyType } = this.__tokenCredentials || {
|
|
71
|
-
companyType: ''
|
|
72
|
-
};
|
|
73
|
-
let route = '/app';
|
|
74
|
-
if (companyType) {
|
|
75
|
-
route = `${route}/${companyType}/pages`;
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
route = `${route}/user/profile/pages`;
|
|
79
|
-
}
|
|
80
|
-
if (!router) {
|
|
81
|
-
// eslint-disable-next-line no-console
|
|
82
|
-
console.error('Router must be declared');
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
router.navigate([`${route}/company-pendency`.toLowerCase()], {
|
|
86
|
-
state: {
|
|
87
|
-
pendencyData: arg
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
getRole() {
|
|
93
|
-
const { __tokenCredentials } = this;
|
|
94
|
-
if (!__tokenCredentials)
|
|
95
|
-
return '';
|
|
96
|
-
if (__tokenCredentials?.programAdmin === 'true') {
|
|
97
|
-
return 'PROGRAM_ADMIN';
|
|
98
|
-
}
|
|
99
|
-
return __tokenCredentials?.role || '';
|
|
100
|
-
}
|
|
101
|
-
allowedSecurityAccessByPendency(args) {
|
|
102
|
-
if (!args) {
|
|
103
|
-
return {
|
|
104
|
-
hasPendencies: false
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
const { service, type } = args;
|
|
108
|
-
return service.hasPendencies(type);
|
|
109
|
-
}
|
|
110
|
-
allowedSecurityAccessByFeature(args) {
|
|
111
|
-
if (!args) {
|
|
112
|
-
return true;
|
|
113
|
-
}
|
|
114
|
-
const { config, feature } = args;
|
|
115
|
-
try {
|
|
116
|
-
if (!MonkeyEcxUtils.persistNullEmptyUndefined(feature) ||
|
|
117
|
-
!MonkeyEcxUtils.persistNullEmptyUndefined(config?.program?.settings)) {
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
return !config?.program?.settings?.[feature];
|
|
121
|
-
}
|
|
122
|
-
catch (e) {
|
|
123
|
-
// not to do
|
|
124
|
-
}
|
|
125
|
-
return true;
|
|
126
|
-
}
|
|
127
|
-
allowedSecurityAccessByCountry(arg) {
|
|
128
|
-
if (!arg)
|
|
129
|
-
return true;
|
|
130
|
-
return arg.country === arg.envCountry;
|
|
131
|
-
}
|
|
132
|
-
allowedSecurityAccess(args) {
|
|
133
|
-
if (!args)
|
|
134
|
-
return true;
|
|
135
|
-
const roles = args?.roles;
|
|
136
|
-
const byExclusion = args?.byExclusion;
|
|
137
|
-
const found = roles?.indexOf(this.getRole());
|
|
138
|
-
let ret = false;
|
|
139
|
-
if (byExclusion) {
|
|
140
|
-
ret = true;
|
|
141
|
-
if (found > -1) {
|
|
142
|
-
ret = false;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
ret = false;
|
|
147
|
-
if (found > -1) {
|
|
148
|
-
ret = true;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
if (!roles || roles.length === 0 || this.getRole() === 'PROGRAM_ADMIN') {
|
|
152
|
-
ret = true;
|
|
153
|
-
}
|
|
154
|
-
return ret;
|
|
155
|
-
}
|
|
156
|
-
navigateToErrorPage(statusCode, router) {
|
|
157
|
-
const routes = {
|
|
158
|
-
403: 'forbidden',
|
|
159
|
-
404: 'not-found',
|
|
160
|
-
500: 'service-problems',
|
|
161
|
-
503: 'service-problems'
|
|
162
|
-
};
|
|
163
|
-
if (!router) {
|
|
164
|
-
console.error('Router must be declared');
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
router?.navigate([`/app/pages/${routes[statusCode]}`.toLowerCase()]);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
handlePaginationOptions() {
|
|
171
|
-
const { __paginationOptions } = this;
|
|
172
|
-
if (__paginationOptions) {
|
|
173
|
-
const { service, callback, name } = __paginationOptions;
|
|
174
|
-
service?.setCallback((type) => {
|
|
175
|
-
this.doPaginationv2(type, callback);
|
|
176
|
-
}, name || 'main');
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
setPage(requestPaged) {
|
|
180
|
-
this.__requestPaged = {
|
|
181
|
-
...this.__requestPaged,
|
|
182
|
-
...requestPaged
|
|
183
|
-
};
|
|
184
|
-
return this;
|
|
185
|
-
}
|
|
186
|
-
nextPage() {
|
|
187
|
-
if (this.__links) {
|
|
188
|
-
return !!this.__links?.next;
|
|
189
|
-
}
|
|
190
|
-
if (!this.__requestPaged)
|
|
191
|
-
return false;
|
|
192
|
-
const { page } = this.__requestPaged;
|
|
193
|
-
const { number, totalPages } = page;
|
|
194
|
-
if (number < totalPages) {
|
|
195
|
-
this.__requestPaged = {
|
|
196
|
-
...this.__requestPaged,
|
|
197
|
-
page: {
|
|
198
|
-
...page,
|
|
199
|
-
number: number + 1
|
|
200
|
-
}
|
|
201
|
-
};
|
|
202
|
-
return true;
|
|
203
|
-
}
|
|
204
|
-
return false;
|
|
205
|
-
}
|
|
206
|
-
getEmbeddedData(data, field) {
|
|
207
|
-
const { _embedded } = data;
|
|
208
|
-
return _embedded ? _embedded[field] : null;
|
|
209
|
-
}
|
|
210
|
-
getNormalizedUrl(url, samePage = false) {
|
|
211
|
-
const { __requestPaged, __links } = this;
|
|
212
|
-
return new MonkeyEcxRequestPagedHandling(url, __requestPaged || {}, __links, samePage).getRequestWithPagedParams();
|
|
213
|
-
}
|
|
214
|
-
clear(clearData) {
|
|
215
|
-
if (clearData) {
|
|
216
|
-
this.__data = null;
|
|
217
|
-
this.__requestPaged = null;
|
|
218
|
-
this.__params = null;
|
|
219
|
-
this.__page = null;
|
|
220
|
-
this.__links = null;
|
|
221
|
-
if (this.__schedule) {
|
|
222
|
-
const { queue } = this.__schedule;
|
|
223
|
-
if (queue) {
|
|
224
|
-
this.otherArgs?.queue?.service?.removeQueueItem(queue);
|
|
225
|
-
}
|
|
226
|
-
this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
|
|
227
|
-
this.__schedule = null;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
this.__error = null;
|
|
231
|
-
this.__handledError = null;
|
|
232
|
-
this.flagValidator = false;
|
|
233
|
-
}
|
|
234
|
-
resolve(route, state, otherArgs) {
|
|
235
|
-
if (JSON.stringify(route?.queryParams) === '{}') {
|
|
236
|
-
this.__data = null;
|
|
237
|
-
this.__page = null;
|
|
238
|
-
}
|
|
239
|
-
this.__requestPaged = null;
|
|
240
|
-
this.flagValidator = true;
|
|
241
|
-
if (this.tokenStorage) {
|
|
242
|
-
this.__tokenCredentials = this.tokenStorage.getToken();
|
|
243
|
-
}
|
|
244
|
-
const pend = this.allowedSecurityAccessByPendency(otherArgs?.pendency);
|
|
245
|
-
const allowedByProgram = this.allowedSecurityAccessByFeature(otherArgs?.featureByProgram);
|
|
246
|
-
if (this.allowedSecurityAccess(otherArgs?.security) &&
|
|
247
|
-
this.allowedSecurityAccessByCountry(otherArgs?.countrySecurity) &&
|
|
248
|
-
!pend.hasPendencies &&
|
|
249
|
-
allowedByProgram) {
|
|
250
|
-
if (this.__schedule) {
|
|
251
|
-
this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
|
|
252
|
-
this.__schedule = null;
|
|
253
|
-
}
|
|
254
|
-
const { __requestPaged } = this;
|
|
255
|
-
if (!__requestPaged) {
|
|
256
|
-
this.setPage({
|
|
257
|
-
page: {
|
|
258
|
-
number: 0,
|
|
259
|
-
size: 10
|
|
260
|
-
}
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
if (otherArgs?.translateOptions) {
|
|
264
|
-
const { service, keys } = otherArgs?.translateOptions;
|
|
265
|
-
this.geti18n(service, keys || '');
|
|
266
|
-
}
|
|
267
|
-
if (otherArgs?.callbackPagination) {
|
|
268
|
-
this.__callbackPagination = otherArgs.callbackPagination;
|
|
269
|
-
}
|
|
270
|
-
if (otherArgs?.paginationOptions) {
|
|
271
|
-
this.__paginationOptions = otherArgs?.paginationOptions;
|
|
272
|
-
this.handlePaginationOptions();
|
|
273
|
-
}
|
|
274
|
-
if (otherArgs?.feature) {
|
|
275
|
-
const { flag, service } = otherArgs.feature;
|
|
276
|
-
service.onFlags
|
|
277
|
-
.pipe(takeWhile(() => {
|
|
278
|
-
return this.flagValidator;
|
|
279
|
-
}))
|
|
280
|
-
.subscribe((val) => {
|
|
281
|
-
if (val) {
|
|
282
|
-
const hasFlag = service.getFlag(flag);
|
|
283
|
-
if (MonkeyEcxUtils.persistNullEmptyUndefined(hasFlag)) {
|
|
284
|
-
if (!hasFlag) {
|
|
285
|
-
this.navigateToErrorPage(404, otherArgs?.router);
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
otherArgs?.callbackMain();
|
|
290
|
-
}
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
else {
|
|
294
|
-
otherArgs?.callbackMain();
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
else if (!allowedByProgram) {
|
|
298
|
-
this.navigateToErrorPage(404, otherArgs?.router);
|
|
299
|
-
}
|
|
300
|
-
else if (pend.hasPendencies) {
|
|
301
|
-
this.navigateToPendencyPage(pend, otherArgs?.router);
|
|
302
|
-
}
|
|
303
|
-
else {
|
|
304
|
-
this.navigateToErrorPage(403, otherArgs?.router);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
getHTTPHeaderApplicationPDF() {
|
|
308
|
-
return {
|
|
309
|
-
observe: 'response',
|
|
310
|
-
responseType: 'blob'
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
genericMethod(link, data, callback) {
|
|
314
|
-
const { href, type = 'get' } = link;
|
|
315
|
-
this.monkeyecxService?.[type.toLowerCase()](`${href}`, data)?.subscribe((resp) => {
|
|
316
|
-
if (callback)
|
|
317
|
-
callback(resp);
|
|
318
|
-
}, (err) => {
|
|
319
|
-
if (callback)
|
|
320
|
-
callback();
|
|
321
|
-
throwError(err);
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
async getGenericData(data, action) {
|
|
325
|
-
const { monkeyecxService } = this;
|
|
326
|
-
if (!monkeyecxService)
|
|
327
|
-
return null;
|
|
328
|
-
const { href, type } = new LinksModel(data)?.getAction(action) || {
|
|
329
|
-
href: '', type: 'get'
|
|
330
|
-
};
|
|
331
|
-
return monkeyecxService[type.toLowerCase()](href)
|
|
332
|
-
.pipe(take(1)).toPromise();
|
|
333
|
-
}
|
|
334
|
-
geti18n(translateService, keys) {
|
|
335
|
-
translateService.onDefaultLangChange.subscribe(() => {
|
|
336
|
-
this.__i18n = translateService.instant(keys);
|
|
337
|
-
this.__oni18nDataChanged$.next(null);
|
|
338
|
-
});
|
|
339
|
-
translateService.getStreamOnTranslationChange(keys).subscribe(() => {
|
|
340
|
-
this.__i18n = translateService.instant(keys);
|
|
341
|
-
this.__oni18nDataChanged$.next(null);
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
doPagination() {
|
|
345
|
-
if (!this.__onLoadingInProgress$.value) {
|
|
346
|
-
const hasMorePages = this.setPage({
|
|
347
|
-
page: {
|
|
348
|
-
...this.__page
|
|
349
|
-
}
|
|
350
|
-
}).nextPage();
|
|
351
|
-
if (hasMorePages && this.__callbackPagination) {
|
|
352
|
-
this.__callbackPagination();
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
doPaginationv2(type, callback) {
|
|
357
|
-
if (!this.__onLoadingInProgress$.value) {
|
|
358
|
-
if (callback) {
|
|
359
|
-
callback(type);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
setLinks(links) {
|
|
364
|
-
this.__isAbleToDoPagination = {
|
|
365
|
-
first: !!links?.first,
|
|
366
|
-
next: !!links?.next
|
|
367
|
-
};
|
|
368
|
-
this.__links = links;
|
|
369
|
-
}
|
|
370
|
-
setSearchByUrl(router, url, search, extras) {
|
|
371
|
-
this.__data = null;
|
|
372
|
-
this.__page = null;
|
|
373
|
-
this.__onDataChanged$.next(null);
|
|
374
|
-
this.__onLoadingInProgress$.next(false);
|
|
375
|
-
router.navigate([url], {
|
|
376
|
-
queryParams: {
|
|
377
|
-
...search,
|
|
378
|
-
r: MonkeyEcxUtils.getRandomString(30)
|
|
379
|
-
},
|
|
380
|
-
queryParamsHandling: 'merge',
|
|
381
|
-
...extras
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
saveState(state) {
|
|
385
|
-
this.__savedState = {
|
|
386
|
-
page: this.__page,
|
|
387
|
-
...state
|
|
388
|
-
};
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
__decorate([
|
|
392
|
-
MonkeyEcxCoreService({
|
|
393
|
-
requestInProgress: {
|
|
394
|
-
showProgress: true
|
|
395
|
-
}
|
|
396
|
-
})
|
|
397
|
-
], MonkeyEcxCommonsService.prototype, "genericMethod", null);
|
|
398
|
-
__decorate([
|
|
399
|
-
MonkeyEcxCoreService({
|
|
400
|
-
requestInProgress: {
|
|
401
|
-
showProgress: true
|
|
402
|
-
}
|
|
403
|
-
})
|
|
404
|
-
], MonkeyEcxCommonsService.prototype, "getGenericData", null);
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { NavigationStart } from '@angular/router';
|
|
3
|
+
import { BehaviorSubject, throwError } from 'rxjs';
|
|
4
|
+
import { filter, take, takeWhile } from 'rxjs/operators';
|
|
5
|
+
import { MonkeyEcxRequestPagedHandling } from '../request-paged/monkeyecx-request-request-paged-handling';
|
|
6
|
+
import { MonkeyEcxUtils } from '../../utils/utils';
|
|
7
|
+
import { MonkeyEcxCoreService } from '../../decorators/monkeyecx-decorators';
|
|
8
|
+
import { MonkeyEcxModel } from '../../model';
|
|
9
|
+
class LinksModel extends MonkeyEcxModel {
|
|
10
|
+
constructor(data) {
|
|
11
|
+
super();
|
|
12
|
+
this._links = data?._links;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class MonkeyEcxCommonsService {
|
|
16
|
+
constructor(monkeyecxService, tokenStorage, otherArgs) {
|
|
17
|
+
this.monkeyecxService = monkeyecxService;
|
|
18
|
+
this.tokenStorage = tokenStorage;
|
|
19
|
+
this.otherArgs = otherArgs;
|
|
20
|
+
this.flagValidator = true;
|
|
21
|
+
this.__data$ = null;
|
|
22
|
+
this.__pagination$ = null;
|
|
23
|
+
this.__control$ = null;
|
|
24
|
+
this.__savedState = null;
|
|
25
|
+
this.__error = null;
|
|
26
|
+
this.__handledError = null;
|
|
27
|
+
this.__page = null;
|
|
28
|
+
this.__links = null;
|
|
29
|
+
this.__requestPaged = null;
|
|
30
|
+
this.__onSearchChanged$ = new BehaviorSubject(null);
|
|
31
|
+
this.__onDataChanged$ = new BehaviorSubject(null);
|
|
32
|
+
this.__onLoadingInProgress$ = new BehaviorSubject(false);
|
|
33
|
+
this.__onUploadInProgress$ = new BehaviorSubject(false);
|
|
34
|
+
this.__onDataDeleted$ = new BehaviorSubject(null);
|
|
35
|
+
this.__onErrorChanged$ = new BehaviorSubject(null);
|
|
36
|
+
this.__onGovernmentIdDataChanged$ = new BehaviorSubject(null);
|
|
37
|
+
this.__onZipCodeDataChanged$ = new BehaviorSubject(null);
|
|
38
|
+
this.__oni18nDataChanged$ = new BehaviorSubject(null);
|
|
39
|
+
this.__onDoSearch$ = new BehaviorSubject({});
|
|
40
|
+
this.__tokenCredentials = null;
|
|
41
|
+
this.__schedule = null;
|
|
42
|
+
this.__callbackPagination = () => {
|
|
43
|
+
// eslint-disable-next-line no-console
|
|
44
|
+
return console.error('Method callbackPagination needs to be declared');
|
|
45
|
+
};
|
|
46
|
+
this.__isAbleToDoPagination = {};
|
|
47
|
+
this.handleInit();
|
|
48
|
+
}
|
|
49
|
+
handleInit() {
|
|
50
|
+
if (this.tokenStorage) {
|
|
51
|
+
this.__tokenCredentials = this.tokenStorage.getToken();
|
|
52
|
+
}
|
|
53
|
+
if (this.otherArgs?.router) {
|
|
54
|
+
const { clearOnChangeRoute } = this.otherArgs?.schedule?.options || {
|
|
55
|
+
clearOnChangeRoute: false
|
|
56
|
+
};
|
|
57
|
+
this.otherArgs.router.events
|
|
58
|
+
.pipe(filter((event) => {
|
|
59
|
+
return event instanceof NavigationStart;
|
|
60
|
+
}), take(1))
|
|
61
|
+
.subscribe(() => {
|
|
62
|
+
if (this.__schedule && clearOnChangeRoute) {
|
|
63
|
+
this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
|
|
64
|
+
this.__schedule = null;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
navigateToPendencyPage(arg, router) {
|
|
70
|
+
const { companyType } = this.__tokenCredentials || {
|
|
71
|
+
companyType: ''
|
|
72
|
+
};
|
|
73
|
+
let route = '/app';
|
|
74
|
+
if (companyType) {
|
|
75
|
+
route = `${route}/${companyType}/pages`;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
route = `${route}/user/profile/pages`;
|
|
79
|
+
}
|
|
80
|
+
if (!router) {
|
|
81
|
+
// eslint-disable-next-line no-console
|
|
82
|
+
console.error('Router must be declared');
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
router.navigate([`${route}/company-pendency`.toLowerCase()], {
|
|
86
|
+
state: {
|
|
87
|
+
pendencyData: arg
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
getRole() {
|
|
93
|
+
const { __tokenCredentials } = this;
|
|
94
|
+
if (!__tokenCredentials)
|
|
95
|
+
return '';
|
|
96
|
+
if (__tokenCredentials?.programAdmin === 'true') {
|
|
97
|
+
return 'PROGRAM_ADMIN';
|
|
98
|
+
}
|
|
99
|
+
return __tokenCredentials?.role || '';
|
|
100
|
+
}
|
|
101
|
+
allowedSecurityAccessByPendency(args) {
|
|
102
|
+
if (!args) {
|
|
103
|
+
return {
|
|
104
|
+
hasPendencies: false
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const { service, type } = args;
|
|
108
|
+
return service.hasPendencies(type);
|
|
109
|
+
}
|
|
110
|
+
allowedSecurityAccessByFeature(args) {
|
|
111
|
+
if (!args) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
const { config, feature } = args;
|
|
115
|
+
try {
|
|
116
|
+
if (!MonkeyEcxUtils.persistNullEmptyUndefined(feature) ||
|
|
117
|
+
!MonkeyEcxUtils.persistNullEmptyUndefined(config?.program?.settings)) {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
return !config?.program?.settings?.[feature];
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
// not to do
|
|
124
|
+
}
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
allowedSecurityAccessByCountry(arg) {
|
|
128
|
+
if (!arg)
|
|
129
|
+
return true;
|
|
130
|
+
return arg.country === arg.envCountry;
|
|
131
|
+
}
|
|
132
|
+
allowedSecurityAccess(args) {
|
|
133
|
+
if (!args)
|
|
134
|
+
return true;
|
|
135
|
+
const roles = args?.roles;
|
|
136
|
+
const byExclusion = args?.byExclusion;
|
|
137
|
+
const found = roles?.indexOf(this.getRole());
|
|
138
|
+
let ret = false;
|
|
139
|
+
if (byExclusion) {
|
|
140
|
+
ret = true;
|
|
141
|
+
if (found > -1) {
|
|
142
|
+
ret = false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
ret = false;
|
|
147
|
+
if (found > -1) {
|
|
148
|
+
ret = true;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (!roles || roles.length === 0 || this.getRole() === 'PROGRAM_ADMIN') {
|
|
152
|
+
ret = true;
|
|
153
|
+
}
|
|
154
|
+
return ret;
|
|
155
|
+
}
|
|
156
|
+
navigateToErrorPage(statusCode, router) {
|
|
157
|
+
const routes = {
|
|
158
|
+
403: 'forbidden',
|
|
159
|
+
404: 'not-found',
|
|
160
|
+
500: 'service-problems',
|
|
161
|
+
503: 'service-problems'
|
|
162
|
+
};
|
|
163
|
+
if (!router) {
|
|
164
|
+
console.error('Router must be declared');
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
router?.navigate([`/app/pages/${routes[statusCode]}`.toLowerCase()]);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
handlePaginationOptions() {
|
|
171
|
+
const { __paginationOptions } = this;
|
|
172
|
+
if (__paginationOptions) {
|
|
173
|
+
const { service, callback, name } = __paginationOptions;
|
|
174
|
+
service?.setCallback((type) => {
|
|
175
|
+
this.doPaginationv2(type, callback);
|
|
176
|
+
}, name || 'main');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
setPage(requestPaged) {
|
|
180
|
+
this.__requestPaged = {
|
|
181
|
+
...this.__requestPaged,
|
|
182
|
+
...requestPaged
|
|
183
|
+
};
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
nextPage() {
|
|
187
|
+
if (this.__links) {
|
|
188
|
+
return !!this.__links?.next;
|
|
189
|
+
}
|
|
190
|
+
if (!this.__requestPaged)
|
|
191
|
+
return false;
|
|
192
|
+
const { page } = this.__requestPaged;
|
|
193
|
+
const { number, totalPages } = page;
|
|
194
|
+
if (number < totalPages) {
|
|
195
|
+
this.__requestPaged = {
|
|
196
|
+
...this.__requestPaged,
|
|
197
|
+
page: {
|
|
198
|
+
...page,
|
|
199
|
+
number: number + 1
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
getEmbeddedData(data, field) {
|
|
207
|
+
const { _embedded } = data;
|
|
208
|
+
return _embedded ? _embedded[field] : null;
|
|
209
|
+
}
|
|
210
|
+
getNormalizedUrl(url, samePage = false) {
|
|
211
|
+
const { __requestPaged, __links } = this;
|
|
212
|
+
return new MonkeyEcxRequestPagedHandling(url, __requestPaged || {}, __links, samePage).getRequestWithPagedParams();
|
|
213
|
+
}
|
|
214
|
+
clear(clearData) {
|
|
215
|
+
if (clearData) {
|
|
216
|
+
this.__data = null;
|
|
217
|
+
this.__requestPaged = null;
|
|
218
|
+
this.__params = null;
|
|
219
|
+
this.__page = null;
|
|
220
|
+
this.__links = null;
|
|
221
|
+
if (this.__schedule) {
|
|
222
|
+
const { queue } = this.__schedule;
|
|
223
|
+
if (queue) {
|
|
224
|
+
this.otherArgs?.queue?.service?.removeQueueItem(queue);
|
|
225
|
+
}
|
|
226
|
+
this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
|
|
227
|
+
this.__schedule = null;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
this.__error = null;
|
|
231
|
+
this.__handledError = null;
|
|
232
|
+
this.flagValidator = false;
|
|
233
|
+
}
|
|
234
|
+
resolve(route, state, otherArgs) {
|
|
235
|
+
if (JSON.stringify(route?.queryParams) === '{}') {
|
|
236
|
+
this.__data = null;
|
|
237
|
+
this.__page = null;
|
|
238
|
+
}
|
|
239
|
+
this.__requestPaged = null;
|
|
240
|
+
this.flagValidator = true;
|
|
241
|
+
if (this.tokenStorage) {
|
|
242
|
+
this.__tokenCredentials = this.tokenStorage.getToken();
|
|
243
|
+
}
|
|
244
|
+
const pend = this.allowedSecurityAccessByPendency(otherArgs?.pendency);
|
|
245
|
+
const allowedByProgram = this.allowedSecurityAccessByFeature(otherArgs?.featureByProgram);
|
|
246
|
+
if (this.allowedSecurityAccess(otherArgs?.security) &&
|
|
247
|
+
this.allowedSecurityAccessByCountry(otherArgs?.countrySecurity) &&
|
|
248
|
+
!pend.hasPendencies &&
|
|
249
|
+
allowedByProgram) {
|
|
250
|
+
if (this.__schedule) {
|
|
251
|
+
this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
|
|
252
|
+
this.__schedule = null;
|
|
253
|
+
}
|
|
254
|
+
const { __requestPaged } = this;
|
|
255
|
+
if (!__requestPaged) {
|
|
256
|
+
this.setPage({
|
|
257
|
+
page: {
|
|
258
|
+
number: 0,
|
|
259
|
+
size: 10
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
if (otherArgs?.translateOptions) {
|
|
264
|
+
const { service, keys } = otherArgs?.translateOptions;
|
|
265
|
+
this.geti18n(service, keys || '');
|
|
266
|
+
}
|
|
267
|
+
if (otherArgs?.callbackPagination) {
|
|
268
|
+
this.__callbackPagination = otherArgs.callbackPagination;
|
|
269
|
+
}
|
|
270
|
+
if (otherArgs?.paginationOptions) {
|
|
271
|
+
this.__paginationOptions = otherArgs?.paginationOptions;
|
|
272
|
+
this.handlePaginationOptions();
|
|
273
|
+
}
|
|
274
|
+
if (otherArgs?.feature) {
|
|
275
|
+
const { flag, service } = otherArgs.feature;
|
|
276
|
+
service.onFlags
|
|
277
|
+
.pipe(takeWhile(() => {
|
|
278
|
+
return this.flagValidator;
|
|
279
|
+
}))
|
|
280
|
+
.subscribe((val) => {
|
|
281
|
+
if (val) {
|
|
282
|
+
const hasFlag = service.getFlag(flag);
|
|
283
|
+
if (MonkeyEcxUtils.persistNullEmptyUndefined(hasFlag)) {
|
|
284
|
+
if (!hasFlag) {
|
|
285
|
+
this.navigateToErrorPage(404, otherArgs?.router);
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
otherArgs?.callbackMain();
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
otherArgs?.callbackMain();
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
else if (!allowedByProgram) {
|
|
298
|
+
this.navigateToErrorPage(404, otherArgs?.router);
|
|
299
|
+
}
|
|
300
|
+
else if (pend.hasPendencies) {
|
|
301
|
+
this.navigateToPendencyPage(pend, otherArgs?.router);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
this.navigateToErrorPage(403, otherArgs?.router);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
getHTTPHeaderApplicationPDF() {
|
|
308
|
+
return {
|
|
309
|
+
observe: 'response',
|
|
310
|
+
responseType: 'blob'
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
genericMethod(link, data, callback) {
|
|
314
|
+
const { href, type = 'get' } = link;
|
|
315
|
+
this.monkeyecxService?.[type.toLowerCase()](`${href}`, data)?.subscribe((resp) => {
|
|
316
|
+
if (callback)
|
|
317
|
+
callback(resp);
|
|
318
|
+
}, (err) => {
|
|
319
|
+
if (callback)
|
|
320
|
+
callback();
|
|
321
|
+
throwError(err);
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
async getGenericData(data, action) {
|
|
325
|
+
const { monkeyecxService } = this;
|
|
326
|
+
if (!monkeyecxService)
|
|
327
|
+
return null;
|
|
328
|
+
const { href, type } = new LinksModel(data)?.getAction(action) || {
|
|
329
|
+
href: '', type: 'get'
|
|
330
|
+
};
|
|
331
|
+
return monkeyecxService[type.toLowerCase()](href)
|
|
332
|
+
.pipe(take(1)).toPromise();
|
|
333
|
+
}
|
|
334
|
+
geti18n(translateService, keys) {
|
|
335
|
+
translateService.onDefaultLangChange.subscribe(() => {
|
|
336
|
+
this.__i18n = translateService.instant(keys);
|
|
337
|
+
this.__oni18nDataChanged$.next(null);
|
|
338
|
+
});
|
|
339
|
+
translateService.getStreamOnTranslationChange(keys).subscribe(() => {
|
|
340
|
+
this.__i18n = translateService.instant(keys);
|
|
341
|
+
this.__oni18nDataChanged$.next(null);
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
doPagination() {
|
|
345
|
+
if (!this.__onLoadingInProgress$.value) {
|
|
346
|
+
const hasMorePages = this.setPage({
|
|
347
|
+
page: {
|
|
348
|
+
...this.__page
|
|
349
|
+
}
|
|
350
|
+
}).nextPage();
|
|
351
|
+
if (hasMorePages && this.__callbackPagination) {
|
|
352
|
+
this.__callbackPagination();
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
doPaginationv2(type, callback) {
|
|
357
|
+
if (!this.__onLoadingInProgress$.value) {
|
|
358
|
+
if (callback) {
|
|
359
|
+
callback(type);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
setLinks(links) {
|
|
364
|
+
this.__isAbleToDoPagination = {
|
|
365
|
+
first: !!links?.first,
|
|
366
|
+
next: !!links?.next
|
|
367
|
+
};
|
|
368
|
+
this.__links = links;
|
|
369
|
+
}
|
|
370
|
+
setSearchByUrl(router, url, search, extras) {
|
|
371
|
+
this.__data = null;
|
|
372
|
+
this.__page = null;
|
|
373
|
+
this.__onDataChanged$.next(null);
|
|
374
|
+
this.__onLoadingInProgress$.next(false);
|
|
375
|
+
router.navigate([url], {
|
|
376
|
+
queryParams: {
|
|
377
|
+
...search,
|
|
378
|
+
r: MonkeyEcxUtils.getRandomString(30)
|
|
379
|
+
},
|
|
380
|
+
queryParamsHandling: 'merge',
|
|
381
|
+
...extras
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
saveState(state) {
|
|
385
|
+
this.__savedState = {
|
|
386
|
+
page: this.__page,
|
|
387
|
+
...state
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
__decorate([
|
|
392
|
+
MonkeyEcxCoreService({
|
|
393
|
+
requestInProgress: {
|
|
394
|
+
showProgress: true
|
|
395
|
+
}
|
|
396
|
+
})
|
|
397
|
+
], MonkeyEcxCommonsService.prototype, "genericMethod", null);
|
|
398
|
+
__decorate([
|
|
399
|
+
MonkeyEcxCoreService({
|
|
400
|
+
requestInProgress: {
|
|
401
|
+
showProgress: true
|
|
402
|
+
}
|
|
403
|
+
})
|
|
404
|
+
], MonkeyEcxCommonsService.prototype, "getGenericData", null);
|
|
405
405
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ua2V5ZWN4LWNvbW1vbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vbmtleS1mcm9udC1jb3JlL3NyYy9saWIvY29yZS9zZXJ2aWNlcy9jb21tb25zL21vbmtleWVjeC1jb21tb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxlQUFlLEVBR2hCLE1BQU0saUJBQWlCLENBQUM7QUFHekIsT0FBTyxFQUFFLGVBQWUsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFrQnpELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRTFHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUc3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVyxTQUFRLGNBQWM7SUFDckMsWUFBWSxJQUFVO1FBQ3BCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQzdCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyx1QkFBdUI7SUFrRWxDLFlBQ1MsZ0JBQW1DLEVBQ25DLFlBQTJDLEVBQzNDLFNBV047UUFiTSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ25DLGlCQUFZLEdBQVosWUFBWSxDQUErQjtRQUMzQyxjQUFTLEdBQVQsU0FBUyxDQVdmO1FBL0VLLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTdCLFlBQU8sR0FBMkIsSUFBSSxDQUFDO1FBRXZDLGtCQUFhLEdBQTJCLElBQUksQ0FBQztRQUU3QyxlQUFVLEdBQTJCLElBQUksQ0FBQztRQUkxQyxpQkFBWSxHQUErQixJQUFJLENBQUM7UUFJaEQsWUFBTyxHQUFrQyxJQUFJLENBQUM7UUFFOUMsbUJBQWMsR0FBeUMsSUFBSSxDQUFDO1FBRTVELFdBQU0sR0FBa0MsSUFBSSxDQUFDO1FBRTdDLFlBQU8sR0FBa0MsSUFBSSxDQUFDO1FBSTlDLG1CQUFjLEdBQWlDLElBQUksQ0FBQztRQUVwRCx1QkFBa0IsR0FBeUIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckUscUJBQWdCLEdBQXlCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5FLDJCQUFzQixHQUF5QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxRSwwQkFBcUIsR0FBeUIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekUscUJBQWdCLEdBQXlCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5FLHNCQUFpQixHQUF5QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwRSxpQ0FBNEIsR0FBeUIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0UsNEJBQXVCLEdBQXlCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFFLHlCQUFvQixHQUF5QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2RSxrQkFBYSxHQUEyQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVoRix1QkFBa0IsR0FBcUMsSUFBSSxDQUFDO1FBRTVELGVBQVUsR0FBb0MsSUFBSSxDQUFDO1FBSW5ELHlCQUFvQixHQUFhLEdBQUcsRUFBRTtZQUNwQyxzQ0FBc0M7WUFDdEMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDO1FBUUYsMkJBQXNCLEdBQUcsRUFBRSxDQUFDO1FBa0IxQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtZQUMxQixNQUFNLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLElBQUk7Z0JBQ2xFLGtCQUFrQixFQUFFLEtBQUs7YUFDMUIsQ0FBQztZQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU07aUJBQ3pCLElBQUksQ0FDSCxNQUFNLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDcEIsT0FBTyxLQUFLLFlBQVksZUFBZSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxFQUNGLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUjtpQkFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxrQkFBa0IsRUFBRTtvQkFDekMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ25FLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2lCQUN4QjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsR0FBd0MsRUFBRSxNQUFlO1FBQ3RGLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUk7WUFDakQsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztRQUNGLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUVuQixJQUFJLFdBQVcsRUFBRTtZQUNmLEtBQUssR0FBRyxHQUFHLEtBQUssSUFBSSxXQUFXLFFBQVEsQ0FBQztTQUN6QzthQUFNO1lBQ0wsS0FBSyxHQUFHLEdBQUcsS0FBSyxxQkFBcUIsQ0FBQztTQUN2QztRQUVELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7Z0JBQzNELEtBQUssRUFBRTtvQkFDTCxZQUFZLEVBQUUsR0FBRztpQkFDbEI7YUFDRixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxPQUFPO1FBQ2IsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRXBDLElBQUksQ0FBQyxrQkFBa0I7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVuQyxJQUFJLGtCQUFrQixFQUFFLFlBQVksS0FBSyxNQUFNLEVBQUU7WUFDL0MsT0FBTyxlQUFlLENBQUM7U0FDeEI7UUFFRCxPQUFPLGtCQUFrQixFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVPLCtCQUErQixDQUFDLElBQVM7UUFDL0MsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU87Z0JBQ0wsYUFBYSxFQUFFLEtBQUs7YUFDckIsQ0FBQztTQUNIO1FBQ0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDL0IsT0FBTyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyw4QkFBOEIsQ0FBQyxJQUFTO1FBQzlDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSTtZQUNGLElBQUksQ0FBQyxjQUFjLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDO2dCQUNwRCxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUN0RSxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDOUM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLFlBQVk7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLDhCQUE4QixDQUFDLEdBQThCO1FBQ25FLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEIsT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDeEMsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQVM7UUFDckMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQzFCLE1BQU0sV0FBVyxHQUFHLElBQUksRUFBRSxXQUFXLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3QyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDaEIsSUFBSSxXQUFXLEVBQUU7WUFDZixHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ1gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2QsR0FBRyxHQUFHLEtBQUssQ0FBQzthQUNiO1NBQ0Y7YUFBTTtZQUNMLEdBQUcsR0FBRyxLQUFLLENBQUM7WUFDWixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDZCxHQUFHLEdBQUcsSUFBSSxDQUFDO2FBQ1o7U0FDRjtRQUNELElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRTtZQUN0RSxHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ1o7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxVQUFrQixFQUFFLE1BQWU7UUFDN0QsTUFBTSxNQUFNLEdBQVE7WUFDbEIsR0FBRyxFQUFFLFdBQVc7WUFDaEIsR0FBRyxFQUFFLFdBQVc7WUFDaEIsR0FBRyxFQUFFLGtCQUFrQjtZQUN2QixHQUFHLEVBQUUsa0JBQWtCO1NBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsY0FBYyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEU7SUFDSCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNyQyxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLG1CQUFtQixDQUFDO1lBQ3hELE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsWUFBbUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRztZQUNwQixHQUFHLElBQUksQ0FBQyxjQUFjO1lBQ3RCLEdBQUcsWUFBWTtTQUNoQixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztTQUM3QjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBcUIsQ0FBQztRQUM1QyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLE1BQU0sR0FBRyxVQUFVLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRztnQkFDcEIsR0FBRyxJQUFJLENBQUMsY0FBYztnQkFDdEIsSUFBSSxFQUFFO29CQUNKLEdBQUcsSUFBSTtvQkFDUCxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUM7aUJBQ25CO2FBQ0YsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUyxFQUFFLEtBQWE7UUFDdEMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMzQixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVcsRUFBRSxRQUFRLEdBQUcsS0FBSztRQUM1QyxNQUFNLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztRQUN6QyxPQUFPLElBQUksNkJBQTZCLENBQ3RDLEdBQUcsRUFDSCxjQUFjLElBQUksRUFBRSxFQUNwQixPQUFPLEVBQ1AsUUFBUSxDQUNULENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQWtCO1FBQ3RCLElBQUksU0FBUyxFQUFFO1lBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFFcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDeEQ7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2FBQ3hCO1NBQ0Y7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTyxDQUNMLEtBQW9DLEVBQ3BDLEtBQWlDLEVBQ2pDLFNBNkJDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDcEI7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDeEQ7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTFGLElBQ0UsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7WUFDL0MsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUM7WUFDL0QsQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUNuQixnQkFBZ0IsRUFDaEI7WUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzthQUN4QjtZQUVELE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQztvQkFDWCxJQUFJLEVBQUU7d0JBQ0osTUFBTSxFQUFFLENBQUM7d0JBQ1QsSUFBSSxFQUFFLEVBQUU7cUJBQ1Q7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxJQUFJLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDL0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxTQUFTLEVBQUUsZ0JBQWdCLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNuQztZQUVELElBQUksU0FBUyxFQUFFLGtCQUFrQixFQUFFO2dCQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDO2FBQzFEO1lBRUQsSUFBSSxTQUFTLEVBQUUsaUJBQWlCLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLEVBQUUsaUJBQWlCLENBQUM7Z0JBQ3hELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2FBQ2hDO1lBRUQsSUFBSSxTQUFTLEVBQUUsT0FBTyxFQUFFO2dCQUN0QixNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7Z0JBRTVDLE9BQU8sQ0FBQyxPQUFPO3FCQUNaLElBQUksQ0FDSCxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNiLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQ0g7cUJBQ0EsU0FBUyxDQUFDLENBQUMsR0FBWSxFQUFFLEVBQUU7b0JBQzFCLElBQUksR0FBRyxFQUFFO3dCQUNQLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBRXRDLElBQUksY0FBYyxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNyRCxJQUFJLENBQUMsT0FBTyxFQUFFO2dDQUNaLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dDQUNqRCxPQUFPOzZCQUNSO3lCQUNGO3dCQUNELFNBQVMsRUFBRSxZQUFZLEVBQUUsQ0FBQztxQkFDM0I7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTTtnQkFDTCxTQUFTLEVBQUUsWUFBWSxFQUFFLENBQUM7YUFDM0I7U0FDRjthQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNsRDthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUM3QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDbEQ7SUFDSCxDQUFDO0lBRUQsMkJBQTJCO1FBQ3pCLE9BQU87WUFDTCxPQUFPLEVBQUUsVUFBVTtZQUNuQixZQUFZLEVBQUUsTUFBTTtTQUNyQixDQUFDO0lBQ0osQ0FBQztJQU9ELGFBQWEsQ0FBQyxJQUFTLEVBQUUsSUFBVSxFQUFFLFFBQW1CO1FBQ3RELE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQztRQUVwQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FDckUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNaLElBQUksUUFBUTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxFQUNELENBQUMsR0FBc0IsRUFBRSxFQUFFO1lBQ3pCLElBQUksUUFBUTtnQkFBRSxRQUFRLEVBQUUsQ0FBQztZQUN6QixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBT0QsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFTLEVBQUUsTUFBYztRQUM1QyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ25DLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJO1lBQ2hFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUs7U0FDdEIsQ0FBQztRQUVGLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQU0sSUFBSSxDQUFDO2FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsT0FBTyxDQUFDLGdCQUFrQyxFQUFFLElBQXVCO1FBQ2pFLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNILGdCQUFnQixDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakUsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7WUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDaEMsSUFBSSxFQUFFO29CQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU07aUJBQ2Y7YUFDRixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFZCxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzdCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVksRUFBRSxRQUFrQjtRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRTtZQUN0QyxJQUFJLFFBQVEsRUFBRTtnQkFDWixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEI7U0FDRjtJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsc0JBQXNCLEdBQUc7WUFDNUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSztZQUNyQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJO1NBQ3BCLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWMsRUFBRSxHQUFXLEVBQUUsTUFBVyxFQUFFLE1BQVk7UUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQixXQUFXLEVBQUU7Z0JBQ1gsR0FBRyxNQUFNO2dCQUNULENBQUMsRUFBRSxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQzthQUN0QztZQUNELG1CQUFtQixFQUFFLE9BQU87WUFDNUIsR0FBRyxNQUFNO1NBQ1YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUEwQjtRQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2xCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNqQixHQUFHLEtBQUs7U0FDVCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBN0ZDO0lBTEMsb0JBQW9CLENBQUM7UUFDcEIsaUJBQWlCLEVBQUU7WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkI7S0FDRixDQUFDOzREQWFEO0FBT0Q7SUFMQyxvQkFBb0IsQ0FBQztRQUNwQixpQkFBaUIsRUFBRTtZQUNqQixZQUFZLEVBQUUsSUFBSTtTQUNuQjtLQUNGLENBQUM7NkRBVUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBOYXZpZ2F0aW9uU3RhcnQsXG4gIFJvdXRlcixcbiAgUm91dGVyU3RhdGVTbmFwc2hvdFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZSwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgTW9ua2V5RWN4RXJyb3JSZXNwb25zZSxcbiAgTW9ua2V5RWN4SGFuZGxlZEVycm9yUmVzcG9uc2UsXG4gIE1vbmtleUVjeFJlcXVlc3RQYWdlZCxcbiAgTW9ua2V5RWN4UmVxdWVzdFNjaGVkdWxlLFxuICBNb25rZXlFY3hSZXNwb25zZVBhZ2VkLFxuICBNb25rZXlFY3hSZXNwb25zZUxpbmtzLFxuICBNb25rZXlFY3hUb2tlbkNyZWRlbnRpYWxzLFxuICBNb25rZXlFY3hUcmFuc2xhdGVPcHRpb25zLFxuICBNb25rZXlFY3hDb21wYW55UGVuZGVuY2llc1ZhbGlkYXRlZCxcbiAgTW9ua2V5RWN4Q291bnRyeVNlY3VyaXR5LFxuICBNb25rZXlFY3hTYXZlZFN0YXRlLFxuICBNb25rZXlFY3hDb25maWdcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNb25rZXlFY3hUb2tlblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc3RvcmFnZS9tb25rZXllY3gtdG9rZW4tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1vbmtleUVjeFJlcXVlc3RTY2hlZHVsZVNlcnZpY2UgfSBmcm9tICcuLi9zY2hlZHVsZXMvbW9ua2V5ZWN4LXJlcXVlc3Qtc2NoZWR1bGUuc2VydmljZSc7XG5pbXBvcnQgeyBNb25rZXlFY3hSZXF1ZXN0UXVldWVIYW5kbGluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXF1ZXN0LXF1ZXVlL21vbmtleWVjeC1yZXF1ZXN0LXF1ZXVlLWhhbmRsaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9ua2V5RWN4UmVxdWVzdFBhZ2VkSGFuZGxpbmcgfSBmcm9tICcuLi9yZXF1ZXN0LXBhZ2VkL21vbmtleWVjeC1yZXF1ZXN0LXJlcXVlc3QtcGFnZWQtaGFuZGxpbmcnO1xuaW1wb3J0IHsgTW9ua2V5RWN4RmVhdHVyZVRvZ2dsZVNlcnZpY2UgfSBmcm9tICcuLi9jb25maWcvbW9ua2V5ZWN4LWZlYXR1cmUtdG9nZ2xlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9ua2V5RWN4VXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgeyBNb25rZXlFY3hDb3JlU2VydmljZSB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvbW9ua2V5ZWN4LWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgTW9ua2V5RWN4U2VydmljZSB9IGZyb20gJy4uL21vbmtleWVjeC1zZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9ua2V5RWN4UGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9wYWdpbmF0aW9uJztcbmltcG9ydCB7IE1vbmtleUVjeE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xuXG5jbGFzcyBMaW5rc01vZGVsIGV4dGVuZHMgTW9ua2V5RWN4TW9kZWwge1xuICBjb25zdHJ1Y3RvcihkYXRhPzogYW55KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9saW5rcyA9IGRhdGE/Ll9saW5rcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9ua2V5RWN4Q29tbW9uc1NlcnZpY2Uge1xuICBwcml2YXRlIGZsYWdWYWxpZGF0b3IgPSB0cnVlO1xuXG4gIF9fZGF0YSQ6IE9ic2VydmFibGU8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIF9fcGFnaW5hdGlvbiQ6IE9ic2VydmFibGU8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIF9fY29udHJvbCQ6IE9ic2VydmFibGU8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIF9fZGF0YTogYW55IHwgYW55W107XG5cbiAgX19zYXZlZFN0YXRlOiBNb25rZXlFY3hTYXZlZFN0YXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgX19wYXJhbXM6IGFueSB8IGFueVtdO1xuXG4gIF9fZXJyb3I6IE1vbmtleUVjeEVycm9yUmVzcG9uc2UgfCBudWxsID0gbnVsbDtcblxuICBfX2hhbmRsZWRFcnJvcjogTW9ua2V5RWN4SGFuZGxlZEVycm9yUmVzcG9uc2UgfCBudWxsID0gbnVsbDtcblxuICBfX3BhZ2U6IE1vbmtleUVjeFJlc3BvbnNlUGFnZWQgfCBudWxsID0gbnVsbDtcblxuICBfX2xpbmtzOiBNb25rZXlFY3hSZXNwb25zZUxpbmtzIHwgbnVsbCA9IG51bGw7XG5cbiAgX19zZWFyY2g6IGFueTtcblxuICBfX3JlcXVlc3RQYWdlZDogTW9ua2V5RWN4UmVxdWVzdFBhZ2VkIHwgbnVsbCA9IG51bGw7XG5cbiAgX19vblNlYXJjaENoYW5nZWQkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG5cbiAgX19vbkRhdGFDaGFuZ2VkJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXG4gIF9fb25Mb2FkaW5nSW5Qcm9ncmVzcyQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgX19vblVwbG9hZEluUHJvZ3Jlc3MkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIF9fb25EYXRhRGVsZXRlZCQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcblxuICBfX29uRXJyb3JDaGFuZ2VkJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXG4gIF9fb25Hb3Zlcm5tZW50SWREYXRhQ2hhbmdlZCQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcblxuICBfX29uWmlwQ29kZURhdGFDaGFuZ2VkJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXG4gIF9fb25pMThuRGF0YUNoYW5nZWQkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG5cbiAgX19vbkRvU2VhcmNoJDogQmVoYXZpb3JTdWJqZWN0PE1vbmtleUVjeFJlcXVlc3RQYWdlZD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcblxuICBfX3Rva2VuQ3JlZGVudGlhbHM6IE1vbmtleUVjeFRva2VuQ3JlZGVudGlhbHMgfCBudWxsID0gbnVsbDtcblxuICBfX3NjaGVkdWxlOiBNb25rZXlFY3hSZXF1ZXN0U2NoZWR1bGUgfCBudWxsID0gbnVsbDtcblxuICBfX2kxOG46IGFueTtcblxuICBfX2NhbGxiYWNrUGFnaW5hdGlvbjogRnVuY3Rpb24gPSAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcignTWV0aG9kIGNhbGxiYWNrUGFnaW5hdGlvbiBuZWVkcyB0byBiZSBkZWNsYXJlZCcpO1xuICB9O1xuXG4gIF9fcGFnaW5hdGlvbk9wdGlvbnM6IHtcbiAgICBzZXJ2aWNlOiBNb25rZXlFY3hQYWdpbmF0aW9uU2VydmljZTtcbiAgICBjYWxsYmFjazogRnVuY3Rpb247XG4gICAgbmFtZT86IHN0cmluZztcbiAgfSB8IHVuZGVmaW5lZDtcblxuICBfX2lzQWJsZVRvRG9QYWdpbmF0aW9uID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1vbmtleWVjeFNlcnZpY2U/OiBNb25rZXlFY3hTZXJ2aWNlLFxuICAgIHB1YmxpYyB0b2tlblN0b3JhZ2U/OiBNb25rZXlFY3hUb2tlblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBvdGhlckFyZ3M/OiB7XG4gICAgICByb3V0ZXI/OiBSb3V0ZXI7XG4gICAgICBzY2hlZHVsZT86IHtcbiAgICAgICAgc2VydmljZTogTW9ua2V5RWN4UmVxdWVzdFNjaGVkdWxlU2VydmljZTtcbiAgICAgICAgb3B0aW9ucz86IHtcbiAgICAgICAgICBjbGVhck9uQ2hhbmdlUm91dGU/OiBib29sZWFuO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHF1ZXVlPzoge1xuICAgICAgICBzZXJ2aWNlOiBNb25rZXlFY3hSZXF1ZXN0UXVldWVIYW5kbGluZ1NlcnZpY2U7XG4gICAgICB9O1xuICAgIH1cbiAgKSB7XG4gICAgdGhpcy5oYW5kbGVJbml0KCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUluaXQoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5TdG9yYWdlKSB7XG4gICAgICB0aGlzLl9fdG9rZW5DcmVkZW50aWFscyA9IHRoaXMudG9rZW5TdG9yYWdlLmdldFRva2VuKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3RoZXJBcmdzPy5yb3V0ZXIpIHtcbiAgICAgIGNvbnN0IHsgY2xlYXJPbkNoYW5nZVJvdXRlIH0gPSB0aGlzLm90aGVyQXJncz8uc2NoZWR1bGU/Lm9wdGlvbnMgfHwge1xuICAgICAgICBjbGVhck9uQ2hhbmdlUm91dGU6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdGhpcy5vdGhlckFyZ3Mucm91dGVyLmV2ZW50c1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlKDEpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX19zY2hlZHVsZSAmJiBjbGVhck9uQ2hhbmdlUm91dGUpIHtcbiAgICAgICAgICAgIHRoaXMub3RoZXJBcmdzPy5zY2hlZHVsZT8uc2VydmljZT8ucmVtb3ZlU2NoZWR1bGUodGhpcy5fX3NjaGVkdWxlKTtcbiAgICAgICAgICAgIHRoaXMuX19zY2hlZHVsZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlVG9QZW5kZW5jeVBhZ2UoYXJnOiBNb25rZXlFY3hDb21wYW55UGVuZGVuY2llc1ZhbGlkYXRlZCwgcm91dGVyPzogUm91dGVyKSB7XG4gICAgY29uc3QgeyBjb21wYW55VHlwZSB9ID0gdGhpcy5fX3Rva2VuQ3JlZGVudGlhbHMgfHwge1xuICAgICAgY29tcGFueVR5cGU6ICcnXG4gICAgfTtcbiAgICBsZXQgcm91dGUgPSAnL2FwcCc7XG5cbiAgICBpZiAoY29tcGFueVR5cGUpIHtcbiAgICAgIHJvdXRlID0gYCR7cm91dGV9LyR7Y29tcGFueVR5cGV9L3BhZ2VzYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcm91dGUgPSBgJHtyb3V0ZX0vdXNlci9wcm9maWxlL3BhZ2VzYDtcbiAgICB9XG5cbiAgICBpZiAoIXJvdXRlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1JvdXRlciBtdXN0IGJlIGRlY2xhcmVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdXRlci5uYXZpZ2F0ZShbYCR7cm91dGV9L2NvbXBhbnktcGVuZGVuY3lgLnRvTG93ZXJDYXNlKCldLCB7XG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgcGVuZGVuY3lEYXRhOiBhcmdcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb2xlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBfX3Rva2VuQ3JlZGVudGlhbHMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIV9fdG9rZW5DcmVkZW50aWFscykgcmV0dXJuICcnO1xuXG4gICAgaWYgKF9fdG9rZW5DcmVkZW50aWFscz8ucHJvZ3JhbUFkbWluID09PSAndHJ1ZScpIHtcbiAgICAgIHJldHVybiAnUFJPR1JBTV9BRE1JTic7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9fdG9rZW5DcmVkZW50aWFscz8ucm9sZSB8fCAnJztcbiAgfVxuXG4gIHByaXZhdGUgYWxsb3dlZFNlY3VyaXR5QWNjZXNzQnlQZW5kZW5jeShhcmdzOiBhbnkpOiBNb25rZXlFY3hDb21wYW55UGVuZGVuY2llc1ZhbGlkYXRlZCB7XG4gICAgaWYgKCFhcmdzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoYXNQZW5kZW5jaWVzOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgeyBzZXJ2aWNlLCB0eXBlIH0gPSBhcmdzO1xuICAgIHJldHVybiBzZXJ2aWNlLmhhc1BlbmRlbmNpZXModHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGFsbG93ZWRTZWN1cml0eUFjY2Vzc0J5RmVhdHVyZShhcmdzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWFyZ3MpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB7IGNvbmZpZywgZmVhdHVyZSB9ID0gYXJncztcbiAgICB0cnkge1xuICAgICAgaWYgKCFNb25rZXlFY3hVdGlscy5wZXJzaXN0TnVsbEVtcHR5VW5kZWZpbmVkKGZlYXR1cmUpIHx8XG4gICAgICAgICFNb25rZXlFY3hVdGlscy5wZXJzaXN0TnVsbEVtcHR5VW5kZWZpbmVkKGNvbmZpZz8ucHJvZ3JhbT8uc2V0dGluZ3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFjb25maWc/LnByb2dyYW0/LnNldHRpbmdzPy5bZmVhdHVyZV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbm90IHRvIGRvXG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhbGxvd2VkU2VjdXJpdHlBY2Nlc3NCeUNvdW50cnkoYXJnPzogTW9ua2V5RWN4Q291bnRyeVNlY3VyaXR5KTogYm9vbGVhbiB7XG4gICAgaWYgKCFhcmcpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBhcmcuY291bnRyeSA9PT0gYXJnLmVudkNvdW50cnk7XG4gIH1cblxuICBwcml2YXRlIGFsbG93ZWRTZWN1cml0eUFjY2VzcyhhcmdzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWFyZ3MpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IHJvbGVzID0gYXJncz8ucm9sZXM7XG4gICAgY29uc3QgYnlFeGNsdXNpb24gPSBhcmdzPy5ieUV4Y2x1c2lvbjtcbiAgICBjb25zdCBmb3VuZCA9IHJvbGVzPy5pbmRleE9mKHRoaXMuZ2V0Um9sZSgpKTtcbiAgICBsZXQgcmV0ID0gZmFsc2U7XG4gICAgaWYgKGJ5RXhjbHVzaW9uKSB7XG4gICAgICByZXQgPSB0cnVlO1xuICAgICAgaWYgKGZvdW5kID4gLTEpIHtcbiAgICAgICAgcmV0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldCA9IGZhbHNlO1xuICAgICAgaWYgKGZvdW5kID4gLTEpIHtcbiAgICAgICAgcmV0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFyb2xlcyB8fCByb2xlcy5sZW5ndGggPT09IDAgfHwgdGhpcy5nZXRSb2xlKCkgPT09ICdQUk9HUkFNX0FETUlOJykge1xuICAgICAgcmV0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHByaXZhdGUgbmF2aWdhdGVUb0Vycm9yUGFnZShzdGF0dXNDb2RlOiBudW1iZXIsIHJvdXRlcj86IFJvdXRlcikge1xuICAgIGNvbnN0IHJvdXRlczogYW55ID0ge1xuICAgICAgNDAzOiAnZm9yYmlkZGVuJyxcbiAgICAgIDQwNDogJ25vdC1mb3VuZCcsXG4gICAgICA1MDA6ICdzZXJ2aWNlLXByb2JsZW1zJyxcbiAgICAgIDUwMzogJ3NlcnZpY2UtcHJvYmxlbXMnXG4gICAgfTtcblxuICAgIGlmICghcm91dGVyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdSb3V0ZXIgbXVzdCBiZSBkZWNsYXJlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByb3V0ZXI/Lm5hdmlnYXRlKFtgL2FwcC9wYWdlcy8ke3JvdXRlc1tzdGF0dXNDb2RlXX1gLnRvTG93ZXJDYXNlKCldKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhZ2luYXRpb25PcHRpb25zKCkge1xuICAgIGNvbnN0IHsgX19wYWdpbmF0aW9uT3B0aW9ucyB9ID0gdGhpcztcbiAgICBpZiAoX19wYWdpbmF0aW9uT3B0aW9ucykge1xuICAgICAgY29uc3QgeyBzZXJ2aWNlLCBjYWxsYmFjaywgbmFtZSB9ID0gX19wYWdpbmF0aW9uT3B0aW9ucztcbiAgICAgIHNlcnZpY2U/LnNldENhbGxiYWNrKCh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5kb1BhZ2luYXRpb252Mih0eXBlLCBjYWxsYmFjayk7XG4gICAgICB9LCBuYW1lIHx8ICdtYWluJyk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGFnZShyZXF1ZXN0UGFnZWQ6IE1vbmtleUVjeFJlcXVlc3RQYWdlZCkge1xuICAgIHRoaXMuX19yZXF1ZXN0UGFnZWQgPSB7XG4gICAgICAuLi50aGlzLl9fcmVxdWVzdFBhZ2VkLFxuICAgICAgLi4ucmVxdWVzdFBhZ2VkXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG5leHRQYWdlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9fbGlua3MpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuX19saW5rcz8ubmV4dDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9fcmVxdWVzdFBhZ2VkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgeyBwYWdlIH0gPSB0aGlzLl9fcmVxdWVzdFBhZ2VkIGFzIGFueTtcbiAgICBjb25zdCB7IG51bWJlciwgdG90YWxQYWdlcyB9ID0gcGFnZTtcbiAgICBpZiAobnVtYmVyIDwgdG90YWxQYWdlcykge1xuICAgICAgdGhpcy5fX3JlcXVlc3RQYWdlZCA9IHtcbiAgICAgICAgLi4udGhpcy5fX3JlcXVlc3RQYWdlZCxcbiAgICAgICAgcGFnZToge1xuICAgICAgICAgIC4uLnBhZ2UsXG4gICAgICAgICAgbnVtYmVyOiBudW1iZXIgKyAxXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0RW1iZWRkZWREYXRhKGRhdGE6IGFueSwgZmllbGQ6IHN0cmluZyk6IGFueVtdIHwgYW55IHtcbiAgICBjb25zdCB7IF9lbWJlZGRlZCB9ID0gZGF0YTtcbiAgICByZXR1cm4gX2VtYmVkZGVkID8gX2VtYmVkZGVkW2ZpZWxkXSA6IG51bGw7XG4gIH1cblxuICBnZXROb3JtYWxpemVkVXJsKHVybDogc3RyaW5nLCBzYW1lUGFnZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IF9fcmVxdWVzdFBhZ2VkLCBfX2xpbmtzIH0gPSB0aGlzO1xuICAgIHJldHVybiBuZXcgTW9ua2V5RWN4UmVxdWVzdFBhZ2VkSGFuZGxpbmcoXG4gICAgICB1cmwsXG4gICAgICBfX3JlcXVlc3RQYWdlZCB8fCB7fSxcbiAgICAgIF9fbGlua3MsXG4gICAgICBzYW1lUGFnZVxuICAgICkuZ2V0UmVxdWVzdFdpdGhQYWdlZFBhcmFtcygpO1xuICB9XG5cbiAgY2xlYXIoY2xlYXJEYXRhOiBib29sZWFuKSB7XG4gICAgaWYgKGNsZWFyRGF0YSkge1xuICAgICAgdGhpcy5fX2RhdGEgPSBudWxsO1xuICAgICAgdGhpcy5fX3JlcXVlc3RQYWdlZCA9IG51bGw7XG4gICAgICB0aGlzLl9fcGFyYW1zID0gbnVsbDtcbiAgICAgIHRoaXMuX19wYWdlID0gbnVsbDtcbiAgICAgIHRoaXMuX19saW5rcyA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9fc2NoZWR1bGUpIHtcbiAgICAgICAgY29uc3QgeyBxdWV1ZSB9ID0gdGhpcy5fX3NjaGVkdWxlO1xuICAgICAgICBpZiAocXVldWUpIHtcbiAgICAgICAgICB0aGlzLm90aGVyQXJncz8ucXVldWU/LnNlcnZpY2U/LnJlbW92ZVF1ZXVlSXRlbShxdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdGhlckFyZ3M/LnNjaGVkdWxlPy5zZXJ2aWNlPy5yZW1vdmVTY2hlZHVsZSh0aGlzLl9fc2NoZWR1bGUpO1xuICAgICAgICB0aGlzLl9fc2NoZWR1bGUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9fZXJyb3IgPSBudWxsO1xuICAgIHRoaXMuX19oYW5kbGVkRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuZmxhZ1ZhbGlkYXRvciA9IGZhbHNlO1xuICB9XG5cbiAgcmVzb2x2ZShcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwsXG4gICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QgfCBudWxsLFxuICAgIG90aGVyQXJncz86IHtcbiAgICAgIGNhbGxiYWNrTWFpbjogRnVuY3Rpb247XG4gICAgICByb3V0ZXI/OiBSb3V0ZXI7XG4gICAgICBzZWN1cml0eT86IHtcbiAgICAgICAgcm9sZXM6IHN0cmluZ1tdO1xuICAgICAgICBieUV4Y2x1c2lvbj86IGJvb2xlYW47XG4gICAgICB9O1xuICAgICAgY2FsbGJhY2tQYWdpbmF0aW9uPzogRnVuY3Rpb247XG4gICAgICB0cmFuc2xhdGVPcHRpb25zPzogTW9ua2V5RWN4VHJhbnNsYXRlT3B0aW9ucztcbiAgICAgIGZlYXR1cmU/OiB7XG4gICAgICAgIHNlcnZpY2U6IE1vbmtleUVjeEZlYXR1cmVUb2dnbGVTZXJ2aWNlO1xuICAgICAgICBmbGFnOiBzdHJpbmc7XG4gICAgICB9O1xuICAgICAgZmVhdHVyZUJ5UHJvZ3JhbT86IHtcbiAgICAgICAgY29uZmlnOiBNb25rZXlFY3hDb25maWc7XG4gICAgICAgIGZlYXR1cmU6IHN0cmluZztcbiAgICAgIH07XG4gICAgICBjb3VudHJ5U2VjdXJpdHk/OiBNb25rZXlFY3hDb3VudHJ5U2VjdXJpdHk7XG4gICAgICBwZW5kZW5jeT86IHtcbiAgICAgICAgc2VydmljZToge1xuICAgICAgICAgIGhhc1BlbmRlbmNpZXM6IEZ1bmN0aW9uO1xuICAgICAgICB9O1xuICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICB9O1xuICAgICAgcGFnaW5hdGlvbk9wdGlvbnM/OiB7XG4gICAgICAgIHNlcnZpY2U6IE1vbmtleUVjeFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb24sXG4gICAgICAgIG5hbWU/OiBzdHJpbmdcbiAgICAgIH1cbiAgICB9XG4gICkge1xuICAgIGlmIChKU09OLnN0cmluZ2lmeShyb3V0ZT8ucXVlcnlQYXJhbXMpID09PSAne30nKSB7XG4gICAgICB0aGlzLl9fZGF0YSA9IG51bGw7XG4gICAgICB0aGlzLl9fcGFnZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fX3JlcXVlc3RQYWdlZCA9IG51bGw7XG4gICAgdGhpcy5mbGFnVmFsaWRhdG9yID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnRva2VuU3RvcmFnZSkge1xuICAgICAgdGhpcy5fX3Rva2VuQ3JlZGVudGlhbHMgPSB0aGlzLnRva2VuU3RvcmFnZS5nZXRUb2tlbigpO1xuICAgIH1cblxuICAgIGNvbnN0IHBlbmQgPSB0aGlzLmFsbG93ZWRTZWN1cml0eUFjY2Vzc0J5UGVuZGVuY3kob3RoZXJBcmdzPy5wZW5kZW5jeSk7XG4gICAgY29uc3QgYWxsb3dlZEJ5UHJvZ3JhbSA9IHRoaXMuYWxsb3dlZFNlY3VyaXR5QWNjZXNzQnlGZWF0dXJlKG90aGVyQXJncz8uZmVhdHVyZUJ5UHJvZ3JhbSk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmFsbG93ZWRTZWN1cml0eUFjY2VzcyhvdGhlckFyZ3M/LnNlY3VyaXR5KSAmJlxuICAgICAgdGhpcy5hbGxvd2VkU2VjdXJpdHlBY2Nlc3NCeUNvdW50cnkob3RoZXJBcmdzPy5jb3VudHJ5U2VjdXJpdHkpICYmXG4gICAgICAhcGVuZC5oYXNQZW5kZW5jaWVzICYmXG4gICAgICBhbGxvd2VkQnlQcm9ncmFtXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5fX3NjaGVkdWxlKSB7XG4gICAgICAgIHRoaXMub3RoZXJBcmdzPy5zY2hlZHVsZT8uc2VydmljZT8ucmVtb3ZlU2NoZWR1bGUodGhpcy5fX3NjaGVkdWxlKTtcbiAgICAgICAgdGhpcy5fX3NjaGVkdWxlID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBfX3JlcXVlc3RQYWdlZCB9ID0gdGhpcztcbiAgICAgIGlmICghX19yZXF1ZXN0UGFnZWQpIHtcbiAgICAgICAgdGhpcy5zZXRQYWdlKHtcbiAgICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgICBudW1iZXI6IDAsXG4gICAgICAgICAgICBzaXplOiAxMFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvdGhlckFyZ3M/LnRyYW5zbGF0ZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBzZXJ2aWNlLCBrZXlzIH0gPSBvdGhlckFyZ3M/LnRyYW5zbGF0ZU9wdGlvbnM7XG4gICAgICAgIHRoaXMuZ2V0aTE4bihzZXJ2aWNlLCBrZXlzIHx8ICcnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG90aGVyQXJncz8uY2FsbGJhY2tQYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuX19jYWxsYmFja1BhZ2luYXRpb24gPSBvdGhlckFyZ3MuY2FsbGJhY2tQYWdpbmF0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAob3RoZXJBcmdzPy5wYWdpbmF0aW9uT3B0aW9ucykge1xuICAgICAgICB0aGlzLl9fcGFnaW5hdGlvbk9wdGlvbnMgPSBvdGhlckFyZ3M/LnBhZ2luYXRpb25PcHRpb25zO1xuICAgICAgICB0aGlzLmhhbmRsZVBhZ2luYXRpb25PcHRpb25zKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvdGhlckFyZ3M/LmZlYXR1cmUpIHtcbiAgICAgICAgY29uc3QgeyBmbGFnLCBzZXJ2aWNlIH0gPSBvdGhlckFyZ3MuZmVhdHVyZTtcblxuICAgICAgICBzZXJ2aWNlLm9uRmxhZ3NcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VXaGlsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmZsYWdWYWxpZGF0b3I7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCh2YWw6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgY29uc3QgaGFzRmxhZyA9IHNlcnZpY2UuZ2V0RmxhZyhmbGFnKTtcblxuICAgICAgICAgICAgICBpZiAoTW9ua2V5RWN4VXRpbHMucGVyc2lzdE51bGxFbXB0eVVuZGVmaW5lZChoYXNGbGFnKSkge1xuICAgICAgICAgICAgICAgIGlmICghaGFzRmxhZykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvRXJyb3JQYWdlKDQwNCwgb3RoZXJBcmdzPy5yb3V0ZXIpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdGhlckFyZ3M/LmNhbGxiYWNrTWFpbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3RoZXJBcmdzPy5jYWxsYmFja01haW4oKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFhbGxvd2VkQnlQcm9ncmFtKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9FcnJvclBhZ2UoNDA0LCBvdGhlckFyZ3M/LnJvdXRlcik7XG4gICAgfSBlbHNlIGlmIChwZW5kLmhhc1BlbmRlbmNpZXMpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUb1BlbmRlbmN5UGFnZShwZW5kLCBvdGhlckFyZ3M/LnJvdXRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUb0Vycm9yUGFnZSg0MDMsIG90aGVyQXJncz8ucm91dGVyKTtcbiAgICB9XG4gIH1cblxuICBnZXRIVFRQSGVhZGVyQXBwbGljYXRpb25QREYoKTogT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgfTtcbiAgfVxuXG4gIEBNb25rZXlFY3hDb3JlU2VydmljZSh7XG4gICAgcmVxdWVzdEluUHJvZ3Jlc3M6IHtcbiAgICAgIHNob3dQcm9ncmVzczogdHJ1ZVxuICAgIH1cbiAgfSlcbiAgZ2VuZXJpY01ldGhvZChsaW5rOiBhbnksIGRhdGE/OiBhbnksIGNhbGxiYWNrPzogRnVuY3Rpb24pIHtcbiAgICBjb25zdCB7IGhyZWYsIHR5cGUgPSAnZ2V0JyB9ID0gbGluaztcblxuICAgIHRoaXMubW9ua2V5ZWN4U2VydmljZT8uW3R5cGUudG9Mb3dlckNhc2UoKV0oYCR7aHJlZn1gLCBkYXRhKT8uc3Vic2NyaWJlKFxuICAgICAgKHJlc3A6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKHJlc3ApO1xuICAgICAgfSxcbiAgICAgIChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICAgICAgdGhyb3dFcnJvcihlcnIpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBATW9ua2V5RWN4Q29yZVNlcnZpY2Uoe1xuICAgIHJlcXVlc3RJblByb2dyZXNzOiB7XG4gICAgICBzaG93UHJvZ3Jlc3M6IHRydWVcbiAgICB9XG4gIH0pXG4gIGFzeW5jIGdldEdlbmVyaWNEYXRhKGRhdGE6IGFueSwgYWN0aW9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCB7IG1vbmtleWVjeFNlcnZpY2UgfSA9IHRoaXM7XG4gICAgaWYgKCFtb25rZXllY3hTZXJ2aWNlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB7IGhyZWYsIHR5cGUgfSA9IG5ldyBMaW5rc01vZGVsKGRhdGEpPy5nZXRBY3Rpb24oYWN0aW9uKSB8fCB7XG4gICAgICBocmVmOiAnJywgdHlwZTogJ2dldCdcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1vbmtleWVjeFNlcnZpY2VbdHlwZS50b0xvd2VyQ2FzZSgpXTxhbnk+KGhyZWYpXG4gICAgICAucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGdldGkxOG4odHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSwga2V5czogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0cmFuc2xhdGVTZXJ2aWNlLm9uRGVmYXVsdExhbmdDaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX19pMThuID0gdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGtleXMpO1xuICAgICAgdGhpcy5fX29uaTE4bkRhdGFDaGFuZ2VkJC5uZXh0KG51bGwpO1xuICAgIH0pO1xuICAgIHRyYW5zbGF0ZVNlcnZpY2UuZ2V0U3RyZWFtT25UcmFuc2xhdGlvbkNoYW5nZShrZXlzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fX2kxOG4gPSB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoa2V5cyk7XG4gICAgICB0aGlzLl9fb25pMThuRGF0YUNoYW5nZWQkLm5leHQobnVsbCk7XG4gICAgfSk7XG4gIH1cblxuICBkb1BhZ2luYXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9fb25Mb2FkaW5nSW5Qcm9ncmVzcyQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGhhc01vcmVQYWdlcyA9IHRoaXMuc2V0UGFnZSh7XG4gICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICAuLi50aGlzLl9fcGFnZVxuICAgICAgICB9XG4gICAgICB9KS5uZXh0UGFnZSgpO1xuXG4gICAgICBpZiAoaGFzTW9yZVBhZ2VzICYmIHRoaXMuX19jYWxsYmFja1BhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5fX2NhbGxiYWNrUGFnaW5hdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRvUGFnaW5hdGlvbnYyKHR5cGU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgaWYgKCF0aGlzLl9fb25Mb2FkaW5nSW5Qcm9ncmVzcyQudmFsdWUpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayh0eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRMaW5rcyhsaW5rczogYW55KSB7XG4gICAgdGhpcy5fX2lzQWJsZVRvRG9QYWdpbmF0aW9uID0ge1xuICAgICAgZmlyc3Q6ICEhbGlua3M/LmZpcnN0LFxuICAgICAgbmV4dDogISFsaW5rcz8ubmV4dFxuICAgIH07XG4gICAgdGhpcy5fX2xpbmtzID0gbGlua3M7XG4gIH1cblxuICBzZXRTZWFyY2hCeVVybChyb3V0ZXI6IFJvdXRlciwgdXJsOiBzdHJpbmcsIHNlYXJjaDogYW55LCBleHRyYXM/OiBhbnkpIHtcbiAgICB0aGlzLl9fZGF0YSA9IG51bGw7XG4gICAgdGhpcy5fX3BhZ2UgPSBudWxsO1xuICAgIHRoaXMuX19vbkRhdGFDaGFuZ2VkJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX19vbkxvYWRpbmdJblByb2dyZXNzJC5uZXh0KGZhbHNlKTtcblxuICAgIHJvdXRlci5uYXZpZ2F0ZShbdXJsXSwge1xuICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgLi4uc2VhcmNoLFxuICAgICAgICByOiBNb25rZXlFY3hVdGlscy5nZXRSYW5kb21TdHJpbmcoMzApXG4gICAgICB9LFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIC4uLmV4dHJhc1xuICAgIH0pO1xuICB9XG5cbiAgc2F2ZVN0YXRlKHN0YXRlOiBNb25rZXlFY3hTYXZlZFN0YXRlKSB7XG4gICAgdGhpcy5fX3NhdmVkU3RhdGUgPSB7XG4gICAgICBwYWdlOiB0aGlzLl9fcGFnZSxcbiAgICAgIC4uLnN0YXRlXG4gICAgfTtcbiAgfVxufVxuIl19
|