cmat 0.0.17 → 0.0.19
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/components/carousel/carousel.component.d.ts +136 -0
- package/components/carousel/carousel.interface.d.ts +38 -0
- package/components/carousel/index.d.ts +5 -0
- package/components/carousel/public-api.d.ts +2 -0
- package/components/custom-formly/public-api.d.ts +2 -0
- package/components/custom-formly/types/knob/knob.component.d.ts +36 -0
- package/components/custom-formly/types/select-table/select-table.component.d.ts +40 -0
- package/components/custom-formly/types/table/table.component.d.ts +3 -8
- package/components/custom-formly/wrappers/form-field/form-field.component.d.ts +4 -4
- package/components/image-viewer/image-viewer.component.d.ts +76 -0
- package/components/image-viewer/index.d.ts +5 -0
- package/components/image-viewer/public-api.d.ts +1 -0
- package/components/knob-input/index.d.ts +5 -0
- package/components/knob-input/knob-input.component.d.ts +95 -0
- package/components/knob-input/public-api.d.ts +1 -0
- package/components/material-datetimepicker/datetimepicker-input.d.ts +2 -2
- package/components/opt-input/index.d.ts +5 -0
- package/components/opt-input/models/config.d.ts +14 -0
- package/components/opt-input/otp-input.component.d.ts +70 -0
- package/components/opt-input/public-api.d.ts +1 -0
- package/components/opt-input/utils/keyboard-util.d.ts +9 -0
- package/components/opt-input/utils/object-util.d.ts +3 -0
- package/components/org-chart/designer/chart-designer.component.d.ts +17 -0
- package/components/org-chart/index.d.ts +5 -0
- package/components/org-chart/node/chart-node.component.d.ts +17 -0
- package/components/org-chart/node/node.type.d.ts +22 -0
- package/components/org-chart/org-chart.component.d.ts +12 -0
- package/components/org-chart/public-api.d.ts +2 -0
- package/components/popover/popover.interfaces.d.ts +1 -1
- package/components/select-table/index.d.ts +5 -0
- package/components/select-table/public-api.d.ts +2 -0
- package/components/select-table/select-table.component.d.ts +96 -0
- package/components/select-table/select-table.type.d.ts +20 -0
- package/components/select-tree/select-tree.component.d.ts +11 -12
- package/components/speed-dial/index.d.ts +5 -0
- package/components/speed-dial/public-api.d.ts +2 -0
- package/components/speed-dial/speed-dial.component.d.ts +63 -0
- package/components/transfer-picker/interface.d.ts +0 -1
- package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.d.ts +8 -6
- package/components/treetable/index.d.ts +5 -0
- package/components/treetable/public-api.d.ts +2 -0
- package/components/treetable/treetable.component.d.ts +32 -0
- package/components/treetable/treetable.interface.d.ts +9 -0
- package/directives/animate-on-scroll/animate-on-scroll.directive.d.ts +4 -4
- package/directives/arrow-cursor/arrow-cursor.directive.d.ts +31 -0
- package/directives/arrow-cursor/index.d.ts +5 -0
- package/directives/arrow-cursor/public-api.d.ts +1 -0
- package/directives/data-exporter/constants.d.ts +26 -0
- package/directives/data-exporter/data-exporter.directive.d.ts +18 -0
- package/directives/data-exporter/index.d.ts +5 -0
- package/directives/data-exporter/mime.d.ts +5 -0
- package/directives/data-exporter/options.d.ts +21 -0
- package/directives/data-exporter/public-api.d.ts +2 -0
- package/directives/data-exporter/services/exporters/csv-exporter.service.d.ts +12 -0
- package/directives/data-exporter/services/exporters/exporter.d.ts +4 -0
- package/directives/data-exporter/services/exporters/file-exporter.d.ts +8 -0
- package/directives/data-exporter/services/exporters/json-exporter.service.d.ts +11 -0
- package/directives/data-exporter/services/exporters/txt-exporter.service.d.ts +12 -0
- package/directives/data-exporter/services/exporters/worksheet-exporter.d.ts +10 -0
- package/directives/data-exporter/services/exporters/xls-exporter.service.d.ts +14 -0
- package/directives/data-exporter/services/exporters/xlsx-exporter.service.d.ts +9 -0
- package/directives/data-exporter/services/file-util.d.ts +8 -0
- package/directives/data-exporter/services/service-locator.service.d.ts +11 -0
- package/directives/debounce/abstract-debounce.directive.d.ts +1 -1
- package/fesm2022/cmat-animations.mjs.map +1 -1
- package/fesm2022/cmat-components-adapter.mjs +9 -9
- package/fesm2022/cmat-components-adapter.mjs.map +1 -1
- package/fesm2022/cmat-components-breadcrumb.mjs +10 -10
- package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/cmat-components-card.mjs +4 -4
- package/fesm2022/cmat-components-card.mjs.map +1 -1
- package/fesm2022/cmat-components-carousel.mjs +711 -0
- package/fesm2022/cmat-components-carousel.mjs.map +1 -0
- package/fesm2022/cmat-components-cascade.mjs +12 -12
- package/fesm2022/cmat-components-cascade.mjs.map +1 -1
- package/fesm2022/cmat-components-chip-input.mjs +5 -5
- package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
- package/fesm2022/cmat-components-custom-formly.mjs +225 -155
- package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
- package/fesm2022/cmat-components-date-range.mjs +5 -5
- package/fesm2022/cmat-components-date-range.mjs.map +1 -1
- package/fesm2022/cmat-components-drawer.mjs +6 -6
- package/fesm2022/cmat-components-drawer.mjs.map +1 -1
- package/fesm2022/cmat-components-fullscreen.mjs +4 -4
- package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
- package/fesm2022/cmat-components-highlight.mjs +7 -7
- package/fesm2022/cmat-components-highlight.mjs.map +1 -1
- package/fesm2022/cmat-components-image-viewer.mjs +227 -0
- package/fesm2022/cmat-components-image-viewer.mjs.map +1 -0
- package/fesm2022/cmat-components-json-editor.mjs +4 -4
- package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
- package/fesm2022/cmat-components-knob-input.mjs +404 -0
- package/fesm2022/cmat-components-knob-input.mjs.map +1 -0
- package/fesm2022/cmat-components-masonry.mjs +4 -4
- package/fesm2022/cmat-components-masonry.mjs.map +1 -1
- package/fesm2022/cmat-components-material-color-picker.mjs +4 -4
- package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-material-datetimepicker.mjs +53 -53
- package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
- package/fesm2022/cmat-components-navigation.mjs +51 -51
- package/fesm2022/cmat-components-navigation.mjs.map +1 -1
- package/fesm2022/cmat-components-opt-input.mjs +457 -0
- package/fesm2022/cmat-components-opt-input.mjs.map +1 -0
- package/fesm2022/cmat-components-org-chart.mjs +141 -0
- package/fesm2022/cmat-components-org-chart.mjs.map +1 -0
- package/fesm2022/cmat-components-pagination.mjs +13 -13
- package/fesm2022/cmat-components-pagination.mjs.map +1 -1
- package/fesm2022/cmat-components-password-strength.mjs +12 -12
- package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
- package/fesm2022/cmat-components-popover.mjs +10 -10
- package/fesm2022/cmat-components-popover.mjs.map +1 -1
- package/fesm2022/cmat-components-progress-bar.mjs +4 -4
- package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
- package/fesm2022/cmat-components-rating.mjs +4 -4
- package/fesm2022/cmat-components-rating.mjs.map +1 -1
- package/fesm2022/cmat-components-select-search.mjs +11 -11
- package/fesm2022/cmat-components-select-search.mjs.map +1 -1
- package/fesm2022/cmat-components-select-table.mjs +658 -0
- package/fesm2022/cmat-components-select-table.mjs.map +1 -0
- package/fesm2022/cmat-components-select-tree.mjs +75 -57
- package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
- package/fesm2022/cmat-components-speed-dial.mjs +312 -0
- package/fesm2022/cmat-components-speed-dial.mjs.map +1 -0
- package/fesm2022/cmat-components-timeline.mjs +14 -14
- package/fesm2022/cmat-components-timeline.mjs.map +1 -1
- package/fesm2022/cmat-components-toast.mjs +11 -11
- package/fesm2022/cmat-components-toast.mjs.map +1 -1
- package/fesm2022/cmat-components-transfer-picker.mjs +60 -41
- package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-treetable.mjs +122 -0
- package/fesm2022/cmat-components-treetable.mjs.map +1 -0
- package/fesm2022/cmat-components-upload.mjs +11 -11
- package/fesm2022/cmat-components-upload.mjs.map +1 -1
- package/fesm2022/cmat-directives-animate-on-scroll.mjs +21 -21
- package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -1
- package/fesm2022/cmat-directives-arrow-cursor.mjs +184 -0
- package/fesm2022/cmat-directives-arrow-cursor.mjs.map +1 -0
- package/fesm2022/cmat-directives-autofocus.mjs +3 -3
- package/fesm2022/cmat-directives-autofocus.mjs.map +1 -1
- package/fesm2022/cmat-directives-data-exporter.mjs +324 -0
- package/fesm2022/cmat-directives-data-exporter.mjs.map +1 -0
- package/fesm2022/cmat-directives-debounce.mjs +9 -9
- package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
- package/fesm2022/cmat-directives-digit-only.mjs +8 -6
- package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
- package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
- package/fesm2022/cmat-directives-equal-validator.mjs.map +1 -1
- package/fesm2022/cmat-lib-mock-api.mjs +6 -6
- package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
- package/fesm2022/cmat-pipes-bytes.mjs +3 -3
- package/fesm2022/cmat-pipes-bytes.mjs.map +1 -1
- package/fesm2022/cmat-pipes-date-format.mjs +3 -3
- package/fesm2022/cmat-pipes-date-format.mjs.map +1 -1
- package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
- package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -1
- package/fesm2022/cmat-pipes-group-by.mjs +3 -3
- package/fesm2022/cmat-pipes-group-by.mjs.map +1 -1
- package/fesm2022/cmat-pipes-keys.mjs +3 -3
- package/fesm2022/cmat-pipes-keys.mjs.map +1 -1
- package/fesm2022/cmat-pipes-secure.mjs +3 -3
- package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
- package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
- package/fesm2022/cmat-pipes-uppercase.mjs.map +1 -1
- package/fesm2022/cmat-services-alert.mjs +3 -3
- package/fesm2022/cmat-services-alert.mjs.map +1 -1
- package/fesm2022/cmat-services-config.mjs +6 -6
- package/fesm2022/cmat-services-config.mjs.map +1 -1
- package/fesm2022/cmat-services-confirmation.mjs +7 -7
- package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
- package/fesm2022/cmat-services-data.mjs +3 -3
- package/fesm2022/cmat-services-data.mjs.map +1 -1
- package/fesm2022/cmat-services-export-as.mjs +211 -0
- package/fesm2022/cmat-services-export-as.mjs.map +1 -0
- package/fesm2022/cmat-services-loading.mjs +6 -6
- package/fesm2022/cmat-services-loading.mjs.map +1 -1
- package/fesm2022/cmat-services-local-storage.mjs +3 -3
- package/fesm2022/cmat-services-local-storage.mjs.map +1 -1
- package/fesm2022/cmat-services-media-watcher.mjs +3 -3
- package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
- package/fesm2022/cmat-services-platform.mjs +3 -3
- package/fesm2022/cmat-services-platform.mjs.map +1 -1
- package/fesm2022/cmat-services-splash-screen.mjs +3 -3
- package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
- package/fesm2022/cmat-services-title.mjs +3 -3
- package/fesm2022/cmat-services-title.mjs.map +1 -1
- package/fesm2022/cmat-services-translation.mjs +3 -3
- package/fesm2022/cmat-services-translation.mjs.map +1 -1
- package/fesm2022/cmat-services-utils.mjs +3 -3
- package/fesm2022/cmat-services-utils.mjs.map +1 -1
- package/fesm2022/cmat-validators.mjs.map +1 -1
- package/fesm2022/cmat-version.mjs.map +1 -1
- package/icons/arrow-cursor.svg +1 -1
- package/package.json +78 -144
- package/services/export-as/export-as-config.model.d.ts +8 -0
- package/services/export-as/export-as.service.d.ts +43 -0
- package/services/export-as/index.d.ts +5 -0
- package/services/export-as/public-api.d.ts +2 -0
- package/styles/overrides/angular-material.scss +95 -13
- package/esm2022/animations/cmat-animations.mjs +0 -5
- package/esm2022/animations/defaults.mjs +0 -12
- package/esm2022/animations/dropdown.mjs +0 -26
- package/esm2022/animations/expand-collapse.mjs +0 -17
- package/esm2022/animations/fade.mjs +0 -170
- package/esm2022/animations/public-api.mjs +0 -19
- package/esm2022/animations/shake.mjs +0 -59
- package/esm2022/animations/slide.mjs +0 -124
- package/esm2022/animations/transform.mjs +0 -16
- package/esm2022/animations/zoom.mjs +0 -38
- package/esm2022/cmat.mjs +0 -5
- package/esm2022/components/adapter/cmat-components-adapter.mjs +0 -5
- package/esm2022/components/adapter/datetime-adapter.mjs +0 -127
- package/esm2022/components/adapter/datetime-formats.mjs +0 -3
- package/esm2022/components/adapter/dayjs-date-adapter.mjs +0 -198
- package/esm2022/components/adapter/dayjs-date-formats.mjs +0 -12
- package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +0 -100
- package/esm2022/components/adapter/dayjs-datetime-formats.mjs +0 -21
- package/esm2022/components/adapter/native-datetime-adapter.mjs +0 -130
- package/esm2022/components/adapter/native-datetime-formats.mjs +0 -15
- package/esm2022/components/adapter/public-api.mjs +0 -9
- package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +0 -19
- package/esm2022/components/breadcrumb/breadcrumb.component.mjs +0 -94
- package/esm2022/components/breadcrumb/breadcrumb.service.mjs +0 -333
- package/esm2022/components/breadcrumb/cmat-components-breadcrumb.mjs +0 -5
- package/esm2022/components/breadcrumb/public-api.mjs +0 -6
- package/esm2022/components/breadcrumb/types/breadcrumb.config.mjs +0 -2
- package/esm2022/components/breadcrumb/types/breadcrumb.mjs +0 -2
- package/esm2022/components/card/card.component.mjs +0 -49
- package/esm2022/components/card/card.types.mjs +0 -2
- package/esm2022/components/card/cmat-components-card.mjs +0 -5
- package/esm2022/components/card/public-api.mjs +0 -3
- package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +0 -49
- package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +0 -384
- package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +0 -22
- package/esm2022/components/cascade/cmat-components-cascade.mjs +0 -5
- package/esm2022/components/cascade/options.interface.mjs +0 -2
- package/esm2022/components/cascade/public-api.mjs +0 -4
- package/esm2022/components/chip-input/chip-input.component.mjs +0 -251
- package/esm2022/components/chip-input/cmat-components-chip-input.mjs +0 -5
- package/esm2022/components/chip-input/public-api.mjs +0 -2
- package/esm2022/components/custom-formly/cmat-components-custom-formly.mjs +0 -5
- package/esm2022/components/custom-formly/extension/addons.extension.mjs +0 -13
- package/esm2022/components/custom-formly/public-api.mjs +0 -29
- package/esm2022/components/custom-formly/types/button/button.component.mjs +0 -81
- package/esm2022/components/custom-formly/types/cascade/cascade.component.mjs +0 -71
- package/esm2022/components/custom-formly/types/checklist/checklist.component.mjs +0 -161
- package/esm2022/components/custom-formly/types/chips/chips.component.mjs +0 -55
- package/esm2022/components/custom-formly/types/color-picker/color-picker.component.mjs +0 -15
- package/esm2022/components/custom-formly/types/date-range/date-range.component.mjs +0 -25
- package/esm2022/components/custom-formly/types/datepicker/datepicker.component.mjs +0 -51
- package/esm2022/components/custom-formly/types/multicheckbox/multicheckbox.component.mjs +0 -88
- package/esm2022/components/custom-formly/types/number/number.component.mjs +0 -27
- package/esm2022/components/custom-formly/types/quill/quill.component.mjs +0 -171
- package/esm2022/components/custom-formly/types/radio/radio.component.mjs +0 -87
- package/esm2022/components/custom-formly/types/rating/rating.component.mjs +0 -27
- package/esm2022/components/custom-formly/types/repeat/repeat.component.mjs +0 -25
- package/esm2022/components/custom-formly/types/select/select.component.mjs +0 -167
- package/esm2022/components/custom-formly/types/select-tree/select-tree.component.mjs +0 -66
- package/esm2022/components/custom-formly/types/stepper/horizontal/stepper.component.mjs +0 -28
- package/esm2022/components/custom-formly/types/stepper/stepper.type.mjs +0 -2
- package/esm2022/components/custom-formly/types/stepper/vertical/stepper.component.mjs +0 -28
- package/esm2022/components/custom-formly/types/table/table.component.mjs +0 -127
- package/esm2022/components/custom-formly/types/tabs/tab.component.mjs +0 -16
- package/esm2022/components/custom-formly/types/tags/tags.component.mjs +0 -146
- package/esm2022/components/custom-formly/types/textarea/textarea.component.mjs +0 -25
- package/esm2022/components/custom-formly/types/upload/upload.component.mjs +0 -58
- package/esm2022/components/custom-formly/wrappers/addons/addons.component.mjs +0 -92
- package/esm2022/components/custom-formly/wrappers/card/card.component.mjs +0 -14
- package/esm2022/components/custom-formly/wrappers/expansion/expansion.component.mjs +0 -14
- package/esm2022/components/custom-formly/wrappers/form-field/form-field.component.mjs +0 -47
- package/esm2022/components/custom-formly/wrappers/panel/panel.component.mjs +0 -12
- package/esm2022/components/date-range/cmat-components-date-range.mjs +0 -5
- package/esm2022/components/date-range/date-range.component.mjs +0 -558
- package/esm2022/components/date-range/public-api.mjs +0 -2
- package/esm2022/components/drawer/cmat-components-drawer.mjs +0 -5
- package/esm2022/components/drawer/drawer.component.mjs +0 -301
- package/esm2022/components/drawer/drawer.service.mjs +0 -41
- package/esm2022/components/drawer/drawer.types.mjs +0 -2
- package/esm2022/components/drawer/public-api.mjs +0 -4
- package/esm2022/components/fullscreen/cmat-components-fullscreen.mjs +0 -5
- package/esm2022/components/fullscreen/fullscreen.component.mjs +0 -44
- package/esm2022/components/fullscreen/public-api.mjs +0 -2
- package/esm2022/components/highlight/cmat-components-highlight.mjs +0 -5
- package/esm2022/components/highlight/highlight.component.mjs +0 -80
- package/esm2022/components/highlight/highlight.service.mjs +0 -47
- package/esm2022/components/highlight/public-api.mjs +0 -3
- package/esm2022/components/json-editor/cmat-components-json-editor.mjs +0 -5
- package/esm2022/components/json-editor/json-editor.component.mjs +0 -176
- package/esm2022/components/json-editor/public-api.mjs +0 -2
- package/esm2022/components/masonry/cmat-components-masonry.mjs +0 -5
- package/esm2022/components/masonry/masonry.component.mjs +0 -54
- package/esm2022/components/masonry/public-api.mjs +0 -2
- package/esm2022/components/material-color-picker/base-color.mjs +0 -13
- package/esm2022/components/material-color-picker/cmat-components-material-color-picker.mjs +0 -5
- package/esm2022/components/material-color-picker/material-color-picker.component.mjs +0 -147
- package/esm2022/components/material-color-picker/public-api.mjs +0 -3
- package/esm2022/components/material-color-picker/selected-color.mjs +0 -3
- package/esm2022/components/material-datetimepicker/calendar-body.mjs +0 -76
- package/esm2022/components/material-datetimepicker/calendar.mjs +0 -670
- package/esm2022/components/material-datetimepicker/clock.mjs +0 -290
- package/esm2022/components/material-datetimepicker/cmat-components-material-datetimepicker.mjs +0 -5
- package/esm2022/components/material-datetimepicker/datetimepicker-animations.mjs +0 -34
- package/esm2022/components/material-datetimepicker/datetimepicker-errors.mjs +0 -6
- package/esm2022/components/material-datetimepicker/datetimepicker-filtertype.mjs +0 -8
- package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +0 -341
- package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +0 -63
- package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +0 -87
- package/esm2022/components/material-datetimepicker/datetimepicker-types.mjs +0 -2
- package/esm2022/components/material-datetimepicker/datetimepicker.mjs +0 -531
- package/esm2022/components/material-datetimepicker/month-view.mjs +0 -141
- package/esm2022/components/material-datetimepicker/multi-year-view.mjs +0 -197
- package/esm2022/components/material-datetimepicker/public-api.mjs +0 -11
- package/esm2022/components/material-datetimepicker/time.mjs +0 -455
- package/esm2022/components/material-datetimepicker/year-view.mjs +0 -124
- package/esm2022/components/navigation/cmat-components-navigation.mjs +0 -5
- package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +0 -70
- package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +0 -82
- package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +0 -47
- package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +0 -47
- package/esm2022/components/navigation/horizontal/horizontal.component.mjs +0 -87
- package/esm2022/components/navigation/navigation.service.mjs +0 -140
- package/esm2022/components/navigation/navigation.types.mjs +0 -3
- package/esm2022/components/navigation/public-api.mjs +0 -5
- package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +0 -162
- package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +0 -60
- package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +0 -277
- package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +0 -56
- package/esm2022/components/navigation/vertical/components/group/group.component.mjs +0 -78
- package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +0 -56
- package/esm2022/components/navigation/vertical/vertical.component.mjs +0 -584
- package/esm2022/components/pagination/cmat-components-pagination.mjs +0 -5
- package/esm2022/components/pagination/pagination.component.mjs +0 -67
- package/esm2022/components/pagination/pagination.directive.mjs +0 -197
- package/esm2022/components/pagination/pagination.instance.mjs +0 -2
- package/esm2022/components/pagination/pagination.pipe.mjs +0 -100
- package/esm2022/components/pagination/pagination.service.mjs +0 -90
- package/esm2022/components/pagination/public-api.mjs +0 -6
- package/esm2022/components/password-strength/animations/index.mjs +0 -48
- package/esm2022/components/password-strength/cmat-components-password-strength.mjs +0 -5
- package/esm2022/components/password-strength/enum.mjs +0 -17
- package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +0 -27
- package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +0 -206
- package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +0 -150
- package/esm2022/components/password-strength/mat-password-strength-validator.mjs +0 -36
- package/esm2022/components/password-strength/public-api.mjs +0 -4
- package/esm2022/components/password-strength/regexp.class.mjs +0 -8
- package/esm2022/components/popover/cmat-components-popover.mjs +0 -5
- package/esm2022/components/popover/popover-trigger.mjs +0 -442
- package/esm2022/components/popover/popover.component.mjs +0 -348
- package/esm2022/components/popover/popover.errors.mjs +0 -27
- package/esm2022/components/popover/popover.interfaces.mjs +0 -2
- package/esm2022/components/popover/popover.target.mjs +0 -18
- package/esm2022/components/popover/popover.type.mjs +0 -2
- package/esm2022/components/popover/public-api.mjs +0 -5
- package/esm2022/components/progress-bar/cmat-components-progress-bar.mjs +0 -5
- package/esm2022/components/progress-bar/progress-bar.component.mjs +0 -58
- package/esm2022/components/progress-bar/public-api.mjs +0 -2
- package/esm2022/components/rating/cmat-components-rating.mjs +0 -5
- package/esm2022/components/rating/public-api.mjs +0 -2
- package/esm2022/components/rating/rating.component.mjs +0 -202
- package/esm2022/components/select-search/cmat-components-select-search.mjs +0 -5
- package/esm2022/components/select-search/default-options.mjs +0 -16
- package/esm2022/components/select-search/public-api.mjs +0 -3
- package/esm2022/components/select-search/select-no-entries-found.directive.mjs +0 -14
- package/esm2022/components/select-search/select-search-clear.directive.mjs +0 -14
- package/esm2022/components/select-search/select-search.component.mjs +0 -485
- package/esm2022/components/select-tree/cmat-components-select-tree.mjs +0 -5
- package/esm2022/components/select-tree/public-api.mjs +0 -4
- package/esm2022/components/select-tree/select-tree.component.mjs +0 -565
- package/esm2022/components/select-tree/select-tree.flatnode.mjs +0 -3
- package/esm2022/components/select-tree/select-tree.node.mjs +0 -3
- package/esm2022/components/timeline/cmat-components-timeline.mjs +0 -5
- package/esm2022/components/timeline/public-api.mjs +0 -3
- package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +0 -70
- package/esm2022/components/timeline/timeline.component.mjs +0 -107
- package/esm2022/components/toast/cmat-components-toast.mjs +0 -5
- package/esm2022/components/toast/models/global-config.model.mjs +0 -2
- package/esm2022/components/toast/models/toast.model.mjs +0 -2
- package/esm2022/components/toast/models/type.model.mjs +0 -2
- package/esm2022/components/toast/public-api.mjs +0 -7
- package/esm2022/components/toast/toast-modal.component.mjs +0 -53
- package/esm2022/components/toast/toast.component.mjs +0 -30
- package/esm2022/components/toast/toast.service.mjs +0 -122
- package/esm2022/components/transfer-picker/cmat-components-transfer-picker.mjs +0 -5
- package/esm2022/components/transfer-picker/filter/filter.component.mjs +0 -91
- package/esm2022/components/transfer-picker/interface.mjs +0 -17
- package/esm2022/components/transfer-picker/public-api.mjs +0 -8
- package/esm2022/components/transfer-picker/search/search.component.mjs +0 -38
- package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +0 -201
- package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +0 -32
- package/esm2022/components/transfer-picker/transfer-picker.component.mjs +0 -84
- package/esm2022/components/transfer-picker/transfer-picker.service.mjs +0 -137
- package/esm2022/components/upload/cmat-components-upload.mjs +0 -5
- package/esm2022/components/upload/files.type.mjs +0 -2
- package/esm2022/components/upload/files.util.service.mjs +0 -89
- package/esm2022/components/upload/public-api.mjs +0 -5
- package/esm2022/components/upload/upload-queue/upload-queue.component.mjs +0 -155
- package/esm2022/components/upload/upload.component.mjs +0 -118
- package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +0 -126
- package/esm2022/directives/animate-on-scroll/cmat-directives-animate-on-scroll.mjs +0 -5
- package/esm2022/directives/animate-on-scroll/public-api.mjs +0 -2
- package/esm2022/directives/animate-on-scroll/scroll.service.mjs +0 -38
- package/esm2022/directives/autofocus/autofocus.directive.mjs +0 -20
- package/esm2022/directives/autofocus/cmat-directives-autofocus.mjs +0 -5
- package/esm2022/directives/autofocus/public-api.mjs +0 -2
- package/esm2022/directives/debounce/abstract-debounce.directive.mjs +0 -34
- package/esm2022/directives/debounce/cmat-directives-debounce.mjs +0 -5
- package/esm2022/directives/debounce/debounce-click.directive.mjs +0 -25
- package/esm2022/directives/debounce/debounce-keyup.directive.mjs +0 -25
- package/esm2022/directives/debounce/public-api.mjs +0 -3
- package/esm2022/directives/digit-only/cmat-directives-digit-only.mjs +0 -5
- package/esm2022/directives/digit-only/digit-only.directive.mjs +0 -298
- package/esm2022/directives/digit-only/mask.directive.mjs +0 -84
- package/esm2022/directives/digit-only/public-api.mjs +0 -3
- package/esm2022/directives/equal-validator/cmat-directives-equal-validator.mjs +0 -5
- package/esm2022/directives/equal-validator/equal-validator.directive.mjs +0 -54
- package/esm2022/directives/equal-validator/public-api.mjs +0 -2
- package/esm2022/lib/mock-api/cmat-lib-mock-api.mjs +0 -5
- package/esm2022/lib/mock-api/mock-api.constants.mjs +0 -3
- package/esm2022/lib/mock-api/mock-api.interceptor.mjs +0 -73
- package/esm2022/lib/mock-api/mock-api.request-handler.mjs +0 -48
- package/esm2022/lib/mock-api/mock-api.service.mjs +0 -93
- package/esm2022/lib/mock-api/mock-api.types.mjs +0 -2
- package/esm2022/lib/mock-api/mock-api.utils.mjs +0 -16
- package/esm2022/lib/mock-api/public-api.mjs +0 -6
- package/esm2022/pipes/bytes/bytes.pipe.mjs +0 -25
- package/esm2022/pipes/bytes/cmat-pipes-bytes.mjs +0 -5
- package/esm2022/pipes/bytes/public-api.mjs +0 -2
- package/esm2022/pipes/date-format/cmat-pipes-date-format.mjs +0 -5
- package/esm2022/pipes/date-format/date-format.pipe.mjs +0 -20
- package/esm2022/pipes/date-format/public-api.mjs +0 -2
- package/esm2022/pipes/find-by-key/cmat-pipes-find-by-key.mjs +0 -5
- package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +0 -23
- package/esm2022/pipes/find-by-key/public-api.mjs +0 -2
- package/esm2022/pipes/group-by/cmat-pipes-group-by.mjs +0 -5
- package/esm2022/pipes/group-by/group-by.pipe.mjs +0 -29
- package/esm2022/pipes/group-by/public-api.mjs +0 -2
- package/esm2022/pipes/keys/cmat-pipes-keys.mjs +0 -5
- package/esm2022/pipes/keys/keys.pipe.mjs +0 -26
- package/esm2022/pipes/keys/public-api.mjs +0 -2
- package/esm2022/pipes/secure/cmat-pipes-secure.mjs +0 -5
- package/esm2022/pipes/secure/public-api.mjs +0 -2
- package/esm2022/pipes/secure/secure-pipe.mjs +0 -46
- package/esm2022/pipes/uppercase/cmat-pipes-uppercase.mjs +0 -5
- package/esm2022/pipes/uppercase/public-api.mjs +0 -2
- package/esm2022/pipes/uppercase/uppercase.pipe.mjs +0 -17
- package/esm2022/public-api.mjs +0 -2
- package/esm2022/services/alert/alert.dialog.mjs +0 -12
- package/esm2022/services/alert/alert.message.mjs +0 -9
- package/esm2022/services/alert/alert.service.mjs +0 -166
- package/esm2022/services/alert/cmat-services-alert.mjs +0 -5
- package/esm2022/services/alert/enum.mjs +0 -15
- package/esm2022/services/alert/public-api.mjs +0 -5
- package/esm2022/services/config/cmat-services-config.mjs +0 -5
- package/esm2022/services/config/config.constants.mjs +0 -3
- package/esm2022/services/config/config.service.mjs +0 -35
- package/esm2022/services/config/public-api.mjs +0 -4
- package/esm2022/services/config/urlStateConfig.service.mjs +0 -30
- package/esm2022/services/confirmation/cmat-services-confirmation.mjs +0 -5
- package/esm2022/services/confirmation/confirmation.service.mjs +0 -51
- package/esm2022/services/confirmation/confirmation.types.mjs +0 -2
- package/esm2022/services/confirmation/dialog/dialog.component.mjs +0 -25
- package/esm2022/services/confirmation/public-api.mjs +0 -3
- package/esm2022/services/data/cmat-services-data.mjs +0 -5
- package/esm2022/services/data/data.service.mjs +0 -169
- package/esm2022/services/data/public-api.mjs +0 -2
- package/esm2022/services/loading/cmat-services-loading.mjs +0 -5
- package/esm2022/services/loading/loading.interceptor.mjs +0 -29
- package/esm2022/services/loading/loading.service.mjs +0 -72
- package/esm2022/services/loading/public-api.mjs +0 -3
- package/esm2022/services/local-storage/cmat-services-local-storage.mjs +0 -5
- package/esm2022/services/local-storage/local-storage.service.mjs +0 -22
- package/esm2022/services/local-storage/public-api.mjs +0 -2
- package/esm2022/services/media-watcher/cmat-services-media-watcher.mjs +0 -5
- package/esm2022/services/media-watcher/media-watcher.service.mjs +0 -55
- package/esm2022/services/media-watcher/public-api.mjs +0 -2
- package/esm2022/services/platform/cmat-services-platform.mjs +0 -5
- package/esm2022/services/platform/platform.service.mjs +0 -46
- package/esm2022/services/platform/public-api.mjs +0 -2
- package/esm2022/services/splash-screen/cmat-services-splash-screen.mjs +0 -5
- package/esm2022/services/splash-screen/public-api.mjs +0 -2
- package/esm2022/services/splash-screen/splash-screen.service.mjs +0 -42
- package/esm2022/services/title/cmat-services-title.mjs +0 -5
- package/esm2022/services/title/public-api.mjs +0 -2
- package/esm2022/services/title/title.service.mjs +0 -46
- package/esm2022/services/translation/cmat-services-translation.mjs +0 -5
- package/esm2022/services/translation/public-api.mjs +0 -2
- package/esm2022/services/translation/translation.service.mjs +0 -62
- package/esm2022/services/utils/cmat-services-utils.mjs +0 -5
- package/esm2022/services/utils/public-api.mjs +0 -2
- package/esm2022/services/utils/utils.service.mjs +0 -467
- package/esm2022/validators/cmat-validators.mjs +0 -5
- package/esm2022/validators/public-api.mjs +0 -2
- package/esm2022/validators/validators.mjs +0 -33
- package/esm2022/version/cmat-version.mjs +0 -5
- package/esm2022/version/public-api.mjs +0 -2
- package/esm2022/version/version.mjs +0 -11
|
@@ -1,467 +0,0 @@
|
|
|
1
|
-
import { HttpErrorResponse, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import AES from 'crypto-js/aes';
|
|
4
|
-
import CryptoJSCore from 'crypto-js/core';
|
|
5
|
-
import Base64 from 'crypto-js/enc-base64';
|
|
6
|
-
import Hex from 'crypto-js/enc-hex';
|
|
7
|
-
import UTF8 from 'crypto-js/enc-utf8';
|
|
8
|
-
import Pkcs7 from 'crypto-js/pad-pkcs7';
|
|
9
|
-
import { isUndefined } from 'lodash-es';
|
|
10
|
-
import { throwError } from 'rxjs';
|
|
11
|
-
import { CMAT_VERSION } from 'cmat/version';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
export class CmatUtilsService {
|
|
14
|
-
static { this.captionAndMessageSeparator = ':'; }
|
|
15
|
-
static { this.noNetworkMessageCaption = '无网络'; }
|
|
16
|
-
static { this.noNetworkMessageDetail = '无法连接服务器'; }
|
|
17
|
-
static { this.accessDeniedMessageCaption = '拒绝访问!'; }
|
|
18
|
-
static { this.accessDeniedMessageDetail = ''; }
|
|
19
|
-
static { this.key = UTF8.parse('14789632236987411478963223698741'); } //32位
|
|
20
|
-
static { this.iv = UTF8.parse('1478963223698741'); } //16位
|
|
21
|
-
get exactMatchOptions() {
|
|
22
|
-
return {
|
|
23
|
-
paths: 'exact',
|
|
24
|
-
fragment: 'ignored',
|
|
25
|
-
matrixParams: 'ignored',
|
|
26
|
-
queryParams: 'exact'
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
get subsetMatchOptions() {
|
|
30
|
-
return {
|
|
31
|
-
paths: 'subset',
|
|
32
|
-
fragment: 'ignored',
|
|
33
|
-
matrixParams: 'ignored',
|
|
34
|
-
queryParams: 'subset'
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
static getRequestHeaders() {
|
|
38
|
-
return new HttpHeaders()
|
|
39
|
-
.append('Access-Control-Allow-Origin', '*')
|
|
40
|
-
.append('Content-Type', 'application/json')
|
|
41
|
-
.append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
|
|
42
|
-
.append('App-Version', CMAT_VERSION);
|
|
43
|
-
}
|
|
44
|
-
static getRequestIdempotentHeaders() {
|
|
45
|
-
return new HttpHeaders()
|
|
46
|
-
.append('Access-Control-Allow-Origin', '*')
|
|
47
|
-
.append('Content-Type', 'application/json')
|
|
48
|
-
.append('X-Request-ID', CmatUtilsService.newGuid())
|
|
49
|
-
.append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
|
|
50
|
-
.append('App-Version', CMAT_VERSION);
|
|
51
|
-
}
|
|
52
|
-
static getRequestBypassHeaders() {
|
|
53
|
-
return new HttpHeaders()
|
|
54
|
-
.append('Access-Control-Allow-Origin', '*')
|
|
55
|
-
.append('Content-Type', 'application/json')
|
|
56
|
-
.append('bypass', 'true')
|
|
57
|
-
.append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
|
|
58
|
-
.append('App-Version', CMAT_VERSION);
|
|
59
|
-
}
|
|
60
|
-
static getRequestIdempotentBypassHeaders() {
|
|
61
|
-
return new HttpHeaders()
|
|
62
|
-
.append('Access-Control-Allow-Origin', '*')
|
|
63
|
-
.append('Content-Type', 'application/json')
|
|
64
|
-
.append('X-Request-ID', CmatUtilsService.newGuid())
|
|
65
|
-
.append('bypass', 'true')
|
|
66
|
-
.append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
|
|
67
|
-
.append('App-Version', CMAT_VERSION);
|
|
68
|
-
}
|
|
69
|
-
static getRequestCryptoHeaders(params) {
|
|
70
|
-
return new HttpHeaders()
|
|
71
|
-
.append('Access-Control-Allow-Origin', '*')
|
|
72
|
-
.append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
|
|
73
|
-
.append('App-Version', this.getEncryptData('partymanageApi' + params).toString());
|
|
74
|
-
}
|
|
75
|
-
static getRequestCryptoBypassHeaders(params) {
|
|
76
|
-
return new HttpHeaders()
|
|
77
|
-
.append('Access-Control-Allow-Origin', '*')
|
|
78
|
-
.append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
|
|
79
|
-
.append('bypass', 'true')
|
|
80
|
-
.append('App-Version', this.getEncryptData('partymanageApi' + params).toString());
|
|
81
|
-
}
|
|
82
|
-
static getRequestCryptoIdempotentHeaders(params) {
|
|
83
|
-
return new HttpHeaders()
|
|
84
|
-
.append('Access-Control-Allow-Origin', '*')
|
|
85
|
-
.append('X-Request-ID', CmatUtilsService.newGuid())
|
|
86
|
-
.append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
|
|
87
|
-
.append('App-Version', this.getEncryptData('partymanageApi' + params).toString());
|
|
88
|
-
}
|
|
89
|
-
static getRequestCryptoIdempotentBypassHeaders(params) {
|
|
90
|
-
return new HttpHeaders()
|
|
91
|
-
.append('Access-Control-Allow-Origin', '*')
|
|
92
|
-
.append('X-Request-ID', CmatUtilsService.newGuid())
|
|
93
|
-
.append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
|
|
94
|
-
.append('bypass', 'true')
|
|
95
|
-
.append('App-Version', this.getEncryptData('partymanageApi' + params).toString());
|
|
96
|
-
}
|
|
97
|
-
static getEncryptData(data) {
|
|
98
|
-
const src = UTF8.parse(data);
|
|
99
|
-
return AES.encrypt(src, this.key, {
|
|
100
|
-
iv: this.iv,
|
|
101
|
-
mode: CryptoJSCore.mode.CBC,
|
|
102
|
-
padding: Pkcs7
|
|
103
|
-
}).ciphertext.toString();
|
|
104
|
-
}
|
|
105
|
-
static getDecryptData(data) {
|
|
106
|
-
const encryptedHexStr = Hex.parse(data);
|
|
107
|
-
return AES.decrypt(Base64.stringify(encryptedHexStr), this.key, {
|
|
108
|
-
iv: this.iv,
|
|
109
|
-
mode: CryptoJSCore.mode.CBC,
|
|
110
|
-
padding: Pkcs7
|
|
111
|
-
}).toString(UTF8).toString();
|
|
112
|
-
}
|
|
113
|
-
static handleError(error) {
|
|
114
|
-
if (error.error instanceof ErrorEvent) {
|
|
115
|
-
// A client-side or network error occurred. Handle it accordingly.
|
|
116
|
-
console.error('Client side network error occurred:', error.message);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
// The backend returned an unsuccessful response code.
|
|
120
|
-
// The response body may contain clues as to what went wrong,
|
|
121
|
-
console.error('Backend - ' +
|
|
122
|
-
`status: ${error.status}, ` +
|
|
123
|
-
`statusText: ${error.statusText}, ` +
|
|
124
|
-
`message: ${error.message}`);
|
|
125
|
-
}
|
|
126
|
-
// return an observable with a user-facing error message
|
|
127
|
-
return throwError(() => error || 'server error');
|
|
128
|
-
}
|
|
129
|
-
static getHttpResponseMessage(data) {
|
|
130
|
-
const responses = [];
|
|
131
|
-
if (data instanceof HttpResponseBase) {
|
|
132
|
-
if (this.checkNoNetwork(data)) {
|
|
133
|
-
responses.push(`${this.noNetworkMessageCaption}${this.captionAndMessageSeparator} ${this.noNetworkMessageDetail}`);
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
const responseObject = this.getResponseBody(data);
|
|
137
|
-
if (responseObject && (typeof responseObject === 'object' || responseObject instanceof Object)) {
|
|
138
|
-
for (const key in responseObject) {
|
|
139
|
-
if (Object.prototype.hasOwnProperty.call(responseObject, key)) {
|
|
140
|
-
if (key) {
|
|
141
|
-
responses.push(`${key}${this.captionAndMessageSeparator} ${responseObject[key]}`);
|
|
142
|
-
}
|
|
143
|
-
else if (responseObject[key]) {
|
|
144
|
-
responses.push(responseObject[key].toString());
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
if (!responses.length && this.getResponseBody(data)) {
|
|
151
|
-
responses.push(`${this.getResponseBody(data).toString()}`);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
if (!responses.length) {
|
|
155
|
-
responses.push(data.toString());
|
|
156
|
-
}
|
|
157
|
-
if (this.checkAccessDenied(data)) {
|
|
158
|
-
responses.splice(0, 0, `${this.accessDeniedMessageCaption}${this.captionAndMessageSeparator} ${this.accessDeniedMessageDetail}`);
|
|
159
|
-
}
|
|
160
|
-
return responses;
|
|
161
|
-
}
|
|
162
|
-
static findHttpResponseMessage(messageToFind, data, seachInCaptionOnly = true, includeCaptionInResult = false) {
|
|
163
|
-
const searchString = messageToFind.toLowerCase();
|
|
164
|
-
const httpMessages = this.getHttpResponseMessage(data);
|
|
165
|
-
for (const message of httpMessages) {
|
|
166
|
-
const fullMessage = CmatUtilsService.splitInTwo(message, this.captionAndMessageSeparator);
|
|
167
|
-
if (fullMessage.firstPart?.toLowerCase().includes(searchString)) {
|
|
168
|
-
return includeCaptionInResult ? message : fullMessage.secondPart ?? fullMessage.firstPart;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
if (!seachInCaptionOnly) {
|
|
172
|
-
for (const message of httpMessages) {
|
|
173
|
-
if (message.toLowerCase().includes(searchString)) {
|
|
174
|
-
if (includeCaptionInResult) {
|
|
175
|
-
return message;
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
const fullMessage = CmatUtilsService.splitInTwo(message, this.captionAndMessageSeparator);
|
|
179
|
-
return fullMessage.secondPart ?? fullMessage.firstPart;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
return null;
|
|
185
|
-
}
|
|
186
|
-
static getResponseBody(response) {
|
|
187
|
-
if (response instanceof HttpResponse) {
|
|
188
|
-
return response.body;
|
|
189
|
-
}
|
|
190
|
-
if (response instanceof HttpErrorResponse) {
|
|
191
|
-
return response.error || response.message || response.statusText;
|
|
192
|
-
}
|
|
193
|
-
return response;
|
|
194
|
-
}
|
|
195
|
-
static checkNoNetwork(response) {
|
|
196
|
-
if (response instanceof HttpResponseBase) {
|
|
197
|
-
return response.status === 0;
|
|
198
|
-
}
|
|
199
|
-
return false;
|
|
200
|
-
}
|
|
201
|
-
static checkAccessDenied(response) {
|
|
202
|
-
if (response instanceof HttpResponseBase) {
|
|
203
|
-
return response.status === 403;
|
|
204
|
-
}
|
|
205
|
-
return false;
|
|
206
|
-
}
|
|
207
|
-
static checkNotFound(response) {
|
|
208
|
-
if (response instanceof HttpResponseBase) {
|
|
209
|
-
return response.status === 404;
|
|
210
|
-
}
|
|
211
|
-
return false;
|
|
212
|
-
}
|
|
213
|
-
static checkIsLocalHost(url, base) {
|
|
214
|
-
if (url) {
|
|
215
|
-
const location = new URL(url, base);
|
|
216
|
-
return location.hostname === 'localhost' || location.hostname === '127.0.0.1';
|
|
217
|
-
}
|
|
218
|
-
return false;
|
|
219
|
-
}
|
|
220
|
-
static getQueryParamsFromString(paramString) {
|
|
221
|
-
if (!paramString) {
|
|
222
|
-
return null;
|
|
223
|
-
}
|
|
224
|
-
const params = {};
|
|
225
|
-
for (const param of paramString.split('&')) {
|
|
226
|
-
const keyValue = CmatUtilsService.splitInTwo(param, '=');
|
|
227
|
-
params[keyValue.firstPart] = keyValue.secondPart;
|
|
228
|
-
}
|
|
229
|
-
return params;
|
|
230
|
-
}
|
|
231
|
-
static splitInTwo(text, separator) {
|
|
232
|
-
const separatorIndex = separator ? text.indexOf(separator) : -1;
|
|
233
|
-
if (separatorIndex === -1) {
|
|
234
|
-
return { firstPart: text, secondPart: null };
|
|
235
|
-
}
|
|
236
|
-
const part1 = text.substring(0, separatorIndex).trim();
|
|
237
|
-
const part2 = text.substring(separatorIndex + 1).trim();
|
|
238
|
-
return { firstPart: part1, secondPart: part2 };
|
|
239
|
-
}
|
|
240
|
-
static safeStringify(object) {
|
|
241
|
-
let result;
|
|
242
|
-
try {
|
|
243
|
-
result = JSON.stringify(object);
|
|
244
|
-
return result;
|
|
245
|
-
}
|
|
246
|
-
catch { /* empty */ }
|
|
247
|
-
const simpleObject = {};
|
|
248
|
-
for (const prop in object) {
|
|
249
|
-
if (!Object.prototype.hasOwnProperty.call(object, prop)) {
|
|
250
|
-
continue;
|
|
251
|
-
}
|
|
252
|
-
if (typeof (object[prop]) == 'object') {
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
|
-
if (typeof (object[prop]) == 'function') {
|
|
256
|
-
continue;
|
|
257
|
-
}
|
|
258
|
-
simpleObject[prop] = object[prop];
|
|
259
|
-
}
|
|
260
|
-
result = '[***Sanitized Object***]: ' + JSON.stringify(simpleObject);
|
|
261
|
-
return result;
|
|
262
|
-
}
|
|
263
|
-
static jsonTryParse(value) {
|
|
264
|
-
try {
|
|
265
|
-
return JSON.parse(value);
|
|
266
|
-
}
|
|
267
|
-
catch {
|
|
268
|
-
if (isUndefined(value)) {
|
|
269
|
-
return void 0;
|
|
270
|
-
}
|
|
271
|
-
return value;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
static capitalizeFirstLetter(text) {
|
|
275
|
-
if (text) {
|
|
276
|
-
return text.charAt(0).toUpperCase() + text.slice(1);
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
return text;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
static toTitleCase(text) {
|
|
283
|
-
return text.replace(/\w\S*/g, subString => subString.charAt(0).toUpperCase() + subString.substring(1).toLowerCase());
|
|
284
|
-
}
|
|
285
|
-
static toLowerCase(items) {
|
|
286
|
-
if (items instanceof Array) {
|
|
287
|
-
const loweredRoles = [];
|
|
288
|
-
for (let i = 0; i < items.length; i++) {
|
|
289
|
-
loweredRoles[i] = items[i].toLowerCase();
|
|
290
|
-
}
|
|
291
|
-
return loweredRoles;
|
|
292
|
-
}
|
|
293
|
-
else if (typeof items === 'string' || items instanceof String) {
|
|
294
|
-
return items.toLowerCase();
|
|
295
|
-
}
|
|
296
|
-
return void 0;
|
|
297
|
-
}
|
|
298
|
-
static uniqueId() {
|
|
299
|
-
return this.randomNumber(1000000, 9000000).toString();
|
|
300
|
-
}
|
|
301
|
-
static randomNumber(min, max) {
|
|
302
|
-
return Math.floor(Math.random() * (max - min + 1) + min);
|
|
303
|
-
}
|
|
304
|
-
static baseUrl() {
|
|
305
|
-
let base;
|
|
306
|
-
if (window.location.origin) {
|
|
307
|
-
base = window.location.origin;
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
base = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');
|
|
311
|
-
}
|
|
312
|
-
return base.replace(/\/$/, '');
|
|
313
|
-
}
|
|
314
|
-
static newGuid() {
|
|
315
|
-
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
316
|
-
const r = (Math.random() * 16) | 0;
|
|
317
|
-
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
318
|
-
return v.toString(16);
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
static testIsAbsoluteUrl(url) {
|
|
322
|
-
const r = new RegExp('^(?:[a-z]+:)?//', 'i');
|
|
323
|
-
return r.test(url);
|
|
324
|
-
}
|
|
325
|
-
static convertToAbsoluteUrl(url) {
|
|
326
|
-
return CmatUtilsService.testIsAbsoluteUrl(url) ? url : '//' + url;
|
|
327
|
-
}
|
|
328
|
-
static urlBase64Decode(str) {
|
|
329
|
-
let output = str.replace(/-/g, '+').replace(/_/g, '/');
|
|
330
|
-
switch (output.length % 4) {
|
|
331
|
-
case 0: {
|
|
332
|
-
break;
|
|
333
|
-
}
|
|
334
|
-
case 2: {
|
|
335
|
-
output += '==';
|
|
336
|
-
break;
|
|
337
|
-
}
|
|
338
|
-
case 3: {
|
|
339
|
-
output += '=';
|
|
340
|
-
break;
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
return this._base64DecodeUnicode(output);
|
|
344
|
-
}
|
|
345
|
-
static decodeToken(token) {
|
|
346
|
-
const parts = token.split('.');
|
|
347
|
-
if (parts.length !== 3) {
|
|
348
|
-
throw new Error('JWT must have 3 parts');
|
|
349
|
-
}
|
|
350
|
-
const decoded = this.urlBase64Decode(parts[1]);
|
|
351
|
-
if (!decoded) {
|
|
352
|
-
throw new Error('Cannot decode the token');
|
|
353
|
-
}
|
|
354
|
-
return JSON.parse(decoded);
|
|
355
|
-
}
|
|
356
|
-
static getTokenExpirationDate(token) {
|
|
357
|
-
const decoded = this.decodeToken(token);
|
|
358
|
-
if (!Object.prototype.hasOwnProperty.call(decoded, 'exp')) {
|
|
359
|
-
return null;
|
|
360
|
-
}
|
|
361
|
-
const date = new Date(0); // The 0 here is the key, which sets the date to the epoch
|
|
362
|
-
date.setUTCSeconds(decoded.exp);
|
|
363
|
-
return date;
|
|
364
|
-
}
|
|
365
|
-
static isTokenExpired(token, offsetSeconds) {
|
|
366
|
-
const date = this.getTokenExpirationDate(token);
|
|
367
|
-
offsetSeconds = offsetSeconds ?? 0;
|
|
368
|
-
if (date == null) {
|
|
369
|
-
return false;
|
|
370
|
-
}
|
|
371
|
-
// Token expired?
|
|
372
|
-
return !(date.valueOf() > (new Date().valueOf() + (offsetSeconds * 1000)));
|
|
373
|
-
}
|
|
374
|
-
static readAsDataURL(file) {
|
|
375
|
-
// Return a new promise
|
|
376
|
-
return new Promise((resolve, reject) => {
|
|
377
|
-
// Create a new reader
|
|
378
|
-
const reader = new FileReader();
|
|
379
|
-
// Resolve the promise on success
|
|
380
|
-
reader.onload = () => {
|
|
381
|
-
resolve(reader.result);
|
|
382
|
-
};
|
|
383
|
-
// Reject the promise on error
|
|
384
|
-
reader.onerror = (e) => {
|
|
385
|
-
// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
|
|
386
|
-
reject(e);
|
|
387
|
-
};
|
|
388
|
-
// Read the file as the
|
|
389
|
-
reader.readAsDataURL(file);
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
static dataURIToBlob(dataURI) {
|
|
393
|
-
const splitDataURI = dataURI.split(',');
|
|
394
|
-
const byteString = splitDataURI[0].includes('base64') ? atob(splitDataURI[1]) : decodeURI(splitDataURI[1]);
|
|
395
|
-
const mimeString = splitDataURI[0].split(':')[1].split(';')[0];
|
|
396
|
-
const ia = new Uint8Array(byteString.length);
|
|
397
|
-
for (let i = 0; i < byteString.length; i++) {
|
|
398
|
-
ia[i] = byteString.charCodeAt(i);
|
|
399
|
-
}
|
|
400
|
-
return new Blob([ia], { type: mimeString });
|
|
401
|
-
}
|
|
402
|
-
static getFileType(accept) {
|
|
403
|
-
let fileType = 'file';
|
|
404
|
-
switch (accept) {
|
|
405
|
-
case 'image/jpeg':
|
|
406
|
-
case 'image/jpg':
|
|
407
|
-
fileType = 'jpg';
|
|
408
|
-
break;
|
|
409
|
-
case 'image/png':
|
|
410
|
-
fileType = 'png';
|
|
411
|
-
break;
|
|
412
|
-
case 'text/csv':
|
|
413
|
-
fileType = 'csv';
|
|
414
|
-
break;
|
|
415
|
-
case 'image/gif':
|
|
416
|
-
fileType = 'gif';
|
|
417
|
-
break;
|
|
418
|
-
case 'application/msword':
|
|
419
|
-
case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
|
|
420
|
-
fileType = 'word';
|
|
421
|
-
break;
|
|
422
|
-
case 'application/vnd.ms-excel':
|
|
423
|
-
case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
|
|
424
|
-
fileType = 'word';
|
|
425
|
-
break;
|
|
426
|
-
case 'application/pdf':
|
|
427
|
-
fileType = 'pdf';
|
|
428
|
-
break;
|
|
429
|
-
case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
|
|
430
|
-
case 'application/vnd.ms-powerpoint':
|
|
431
|
-
fileType = 'ppt';
|
|
432
|
-
break;
|
|
433
|
-
case 'text/plain':
|
|
434
|
-
fileType = 'text';
|
|
435
|
-
break;
|
|
436
|
-
case 'video/mpeg':
|
|
437
|
-
case 'video/mp4':
|
|
438
|
-
case 'audio/mp4':
|
|
439
|
-
fileType = 'video';
|
|
440
|
-
break;
|
|
441
|
-
case 'aplication/zip':
|
|
442
|
-
fileType = 'zip';
|
|
443
|
-
break;
|
|
444
|
-
}
|
|
445
|
-
return fileType;
|
|
446
|
-
}
|
|
447
|
-
static _base64DecodeUnicode(str) {
|
|
448
|
-
return decodeURIComponent(Array.prototype.map.call(atob(str), (c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join(''));
|
|
449
|
-
}
|
|
450
|
-
randomId(stringLength = 10) {
|
|
451
|
-
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
452
|
-
let id = '';
|
|
453
|
-
for (let i = 0; i < stringLength; i++) {
|
|
454
|
-
id += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
455
|
-
}
|
|
456
|
-
return id;
|
|
457
|
-
}
|
|
458
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatUtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
459
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatUtilsService, providedIn: 'root' }); }
|
|
460
|
-
}
|
|
461
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatUtilsService, decorators: [{
|
|
462
|
-
type: Injectable,
|
|
463
|
-
args: [{
|
|
464
|
-
providedIn: 'root'
|
|
465
|
-
}]
|
|
466
|
-
}] });
|
|
467
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvc2VydmljZXMvdXRpbHMvdXRpbHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ2hDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sTUFBTSxNQUFNLHNCQUFzQixDQUFDO0FBQzFDLE9BQU8sR0FBRyxNQUFNLG1CQUFtQixDQUFDO0FBQ3BDLE9BQU8sSUFBSSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUs1QyxNQUFNLE9BQU8sZ0JBQWdCO2FBQ0YsK0JBQTBCLEdBQUcsR0FBRyxBQUFOLENBQU87YUFDakMsNEJBQXVCLEdBQUcsS0FBSyxBQUFSLENBQVM7YUFDaEMsMkJBQXNCLEdBQUcsU0FBUyxBQUFaLENBQWE7YUFDbkMsK0JBQTBCLEdBQUcsT0FBTyxBQUFWLENBQVc7YUFDckMsOEJBQXlCLEdBQUcsRUFBRSxBQUFMLENBQU07YUFDOUIsUUFBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUMsQUFBakQsQ0FBa0QsR0FBQSxLQUFLO2FBQzFELE9BQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEFBQWpD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LG9CQUFvQixDQUFDLEdBQVE7UUFDeEMsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9JLENBQUM7SUFFRCxRQUFRLENBQUMsZUFBdUIsRUFBRTtRQUM5QixNQUFNLEtBQUssR0FBRyxnRUFBZ0UsQ0FBQztRQUMvRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFWixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsRUFBRSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQzsrR0F6aEJRLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBRmIsTUFBTTs7NEZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlLCBIdHRwUmVzcG9uc2VCYXNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElzQWN0aXZlTWF0Y2hPcHRpb25zIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IEFFUyBmcm9tICdjcnlwdG8tanMvYWVzJztcclxuaW1wb3J0IENyeXB0b0pTQ29yZSBmcm9tICdjcnlwdG8tanMvY29yZSc7XHJcbmltcG9ydCBCYXNlNjQgZnJvbSAnY3J5cHRvLWpzL2VuYy1iYXNlNjQnO1xyXG5pbXBvcnQgSGV4IGZyb20gJ2NyeXB0by1qcy9lbmMtaGV4JztcclxuaW1wb3J0IFVURjggZnJvbSAnY3J5cHRvLWpzL2VuYy11dGY4JztcclxuaW1wb3J0IFBrY3M3IGZyb20gJ2NyeXB0by1qcy9wYWQtcGtjczcnO1xyXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcbmltcG9ydCB7IHRocm93RXJyb3IsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ01BVF9WRVJTSU9OIH0gZnJvbSAnY21hdC92ZXJzaW9uJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ21hdFV0aWxzU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGNhcHRpb25BbmRNZXNzYWdlU2VwYXJhdG9yID0gJzonO1xyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBub05ldHdvcmtNZXNzYWdlQ2FwdGlvbiA9ICfml6DnvZHnu5wnO1xyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBub05ldHdvcmtNZXNzYWdlRGV0YWlsID0gJ+aXoOazlei/nuaOpeacjeWKoeWZqCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGFjY2Vzc0RlbmllZE1lc3NhZ2VDYXB0aW9uID0gJ+aLkue7neiuv+mXriEnO1xyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBhY2Nlc3NEZW5pZWRNZXNzYWdlRGV0YWlsID0gJyc7XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBrZXkgPSBVVEY4LnBhcnNlKCcxNDc4OTYzMjIzNjk4NzQxMTQ3ODk2MzIyMzY5ODc0MScpOy8vMzLkvY1cclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGl2ID0gVVRGOC5wYXJzZSgnMTQ3ODk2MzIyMzY5ODc0MScpOy8vMTbkvY1cclxuXHJcbiAgICBnZXQgZXhhY3RNYXRjaE9wdGlvbnMoKTogSXNBY3RpdmVNYXRjaE9wdGlvbnMge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBhdGhzOiAnZXhhY3QnLFxyXG4gICAgICAgICAgICBmcmFnbWVudDogJ2lnbm9yZWQnLFxyXG4gICAgICAgICAgICBtYXRyaXhQYXJhbXM6ICdpZ25vcmVkJyxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6ICdleGFjdCdcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzdWJzZXRNYXRjaE9wdGlvbnMoKTogSXNBY3RpdmVNYXRjaE9wdGlvbnMge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBhdGhzOiAnc3Vic2V0JyxcclxuICAgICAgICAgICAgZnJhZ21lbnQ6ICdpZ25vcmVkJyxcclxuICAgICAgICAgICAgbWF0cml4UGFyYW1zOiAnaWdub3JlZCcsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiAnc3Vic2V0J1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZXF1ZXN0SGVhZGVycygpOiBIdHRwSGVhZGVycyB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJylcclxuICAgICAgICAgICAgLmFwcGVuZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdBY2NlcHQnLCBgYXBwbGljYXRpb24vdm5kLmltYW4udiR7Q01BVF9WRVJTSU9OfStqc29uLCBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLypgKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdBcHAtVmVyc2lvbicsIENNQVRfVkVSU0lPTik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZXF1ZXN0SWRlbXBvdGVudEhlYWRlcnMoKTogSHR0cEhlYWRlcnMge1xyXG4gICAgICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCAnKicpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJylcclxuICAgICAgICAgICAgLmFwcGVuZCgnWC1SZXF1ZXN0LUlEJywgQ21hdFV0aWxzU2VydmljZS5uZXdHdWlkKCkpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ0FjY2VwdCcsIGBhcHBsaWNhdGlvbi92bmQuaW1hbi52JHtDTUFUX1ZFUlNJT059K2pzb24sIGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKmApXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ0FwcC1WZXJzaW9uJywgQ01BVF9WRVJTSU9OKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFJlcXVlc3RCeXBhc3NIZWFkZXJzKCk6IEh0dHBIZWFkZXJzIHtcclxuICAgICAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgLmFwcGVuZCgnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ2J5cGFzcycsICd0cnVlJylcclxuICAgICAgICAgICAgLmFwcGVuZCgnQWNjZXB0JywgYGFwcGxpY2F0aW9uL3ZuZC5pbWFuLnYke0NNQVRfVkVSU0lPTn0ranNvbiwgYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qYClcclxuICAgICAgICAgICAgLmFwcGVuZCgnQXBwLVZlcnNpb24nLCBDTUFUX1ZFUlNJT04pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVxdWVzdElkZW1wb3RlbnRCeXBhc3NIZWFkZXJzKCk6IEh0dHBIZWFkZXJzIHtcclxuICAgICAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgLmFwcGVuZCgnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ1gtUmVxdWVzdC1JRCcsIENtYXRVdGlsc1NlcnZpY2UubmV3R3VpZCgpKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdieXBhc3MnLCAndHJ1ZScpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ0FjY2VwdCcsIGBhcHBsaWNhdGlvbi92bmQuaW1hbi52JHtDTUFUX1ZFUlNJT059K2pzb24sIGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKmApXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ0FwcC1WZXJzaW9uJywgQ01BVF9WRVJTSU9OKTtcclxuICAgIH0gICAgXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZXF1ZXN0Q3J5cHRvSGVhZGVycyhwYXJhbXM6IHN0cmluZyk6IEh0dHBIZWFkZXJzIHtcclxuICAgICAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgLmFwcGVuZCgnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdBY2NlcHQnLCBgYXBwbGljYXRpb24vdm5kLmltYW4udiR7Q01BVF9WRVJTSU9OfStqc29uLCBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLypgKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdBcHAtVmVyc2lvbicsIHRoaXMuZ2V0RW5jcnlwdERhdGEoJ3BhcnR5bWFuYWdlQXBpJyArIHBhcmFtcykudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZXF1ZXN0Q3J5cHRvQnlwYXNzSGVhZGVycyhwYXJhbXM6IHN0cmluZyk6IEh0dHBIZWFkZXJzIHtcclxuICAgICAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgLmFwcGVuZCgnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdBY2NlcHQnLCBgYXBwbGljYXRpb24vdm5kLmltYW4udiR7Q01BVF9WRVJTSU9OfStqc29uLCBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLypgKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdieXBhc3MnLCAndHJ1ZScpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ0FwcC1WZXJzaW9uJywgdGhpcy5nZXRFbmNyeXB0RGF0YSgncGFydHltYW5hZ2VBcGknICsgcGFyYW1zKS50b1N0cmluZygpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFJlcXVlc3RDcnlwdG9JZGVtcG90ZW50SGVhZGVycyhwYXJhbXM6IHN0cmluZyk6IEh0dHBIZWFkZXJzIHtcclxuICAgICAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgLmFwcGVuZCgnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdYLVJlcXVlc3QtSUQnLCBDbWF0VXRpbHNTZXJ2aWNlLm5ld0d1aWQoKSlcclxuICAgICAgICAgICAgLmFwcGVuZCgnQWNjZXB0JywgYGFwcGxpY2F0aW9uL3ZuZC5pbWFuLnYke0NNQVRfVkVSU0lPTn0ranNvbiwgYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qYClcclxuICAgICAgICAgICAgLmFwcGVuZCgnQXBwLVZlcnNpb24nLCB0aGlzLmdldEVuY3J5cHREYXRhKCdwYXJ0eW1hbmFnZUFwaScgKyBwYXJhbXMpLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVxdWVzdENyeXB0b0lkZW1wb3RlbnRCeXBhc3NIZWFkZXJzKHBhcmFtczogc3RyaW5nKTogSHR0cEhlYWRlcnMge1xyXG4gICAgICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCAnKicpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ1gtUmVxdWVzdC1JRCcsIENtYXRVdGlsc1NlcnZpY2UubmV3R3VpZCgpKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdBY2NlcHQnLCBgYXBwbGljYXRpb24vdm5kLmltYW4udiR7Q01BVF9WRVJTSU9OfStqc29uLCBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLypgKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdieXBhc3MnLCAndHJ1ZScpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ0FwcC1WZXJzaW9uJywgdGhpcy5nZXRFbmNyeXB0RGF0YSgncGFydHltYW5hZ2VBcGknICsgcGFyYW1zKS50b1N0cmluZygpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEVuY3J5cHREYXRhKGRhdGE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3Qgc3JjID0gVVRGOC5wYXJzZShkYXRhKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEFFUy5lbmNyeXB0KHNyYywgdGhpcy5rZXksIHtcclxuICAgICAgICAgICAgaXY6IHRoaXMuaXYsXHJcbiAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTQ29yZS5tb2RlLkNCQyxcclxuICAgICAgICAgICAgcGFkZGluZzogUGtjczdcclxuICAgICAgICB9KS5jaXBoZXJ0ZXh0LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXREZWNyeXB0RGF0YShkYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGVuY3J5cHRlZEhleFN0ciA9IEhleC5wYXJzZShkYXRhKTtcclxuICAgICAgICByZXR1cm4gQUVTLmRlY3J5cHQoQmFzZTY0LnN0cmluZ2lmeShlbmNyeXB0ZWRIZXhTdHIpLCB0aGlzLmtleSwge1xyXG4gICAgICAgICAgICBpdjogdGhpcy5pdixcclxuICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlNDb3JlLm1vZGUuQ0JDLFxyXG4gICAgICAgICAgICBwYWRkaW5nOiBQa2NzN1xyXG4gICAgICAgIH0pLnRvU3RyaW5nKFVURjgpLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBoYW5kbGVFcnJvcihlcnJvcjogYW55KTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xyXG4gICAgICAgIGlmIChlcnJvci5lcnJvciBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcclxuICAgICAgICAgICAgLy8gQSBjbGllbnQtc2lkZSBvciBuZXR3b3JrIGVycm9yIG9jY3VycmVkLiBIYW5kbGUgaXQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NsaWVudCBzaWRlIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQ6JywgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVGhlIGJhY2tlbmQgcmV0dXJuZWQgYW4gdW5zdWNjZXNzZnVsIHJlc3BvbnNlIGNvZGUuXHJcbiAgICAgICAgICAgIC8vIFRoZSByZXNwb25zZSBib2R5IG1heSBjb250YWluIGNsdWVzIGFzIHRvIHdoYXQgd2VudCB3cm9uZyxcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQmFja2VuZCAtICcgK1xyXG4gICAgICAgICAgICAgICAgYHN0YXR1czogJHtlcnJvci5zdGF0dXN9LCBgICtcclxuICAgICAgICAgICAgICAgIGBzdGF0dXNUZXh0OiAke2Vycm9yLnN0YXR1c1RleHR9LCBgICtcclxuICAgICAgICAgICAgICAgIGBtZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXR1cm4gYW4gb2JzZXJ2YWJsZSB3aXRoIGEgdXNlci1mYWNpbmcgZXJyb3IgbWVzc2FnZVxyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yIHx8ICdzZXJ2ZXIgZXJyb3InKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEh0dHBSZXNwb25zZU1lc3NhZ2UoZGF0YTogYW55KTogc3RyaW5nW10ge1xyXG5cclxuICAgICAgICBjb25zdCByZXNwb25zZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja05vTmV0d29yayhkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VzLnB1c2goYCR7dGhpcy5ub05ldHdvcmtNZXNzYWdlQ2FwdGlvbn0ke3RoaXMuY2FwdGlvbkFuZE1lc3NhZ2VTZXBhcmF0b3J9ICR7dGhpcy5ub05ldHdvcmtNZXNzYWdlRGV0YWlsfWApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSB0aGlzLmdldFJlc3BvbnNlQm9keShkYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VPYmplY3QgJiYgKHR5cGVvZiByZXNwb25zZU9iamVjdCA9PT0gJ29iamVjdCcgfHwgcmVzcG9uc2VPYmplY3QgaW5zdGFuY2VvZiBPYmplY3QpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlc3BvbnNlT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzcG9uc2VPYmplY3QsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMucHVzaChgJHtrZXl9JHt0aGlzLmNhcHRpb25BbmRNZXNzYWdlU2VwYXJhdG9yfSAke3Jlc3BvbnNlT2JqZWN0W2tleV19YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlT2JqZWN0W2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMucHVzaChyZXNwb25zZU9iamVjdFtrZXldLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlcy5sZW5ndGggJiYgdGhpcy5nZXRSZXNwb25zZUJvZHkoZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlcy5wdXNoKGAke3RoaXMuZ2V0UmVzcG9uc2VCb2R5KGRhdGEpLnRvU3RyaW5nKCl9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXNwb25zZXMucHVzaChkYXRhLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tBY2Nlc3NEZW5pZWQoZGF0YSkpIHtcclxuICAgICAgICAgICAgcmVzcG9uc2VzLnNwbGljZSgwLCAwLCBgJHt0aGlzLmFjY2Vzc0RlbmllZE1lc3NhZ2VDYXB0aW9ufSR7dGhpcy5jYXB0aW9uQW5kTWVzc2FnZVNlcGFyYXRvcn0gJHt0aGlzLmFjY2Vzc0RlbmllZE1lc3NhZ2VEZXRhaWx9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzcG9uc2VzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGZpbmRIdHRwUmVzcG9uc2VNZXNzYWdlKG1lc3NhZ2VUb0ZpbmQ6IHN0cmluZywgZGF0YTogYW55LCBzZWFjaEluQ2FwdGlvbk9ubHkgPSB0cnVlLCBpbmNsdWRlQ2FwdGlvbkluUmVzdWx0ID0gZmFsc2UpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBzZWFyY2hTdHJpbmcgPSBtZXNzYWdlVG9GaW5kLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgaHR0cE1lc3NhZ2VzID0gdGhpcy5nZXRIdHRwUmVzcG9uc2VNZXNzYWdlKGRhdGEpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgaHR0cE1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gQ21hdFV0aWxzU2VydmljZS5zcGxpdEluVHdvKG1lc3NhZ2UsIHRoaXMuY2FwdGlvbkFuZE1lc3NhZ2VTZXBhcmF0b3IpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZ1bGxNZXNzYWdlLmZpcnN0UGFydD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5jbHVkZUNhcHRpb25JblJlc3VsdCA/IG1lc3NhZ2UgOiBmdWxsTWVzc2FnZS5zZWNvbmRQYXJ0ID8/IGZ1bGxNZXNzYWdlLmZpcnN0UGFydDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZWFjaEluQ2FwdGlvbk9ubHkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIGh0dHBNZXNzYWdlcykge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoU3RyaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlQ2FwdGlvbkluUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gQ21hdFV0aWxzU2VydmljZS5zcGxpdEluVHdvKG1lc3NhZ2UsIHRoaXMuY2FwdGlvbkFuZE1lc3NhZ2VTZXBhcmF0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVsbE1lc3NhZ2Uuc2Vjb25kUGFydCA/PyBmdWxsTWVzc2FnZS5maXJzdFBhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFJlc3BvbnNlQm9keShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmVycm9yIHx8IHJlc3BvbnNlLm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGNoZWNrTm9OZXR3b3JrKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzID09PSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgY2hlY2tBY2Nlc3NEZW5pZWQocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5zdGF0dXMgPT09IDQwMztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGNoZWNrTm90Rm91bmQocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5zdGF0dXMgPT09IDQwNDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGNoZWNrSXNMb2NhbEhvc3QodXJsOiBzdHJpbmcsIGJhc2U/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gbmV3IFVSTCh1cmwsIGJhc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRpb24uaG9zdG5hbWUgPT09ICdsb2NhbGhvc3QnIHx8IGxvY2F0aW9uLmhvc3RuYW1lID09PSAnMTI3LjAuMC4xJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFF1ZXJ5UGFyYW1zRnJvbVN0cmluZyhwYXJhbVN0cmluZzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4gfCBudWxsIHtcclxuICAgICAgICBpZiAoIXBhcmFtU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsPiA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtU3RyaW5nLnNwbGl0KCcmJykpIHtcclxuICAgICAgICAgICAgY29uc3Qga2V5VmFsdWUgPSBDbWF0VXRpbHNTZXJ2aWNlLnNwbGl0SW5Ud28ocGFyYW0sICc9Jyk7XHJcbiAgICAgICAgICAgIHBhcmFtc1trZXlWYWx1ZS5maXJzdFBhcnRdID0ga2V5VmFsdWUuc2Vjb25kUGFydDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJhbXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBzcGxpdEluVHdvKHRleHQ6IHN0cmluZywgc2VwYXJhdG9yPzogc3RyaW5nKTogeyBmaXJzdFBhcnQ6IHN0cmluZzsgc2Vjb25kUGFydDogc3RyaW5nIHwgbnVsbCB9IHtcclxuICAgICAgICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IHNlcGFyYXRvciA/IHRleHQuaW5kZXhPZihzZXBhcmF0b3IpIDogLTE7XHJcblxyXG4gICAgICAgIGlmIChzZXBhcmF0b3JJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZmlyc3RQYXJ0OiB0ZXh0LCBzZWNvbmRQYXJ0OiBudWxsIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJ0MSA9IHRleHQuc3Vic3RyaW5nKDAsIHNlcGFyYXRvckluZGV4KS50cmltKCk7XHJcbiAgICAgICAgY29uc3QgcGFydDIgPSB0ZXh0LnN1YnN0cmluZyhzZXBhcmF0b3JJbmRleCArIDEpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgZmlyc3RQYXJ0OiBwYXJ0MSwgc2Vjb25kUGFydDogcGFydDIgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHNhZmVTdHJpbmdpZnkob2JqZWN0OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkob2JqZWN0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGNhdGNoIHsgLyogZW1wdHkgKi8gfVxyXG5cclxuICAgICAgICBjb25zdCBzaW1wbGVPYmplY3Q6IGFueSA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKG9iamVjdFtwcm9wXSkgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKG9iamVjdFtwcm9wXSkgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2ltcGxlT2JqZWN0W3Byb3BdID0gb2JqZWN0W3Byb3BdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzdWx0ID0gJ1sqKipTYW5pdGl6ZWQgT2JqZWN0KioqXTogJyArIEpTT04uc3RyaW5naWZ5KHNpbXBsZU9iamVjdCk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBqc29uVHJ5UGFyc2UodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHZvaWQge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGNhcGl0YWxpemVGaXJzdExldHRlcih0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0ZXh0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgdG9UaXRsZUNhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cXHdcXFMqL2csIHN1YlN0cmluZyA9PiBzdWJTdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdWJTdHJpbmcuc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgdG9Mb3dlckNhc2UoaXRlbXM6IGFueSk6IHN0cmluZyB8IHN0cmluZ1tdIHwgdm9pZCB7XHJcbiAgICAgICAgaWYgKGl0ZW1zIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgY29uc3QgbG93ZXJlZFJvbGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbG93ZXJlZFJvbGVzW2ldID0gaXRlbXNbaV0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGxvd2VyZWRSb2xlcztcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtcyA9PT0gJ3N0cmluZycgfHwgaXRlbXMgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdm9pZCAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgdW5pcXVlSWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yYW5kb21OdW1iZXIoMTAwMDAwMCwgOTAwMDAwMCkudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJhbmRvbU51bWJlcihtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgYmFzZVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBiYXNlOiBzdHJpbmc7XHJcblxyXG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ub3JpZ2luKSB7XHJcbiAgICAgICAgICAgIGJhc2UgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJhc2UgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgKHdpbmRvdy5sb2NhdGlvbi5wb3J0ID8gJzonICsgd2luZG93LmxvY2F0aW9uLnBvcnQgOiAnJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYmFzZS5yZXBsYWNlKC9cXC8kLywgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgbmV3R3VpZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIChjKSA9PiB7XHJcbiAgICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMDtcclxuICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4ODtcclxuICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgdGVzdElzQWJzb2x1dGVVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCByID0gbmV3IFJlZ0V4cCgnXig/OlthLXpdKzopPy8vJywgJ2knKTtcclxuICAgICAgICByZXR1cm4gci50ZXN0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBjb252ZXJ0VG9BYnNvbHV0ZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIENtYXRVdGlsc1NlcnZpY2UudGVzdElzQWJzb2x1dGVVcmwodXJsKSA/IHVybCA6ICcvLycgKyB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyB1cmxCYXNlNjREZWNvZGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBvdXRwdXQgPSBzdHIucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcclxuICAgICAgICBzd2l0Y2ggKG91dHB1dC5sZW5ndGggJSA0KSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDoge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAyOiB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJz09JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgMzoge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9ICc9JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9iYXNlNjREZWNvZGVVbmljb2RlKG91dHB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBkZWNvZGVUb2tlbih0b2tlbjogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBjb25zdCBwYXJ0cyA9IHRva2VuLnNwbGl0KCcuJyk7XHJcblxyXG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKV1QgbXVzdCBoYXZlIDMgcGFydHMnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSB0aGlzLnVybEJhc2U2NERlY29kZShwYXJ0c1sxXSk7XHJcbiAgICAgICAgaWYgKCFkZWNvZGVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRlY29kZSB0aGUgdG9rZW4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VG9rZW5FeHBpcmF0aW9uRGF0ZSh0b2tlbjogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSB0aGlzLmRlY29kZVRva2VuKHRva2VuKTtcclxuXHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVjb2RlZCwgJ2V4cCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDApOyAvLyBUaGUgMCBoZXJlIGlzIHRoZSBrZXksIHdoaWNoIHNldHMgdGhlIGRhdGUgdG8gdGhlIGVwb2NoXHJcbiAgICAgICAgZGF0ZS5zZXRVVENTZWNvbmRzKGRlY29kZWQuZXhwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpc1Rva2VuRXhwaXJlZCh0b2tlbjogc3RyaW5nLCBvZmZzZXRTZWNvbmRzPzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZ2V0VG9rZW5FeHBpcmF0aW9uRGF0ZSh0b2tlbik7XHJcbiAgICAgICAgb2Zmc2V0U2Vjb25kcyA9IG9mZnNldFNlY29uZHMgPz8gMDtcclxuXHJcbiAgICAgICAgaWYgKGRhdGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUb2tlbiBleHBpcmVkP1xyXG4gICAgICAgIHJldHVybiAhKGRhdGUudmFsdWVPZigpID4gKG5ldyBEYXRlKCkudmFsdWVPZigpICsgKG9mZnNldFNlY29uZHMgKiAxMDAwKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZEFzRGF0YVVSTChmaWxlOiBGaWxlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICAvLyBSZXR1cm4gYSBuZXcgcHJvbWlzZVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcmVhZGVyXHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIG9uIHN1Y2Nlc3NcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvLyBSZWplY3QgdGhlIHByb21pc2Ugb24gZXJyb3JcclxuICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvLyBSZWFkIHRoZSBmaWxlIGFzIHRoZVxyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGRhdGFVUklUb0Jsb2IoZGF0YVVSSTogc3RyaW5nKTogQmxvYiB7XHJcbiAgICAgICAgY29uc3Qgc3BsaXREYXRhVVJJID0gZGF0YVVSSS5zcGxpdCgnLCcpO1xyXG5cclxuICAgICAgICBjb25zdCBieXRlU3RyaW5nID0gc3BsaXREYXRhVVJJWzBdLmluY2x1ZGVzKCdiYXNlNjQnKSA/IGF0b2Ioc3BsaXREYXRhVVJJWzFdKSA6IGRlY29kZVVSSShzcGxpdERhdGFVUklbMV0pO1xyXG4gICAgICAgIGNvbnN0IG1pbWVTdHJpbmcgPSBzcGxpdERhdGFVUklbMF0uc3BsaXQoJzonKVsxXS5zcGxpdCgnOycpWzBdO1xyXG5cclxuICAgICAgICBjb25zdCBpYSA9IG5ldyBVaW50OEFycmF5KGJ5dGVTdHJpbmcubGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2lhXSwgeyB0eXBlOiBtaW1lU3RyaW5nIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RmlsZVR5cGUoYWNjZXB0OiBzdHJpbmcpOiAnY3N2JyB8ICdnaWYnIHwgJ3dvcmQnIHwgJ2V4Y2VsJyB8ICdqcGcnIHwgJ291dGxvb2snIHwgJ3BkZicgfCAncG5nJyB8ICdwcHQnIHwgJ2ZpbGUnIHwgJ3RleHQnIHwgJ3ZpZGVvJyB8ICd6aXAnIHtcclxuICAgICAgICBsZXQgZmlsZVR5cGUgPSAnZmlsZSc7XHJcbiAgICAgICAgc3dpdGNoIChhY2NlcHQpIHtcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UvanBlZyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlL2pwZyc6XHJcbiAgICAgICAgICAgICAgICBmaWxlVHlwZSA9ICdqcGcnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlL3BuZyc6XHJcbiAgICAgICAgICAgICAgICBmaWxlVHlwZSA9ICdwbmcnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RleHQvY3N2JzpcclxuICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gJ2Nzdic7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UvZ2lmJzpcclxuICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gJ2dpZic7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vbXN3b3JkJzpcclxuICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnOlxyXG4gICAgICAgICAgICAgICAgZmlsZVR5cGUgPSAnd29yZCc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJzpcclxuICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnOlxyXG4gICAgICAgICAgICAgICAgZmlsZVR5cGUgPSAnd29yZCc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vcGRmJzpcclxuICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gJ3BkZic7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbic6XHJcbiAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JzpcclxuICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gJ3BwdCc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dC9wbGFpbic6XHJcbiAgICAgICAgICAgICAgICBmaWxlVHlwZSA9ICd0ZXh0JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd2aWRlby9tcGVnJzpcclxuICAgICAgICAgICAgY2FzZSAndmlkZW8vbXA0JzpcclxuICAgICAgICAgICAgY2FzZSAnYXVkaW8vbXA0JzpcclxuICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gJ3ZpZGVvJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdhcGxpY2F0aW9uL3ppcCc6XHJcbiAgICAgICAgICAgICAgICBmaWxlVHlwZSA9ICd6aXAnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmlsZVR5cGUgYXMgJ2NzdicgfCAnZ2lmJyB8ICd3b3JkJyB8ICdleGNlbCcgfCAnanBnJyB8ICdvdXRsb29rJyB8ICdwZGYnIHwgJ3BuZycgfCAncHB0JyB8ICdmaWxlJyB8ICd0ZXh0JyB8ICd2aWRlbycgfCAnemlwJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBfYmFzZTY0RGVjb2RlVW5pY29kZShzdHI6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoYXRvYihzdHIpLCAoYzogYW55KSA9PiAnJScgKyAoJzAwJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKSkuam9pbignJykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJhbmRvbUlkKHN0cmluZ0xlbmd0aDogbnVtYmVyID0gMTApOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcclxuICAgICAgICBsZXQgaWQgPSAnJztcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZCArPSBjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4iXX0=
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21hdC12YWxpZGF0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC92YWxpZGF0b3JzL2NtYXQtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './validators';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvdmFsaWRhdG9ycy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3JzJztcclxuIl19
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export class CmatValidators {
|
|
2
|
-
static isEmptyInputValue(value) {
|
|
3
|
-
return value == null || value.length === 0;
|
|
4
|
-
}
|
|
5
|
-
static mustMatch(controlPath, matchingControlPath) {
|
|
6
|
-
return (formGroup) => {
|
|
7
|
-
// Get the control and matching control
|
|
8
|
-
const control = formGroup.get(controlPath);
|
|
9
|
-
const matchingControl = formGroup.get(matchingControlPath);
|
|
10
|
-
// Return if control or matching control doesn't exist
|
|
11
|
-
if (!control || !matchingControl) {
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
// Delete the mustMatch error to reset the error on the matching control
|
|
15
|
-
if (matchingControl.hasError('mustMatch')) {
|
|
16
|
-
delete matchingControl.errors?.['mustMatch'];
|
|
17
|
-
matchingControl.updateValueAndValidity();
|
|
18
|
-
}
|
|
19
|
-
// Don't validate empty values on the matching control
|
|
20
|
-
// Don't validate if values are matching
|
|
21
|
-
if (this.isEmptyInputValue(matchingControl.value) || control.value === matchingControl.value) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
// Prepare the validation errors
|
|
25
|
-
const errors = { mustMatch: true };
|
|
26
|
-
// Set the validation error on the matching control
|
|
27
|
-
matchingControl.setErrors(errors);
|
|
28
|
-
// Return the errors
|
|
29
|
-
return errors;
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvdmFsaWRhdG9ycy92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFVO1FBQy9CLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFtQixFQUFFLG1CQUEyQjtRQUM3RCxPQUFPLENBQUMsU0FBMEIsRUFBMkIsRUFBRTtZQUUzRCx1Q0FBdUM7WUFDdkMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzQyxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFFM0Qsc0RBQXNEO1lBQ3RELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUVELHdFQUF3RTtZQUN4RSxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzdDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzdDLENBQUM7WUFFRCxzREFBc0Q7WUFDdEQsd0NBQXdDO1lBQ3hDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0YsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUVELGdDQUFnQztZQUNoQyxNQUFNLE1BQU0sR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUVuQyxtREFBbUQ7WUFDbkQsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVsQyxvQkFBb0I7WUFDcEIsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDbWF0VmFsaWRhdG9ycyB7XHJcbiAgICBzdGF0aWMgaXNFbXB0eUlucHV0VmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbXVzdE1hdGNoKGNvbnRyb2xQYXRoOiBzdHJpbmcsIG1hdGNoaW5nQ29udHJvbFBhdGg6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG5cclxuICAgICAgICAgICAgLy8gR2V0IHRoZSBjb250cm9sIGFuZCBtYXRjaGluZyBjb250cm9sXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xQYXRoKTtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gZm9ybUdyb3VwLmdldChtYXRjaGluZ0NvbnRyb2xQYXRoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJldHVybiBpZiBjb250cm9sIG9yIG1hdGNoaW5nIGNvbnRyb2wgZG9lc24ndCBleGlzdFxyXG4gICAgICAgICAgICBpZiAoIWNvbnRyb2wgfHwgIW1hdGNoaW5nQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgbXVzdE1hdGNoIGVycm9yIHRvIHJlc2V0IHRoZSBlcnJvciBvbiB0aGUgbWF0Y2hpbmcgY29udHJvbFxyXG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdDb250cm9sLmhhc0Vycm9yKCdtdXN0TWF0Y2gnKSkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIG1hdGNoaW5nQ29udHJvbC5lcnJvcnM/LlsnbXVzdE1hdGNoJ107XHJcbiAgICAgICAgICAgICAgICBtYXRjaGluZ0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBEb24ndCB2YWxpZGF0ZSBlbXB0eSB2YWx1ZXMgb24gdGhlIG1hdGNoaW5nIGNvbnRyb2xcclxuICAgICAgICAgICAgLy8gRG9uJ3QgdmFsaWRhdGUgaWYgdmFsdWVzIGFyZSBtYXRjaGluZ1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5SW5wdXRWYWx1ZShtYXRjaGluZ0NvbnRyb2wudmFsdWUpIHx8IGNvbnRyb2wudmFsdWUgPT09IG1hdGNoaW5nQ29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFByZXBhcmUgdGhlIHZhbGlkYXRpb24gZXJyb3JzXHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHsgbXVzdE1hdGNoOiB0cnVlIH07XHJcblxyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIHZhbGlkYXRpb24gZXJyb3Igb24gdGhlIG1hdGNoaW5nIGNvbnRyb2xcclxuICAgICAgICAgICAgbWF0Y2hpbmdDb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvcnNcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21hdC12ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC92ZXJzaW9uL2NtYXQtdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './version';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvdmVyc2lvbi9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi92ZXJzaW9uJztcclxuIl19
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export class Version {
|
|
2
|
-
constructor(version) {
|
|
3
|
-
this.version = version;
|
|
4
|
-
this.full = version;
|
|
5
|
-
this.major = version.split('.')[0];
|
|
6
|
-
this.minor = version.split('.')[1];
|
|
7
|
-
this.patch = version.split('.').slice(2).join('.');
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
export const CMAT_VERSION = new Version('1.0.0').full;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvdmVyc2lvbi92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxPQUFPO0lBT2hCLFlBQW1CLE9BQWU7UUFBZixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBRTlCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNKO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBWZXJzaW9uXHJcbntcclxuICAgIHB1YmxpYyByZWFkb25seSBmdWxsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWFqb3I6IHN0cmluZztcclxuICAgIHB1YmxpYyByZWFkb25seSBtaW5vcjogc3RyaW5nO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHBhdGNoOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIHZlcnNpb246IHN0cmluZylcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZ1bGwgPSB2ZXJzaW9uO1xyXG4gICAgICAgIHRoaXMubWFqb3IgPSB2ZXJzaW9uLnNwbGl0KCcuJylbMF07XHJcbiAgICAgICAgdGhpcy5taW5vciA9IHZlcnNpb24uc3BsaXQoJy4nKVsxXTtcclxuICAgICAgICB0aGlzLnBhdGNoID0gdmVyc2lvbi5zcGxpdCgnLicpLnNsaWNlKDIpLmpvaW4oJy4nKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IENNQVRfVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxLjAuMCcpLmZ1bGw7XHJcbiJdfQ==
|