barsa-sap-ui 2.2.73 → 2.2.75
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/fesm2022/barsa-sap-ui.mjs +758 -762
- package/fesm2022/barsa-sap-ui.mjs.map +1 -1
- package/lib/models/grid-data-provider.d.ts +1 -1
- package/lib/notification-popup.service.d.ts +1 -1
- package/lib/ui-grid-columns/ui-grid-columns.component.d.ts +1 -1
- package/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.d.ts +1 -1
- package/lib/ui-pictures-info/ui-pictures-info.component.d.ts +2 -2
- package/lib/ui-table-view/ui-table-view.component.d.ts +4 -4
- package/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.d.ts +1 -1
- package/lib/ul-notify-popup/ul-notify-popup.component.d.ts +1 -1
- package/lib/ulv-toolbar/ulv-toolbar.component.d.ts +2 -2
- package/package.json +3 -5
- package/esm2022/barsa-sap-ui.mjs +0 -5
- package/esm2022/lib/apply-conditional-formmatings.directive.mjs +0 -90
- package/esm2022/lib/avatar-size.pipe.mjs +0 -41
- package/esm2022/lib/barsa-answer-card/barsa-answer-card.component.mjs +0 -41
- package/esm2022/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +0 -153
- package/esm2022/lib/barsa-bar-download-file/barsa-bar-download-file.component.mjs +0 -30
- package/esm2022/lib/barsa-bar-panel/barsa-bar-panel.component.mjs +0 -23
- package/esm2022/lib/barsa-base-panel/barsa-base-layout-panel.component.mjs +0 -29
- package/esm2022/lib/barsa-breadcrumbs/barsa-breadcrumbs.component.mjs +0 -24
- package/esm2022/lib/barsa-card-banner/barsa-card-banner.component.mjs +0 -38
- package/esm2022/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.mjs +0 -24
- package/esm2022/lib/barsa-card-row-payam/barsa-card-row-payam.component.mjs +0 -31
- package/esm2022/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +0 -41
- package/esm2022/lib/barsa-cartable-template/barsa-cartable-template.component.mjs +0 -24
- package/esm2022/lib/barsa-chat/barsa-chat.component.mjs +0 -84
- package/esm2022/lib/barsa-chat/chat.model.mjs +0 -8
- package/esm2022/lib/barsa-chat-content/barsa-chat-content.component.mjs +0 -13
- package/esm2022/lib/barsa-chat-content-toolbar/barsa-chat-content-toolbar.component.mjs +0 -22
- package/esm2022/lib/barsa-chat-list/barsa-chat-list.component.mjs +0 -117
- package/esm2022/lib/barsa-chat-message/barsa-chat-message.component.mjs +0 -79
- package/esm2022/lib/barsa-chat-thread/barsa-chat-thread.component.mjs +0 -22
- package/esm2022/lib/barsa-chat-threads-list/barsa-chat-threads-list.component.mjs +0 -13
- package/esm2022/lib/barsa-chat-threads-list-toolbar/barsa-chat-threads-list-toolbar.component.mjs +0 -15
- package/esm2022/lib/barsa-chip/barsa-chip.component.mjs +0 -72
- package/esm2022/lib/barsa-column-indicator/barsa-column-indicator.component.mjs +0 -23
- package/esm2022/lib/barsa-column-rownumber/barsa-column-rownumber.component.mjs +0 -14
- package/esm2022/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.mjs +0 -14
- package/esm2022/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.mjs +0 -26
- package/esm2022/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +0 -71
- package/esm2022/lib/barsa-dynamic-field/barsa-dynamic-field.component.mjs +0 -40
- package/esm2022/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.mjs +0 -61
- package/esm2022/lib/barsa-field-key-value/barsa-field-key-value.component.mjs +0 -45
- package/esm2022/lib/barsa-form-layout-panel/barsa-form-layout-panel.component.mjs +0 -58
- package/esm2022/lib/barsa-form-side-content/barsa-form-side-content.component.mjs +0 -58
- package/esm2022/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.mjs +0 -27
- package/esm2022/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +0 -94
- package/esm2022/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.mjs +0 -22
- package/esm2022/lib/barsa-img-skeleton/barsa-img-skeleton.component.mjs +0 -25
- package/esm2022/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.mjs +0 -37
- package/esm2022/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +0 -42
- package/esm2022/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.mjs +0 -30
- package/esm2022/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.mjs +0 -23
- package/esm2022/lib/barsa-modal/barsa-modal.component.mjs +0 -43
- package/esm2022/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +0 -83
- package/esm2022/lib/barsa-network-offline/barsa-network-offline.component.mjs +0 -57
- package/esm2022/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +0 -159
- package/esm2022/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.mjs +0 -17
- package/esm2022/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.mjs +0 -30
- package/esm2022/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.mjs +0 -14
- package/esm2022/lib/barsa-question-answer-form/barsa-question-answer-form.component.mjs +0 -34
- package/esm2022/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.mjs +0 -46
- package/esm2022/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.mjs +0 -79
- package/esm2022/lib/barsa-question-post/barsa-question-post.component.mjs +0 -30
- package/esm2022/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.mjs +0 -31
- package/esm2022/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.mjs +0 -28
- package/esm2022/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.mjs +0 -103
- package/esm2022/lib/barsa-row-inline-actionlist/barsa-row-inline-actionlist.component.mjs +0 -26
- package/esm2022/lib/barsa-sap-ui-routing.module.mjs +0 -18
- package/esm2022/lib/barsa-sap-ui.module.mjs +0 -369
- package/esm2022/lib/barsa-search-form/barsa-search-form.component.mjs +0 -30
- package/esm2022/lib/barsa-simple-form/barsa-simple-form.component.mjs +0 -171
- package/esm2022/lib/barsa-tab-route-manager/barsa-tab-route-manager.component.mjs +0 -18
- package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +0 -29
- package/esm2022/lib/barsa-table-header/barsa-table-header.component.mjs +0 -230
- package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +0 -102
- package/esm2022/lib/barsa-tag-categories/barsa-tag-categories.component.mjs +0 -60
- package/esm2022/lib/barsa-tag-chip/barsa-tag-chip.component.mjs +0 -26
- package/esm2022/lib/barsa-tags-category-row/barsa-tags-category-row.component.mjs +0 -23
- package/esm2022/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +0 -37
- package/esm2022/lib/barsa-theme/barsa-theme.component.mjs +0 -121
- package/esm2022/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +0 -419
- package/esm2022/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.mjs +0 -36
- package/esm2022/lib/barsa-tree-item/barsa-tree-item.component.mjs +0 -153
- package/esm2022/lib/barsa-tree-item/node-has-one-depth-level.pipe.mjs +0 -20
- package/esm2022/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +0 -248
- package/esm2022/lib/blob-viewer/blob-viewer.component.mjs +0 -79
- package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +0 -52
- package/esm2022/lib/captcha-field/captcha-field.component.mjs +0 -33
- package/esm2022/lib/card-item/card-item.component.mjs +0 -79
- package/esm2022/lib/card-view-content/card-view-content.component.mjs +0 -46
- package/esm2022/lib/col-renderer.directive.mjs +0 -47
- package/esm2022/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +0 -56
- package/esm2022/lib/column-matrix-renderer/matrix-value.pipe.mjs +0 -61
- package/esm2022/lib/column-renderer/column-renderer.component.mjs +0 -108
- package/esm2022/lib/constants.mjs +0 -450
- package/esm2022/lib/contentDensity.directive.mjs +0 -25
- package/esm2022/lib/custom-date-time/custom-date-time.component.mjs +0 -41
- package/esm2022/lib/device-info-field-base.mjs +0 -24
- package/esm2022/lib/dialog-handler.directive.mjs +0 -29
- package/esm2022/lib/download-files.directive.mjs +0 -34
- package/esm2022/lib/dynamic-page-size.pipe.mjs +0 -27
- package/esm2022/lib/file-in-dialog/file-in-dialog.component.mjs +0 -44
- package/esm2022/lib/file-viewer/file-viewer.component.mjs +0 -47
- package/esm2022/lib/file-viewer-content/file-viewer-content.component.mjs +0 -80
- package/esm2022/lib/file-viewer-popover/file-viewer-popover.component.mjs +0 -40
- package/esm2022/lib/form-dialog/form-dialog.component.mjs +0 -175
- package/esm2022/lib/form-dialog-less/form-dialog-less.component.mjs +0 -50
- package/esm2022/lib/form-toolbar/form-toolbar.component.mjs +0 -62
- package/esm2022/lib/form-toolbar-button/form-toolbar-button.component.mjs +0 -45
- package/esm2022/lib/form-wizard/form-wizard.component.mjs +0 -22
- package/esm2022/lib/fullscreen-dialog.directive.mjs +0 -60
- package/esm2022/lib/fullscreen-files.directive.mjs +0 -43
- package/esm2022/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +0 -220
- package/esm2022/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +0 -215
- package/esm2022/lib/global-search/global-search.component.mjs +0 -27
- package/esm2022/lib/global-search-module/global-search-module.component.mjs +0 -29
- package/esm2022/lib/global-search-panel/global-search-panel.component.mjs +0 -25
- package/esm2022/lib/header-avatar/header-avatar.component.mjs +0 -18
- package/esm2022/lib/htree-create-new/htree-create-new.component.mjs +0 -48
- package/esm2022/lib/hyperlink/hyperlink.component.mjs +0 -23
- package/esm2022/lib/index.mjs +0 -467
- package/esm2022/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +0 -32
- package/esm2022/lib/layout-actions/layout-actions.component.mjs +0 -70
- package/esm2022/lib/layout-control/layout-control.component.mjs +0 -320
- package/esm2022/lib/layout-wizard/layout-wizard.component.mjs +0 -180
- package/esm2022/lib/list-item/list-item.component.mjs +0 -34
- package/esm2022/lib/ly-empty-space/ly-empty-space.component.mjs +0 -42
- package/esm2022/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +0 -82
- package/esm2022/lib/ly-label/ly-label.component.mjs +0 -39
- package/esm2022/lib/ly-layout-container/ly-layout-container.component.mjs +0 -83
- package/esm2022/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +0 -24
- package/esm2022/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +0 -24
- package/esm2022/lib/ly-layout-panel/ly-layout-panel.component.mjs +0 -92
- package/esm2022/lib/ly-line/ly-line.component.mjs +0 -56
- package/esm2022/lib/ly-simple-label/ly-simple-label.component.mjs +0 -22
- package/esm2022/lib/ly-tab-container/ly-tab-container.component.mjs +0 -44
- package/esm2022/lib/ly-tab-page/ly-tab-page.component.mjs +0 -49
- package/esm2022/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +0 -51
- package/esm2022/lib/manage-filters-report/manage-filters-report.component.mjs +0 -43
- package/esm2022/lib/mask/mask.component.mjs +0 -22
- package/esm2022/lib/message-strip/message-strip.component.mjs +0 -29
- package/esm2022/lib/models/grid-data-provider.mjs +0 -121
- package/esm2022/lib/models/grid-view.mjs +0 -2
- package/esm2022/lib/models/index.mjs +0 -2
- package/esm2022/lib/no-data/no-data.component.mjs +0 -30
- package/esm2022/lib/notification-item/notification-item.component.mjs +0 -57
- package/esm2022/lib/notification-item-actions/notification-item-actions.component.mjs +0 -79
- package/esm2022/lib/notification-popup.service.mjs +0 -92
- package/esm2022/lib/object-status-icon.pipe.mjs +0 -27
- package/esm2022/lib/progress-indicator/progress-indicator.component.mjs +0 -18
- package/esm2022/lib/report-navigator/report-navigator.component.mjs +0 -75
- package/esm2022/lib/report-new-top-form/report-new-top-form.component.mjs +0 -61
- package/esm2022/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +0 -35
- package/esm2022/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +0 -97
- package/esm2022/lib/report-search-panel-save/report-search-panel-save.component.mjs +0 -88
- package/esm2022/lib/report-tree-base.mjs +0 -387
- package/esm2022/lib/report-view-renderer.directive.mjs +0 -395
- package/esm2022/lib/responsive-toolbar/responsive-toolbar.component.mjs +0 -50
- package/esm2022/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +0 -84
- package/esm2022/lib/rich-text-static/rich-text-static.component.mjs +0 -74
- package/esm2022/lib/sap-font-class.pipe.mjs +0 -30
- package/esm2022/lib/sap-font.pipe.mjs +0 -30
- package/esm2022/lib/sap-size.pipe.mjs +0 -28
- package/esm2022/lib/sap-ui-report-base.component.mjs +0 -819
- package/esm2022/lib/search-panel/search-panel.component.mjs +0 -63
- package/esm2022/lib/static-text/static-text.component.mjs +0 -15
- package/esm2022/lib/table-th.directive.mjs +0 -87
- package/esm2022/lib/title/title.component.mjs +0 -15
- package/esm2022/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +0 -44
- package/esm2022/lib/ui-bpmn-viewer/ui-bpmn-viewer.component.mjs +0 -33
- package/esm2022/lib/ui-button/ui-button.component.mjs +0 -32
- package/esm2022/lib/ui-calendar/ui-calendar.component.mjs +0 -54
- package/esm2022/lib/ui-card-view/ui-card-view.component.mjs +0 -63
- package/esm2022/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +0 -43
- package/esm2022/lib/ui-check-box/ui-check-box.component.mjs +0 -44
- package/esm2022/lib/ui-color-ui/ui-color-ui.component.mjs +0 -50
- package/esm2022/lib/ui-container-with-button/ui-container-with-button.component.mjs +0 -38
- package/esm2022/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +0 -191
- package/esm2022/lib/ui-date-time/ui-date-time.component.mjs +0 -150
- package/esm2022/lib/ui-editable-grid/ui-editable-grid.component.mjs +0 -111
- package/esm2022/lib/ui-exception-form/ui-exception-form.component.mjs +0 -53
- package/esm2022/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +0 -138
- package/esm2022/lib/ui-form-panel/ui-form-panel.component.mjs +0 -104
- package/esm2022/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +0 -33
- package/esm2022/lib/ui-graph/ui-graph.component.mjs +0 -17
- package/esm2022/lib/ui-grid/ui-grid.component.mjs +0 -26
- package/esm2022/lib/ui-grid-columns/ui-grid-columns.component.mjs +0 -43
- package/esm2022/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +0 -66
- package/esm2022/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +0 -75
- package/esm2022/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +0 -58
- package/esm2022/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +0 -123
- package/esm2022/lib/ui-html-viewer/ui-html-viewer.component.mjs +0 -16
- package/esm2022/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +0 -11
- package/esm2022/lib/ui-label/ui-label.component.mjs +0 -12
- package/esm2022/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +0 -405
- package/esm2022/lib/ui-list-view/ui-list-view.component.mjs +0 -85
- package/esm2022/lib/ui-map/ui-map.component.mjs +0 -68
- package/esm2022/lib/ui-matrix-view/ui-matrix-view.component.mjs +0 -124
- package/esm2022/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +0 -19
- package/esm2022/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +0 -14
- package/esm2022/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +0 -55
- package/esm2022/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +0 -450
- package/esm2022/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +0 -28
- package/esm2022/lib/ui-multi-select-card/ui-multi-select-card.component.mjs +0 -37
- package/esm2022/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.mjs +0 -59
- package/esm2022/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +0 -117
- package/esm2022/lib/ui-multi-select-radio/ui-multi-select-radio.component.mjs +0 -36
- package/esm2022/lib/ui-multi-select-slider/ui-multi-select-slider.component.mjs +0 -56
- package/esm2022/lib/ui-multi-select-smile/ui-multi-select-smile.component.mjs +0 -28
- package/esm2022/lib/ui-notification-view/ui-notification-view.component.mjs +0 -47
- package/esm2022/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +0 -33
- package/esm2022/lib/ui-num-int-slider/ui-num-int-slider.component.mjs +0 -27
- package/esm2022/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +0 -21
- package/esm2022/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +0 -271
- package/esm2022/lib/ui-picture-file/ui-picture-file.component.mjs +0 -103
- package/esm2022/lib/ui-pictures-info/ui-pictures-info.component.mjs +0 -260
- package/esm2022/lib/ui-radio-group/ui-radio-group.component.mjs +0 -48
- package/esm2022/lib/ui-read-only-field/ui-read-only-field.component.mjs +0 -36
- package/esm2022/lib/ui-report-carousel-view/ui-report-carousel-view.component.mjs +0 -140
- package/esm2022/lib/ui-report-container/ui-report-container.component.mjs +0 -66
- package/esm2022/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +0 -24
- package/esm2022/lib/ui-simple-combo/ui-simple-combo.component.mjs +0 -55
- package/esm2022/lib/ui-single-picture/ui-single-picture.component.mjs +0 -36
- package/esm2022/lib/ui-switch-button/ui-switch-button.component.mjs +0 -20
- package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +0 -296
- package/esm2022/lib/ui-text-area/ui-text-area.component.mjs +0 -50
- package/esm2022/lib/ui-text-field/ui-text-field.component.mjs +0 -52
- package/esm2022/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +0 -48
- package/esm2022/lib/ui-time-span/ui-time-span.component.mjs +0 -24
- package/esm2022/lib/ui-tinymce/ui-tinymce.component.mjs +0 -50
- package/esm2022/lib/ui-tree/ui-tree.component.mjs +0 -115
- package/esm2022/lib/ui-tree-view/ui-tree-view.component.mjs +0 -100
- package/esm2022/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +0 -23
- package/esm2022/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +0 -313
- package/esm2022/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +0 -25
- package/esm2022/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +0 -93
- package/esm2022/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +0 -119
- package/esm2022/lib/ul-notify-popup/ul-notify-popup.component.mjs +0 -32
- package/esm2022/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +0 -48
- package/esm2022/lib/ulv-column-settings/ulv-column-settings.component.mjs +0 -53
- package/esm2022/lib/ulv-context-menu/ulv-context-menu.component.mjs +0 -116
- package/esm2022/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +0 -43
- package/esm2022/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +0 -196
- package/esm2022/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +0 -44
- package/esm2022/lib/ulv-paging/ulv-paging.component.mjs +0 -84
- package/esm2022/lib/ulv-selection/ulv-selection.component.mjs +0 -65
- package/esm2022/lib/ulv-settings/ulv-settings.component.mjs +0 -116
- package/esm2022/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +0 -54
- package/esm2022/lib/ulv-toolbar/ulv-toolbar.component.mjs +0 -177
- package/esm2022/lib/upload-file-status.pipe.mjs +0 -29
- package/esm2022/lib/util-chat-time-badge.pipe.mjs +0 -18
- package/esm2022/lib/util-date-to-hh-mm.pipe.mjs +0 -23
- package/esm2022/lib/wizard-layout.directive.mjs +0 -104
- package/esm2022/public-api.mjs +0 -242
|
@@ -1,819 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self, SkipSelf, ViewChild, ViewChildren } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
|
|
3
|
-
import { debounceTime, distinctUntilChanged, filter, map, takeUntil, tap, withLatestFrom } from 'rxjs/operators';
|
|
4
|
-
import { TableComponent, ToolbarComponent } from '@fundamental-ngx/core';
|
|
5
|
-
import { BarsaApi, GetAllColumnsSorted, getControlSizeMode, getGridSettings, ReportBaseComponent, getParentHeight, measureText, getUniqueId, SelectionMode, getDeviceIsDesktop, getDeviceIsMobile, getDeviceIsTablet } from 'barsa-novin-ray-core';
|
|
6
|
-
import { LayoutControlComponent } from './layout-control/layout-control.component';
|
|
7
|
-
import { GridMoDataList } from './models';
|
|
8
|
-
import { UlvColumnSettingsComponent } from './ulv-column-settings/ulv-column-settings.component';
|
|
9
|
-
import { UlvSortSettingsComponent } from './ulv-sort-settings/ulv-sort-settings.component';
|
|
10
|
-
import { UlvGroupbySettingsComponent } from './ulv-groupby-settings/ulv-groupby-settings.component';
|
|
11
|
-
import { UlvFilterSettingsComponent } from './ulv-filter-settings/ulv-filter-settings.component';
|
|
12
|
-
import { DOCUMENT } from '@angular/common';
|
|
13
|
-
import * as i0 from "@angular/core";
|
|
14
|
-
import * as i1 from "@angular/cdk/overlay";
|
|
15
|
-
import * as i2 from "@fundamental-ngx/core";
|
|
16
|
-
import * as i3 from "barsa-novin-ray-core";
|
|
17
|
-
export class SapUiReportBaseComponent extends ReportBaseComponent {
|
|
18
|
-
constructor(el, _cdr, _overlay, _contentDensityService, _portalService, _dialogService, _ulvMainService, _layoutService, _renderer, document, _formpanelService, _layoutServiceParent, _layoutMainContentService) {
|
|
19
|
-
super(_portalService, _ulvMainService);
|
|
20
|
-
this.el = el;
|
|
21
|
-
this._cdr = _cdr;
|
|
22
|
-
this._overlay = _overlay;
|
|
23
|
-
this._contentDensityService = _contentDensityService;
|
|
24
|
-
this._portalService = _portalService;
|
|
25
|
-
this._dialogService = _dialogService;
|
|
26
|
-
this._ulvMainService = _ulvMainService;
|
|
27
|
-
this._layoutService = _layoutService;
|
|
28
|
-
this._renderer = _renderer;
|
|
29
|
-
this.document = document;
|
|
30
|
-
this._formpanelService = _formpanelService;
|
|
31
|
-
this._layoutServiceParent = _layoutServiceParent;
|
|
32
|
-
this._layoutMainContentService = _layoutMainContentService;
|
|
33
|
-
this.useLayoutItemTextForControl = false;
|
|
34
|
-
this.parentHeight = 0;
|
|
35
|
-
this.dialogConfig = {
|
|
36
|
-
responsivePadding: true,
|
|
37
|
-
verticalPadding: true,
|
|
38
|
-
minWidth: '40rem',
|
|
39
|
-
minHeight: '90vh',
|
|
40
|
-
maxWidth: '100vw',
|
|
41
|
-
maxHeight: '100vh',
|
|
42
|
-
resizable: true
|
|
43
|
-
};
|
|
44
|
-
this.id = `Report_${getUniqueId(3)}`;
|
|
45
|
-
this.selectedRowsNumber = {};
|
|
46
|
-
this.selectAll = false;
|
|
47
|
-
this.rowClick = true;
|
|
48
|
-
this.cellClick = false;
|
|
49
|
-
this.secondaryColumnsSource = new BehaviorSubject([]);
|
|
50
|
-
this.secondaryColumns$ = this.secondaryColumnsSource
|
|
51
|
-
.asObservable()
|
|
52
|
-
.pipe(distinctUntilChanged((a, b) => a.length === b.length || a === b));
|
|
53
|
-
this.hasDetailsInRow = false;
|
|
54
|
-
this.rowActivable = true;
|
|
55
|
-
this.openOverflowCommands = [];
|
|
56
|
-
this.containerWidthSource$ = new Subject();
|
|
57
|
-
this.singleSelection = SelectionMode.SINGLE;
|
|
58
|
-
this.multipleSelection = SelectionMode.MULTIPLE;
|
|
59
|
-
this._deviceNameSource = new BehaviorSubject('desktop');
|
|
60
|
-
/* eslint-disable */
|
|
61
|
-
this.ShowFormPanelControl = (formpanelCtrlr) => { };
|
|
62
|
-
/* eslint-disable */
|
|
63
|
-
this.ForceCloseChild = () => { };
|
|
64
|
-
/* eslint-disable */
|
|
65
|
-
this.RefreshFormPanelControl = (formpanelCtrlr) => { };
|
|
66
|
-
this.containerWidth$ = this.containerWidthSource$
|
|
67
|
-
.asObservable()
|
|
68
|
-
.pipe(debounceTime(200), distinctUntilChanged());
|
|
69
|
-
this.deviceName$ = this._deviceNameSource.asObservable();
|
|
70
|
-
this.disableResponsive$ = this.deviceName$.pipe(map((c) => c === 'desktop'));
|
|
71
|
-
this.mobileOrTablet$ = this.deviceName$.pipe(map((device) => device === 'mobile' || device === 'tablet'));
|
|
72
|
-
this._oldContainer = BarsaApi.Ul.ApplicationCtrlr.CurrentSystemAdapter;
|
|
73
|
-
this.closeScrollStrategy = this._overlay.scrollStrategies.close();
|
|
74
|
-
this.contentDensity$ = this._contentDensityService.contentDensity;
|
|
75
|
-
this.secondaryColumnsCount$ = this.secondaryColumns$.pipe(map((columns) => columns.length));
|
|
76
|
-
this.columnsCount$ = this.visibleColumns$.pipe(map((columns) => columns.length), map((count) => {
|
|
77
|
-
const access = BarsaApi.Common.Util.TryGetValue(this.context, 'Setting.Extra.DefaultCommandsAccess');
|
|
78
|
-
if (access?.View) {
|
|
79
|
-
count++;
|
|
80
|
-
}
|
|
81
|
-
return count;
|
|
82
|
-
}), map((count) => {
|
|
83
|
-
if (this.selectionMode !== 'none') {
|
|
84
|
-
count++;
|
|
85
|
-
}
|
|
86
|
-
return count;
|
|
87
|
-
}));
|
|
88
|
-
}
|
|
89
|
-
onColumnSummary(e) {
|
|
90
|
-
this._columnSummary(e);
|
|
91
|
-
}
|
|
92
|
-
onResetWorkflowState(mo) {
|
|
93
|
-
mo.$WorkflowState = null;
|
|
94
|
-
this._resetMoDataList();
|
|
95
|
-
}
|
|
96
|
-
get _typeDefId() {
|
|
97
|
-
return this.context.Setting.Extra.Report.TypeDefId;
|
|
98
|
-
}
|
|
99
|
-
get _inlineEditMode() {
|
|
100
|
-
return this._ulvMainService.getValueInlineEdit();
|
|
101
|
-
}
|
|
102
|
-
get _allowInlineEdit() {
|
|
103
|
-
return this._ulvMainService.getAllowInlineEdit();
|
|
104
|
-
}
|
|
105
|
-
get _access() {
|
|
106
|
-
return this.context.Setting?.Extra?.DefaultCommandsAccess;
|
|
107
|
-
}
|
|
108
|
-
set _access(val) {
|
|
109
|
-
if (this.context.Setting.Extra) {
|
|
110
|
-
this.context.Setting.Extra.DefaultCommandsAccess = val;
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
this.context.Setting.Extra = { DefaultCommandsAccess: val };
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
get isCheckList() {
|
|
117
|
-
return this.context.ViewSetting?.IsCheckList;
|
|
118
|
-
}
|
|
119
|
-
ngOnInit() {
|
|
120
|
-
this._setParentHeight();
|
|
121
|
-
this._readViewSetting();
|
|
122
|
-
if (!this._access) {
|
|
123
|
-
this._setDefaultAccess();
|
|
124
|
-
}
|
|
125
|
-
super.ngOnInit();
|
|
126
|
-
this.showOkCancelButtons = this.context.ShowOkCancelButtons;
|
|
127
|
-
this._ulvMainService.layoutInfo$.subscribe((layoutInfo) => {
|
|
128
|
-
if (layoutInfo && layoutInfo.UseLayoutItemTextForControl) {
|
|
129
|
-
this.useLayoutItemTextForControl = true;
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
const title = this.viewSetting?.Title;
|
|
133
|
-
if (title) {
|
|
134
|
-
this._ulvMainService.setTitle(title);
|
|
135
|
-
}
|
|
136
|
-
this._ulvMainService.reportId$.subscribe((reportId) => (this.reportId = reportId));
|
|
137
|
-
this._layoutService.setRendered(true);
|
|
138
|
-
this.selectionMode = this.context.ViewSetting?.IsCheckList ? this.multipleSelection : this.singleSelection;
|
|
139
|
-
this._openOnClick = this.viewSetting?.OpenOnClick;
|
|
140
|
-
this.customRowHeight = BarsaApi.Common.Util.TryGetValue(this.context.Setting, 'Extra.ExtraJsonPropReport.GridRowHeight');
|
|
141
|
-
this.simpleInlineEdit = BarsaApi.Common.Util.TryGetValue(this.context.Setting, 'Extra.ExtraJsonPropReport.SimpleInlineEdit');
|
|
142
|
-
this.groupSummary = BarsaApi.Common.Util.TryGetValue(this.context.Setting, 'Extra.ExtraJsonPropReport.GroupSummary', false);
|
|
143
|
-
this.rtl$ = this._portalService.rtl$;
|
|
144
|
-
this.navigationArrow$ = this._portalService.rtl$.pipe(map((isRtl) => (isRtl ? 'navigation-left-arrow' : 'navigation-right-arrow')));
|
|
145
|
-
this.allowInlineEdit$ = this._ulvMainService.allowInlineEdit$;
|
|
146
|
-
this.inlineEditMode$ = this._ulvMainService.inlineEditMode$;
|
|
147
|
-
this.onlyInlineEdit$ = this._ulvMainService.onlyInlineEdit$;
|
|
148
|
-
this._ulvMainService.setCanSaveGridSettings(this.viewSetting?.CanSaveGridSetting);
|
|
149
|
-
this.hasSelected$ = this.moDataList$.pipe(map((moList) => moList.some((c) => c.$IsChecked)));
|
|
150
|
-
this.moDataList$ = this.moDataList$.pipe(map((items) => this._mapCartableMo(items)));
|
|
151
|
-
const gridDataSource = new GridMoDataList(this.moDataList$, this.gridSetting$, this.visibleColumns$, this.searchTerm$, this.inlineEditMode$, this.allowInlineEdit$);
|
|
152
|
-
this.gridDataSource = gridDataSource;
|
|
153
|
-
this.columns$ = combineLatest([this.gridSetting$, this.secondaryColumns$]).pipe(map(([_, secondaryColumns]) => {
|
|
154
|
-
const secondaries = secondaryColumns.map((c) => c.Name);
|
|
155
|
-
let columns = GetAllColumnsSorted(this.context).filter((c) => !c.Hidden);
|
|
156
|
-
const groupedColumns = _?.SortSettingList?.filter((c) => c.IsGrouped).map((c) => c.Name);
|
|
157
|
-
if (groupedColumns?.length) {
|
|
158
|
-
columns = columns.filter((c) => groupedColumns.indexOf(c.Name) === -1);
|
|
159
|
-
}
|
|
160
|
-
return columns.filter((c) => secondaries.indexOf(c.Name) === -1);
|
|
161
|
-
}), tap((columns) => {
|
|
162
|
-
columns.forEach((c) => {
|
|
163
|
-
c.$CSSClassName = 'column__FieldType' + c.FieldTypeId;
|
|
164
|
-
// if (c.FieldTypeId === 38) {
|
|
165
|
-
// c.$Width = 'auto';
|
|
166
|
-
// }
|
|
167
|
-
// if (c.Extra?.IconDisplayTypeEnum === 'Image') {
|
|
168
|
-
// c.$Width = '38px';
|
|
169
|
-
// } else {
|
|
170
|
-
// c.$Width = !BarsaApi.LoginFormData.IsUserLoggedIn // if user is anonymous all column width equals to 100%
|
|
171
|
-
// ? '100%'
|
|
172
|
-
// : c.Width > 0
|
|
173
|
-
// ? c.Width + 'px'
|
|
174
|
-
// : '100%';
|
|
175
|
-
// }
|
|
176
|
-
});
|
|
177
|
-
}));
|
|
178
|
-
this._ulvMainService.inlineEditMode$.pipe(withLatestFrom(this.hasSelected$), filter(() => this._access.Add !== false));
|
|
179
|
-
this._setContainerWidth();
|
|
180
|
-
}
|
|
181
|
-
ngOnDestroy() {
|
|
182
|
-
super.ngOnDestroy();
|
|
183
|
-
if (this._formpanelService) {
|
|
184
|
-
this._formpanelService.destroy();
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
onExecuteToolbarButton(e) {
|
|
188
|
-
const { itemId, options } = e;
|
|
189
|
-
this._ulvMainService.executeToolbarButton(itemId, options);
|
|
190
|
-
}
|
|
191
|
-
onEditMode() {
|
|
192
|
-
this._setInlineEdit(!this._inlineEditMode);
|
|
193
|
-
}
|
|
194
|
-
onSelectNextInlineRecord(mo) {
|
|
195
|
-
this._selectNextInlineRecord(mo);
|
|
196
|
-
}
|
|
197
|
-
onEditFormPanelSave(mo) {
|
|
198
|
-
this._inlineEditSaveFormPanel(mo);
|
|
199
|
-
}
|
|
200
|
-
onEditFormPanelCancel(mo) {
|
|
201
|
-
const moDataList = this.moDataList;
|
|
202
|
-
const hasSelected = moDataList.some((c) => c.$IsChecked);
|
|
203
|
-
if (hasSelected) {
|
|
204
|
-
this._inlineEditSaveFormPanel(mo);
|
|
205
|
-
this._setInlineEdit(false);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
onEditFormPanelValueChange(e) {
|
|
209
|
-
this._inlineFormPanelValueChange(e.mo);
|
|
210
|
-
this.context.fireEvent('CellEdited', BarsaApi.Bw._wrap(e.mo), e.fieldDbName);
|
|
211
|
-
}
|
|
212
|
-
onColumnResized(columns) {
|
|
213
|
-
this._handleColumnsResized(columns);
|
|
214
|
-
}
|
|
215
|
-
onWorkflowShareButtons(e) {
|
|
216
|
-
this._ulvMainService.addWorkflowButtonsInToolbar(e);
|
|
217
|
-
}
|
|
218
|
-
onRowClick($event) {
|
|
219
|
-
const { mo } = $event;
|
|
220
|
-
if (mo.group || this._inlineEditMode) {
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
const moIndex = this._getIndex(mo);
|
|
224
|
-
this._removeCheckedAll();
|
|
225
|
-
if (!mo.$IsChecked) {
|
|
226
|
-
this._rowCheck(mo, moIndex, true);
|
|
227
|
-
}
|
|
228
|
-
if (this.viewSetting?.DisableShowFormOnDoubleClick) {
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
this._openMo(mo, moIndex);
|
|
232
|
-
}
|
|
233
|
-
onUlvCommand($event) {
|
|
234
|
-
const { mo } = $event;
|
|
235
|
-
const moIndex = this._getIndex(mo);
|
|
236
|
-
this._ulvCommandClicked(mo, moIndex);
|
|
237
|
-
}
|
|
238
|
-
onDeselectAll() {
|
|
239
|
-
this._doCheckedAll(false);
|
|
240
|
-
// this.context.fireEvent('rowselect', this.context); // باعث میشود دوبار selectionchange گزارش فراخوانی شود
|
|
241
|
-
}
|
|
242
|
-
onRowCheck($event) {
|
|
243
|
-
const { mo, onlyCheck } = $event;
|
|
244
|
-
const moIndex = this._getIndex(mo);
|
|
245
|
-
if (!onlyCheck && this._openOnClick) {
|
|
246
|
-
this.onRowClick($event);
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
this._rowCheck(mo, moIndex);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
onCartableFormClosed({ mo }) {
|
|
253
|
-
const newMoDataList = this.moDataList;
|
|
254
|
-
const newMoDataList2 = newMoDataList.filter((c) => c.Id !== mo.Id);
|
|
255
|
-
this._resetMoDataList(newMoDataList2);
|
|
256
|
-
this.refreshContextMoDataList(newMoDataList2);
|
|
257
|
-
}
|
|
258
|
-
onExpandClick(mo) {
|
|
259
|
-
mo.$Expanded = !mo.$Expanded;
|
|
260
|
-
this._setVisibility(mo.$Expanded, mo);
|
|
261
|
-
this._resetMoDataList();
|
|
262
|
-
}
|
|
263
|
-
onAllCheckbox(checked) {
|
|
264
|
-
this._doCheckedAll(checked);
|
|
265
|
-
// if (checked) {
|
|
266
|
-
// this.gridDataSource.resultItems.forEach((mo, index) => {
|
|
267
|
-
// this._select(mo, index);
|
|
268
|
-
// });
|
|
269
|
-
// } else {
|
|
270
|
-
// this.gridDataSource.resultItems.forEach((mo, index) => {
|
|
271
|
-
// this._deselect(mo, index);
|
|
272
|
-
// });
|
|
273
|
-
// }
|
|
274
|
-
}
|
|
275
|
-
onSortAscending(column) {
|
|
276
|
-
this._addSortColumn(column.Name, 'ASC');
|
|
277
|
-
}
|
|
278
|
-
onSortDescending(column) {
|
|
279
|
-
this._addSortColumn(column.Name, 'DESC');
|
|
280
|
-
}
|
|
281
|
-
onFilter(selectedColumn) {
|
|
282
|
-
this._showFilterSetting(selectedColumn);
|
|
283
|
-
}
|
|
284
|
-
onColumnSettings(device) {
|
|
285
|
-
this._openSettings('columns', device);
|
|
286
|
-
}
|
|
287
|
-
onSortSettings(device) {
|
|
288
|
-
this._openSettings('sort', device);
|
|
289
|
-
}
|
|
290
|
-
onGroupbySettings(device) {
|
|
291
|
-
this._openSettings('groupby', device);
|
|
292
|
-
}
|
|
293
|
-
onSortSettingsChange(sortSettings) {
|
|
294
|
-
this.updateSortSettings(sortSettings);
|
|
295
|
-
}
|
|
296
|
-
onListCheckboxClick($event) {
|
|
297
|
-
const { mo, index, e } = $event;
|
|
298
|
-
this.onRowCheck({ mo, index, cause: 'singleSelect' });
|
|
299
|
-
e.stopPropagation();
|
|
300
|
-
e.preventDefault();
|
|
301
|
-
}
|
|
302
|
-
onListNavigationClick($event) {
|
|
303
|
-
const { mo, index, e } = $event;
|
|
304
|
-
this.onRowClick({ mo, index });
|
|
305
|
-
e.stopPropagation();
|
|
306
|
-
e.preventDefault();
|
|
307
|
-
}
|
|
308
|
-
onSaveTopForm(mo) {
|
|
309
|
-
const newMoDataList = this.moDataList;
|
|
310
|
-
const existsIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
|
|
311
|
-
if (existsIndex > -1) {
|
|
312
|
-
newMoDataList[existsIndex] = mo;
|
|
313
|
-
}
|
|
314
|
-
newMoDataList.map((c) => {
|
|
315
|
-
c.$NewInlineMo = undefined;
|
|
316
|
-
c.$IsChecked = false;
|
|
317
|
-
});
|
|
318
|
-
this._resetMoDataList(newMoDataList);
|
|
319
|
-
this.refreshContextMoDataList(newMoDataList);
|
|
320
|
-
}
|
|
321
|
-
onNewTopFormAdd(mo) {
|
|
322
|
-
this._addInlineMoToModataList(mo);
|
|
323
|
-
}
|
|
324
|
-
// protected _inlineEditModeChanged(editMode): void {
|
|
325
|
-
// if (editMode) {
|
|
326
|
-
// const canAdd: boolean = this._access?.Add !== false;
|
|
327
|
-
// let selectedMo = this._getSelected();
|
|
328
|
-
// let newMo;
|
|
329
|
-
// if (canAdd !== false && !selectedMo) {
|
|
330
|
-
// this._createNewInlineRecord();
|
|
331
|
-
// return;
|
|
332
|
-
// }
|
|
333
|
-
// // if (!selectedMo && !newMo && this.moDataList.length > 0) {
|
|
334
|
-
// // selectedMo = this.moDataList[0];
|
|
335
|
-
// // }
|
|
336
|
-
// // if (selectedMo) {
|
|
337
|
-
// // const idOfSelectedMo = this._indexOfMo(selectedMo);
|
|
338
|
-
// // selectedMo.$IsChecked = false;
|
|
339
|
-
// // this._createNewInlineRecord(selectedMo);
|
|
340
|
-
// // this._rowCheck(selectedMo, idOfSelectedMo);
|
|
341
|
-
// // }
|
|
342
|
-
// } else {
|
|
343
|
-
// BarsaApi.Ul.ApplicationCtrlr.CurrentSystemAdapter = this._oldContainer;
|
|
344
|
-
// this._setNewInlineMo(null);
|
|
345
|
-
// }
|
|
346
|
-
// }
|
|
347
|
-
// protected _createNewInlineRecord(selectedMo?: MetaobjectDataModel) {
|
|
348
|
-
// const mo = this._inlineEditPrepareNewMo();
|
|
349
|
-
// const formMo = BarsaApi.Common.Merger.FastMerge(mo, selectedMo, { extendedFields: ['Id,$Caption'] });
|
|
350
|
-
// this._setNewInlineMo(formMo);
|
|
351
|
-
// this._select(formMo, -1);
|
|
352
|
-
// }
|
|
353
|
-
_resetMoDataList(newMoDataList) {
|
|
354
|
-
this._ulvMainService.reSetMoDataList(newMoDataList);
|
|
355
|
-
}
|
|
356
|
-
_getWidth(label) {
|
|
357
|
-
const labelWithPadding = measureText(label);
|
|
358
|
-
if (labelWithPadding < 1) {
|
|
359
|
-
return 0;
|
|
360
|
-
}
|
|
361
|
-
return Math.ceil(labelWithPadding);
|
|
362
|
-
}
|
|
363
|
-
_setParentHeight() {
|
|
364
|
-
this.parentHeight = getParentHeight(this.el.nativeElement);
|
|
365
|
-
}
|
|
366
|
-
_mapCartableMo(items) {
|
|
367
|
-
if (!this.viewSetting) {
|
|
368
|
-
return items;
|
|
369
|
-
}
|
|
370
|
-
const { NameSerializeMo, CartableObjectName } = this.viewSetting;
|
|
371
|
-
if (!NameSerializeMo || !CartableObjectName || !items?.length) {
|
|
372
|
-
return items;
|
|
373
|
-
}
|
|
374
|
-
items.forEach((c) => (c[CartableObjectName] = BarsaApi.Ext.decode('{' + c[NameSerializeMo] + '}')));
|
|
375
|
-
return items;
|
|
376
|
-
}
|
|
377
|
-
onToolbarCreateNewInlineMo() {
|
|
378
|
-
this._createNewInlineMo();
|
|
379
|
-
}
|
|
380
|
-
onCreateNewMo() {
|
|
381
|
-
this._createNewInlineMo(true);
|
|
382
|
-
}
|
|
383
|
-
onMandatory(isMandator) {
|
|
384
|
-
this.context.fireEvent('Mandatory', isMandator);
|
|
385
|
-
}
|
|
386
|
-
onUpdateMo(mo) {
|
|
387
|
-
const moDataList = this.moDataList;
|
|
388
|
-
const moIndex = moDataList.findIndex((c) => c.Id === mo.Id);
|
|
389
|
-
if (moIndex > -1) {
|
|
390
|
-
moDataList[moIndex] = mo;
|
|
391
|
-
this._resetMoDataList(moDataList);
|
|
392
|
-
this.refreshContextMoDataList(moDataList);
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
onHasDetailsInRow(value, deviceSize) {
|
|
396
|
-
this.hasDetailsInRow = value;
|
|
397
|
-
this._deviceSizeChanged(deviceSize);
|
|
398
|
-
}
|
|
399
|
-
onEscapeKey(mo) {
|
|
400
|
-
this._handleCancelInlineEdit(mo);
|
|
401
|
-
}
|
|
402
|
-
_handleCancelInlineEdit(mo) {
|
|
403
|
-
const moDataList = this.moDataList;
|
|
404
|
-
const moIndex = moDataList.findIndex((c) => c.Id === mo.Id);
|
|
405
|
-
if (moIndex < 0 || !mo.$NewInlineMo) {
|
|
406
|
-
this._doCheckedAll(false);
|
|
407
|
-
return;
|
|
408
|
-
}
|
|
409
|
-
const newMoDataList = moDataList.filter((c) => c.Id !== mo.Id);
|
|
410
|
-
this._resetMoDataList(newMoDataList);
|
|
411
|
-
this.refreshContextMoDataList(newMoDataList);
|
|
412
|
-
}
|
|
413
|
-
_createNewInlineMo(setChanged = false) {
|
|
414
|
-
const moDataList = this.moDataList;
|
|
415
|
-
const existInlineMo = moDataList.find((c) => c.$NewInlineMo);
|
|
416
|
-
if (existInlineMo) {
|
|
417
|
-
this._inlineEditSaveFormPanel(existInlineMo);
|
|
418
|
-
}
|
|
419
|
-
const mo = this._inlineReportCreateNewMo(true);
|
|
420
|
-
if (setChanged) {
|
|
421
|
-
mo.$InlineMoChanged = true;
|
|
422
|
-
}
|
|
423
|
-
this.moDataList.forEach((c) => (c.$IsChecked = false));
|
|
424
|
-
this._addInlineMoToModataList(mo, true);
|
|
425
|
-
}
|
|
426
|
-
_inlineReportCreateNewMo(isChecked) {
|
|
427
|
-
return this._ulvMainService.createNewInlineMo(isChecked);
|
|
428
|
-
}
|
|
429
|
-
_inlineFormPanelValueChange(mo) {
|
|
430
|
-
const newMoDataList = this.moDataList;
|
|
431
|
-
const existMoIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
|
|
432
|
-
if (existMoIndex > -1) {
|
|
433
|
-
const sIndex = newMoDataList[existMoIndex].$StyleIndex;
|
|
434
|
-
newMoDataList[existMoIndex] = BarsaApi.Common.MetaObjectWeb.CreateMo(mo);
|
|
435
|
-
newMoDataList[existMoIndex].$StyleIndex = sIndex;
|
|
436
|
-
this._resetMoDataList(newMoDataList);
|
|
437
|
-
this.refreshContextMoDataList(newMoDataList);
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
_selectNextInlineRecord(mo) {
|
|
441
|
-
const newMoDataList = this.moDataList;
|
|
442
|
-
if (!mo.$NewInlineMo) {
|
|
443
|
-
// select next record
|
|
444
|
-
const existsIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
|
|
445
|
-
if (existsIndex > -1 && existsIndex + 1 < newMoDataList.length) {
|
|
446
|
-
newMoDataList[existsIndex + 1].$IsChecked = false;
|
|
447
|
-
this._rowCheck(newMoDataList[existsIndex + 1], existsIndex + 1);
|
|
448
|
-
}
|
|
449
|
-
else {
|
|
450
|
-
newMoDataList.map((c) => {
|
|
451
|
-
c.$NewInlineMo = undefined;
|
|
452
|
-
c.$IsChecked = false;
|
|
453
|
-
});
|
|
454
|
-
if (!this._access.Add) {
|
|
455
|
-
this._resetMoDataList(newMoDataList);
|
|
456
|
-
return;
|
|
457
|
-
}
|
|
458
|
-
this._addInlineMoToModataList(this._inlineReportCreateNewMo(true), true);
|
|
459
|
-
}
|
|
460
|
-
return;
|
|
461
|
-
}
|
|
462
|
-
else {
|
|
463
|
-
this._createNewInlineMo();
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
_inlineEditSaveFormPanel(mo) {
|
|
467
|
-
const newMoDataList = this.moDataList;
|
|
468
|
-
if (!mo.$NewInlineMo) {
|
|
469
|
-
return;
|
|
470
|
-
}
|
|
471
|
-
const existsIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
|
|
472
|
-
if (existsIndex > -1) {
|
|
473
|
-
newMoDataList[existsIndex] = mo;
|
|
474
|
-
}
|
|
475
|
-
const canAdd = this._access.Add;
|
|
476
|
-
if (!canAdd) {
|
|
477
|
-
return;
|
|
478
|
-
}
|
|
479
|
-
newMoDataList.map((c) => {
|
|
480
|
-
c.$NewInlineMo = undefined;
|
|
481
|
-
c.$IsChecked = false;
|
|
482
|
-
});
|
|
483
|
-
// this._ulvMainService.createNewInlineMo();
|
|
484
|
-
}
|
|
485
|
-
_setDefaultAccess() {
|
|
486
|
-
this._access = {
|
|
487
|
-
Add: false,
|
|
488
|
-
AddToList: false,
|
|
489
|
-
Delete: false,
|
|
490
|
-
Edit: false,
|
|
491
|
-
Export: false,
|
|
492
|
-
Print: false,
|
|
493
|
-
Refresh: false,
|
|
494
|
-
RemoveFromList: false,
|
|
495
|
-
View: false
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
_expandMo(selectedMo, expand) {
|
|
499
|
-
selectedMo.$Expanded = expand;
|
|
500
|
-
selectedMo.$Children?.forEach((child) => {
|
|
501
|
-
this._expandMo(child, expand);
|
|
502
|
-
});
|
|
503
|
-
}
|
|
504
|
-
_indexOfId(id) {
|
|
505
|
-
return this.gridDataSource.resultItems.findIndex((c) => c.Id === id);
|
|
506
|
-
}
|
|
507
|
-
_indexOfMo(mo) {
|
|
508
|
-
return this.gridDataSource.resultItems.findIndex((c) => c.Id === mo.Id);
|
|
509
|
-
}
|
|
510
|
-
_indexOfSelected() {
|
|
511
|
-
return this.gridDataSource.resultItems.findIndex((c) => c.$IsChecked);
|
|
512
|
-
}
|
|
513
|
-
_getIndex(mo) {
|
|
514
|
-
return this.moDataList.findIndex((c) => c.Id === mo.Id);
|
|
515
|
-
}
|
|
516
|
-
_setInlineEdit(value) {
|
|
517
|
-
this._ulvMainService.setInlineEdit(value);
|
|
518
|
-
}
|
|
519
|
-
_readViewSetting() {
|
|
520
|
-
this.viewSetting = this.context.Setting.ClassNames.CustomUi?.Parameters;
|
|
521
|
-
}
|
|
522
|
-
// protected _moDataListChanged(moDataList: MetaobjectDataModel[]): void {
|
|
523
|
-
// super._moDataListChanged(moDataList);
|
|
524
|
-
// if (this._inlineEditMode) {
|
|
525
|
-
// const checkedMoIndex = moDataList.findIndex((c) => c.$IsChecked);
|
|
526
|
-
// if (checkedMoIndex > -1) {
|
|
527
|
-
// const checkedMo = moDataList[checkedMoIndex];
|
|
528
|
-
// if (checkedMo.Id !== this.formPanelCtrlr.Mo.Id) {
|
|
529
|
-
// this._inlineEditorDestroyFormPanelCtrlr();
|
|
530
|
-
// this._inlineEditCreateFormPanelCtrlr(checkedMo, checkedMoIndex);
|
|
531
|
-
// }
|
|
532
|
-
// }
|
|
533
|
-
// }
|
|
534
|
-
// }
|
|
535
|
-
_setVisibility(expand, mo //MetaobjectDataModel
|
|
536
|
-
) {
|
|
537
|
-
mo.$Children?.forEach((child) => {
|
|
538
|
-
child.$Visibility = expand;
|
|
539
|
-
if (child.$Children) {
|
|
540
|
-
this._setVisibility(expand, child);
|
|
541
|
-
}
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
|
-
// protected _setNewInlineMo(mo: MetaobjectDataModel | null): void {
|
|
545
|
-
// this._ulvMainService.setNewInlineMo(mo);
|
|
546
|
-
// }
|
|
547
|
-
// protected _inlineEditPrepareNewMo(): MetaobjectDataModel {
|
|
548
|
-
// const newMo = getNewMoGridEditor(this.formSetting, this._typeDefId);
|
|
549
|
-
// newMo.Id = getUniqueId(3);
|
|
550
|
-
// if (this._isComposite()) {
|
|
551
|
-
// const relation = BarsaApi.Common.Util.TryGetValue(this.context.Setting, 'Extra.Relation');
|
|
552
|
-
// newMo[relation.ParentFdName] = relation.ParentMoId;
|
|
553
|
-
// }
|
|
554
|
-
// const newMoDataList = [...this.moDataList, newMo as MetaobjectDataModel];
|
|
555
|
-
// this._ulvMainService.reSetMoDataList(newMoDataList);
|
|
556
|
-
// BarsaApi.Ul.ApplicationCtrlr.fireEvent(
|
|
557
|
-
// BarsaApi.Ul.ApplicationCtrlr.EventEnum.GlobalReportMoAdd,
|
|
558
|
-
// this.context,
|
|
559
|
-
// reportEventMoAdd
|
|
560
|
-
// );
|
|
561
|
-
// this.context.fireEvent('RefreshContextMoDataList', newMoDataList);
|
|
562
|
-
// return newMo as MetaobjectDataModel;
|
|
563
|
-
// }
|
|
564
|
-
_addInlineMoToModataList(newInlineMo, select = false) {
|
|
565
|
-
const newMoDataList = [...this.moDataList, { ...newInlineMo, $IsChecked: select }];
|
|
566
|
-
this._resetMoDataList(newMoDataList);
|
|
567
|
-
this.refreshContextMoDataList(newMoDataList);
|
|
568
|
-
}
|
|
569
|
-
_rowCheck(mo, index, selected = false) {
|
|
570
|
-
const editMode = this._inlineEditMode && this._allowInlineEdit;
|
|
571
|
-
if (mo.$IsChecked && !this.isCheckList) {
|
|
572
|
-
return;
|
|
573
|
-
}
|
|
574
|
-
let selectionMode = this.selectionMode;
|
|
575
|
-
if (editMode) {
|
|
576
|
-
selectionMode = SelectionMode.SINGLE;
|
|
577
|
-
}
|
|
578
|
-
const checked = !mo.$IsChecked || selected;
|
|
579
|
-
this.rowHoverable = false;
|
|
580
|
-
if (selectionMode === 'none') {
|
|
581
|
-
return;
|
|
582
|
-
}
|
|
583
|
-
if (checked) {
|
|
584
|
-
if (selectionMode === 'single' && checked) {
|
|
585
|
-
this._doCheckedAll(false);
|
|
586
|
-
}
|
|
587
|
-
if (editMode) {
|
|
588
|
-
if (index !== -1) {
|
|
589
|
-
// this._setNewInlineMo(null);
|
|
590
|
-
this._select(mo, index);
|
|
591
|
-
}
|
|
592
|
-
// TODO
|
|
593
|
-
// this._setValueInlineMo(mo);
|
|
594
|
-
}
|
|
595
|
-
else {
|
|
596
|
-
this._select(mo, index);
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
else
|
|
600
|
-
this._deselect(mo, index);
|
|
601
|
-
}
|
|
602
|
-
// protected _setValueInlineMo(mo: MetaobjectDataModel): void {
|
|
603
|
-
// // this.formPanelCtrlr.SetValue({ ...mo, $TypeDefId: this._typeDefId });
|
|
604
|
-
// }
|
|
605
|
-
_inlineEditorDestroyFormPanelCtrlr() {
|
|
606
|
-
// if (this.formPanelCtrlr) {
|
|
607
|
-
// this._formPanelService.destroy();
|
|
608
|
-
// this.formPanelCtrlr.Destroy();
|
|
609
|
-
// this.formPanelCtrlr = null;
|
|
610
|
-
// }
|
|
611
|
-
}
|
|
612
|
-
_windowResized() {
|
|
613
|
-
this._setContainerWidth();
|
|
614
|
-
this._setParentHeight();
|
|
615
|
-
this._cdr.detectChanges();
|
|
616
|
-
}
|
|
617
|
-
_setContainerWidth() {
|
|
618
|
-
const el = this.el.nativeElement;
|
|
619
|
-
this.containerWidthSource$.next(el.getBoundingClientRect().width);
|
|
620
|
-
}
|
|
621
|
-
_deviceSizeChanged(deviceSize) {
|
|
622
|
-
const elNativeElement = this.el.nativeElement;
|
|
623
|
-
if (this._inlineEditMode || deviceSize === 'l' || deviceSize === 'xl') {
|
|
624
|
-
this.secondaryColumnsSource.next([]);
|
|
625
|
-
return;
|
|
626
|
-
}
|
|
627
|
-
const gridSize = getControlSizeMode(elNativeElement, deviceSize);
|
|
628
|
-
let deviceName = 'desktop';
|
|
629
|
-
this.allColumns
|
|
630
|
-
?.filter((c) => !c.Hidden)
|
|
631
|
-
.forEach((c) => (c.$TextWidth = c.$TextWidth ? c.$TextWidth : this._getWidth(c.Alias) + 10));
|
|
632
|
-
const allColumnsWidth = this.allColumns.map((column) => column.$TextWidth && column.Width > column.$TextWidth ? column.Width : column.$TextWidth || column.Width);
|
|
633
|
-
const visibleColumns = this._visibleColumnsSource.getValue();
|
|
634
|
-
if (visibleColumns.length === 1) {
|
|
635
|
-
this.secondaryColumnsSource.next([]);
|
|
636
|
-
}
|
|
637
|
-
let columnsCount = visibleColumns.length;
|
|
638
|
-
const gridSettings = this.gridSettingSource.getValue();
|
|
639
|
-
const groupedColumns = gridSettings.SortSettingList.filter((d) => d.IsGrouped);
|
|
640
|
-
const nameGroupedColumns = groupedColumns.map((c) => c.Name);
|
|
641
|
-
const colWidthSettings = gridSettings?.ColSettingList?.filter((c) => nameGroupedColumns.indexOf(c.Name) === -1).map((c) => c.Width);
|
|
642
|
-
const columnsWidth = colWidthSettings?.length ? colWidthSettings : allColumnsWidth;
|
|
643
|
-
let sumColWidth = 0;
|
|
644
|
-
if (this.context.ViewSetting?.IsCheckList) {
|
|
645
|
-
sumColWidth += 15;
|
|
646
|
-
}
|
|
647
|
-
if (this.context.Setting?.Extra?.DefaultCommandsAccess?.View) {
|
|
648
|
-
sumColWidth += 32;
|
|
649
|
-
}
|
|
650
|
-
if (this.hasDetailsInRow) {
|
|
651
|
-
sumColWidth += 210;
|
|
652
|
-
}
|
|
653
|
-
const containerWidth = elNativeElement.clientWidth;
|
|
654
|
-
switch (gridSize) {
|
|
655
|
-
case 'l':
|
|
656
|
-
case 'xl':
|
|
657
|
-
deviceName = 'desktop';
|
|
658
|
-
break;
|
|
659
|
-
case 's':
|
|
660
|
-
deviceName = 'mobile';
|
|
661
|
-
columnsCount = 2;
|
|
662
|
-
break;
|
|
663
|
-
case 'm':
|
|
664
|
-
deviceName = 'tablet';
|
|
665
|
-
columnsCount = 4;
|
|
666
|
-
break;
|
|
667
|
-
}
|
|
668
|
-
this._deviceNameSource.next(deviceName);
|
|
669
|
-
if (columnsWidth.length > 0 && containerWidth > 0 && deviceSize !== 's') {
|
|
670
|
-
columnsCount = visibleColumns.length;
|
|
671
|
-
columnsWidth.forEach((width, index) => {
|
|
672
|
-
if (sumColWidth + width > containerWidth && columnsCount === visibleColumns.length) {
|
|
673
|
-
columnsCount = index;
|
|
674
|
-
}
|
|
675
|
-
sumColWidth += width;
|
|
676
|
-
});
|
|
677
|
-
}
|
|
678
|
-
const secColumns = this.secondaryColumnsSource.getValue();
|
|
679
|
-
if (visibleColumns.length > 2) {
|
|
680
|
-
if (this._isDisableResponsiveInDesktop() ||
|
|
681
|
-
this._isDisableResponsiveInMobile() ||
|
|
682
|
-
this._isDisableResponsiveInTablet()) {
|
|
683
|
-
if (secColumns.length) {
|
|
684
|
-
this.secondaryColumnsSource.next([]);
|
|
685
|
-
}
|
|
686
|
-
return;
|
|
687
|
-
}
|
|
688
|
-
if (columnsCount == 0) {
|
|
689
|
-
columnsCount = 1;
|
|
690
|
-
}
|
|
691
|
-
this.secondaryColumnsSource.next(visibleColumns.slice(columnsCount, visibleColumns.length));
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
_isDisableResponsiveInDesktop() {
|
|
695
|
-
const isDesktop = getDeviceIsDesktop();
|
|
696
|
-
return this.viewSetting?.DisableResponsiveInDesktop && isDesktop;
|
|
697
|
-
}
|
|
698
|
-
_isDisableResponsiveInTablet() {
|
|
699
|
-
const isTablet = getDeviceIsTablet();
|
|
700
|
-
return this.viewSetting?.DisableResponsiveInTablet && isTablet;
|
|
701
|
-
}
|
|
702
|
-
_isDisableResponsiveInMobile() {
|
|
703
|
-
const isMobile = getDeviceIsMobile();
|
|
704
|
-
return this.viewSetting?.DisableResponsiveInMobile && isMobile;
|
|
705
|
-
}
|
|
706
|
-
_openSettings(name, device) {
|
|
707
|
-
let component = null;
|
|
708
|
-
switch (name) {
|
|
709
|
-
case 'columns':
|
|
710
|
-
component = UlvColumnSettingsComponent;
|
|
711
|
-
break;
|
|
712
|
-
case 'sort':
|
|
713
|
-
component = UlvSortSettingsComponent;
|
|
714
|
-
break;
|
|
715
|
-
case 'groupby':
|
|
716
|
-
component = UlvGroupbySettingsComponent;
|
|
717
|
-
break;
|
|
718
|
-
}
|
|
719
|
-
const config = {
|
|
720
|
-
...this.dialogConfig,
|
|
721
|
-
data: { context: this.context },
|
|
722
|
-
mobile: device === 'mobile',
|
|
723
|
-
minWidth: device === 'mobile' ? 'auto' : this.dialogConfig.minWidth,
|
|
724
|
-
minHeight: device === 'mobile' ? 'auto' : this.dialogConfig.minHeight,
|
|
725
|
-
maxHeight: device === 'mobile' ? '100%' : this.dialogConfig.maxHeight,
|
|
726
|
-
maxWidth: device === 'mobile' ? '100%' : this.dialogConfig.maxWidth
|
|
727
|
-
};
|
|
728
|
-
if (component !== null) {
|
|
729
|
-
const dialogRef = this._dialogService.open(component, config);
|
|
730
|
-
dialogRef.afterClosed.pipe(takeUntil(this._onDestroy$)).subscribe((setting) => {
|
|
731
|
-
if (setting) {
|
|
732
|
-
const isSortChanged = name === 'sort' || name === 'groupby';
|
|
733
|
-
this.updateGridSetting(setting, isSortChanged);
|
|
734
|
-
this.context.moDataList = this.gridDataSource.resultItems;
|
|
735
|
-
}
|
|
736
|
-
});
|
|
737
|
-
}
|
|
738
|
-
}
|
|
739
|
-
_showFilterSetting(selectedColumn) {
|
|
740
|
-
const typeDefId = this._typeDefId;
|
|
741
|
-
const controlsInfo$ = this._ulvMainService.loadMetaConditionsControlInfos(typeDefId, this.allColumns.map((c) => c.Name));
|
|
742
|
-
const config = {
|
|
743
|
-
...this.dialogConfig,
|
|
744
|
-
data: {
|
|
745
|
-
controlsInfo$,
|
|
746
|
-
typeDefId,
|
|
747
|
-
selectedColumnName: selectedColumn.Name,
|
|
748
|
-
context: this.context
|
|
749
|
-
}
|
|
750
|
-
};
|
|
751
|
-
const dialogRef = this._dialogService.open(UlvFilterSettingsComponent, config);
|
|
752
|
-
dialogRef.afterClosed.pipe(takeUntil(this._onDestroy$)).subscribe((setting) => {
|
|
753
|
-
if (setting) {
|
|
754
|
-
}
|
|
755
|
-
});
|
|
756
|
-
}
|
|
757
|
-
_addSortColumn(name, sortDirection, isGrouped = false) {
|
|
758
|
-
const sortItem = {
|
|
759
|
-
Name: name,
|
|
760
|
-
SortDirection: sortDirection,
|
|
761
|
-
IsGrouped: isGrouped
|
|
762
|
-
};
|
|
763
|
-
const settings = getGridSettings(this.context);
|
|
764
|
-
const existSortItemIndex = settings.SortSettingList.findIndex((c) => c.Name === name);
|
|
765
|
-
if (existSortItemIndex > -1) {
|
|
766
|
-
settings.SortSettingList = [sortItem, ...settings.SortSettingList];
|
|
767
|
-
settings.SortSettingList.splice(existSortItemIndex + 1, 1);
|
|
768
|
-
}
|
|
769
|
-
else {
|
|
770
|
-
settings.SortSettingList.push(sortItem);
|
|
771
|
-
}
|
|
772
|
-
this.updateGridSetting(settings, true);
|
|
773
|
-
}
|
|
774
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapUiReportBaseComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i2.ContentDensityService }, { token: i3.PortalService }, { token: i2.DialogService }, { token: i3.UlvMainService }, { token: i3.LayoutService }, { token: i0.Renderer2 }, { token: DOCUMENT }, { token: i3.FormPanelService, optional: true, self: true }, { token: i3.LayoutService, optional: true, skipSelf: true }, { token: i3.LayoutMainContentService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
775
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SapUiReportBaseComponent, selector: "bsu-sap-ui-report-base", inputs: { ShowFormPanelControl: "ShowFormPanelControl", ForceCloseChild: "ForceCloseChild", RefreshFormPanelControl: "RefreshFormPanelControl" }, viewQueries: [{ propertyName: "tableComponent", first: true, predicate: TableComponent, descendants: true }, { propertyName: "toolbarComponent", first: true, predicate: ToolbarComponent, descendants: true }, { propertyName: "tableRowsRef", predicate: ["tableRows"], descendants: true }, { propertyName: "layoutControlsRef", predicate: LayoutControlComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
776
|
-
}
|
|
777
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapUiReportBaseComponent, decorators: [{
|
|
778
|
-
type: Component,
|
|
779
|
-
args: [{
|
|
780
|
-
selector: 'bsu-sap-ui-report-base',
|
|
781
|
-
template: '',
|
|
782
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
783
|
-
standalone: false
|
|
784
|
-
}]
|
|
785
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i2.ContentDensityService }, { type: i3.PortalService }, { type: i2.DialogService }, { type: i3.UlvMainService }, { type: i3.LayoutService }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
|
786
|
-
type: Inject,
|
|
787
|
-
args: [DOCUMENT]
|
|
788
|
-
}] }, { type: i3.FormPanelService, decorators: [{
|
|
789
|
-
type: Optional
|
|
790
|
-
}, {
|
|
791
|
-
type: Self
|
|
792
|
-
}] }, { type: i3.LayoutService, decorators: [{
|
|
793
|
-
type: SkipSelf
|
|
794
|
-
}, {
|
|
795
|
-
type: Optional
|
|
796
|
-
}] }, { type: i3.LayoutMainContentService, decorators: [{
|
|
797
|
-
type: SkipSelf
|
|
798
|
-
}, {
|
|
799
|
-
type: Optional
|
|
800
|
-
}] }], propDecorators: { tableComponent: [{
|
|
801
|
-
type: ViewChild,
|
|
802
|
-
args: [TableComponent]
|
|
803
|
-
}], toolbarComponent: [{
|
|
804
|
-
type: ViewChild,
|
|
805
|
-
args: [ToolbarComponent]
|
|
806
|
-
}], tableRowsRef: [{
|
|
807
|
-
type: ViewChildren,
|
|
808
|
-
args: ['tableRows']
|
|
809
|
-
}], layoutControlsRef: [{
|
|
810
|
-
type: ViewChildren,
|
|
811
|
-
args: [LayoutControlComponent]
|
|
812
|
-
}], ShowFormPanelControl: [{
|
|
813
|
-
type: Input
|
|
814
|
-
}], ForceCloseChild: [{
|
|
815
|
-
type: Input
|
|
816
|
-
}], RefreshFormPanelControl: [{
|
|
817
|
-
type: Input
|
|
818
|
-
}] } });
|
|
819
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLXVpLXJlcG9ydC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3NhcC11aS1yZXBvcnQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBR1IsSUFBSSxFQUNKLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqSCxPQUFPLEVBS0gsY0FBYyxFQUNkLGdCQUFnQixFQUNuQixNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFDSCxRQUFRLEVBS1IsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixlQUFlLEVBSWYsbUJBQW1CLEVBS25CLGVBQWUsRUFDZixXQUFXLEVBQ1gsV0FBVyxFQUNYLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUtwQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFF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WUFBWTt1QkFBQyxzQkFBc0I7Z0JBNlgzQixvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyx1QkFBdUI7c0JBQS9CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBJbmplY3QsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgUXVlcnlMaXN0LFxyXG4gICAgUmVuZGVyZXIyLFxyXG4gICAgU2VsZixcclxuICAgIFNraXBTZWxmLFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIE92ZXJsYXksIFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCwgdGFwLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICAgIENvbnRlbnREZW5zaXR5LFxyXG4gICAgQ29udGVudERlbnNpdHlTZXJ2aWNlLFxyXG4gICAgRGlhbG9nQ29uZmlnLFxyXG4gICAgRGlhbG9nU2VydmljZSxcclxuICAgIFRhYmxlQ29tcG9uZW50LFxyXG4gICAgVG9vbGJhckNvbXBvbmVudFxyXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQmFyc2FBcGksXHJcbiAgICBjb2x1bW5zUmVzaXplZEV2ZW50QXJncyxcclxuICAgIERlZmF1bHRDb21tYW5kc0FjY2VzcyxcclxuICAgIERldmljZVNpemUsXHJcbiAgICBGb3JtUGFuZWxTZXJ2aWNlLFxyXG4gICAgR2V0QWxsQ29sdW1uc1NvcnRlZCxcclxuICAgIGdldENvbnRyb2xTaXplTW9kZSxcclxuICAgIGdldEdyaWRTZXR0aW5ncyxcclxuICAgIExheW91dFNlcnZpY2UsXHJcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgUG9ydGFsU2VydmljZSxcclxuICAgIFJlcG9ydEJhc2VDb21wb25lbnQsXHJcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxyXG4gICAgVWlSZXBvcnRWaWV3QmFzZVNldHRpbmcsXHJcbiAgICBVbHZNYWluU2VydmljZSxcclxuICAgIFNoYXJlQnV0dG9uc0Nob2ljZURlZixcclxuICAgIGdldFBhcmVudEhlaWdodCxcclxuICAgIG1lYXN1cmVUZXh0LFxyXG4gICAgZ2V0VW5pcXVlSWQsXHJcbiAgICBTZWxlY3Rpb25Nb2RlLFxyXG4gICAgZ2V0RGV2aWNlSXNEZXNrdG9wLFxyXG4gICAgZ2V0RGV2aWNlSXNNb2JpbGUsXHJcbiAgICBnZXREZXZpY2VJc1RhYmxldCxcclxuICAgIENvbHVtblN1bW1hcnlUeXBlLFxyXG4gICAgTGF5b3V0U2V0dGluZyxcclxuICAgIFNvcnRTZXR0aW5nLFxyXG4gICAgTGF5b3V0TWFpbkNvbnRlbnRTZXJ2aWNlXHJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBMYXlvdXRDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtY29udHJvbC9sYXlvdXQtY29udHJvbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBHcmlkTW9EYXRhTGlzdCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgVWx2Q29sdW1uU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1jb2x1bW4tc2V0dGluZ3MvdWx2LWNvbHVtbi1zZXR0aW5ncy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVbHZTb3J0U2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1zb3J0LXNldHRpbmdzL3Vsdi1zb3J0LXNldHRpbmdzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVsdkdyb3VwYnlTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LWdyb3VwYnktc2V0dGluZ3MvdWx2LWdyb3VwYnktc2V0dGluZ3MuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVWx2RmlsdGVyU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1maWx0ZXItc2V0dGluZ3MvdWx2LWZpbHRlci1zZXR0aW5ncy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYnN1LXNhcC11aS1yZXBvcnQtYmFzZScsXHJcbiAgICB0ZW1wbGF0ZTogJycsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTYXBVaVJlcG9ydEJhc2VDb21wb25lbnQ8VCBleHRlbmRzIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nPlxyXG4gICAgZXh0ZW5kcyBSZXBvcnRCYXNlQ29tcG9uZW50XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XHJcbntcclxuICAgIEBWaWV3Q2hpbGQoVGFibGVDb21wb25lbnQpIHRhYmxlQ29tcG9uZW50OiBUYWJsZUNvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoVG9vbGJhckNvbXBvbmVudCkgdG9vbGJhckNvbXBvbmVudDogVG9vbGJhckNvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGRyZW4oJ3RhYmxlUm93cycpIHRhYmxlUm93c1JlZjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG4gICAgQFZpZXdDaGlsZHJlbihMYXlvdXRDb250cm9sQ29tcG9uZW50KVxyXG4gICAgbGF5b3V0Q29udHJvbHNSZWY6IFF1ZXJ5TGlzdDxMYXlvdXRDb250cm9sQ29tcG9uZW50PjtcclxuICAgIHVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbCA9IGZhbHNlO1xyXG4gICAgaGFzU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgc2hvd09rQ2FuY2VsQnV0dG9uczogYW55O1xyXG4gICAgcGFyZW50SGVpZ2h0ID0gMDtcclxuICAgIGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgIHJlc3BvbnNpdmVQYWRkaW5nOiB0cnVlLFxyXG4gICAgICAgIHZlcnRpY2FsUGFkZGluZzogdHJ1ZSxcclxuICAgICAgICBtaW5XaWR0aDogJzQwcmVtJyxcclxuICAgICAgICBtaW5IZWlnaHQ6ICc5MHZoJyxcclxuICAgICAgICBtYXhXaWR0aDogJzEwMHZ3JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICcxMDB2aCcsXHJcbiAgICAgICAgcmVzaXphYmxlOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgaWQgPSBgUmVwb3J0XyR7Z2V0VW5pcXVlSWQoMyl9YDtcclxuICAgIHNlbGVjdGVkUm93c051bWJlciA9IHt9O1xyXG4gICAgc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICBzZWxlY3Rpb25BZGFwdGVySGFuZGxlcjoge1xyXG4gICAgICAgIHNjb3BlOiBhbnk7XHJcbiAgICAgICAgcm93c2VsZWN0OiBhbnk7XHJcbiAgICAgICAgcm93ZGVzZWxlY3Q6IGFueTtcclxuICAgICAgICBiZWZvcmVyb3dzZWxlY3Q6IGFueTtcclxuICAgIH07XHJcbiAgICBuYXZpZ2F0aW9uQXJyb3ckOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICBjdXN0b21Sb3dIZWlnaHQ6IGFueTtcclxuICAgIHJvd0NsaWNrID0gdHJ1ZTtcclxuICAgIGNlbGxDbGljayA9IGZhbHNlO1xyXG4gICAgZGV2aWNlTmFtZSQ6IE9ic2VydmFibGU8RGV2aWNlU2l6ZT47XHJcbiAgICBtb2JpbGVPclRhYmxldCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG4gICAgc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVwb3J0Vmlld0NvbHVtbltdPihbXSk7XHJcbiAgICBzZWNvbmRhcnlDb2x1bW5zJCA9IHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZVxyXG4gICAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggfHwgYSA9PT0gYikpO1xyXG4gICAgcG9waW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgY29udGVudERlbnNpdHkkOiBPYnNlcnZhYmxlPENvbnRlbnREZW5zaXR5PjtcclxuICAgIGhhc0RldGFpbHNJblJvdyA9IGZhbHNlO1xyXG4gICAgcm93QWN0aXZhYmxlID0gdHJ1ZTtcclxuICAgIG9wZW5PdmVyZmxvd0NvbW1hbmRzOiBib29sZWFuW10gPSBbXTtcclxuICAgIGNvbnRhaW5lcldpZHRoU291cmNlJCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcclxuICAgIGNsb3NlU2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5O1xyXG4gICAgcm93SG92ZXJhYmxlOiBib29sZWFuO1xyXG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uTW9kZTtcclxuICAgIGNvbHVtbnNDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICAgIHNlY29uZGFyeUNvbHVtbnNDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICAgIGNvbnRhaW5lcldpZHRoJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gICAgY29sdW1ucyQ6IE9ic2VydmFibGU8UmVwb3J0Vmlld0NvbHVtbltdPjtcclxuICAgIGdyaWREYXRhU291cmNlOiBHcmlkTW9EYXRhTGlzdDtcclxuICAgIHNpbmdsZVNlbGVjdGlvbiA9IFNlbGVjdGlvbk1vZGUuU0lOR0xFO1xyXG4gICAgbXVsdGlwbGVTZWxlY3Rpb24gPSBTZWxlY3Rpb25Nb2RlLk1VTFRJUExFO1xyXG4gICAgYWxsb3dJbmxpbmVFZGl0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGlubGluZUVkaXRNb2RlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIG9ubHlJbmxpbmVFZGl0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGZvcm1QYW5lbEN0cmxyOiBhbnk7XHJcbiAgICBsYXlvdXQkOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICBydGwkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgcmVwb3J0SWQ6IHN0cmluZztcclxuICAgIHZpZXdTZXR0aW5nOiBUO1xyXG4gICAgZGlzYWJsZVJlc3BvbnNpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgc2ltcGxlSW5saW5lRWRpdDogYm9vbGVhbjtcclxuICAgIGxheW91dEluZm86IExheW91dFNldHRpbmc7XHJcbiAgICBwcm90ZWN0ZWQgX2RldmljZU5hbWVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERldmljZVNpemU+KCdkZXNrdG9wJyk7XHJcbiAgICBwcml2YXRlIF9vbGRDb250YWluZXI6IGFueTtcclxuICAgIHByaXZhdGUgX29wZW5PbkNsaWNrOiBib29sZWFuO1xyXG4gICAgZ3JvdXBTdW1tYXJ5OiBib29sZWFuO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByb3RlY3RlZCBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgX292ZXJsYXk6IE92ZXJsYXksXHJcbiAgICAgICAgcHJvdGVjdGVkIF9jb250ZW50RGVuc2l0eVNlcnZpY2U6IENvbnRlbnREZW5zaXR5U2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfdWx2TWFpblNlcnZpY2U6IFVsdk1haW5TZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJvdGVjdGVkIGRvY3VtZW50LFxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHJvdGVjdGVkIF9mb3JtcGFuZWxTZXJ2aWNlOiBGb3JtUGFuZWxTZXJ2aWNlLFxyXG4gICAgICAgIEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfbGF5b3V0U2VydmljZVBhcmVudD86IExheW91dFNlcnZpY2UsXHJcbiAgICAgICAgQFNraXBTZWxmKCkgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIF9sYXlvdXRNYWluQ29udGVudFNlcnZpY2U/OiBMYXlvdXRNYWluQ29udGVudFNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfcG9ydGFsU2VydmljZSwgX3Vsdk1haW5TZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoJCA9IHRoaXMuY29udGFpbmVyV2lkdGhTb3VyY2UkXHJcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VOYW1lJCA9IHRoaXMuX2RldmljZU5hbWVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlUmVzcG9uc2l2ZSQgPSB0aGlzLmRldmljZU5hbWUkLnBpcGUobWFwKChjKSA9PiBjID09PSAnZGVza3RvcCcpKTtcclxuICAgICAgICB0aGlzLm1vYmlsZU9yVGFibGV0JCA9IHRoaXMuZGV2aWNlTmFtZSQucGlwZShtYXAoKGRldmljZSkgPT4gZGV2aWNlID09PSAnbW9iaWxlJyB8fCBkZXZpY2UgPT09ICd0YWJsZXQnKSk7XHJcbiAgICAgICAgdGhpcy5fb2xkQ29udGFpbmVyID0gQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5DdXJyZW50U3lzdGVtQWRhcHRlcjtcclxuICAgICAgICB0aGlzLmNsb3NlU2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmNvbnRlbnREZW5zaXR5JCA9IHRoaXMuX2NvbnRlbnREZW5zaXR5U2VydmljZS5jb250ZW50RGVuc2l0eTtcclxuICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNDb3VudCQgPSB0aGlzLnNlY29uZGFyeUNvbHVtbnMkLnBpcGUobWFwKChjb2x1bW5zKSA9PiBjb2x1bW5zLmxlbmd0aCkpO1xyXG4gICAgICAgIHRoaXMuY29sdW1uc0NvdW50JCA9IHRoaXMudmlzaWJsZUNvbHVtbnMkLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoY29sdW1ucykgPT4gY29sdW1ucy5sZW5ndGgpLFxyXG4gICAgICAgICAgICBtYXAoKGNvdW50OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjY2VzcyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKHRoaXMuY29udGV4dCwgJ1NldHRpbmcuRXh0cmEuRGVmYXVsdENvbW1hbmRzQWNjZXNzJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXNzPy5WaWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG1hcCgoY291bnQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgb25Db2x1bW5TdW1tYXJ5KGU6IENvbHVtblN1bW1hcnlUeXBlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY29sdW1uU3VtbWFyeShlKTtcclxuICAgIH1cclxuICAgIG9uUmVzZXRXb3JrZmxvd1N0YXRlKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgbW8uJFdvcmtmbG93U3RhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfdHlwZURlZklkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhLlJlcG9ydC5UeXBlRGVmSWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgX2lubGluZUVkaXRNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91bHZNYWluU2VydmljZS5nZXRWYWx1ZUlubGluZUVkaXQoKTtcclxuICAgIH1cclxuICAgIGdldCBfYWxsb3dJbmxpbmVFZGl0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91bHZNYWluU2VydmljZS5nZXRBbGxvd0lubGluZUVkaXQoKTtcclxuICAgIH1cclxuICAgIGdldCBfYWNjZXNzKCk6IERlZmF1bHRDb21tYW5kc0FjY2VzcyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5TZXR0aW5nPy5FeHRyYT8uRGVmYXVsdENvbW1hbmRzQWNjZXNzO1xyXG4gICAgfVxyXG4gICAgc2V0IF9hY2Nlc3ModmFsOiBEZWZhdWx0Q29tbWFuZHNBY2Nlc3MpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEuRGVmYXVsdENvbW1hbmRzQWNjZXNzID0gdmFsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhID0geyBEZWZhdWx0Q29tbWFuZHNBY2Nlc3M6IHZhbCB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBpc0NoZWNrTGlzdCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LlZpZXdTZXR0aW5nPy5Jc0NoZWNrTGlzdDtcclxuICAgIH1cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NldFBhcmVudEhlaWdodCgpO1xyXG4gICAgICAgIHRoaXMuX3JlYWRWaWV3U2V0dGluZygpO1xyXG4gICAgICAgIGlmICghdGhpcy5fYWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldERlZmF1bHRBY2Nlc3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnNob3dPa0NhbmNlbEJ1dHRvbnMgPSB0aGlzLmNvbnRleHQuU2hvd09rQ2FuY2VsQnV0dG9ucztcclxuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5sYXlvdXRJbmZvJC5zdWJzY3JpYmUoKGxheW91dEluZm8pID0+IHtcclxuICAgICAgICAgICAgaWYgKGxheW91dEluZm8gJiYgbGF5b3V0SW5mby5Vc2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy52aWV3U2V0dGluZz8uVGl0bGU7XHJcbiAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnNldFRpdGxlKHRpdGxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UucmVwb3J0SWQkLnN1YnNjcmliZSgocmVwb3J0SWQpID0+ICh0aGlzLnJlcG9ydElkID0gcmVwb3J0SWQpKTtcclxuICAgICAgICB0aGlzLl9sYXlvdXRTZXJ2aWNlLnNldFJlbmRlcmVkKHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSA9IHRoaXMuY29udGV4dC5WaWV3U2V0dGluZz8uSXNDaGVja0xpc3QgPyB0aGlzLm11bHRpcGxlU2VsZWN0aW9uIDogdGhpcy5zaW5nbGVTZWxlY3Rpb247XHJcbiAgICAgICAgdGhpcy5fb3Blbk9uQ2xpY2sgPSB0aGlzLnZpZXdTZXR0aW5nPy5PcGVuT25DbGljaztcclxuICAgICAgICB0aGlzLmN1c3RvbVJvd0hlaWdodCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuU2V0dGluZyxcclxuICAgICAgICAgICAgJ0V4dHJhLkV4dHJhSnNvblByb3BSZXBvcnQuR3JpZFJvd0hlaWdodCdcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2ltcGxlSW5saW5lRWRpdCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuU2V0dGluZyxcclxuICAgICAgICAgICAgJ0V4dHJhLkV4dHJhSnNvblByb3BSZXBvcnQuU2ltcGxlSW5saW5lRWRpdCdcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTdW1tYXJ5ID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5TZXR0aW5nLFxyXG4gICAgICAgICAgICAnRXh0cmEuRXh0cmFKc29uUHJvcFJlcG9ydC5Hcm91cFN1bW1hcnknLFxyXG4gICAgICAgICAgICBmYWxzZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5ydGwkID0gdGhpcy5fcG9ydGFsU2VydmljZS5ydGwkO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkFycm93JCA9IHRoaXMuX3BvcnRhbFNlcnZpY2UucnRsJC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKGlzUnRsKSA9PiAoaXNSdGwgPyAnbmF2aWdhdGlvbi1sZWZ0LWFycm93JyA6ICduYXZpZ2F0aW9uLXJpZ2h0LWFycm93JykpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmFsbG93SW5saW5lRWRpdCQgPSB0aGlzLl91bHZNYWluU2VydmljZS5hbGxvd0lubGluZUVkaXQkO1xyXG4gICAgICAgIHRoaXMuaW5saW5lRWRpdE1vZGUkID0gdGhpcy5fdWx2TWFpblNlcnZpY2UuaW5saW5lRWRpdE1vZGUkO1xyXG4gICAgICAgIHRoaXMub25seUlubGluZUVkaXQkID0gdGhpcy5fdWx2TWFpblNlcnZpY2Uub25seUlubGluZUVkaXQkO1xyXG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnNldENhblNhdmVHcmlkU2V0dGluZ3ModGhpcy52aWV3U2V0dGluZz8uQ2FuU2F2ZUdyaWRTZXR0aW5nKTtcclxuICAgICAgICB0aGlzLmhhc1NlbGVjdGVkJCA9IHRoaXMubW9EYXRhTGlzdCQucGlwZShtYXAoKG1vTGlzdCkgPT4gbW9MaXN0LnNvbWUoKGMpID0+IGMuJElzQ2hlY2tlZCkpKTtcclxuICAgICAgICB0aGlzLm1vRGF0YUxpc3QkID0gdGhpcy5tb0RhdGFMaXN0JC5waXBlKG1hcCgoaXRlbXMpID0+IHRoaXMuX21hcENhcnRhYmxlTW8oaXRlbXMpKSk7XHJcbiAgICAgICAgY29uc3QgZ3JpZERhdGFTb3VyY2UgPSBuZXcgR3JpZE1vRGF0YUxpc3QoXHJcbiAgICAgICAgICAgIHRoaXMubW9EYXRhTGlzdCQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNldHRpbmckLFxyXG4gICAgICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zJCxcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtJCxcclxuICAgICAgICAgICAgdGhpcy5pbmxpbmVFZGl0TW9kZSQsXHJcbiAgICAgICAgICAgIHRoaXMuYWxsb3dJbmxpbmVFZGl0JFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JpZERhdGFTb3VyY2UgPSBncmlkRGF0YVNvdXJjZTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5ncmlkU2V0dGluZyQsIHRoaXMuc2Vjb25kYXJ5Q29sdW1ucyRdKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtfLCBzZWNvbmRhcnlDb2x1bW5zXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kYXJpZXMgPSBzZWNvbmRhcnlDb2x1bW5zLm1hcCgoYykgPT4gYy5OYW1lKTtcclxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gR2V0QWxsQ29sdW1uc1NvcnRlZCh0aGlzLmNvbnRleHQpLmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zID0gXz8uU29ydFNldHRpbmdMaXN0Py5maWx0ZXIoKGMpID0+IGMuSXNHcm91cGVkKS5tYXAoKGMpID0+IGMuTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoYykgPT4gZ3JvdXBlZENvbHVtbnMuaW5kZXhPZihjLk5hbWUpID09PSAtMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoKGMpID0+IHNlY29uZGFyaWVzLmluZGV4T2YoYy5OYW1lKSA9PT0gLTEpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgdGFwKChjb2x1bW5zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGM6IFJlcG9ydFZpZXdDb2x1bW4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjLiRDU1NDbGFzc05hbWUgPSAnY29sdW1uX19GaWVsZFR5cGUnICsgYy5GaWVsZFR5cGVJZDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiAoYy5GaWVsZFR5cGVJZCA9PT0gMzgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgYy4kV2lkdGggPSAnYXV0byc7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIChjLkV4dHJhPy5JY29uRGlzcGxheVR5cGVFbnVtID09PSAnSW1hZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGMuJFdpZHRoID0gJzM4cHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGMuJFdpZHRoID0gIUJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNVc2VyTG9nZ2VkSW4gLy8gaWYgdXNlciBpcyBhbm9ueW1vdXMgYWxsIGNvbHVtbiB3aWR0aCBlcXVhbHMgdG8gMTAwJVxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgPyAnMTAwJSdcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDogYy5XaWR0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgID8gYy5XaWR0aCArICdweCdcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDogJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UuaW5saW5lRWRpdE1vZGUkLnBpcGUoXHJcbiAgICAgICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaGFzU2VsZWN0ZWQkKSxcclxuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2FjY2Vzcy5BZGQgIT09IGZhbHNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5fc2V0Q29udGFpbmVyV2lkdGgoKTtcclxuICAgIH1cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Zvcm1wYW5lbFNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybXBhbmVsU2VydmljZS5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25FeGVjdXRlVG9vbGJhckJ1dHRvbihlOiB7IGl0ZW1JZDogc3RyaW5nOyBvcHRpb25zPzogYW55IH0pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IGl0ZW1JZCwgb3B0aW9ucyB9ID0gZTtcclxuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5leGVjdXRlVG9vbGJhckJ1dHRvbihpdGVtSWQsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgb25FZGl0TW9kZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zZXRJbmxpbmVFZGl0KCF0aGlzLl9pbmxpbmVFZGl0TW9kZSk7XHJcbiAgICB9XHJcbiAgICBvblNlbGVjdE5leHRJbmxpbmVSZWNvcmQobW8pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3ROZXh0SW5saW5lUmVjb3JkKG1vKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkVkaXRGb3JtUGFuZWxTYXZlKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faW5saW5lRWRpdFNhdmVGb3JtUGFuZWwobW8pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRWRpdEZvcm1QYW5lbENhbmNlbChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XHJcbiAgICAgICAgY29uc3QgaGFzU2VsZWN0ZWQgPSBtb0RhdGFMaXN0LnNvbWUoKGMpID0+IGMuJElzQ2hlY2tlZCk7XHJcbiAgICAgICAgaWYgKGhhc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lubGluZUVkaXRTYXZlRm9ybVBhbmVsKG1vKTtcclxuICAgICAgICAgICAgdGhpcy5fc2V0SW5saW5lRWRpdChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25FZGl0Rm9ybVBhbmVsVmFsdWVDaGFuZ2UoZTogeyBtbzogTWV0YW9iamVjdERhdGFNb2RlbDsgZmllbGREYk5hbWU/OiBzdHJpbmcgfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2lubGluZUZvcm1QYW5lbFZhbHVlQ2hhbmdlKGUubW8pO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ0NlbGxFZGl0ZWQnLCBCYXJzYUFwaS5Cdy5fd3JhcChlLm1vKSwgZS5maWVsZERiTmFtZSk7XHJcbiAgICB9XHJcbiAgICBvbkNvbHVtblJlc2l6ZWQoY29sdW1uczogY29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3MpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVDb2x1bW5zUmVzaXplZChjb2x1bW5zKTtcclxuICAgIH1cclxuICAgIG9uV29ya2Zsb3dTaGFyZUJ1dHRvbnMoZTogU2hhcmVCdXR0b25zQ2hvaWNlRGVmKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UuYWRkV29ya2Zsb3dCdXR0b25zSW5Ub29sYmFyKGUpO1xyXG4gICAgfVxyXG4gICAgb25Sb3dDbGljaygkZXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IG1vIH0gPSAkZXZlbnQ7XHJcbiAgICAgICAgaWYgKG1vLmdyb3VwIHx8IHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IHRoaXMuX2dldEluZGV4KG1vKTtcclxuICAgICAgICB0aGlzLl9yZW1vdmVDaGVja2VkQWxsKCk7XHJcbiAgICAgICAgaWYgKCFtby4kSXNDaGVja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jvd0NoZWNrKG1vLCBtb0luZGV4LCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmlld1NldHRpbmc/LkRpc2FibGVTaG93Rm9ybU9uRG91YmxlQ2xpY2spIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9vcGVuTW8obW8sIG1vSW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVWx2Q29tbWFuZCgkZXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IG1vIH0gPSAkZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IHRoaXMuX2dldEluZGV4KG1vKTtcclxuICAgICAgICB0aGlzLl91bHZDb21tYW5kQ2xpY2tlZChtbywgbW9JbmRleCk7XHJcbiAgICB9XHJcbiAgICBvbkRlc2VsZWN0QWxsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2RvQ2hlY2tlZEFsbChmYWxzZSk7XHJcbiAgICAgICAgLy8gdGhpcy5jb250ZXh0LmZpcmVFdmVudCgncm93c2VsZWN0JywgdGhpcy5jb250ZXh0KTsgLy8g2KjYp9i52Ksg2YXbjNi02YjYryDYr9mI2KjYp9ixIHNlbGVjdGlvbmNoYW5nZSDar9iy2KfYsdi0INmB2LHYp9iu2YjYp9mG24wg2LTZiNivXHJcbiAgICB9XHJcbiAgICBvblJvd0NoZWNrKCRldmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgbW8sIG9ubHlDaGVjayB9ID0gJGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IG1vSW5kZXggPSB0aGlzLl9nZXRJbmRleChtbyk7XHJcbiAgICAgICAgaWYgKCFvbmx5Q2hlY2sgJiYgdGhpcy5fb3Blbk9uQ2xpY2spIHtcclxuICAgICAgICAgICAgdGhpcy5vblJvd0NsaWNrKCRldmVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobW8sIG1vSW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG9uQ2FydGFibGVGb3JtQ2xvc2VkKHsgbW8gfSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XHJcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdDIgPSBuZXdNb0RhdGFMaXN0LmZpbHRlcigoYykgPT4gYy5JZCAhPT0gbW8uSWQpO1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0Mik7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdDIpO1xyXG4gICAgfVxyXG4gICAgb25FeHBhbmRDbGljayhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIG1vLiRFeHBhbmRlZCA9ICFtby4kRXhwYW5kZWQ7XHJcbiAgICAgICAgdGhpcy5fc2V0VmlzaWJpbGl0eShtby4kRXhwYW5kZWQsIG1vKTtcclxuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkFsbENoZWNrYm94KGNoZWNrZWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kb0NoZWNrZWRBbGwoY2hlY2tlZCk7XHJcbiAgICAgICAgLy8gaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICAvLyAgIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZm9yRWFjaCgobW8sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuX3NlbGVjdChtbywgaW5kZXgpO1xyXG4gICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZm9yRWFjaCgobW8sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuX2Rlc2VsZWN0KG1vLCBpbmRleCk7XHJcbiAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAvLyB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Tb3J0QXNjZW5kaW5nKGNvbHVtbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2FkZFNvcnRDb2x1bW4oY29sdW1uLk5hbWUsICdBU0MnKTtcclxuICAgIH1cclxuXHJcbiAgICBvblNvcnREZXNjZW5kaW5nKGNvbHVtbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2FkZFNvcnRDb2x1bW4oY29sdW1uLk5hbWUsICdERVNDJyk7XHJcbiAgICB9XHJcbiAgICBvbkZpbHRlcihzZWxlY3RlZENvbHVtbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Nob3dGaWx0ZXJTZXR0aW5nKHNlbGVjdGVkQ29sdW1uKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNvbHVtblNldHRpbmdzKGRldmljZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX29wZW5TZXR0aW5ncygnY29sdW1ucycsIGRldmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Tb3J0U2V0dGluZ3MoZGV2aWNlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb3BlblNldHRpbmdzKCdzb3J0JywgZGV2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkdyb3VwYnlTZXR0aW5ncyhkZXZpY2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vcGVuU2V0dGluZ3MoJ2dyb3VwYnknLCBkZXZpY2UpO1xyXG4gICAgfVxyXG4gICAgb25Tb3J0U2V0dGluZ3NDaGFuZ2Uoc29ydFNldHRpbmdzOiBTb3J0U2V0dGluZ1tdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTb3J0U2V0dGluZ3Moc29ydFNldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkxpc3RDaGVja2JveENsaWNrKCRldmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgbW8sIGluZGV4LCBlIH0gPSAkZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5vblJvd0NoZWNrKHsgbW8sIGluZGV4LCBjYXVzZTogJ3NpbmdsZVNlbGVjdCcgfSk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25MaXN0TmF2aWdhdGlvbkNsaWNrKCRldmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgbW8sIGluZGV4LCBlIH0gPSAkZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5vblJvd0NsaWNrKHsgbW8sIGluZGV4IH0pO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgb25TYXZlVG9wRm9ybShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xyXG4gICAgICAgIGlmIChleGlzdHNJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXhdID0gbW87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld01vRGF0YUxpc3QubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGMuJE5ld0lubGluZU1vID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XHJcbiAgICB9XHJcbiAgICBvbk5ld1RvcEZvcm1BZGQobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9hZGRJbmxpbmVNb1RvTW9kYXRhTGlzdChtbyk7XHJcbiAgICB9XHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgQElucHV0KCkgU2hvd0Zvcm1QYW5lbENvbnRyb2wgPSAoZm9ybXBhbmVsQ3RybHIpID0+IHt9O1xyXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIEBJbnB1dCgpIEZvcmNlQ2xvc2VDaGlsZCA9ICgpID0+IHt9O1xyXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIEBJbnB1dCgpIFJlZnJlc2hGb3JtUGFuZWxDb250cm9sID0gKGZvcm1wYW5lbEN0cmxyKSA9PiB7fTtcclxuXHJcbiAgICAvLyBwcm90ZWN0ZWQgX2lubGluZUVkaXRNb2RlQ2hhbmdlZChlZGl0TW9kZSk6IHZvaWQge1xyXG4gICAgLy8gICAgIGlmIChlZGl0TW9kZSkge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBjYW5BZGQ6IGJvb2xlYW4gPSB0aGlzLl9hY2Nlc3M/LkFkZCAhPT0gZmFsc2U7XHJcblxyXG4gICAgLy8gICAgICAgICBsZXQgc2VsZWN0ZWRNbyA9IHRoaXMuX2dldFNlbGVjdGVkKCk7XHJcbiAgICAvLyAgICAgICAgIGxldCBuZXdNbztcclxuICAgIC8vICAgICAgICAgaWYgKGNhbkFkZCAhPT0gZmFsc2UgJiYgIXNlbGVjdGVkTW8pIHtcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZVJlY29yZCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIC8vIGlmICghc2VsZWN0ZWRNbyAmJiAhbmV3TW8gJiYgdGhpcy5tb0RhdGFMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgLy8gICAgIHNlbGVjdGVkTW8gPSB0aGlzLm1vRGF0YUxpc3RbMF07XHJcbiAgICAvLyAgICAgICAgIC8vIH1cclxuICAgIC8vICAgICAgICAgLy8gaWYgKHNlbGVjdGVkTW8pIHtcclxuICAgIC8vICAgICAgICAgLy8gICAgIGNvbnN0IGlkT2ZTZWxlY3RlZE1vID0gdGhpcy5faW5kZXhPZk1vKHNlbGVjdGVkTW8pO1xyXG4gICAgLy8gICAgICAgICAvLyAgICAgc2VsZWN0ZWRNby4kSXNDaGVja2VkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgIC8vICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVSZWNvcmQoc2VsZWN0ZWRNbyk7XHJcbiAgICAvLyAgICAgICAgIC8vICAgICB0aGlzLl9yb3dDaGVjayhzZWxlY3RlZE1vLCBpZE9mU2VsZWN0ZWRNbyk7XHJcbiAgICAvLyAgICAgICAgIC8vIH1cclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkN1cnJlbnRTeXN0ZW1BZGFwdGVyID0gdGhpcy5fb2xkQ29udGFpbmVyO1xyXG4gICAgLy8gICAgICAgICB0aGlzLl9zZXROZXdJbmxpbmVNbyhudWxsKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcbiAgICAvLyBwcm90ZWN0ZWQgX2NyZWF0ZU5ld0lubGluZVJlY29yZChzZWxlY3RlZE1vPzogTWV0YW9iamVjdERhdGFNb2RlbCkge1xyXG4gICAgLy8gICAgIGNvbnN0IG1vID0gdGhpcy5faW5saW5lRWRpdFByZXBhcmVOZXdNbygpO1xyXG4gICAgLy8gICAgIGNvbnN0IGZvcm1NbyA9IEJhcnNhQXBpLkNvbW1vbi5NZXJnZXIuRmFzdE1lcmdlKG1vLCBzZWxlY3RlZE1vLCB7IGV4dGVuZGVkRmllbGRzOiBbJ0lkLCRDYXB0aW9uJ10gfSk7XHJcbiAgICAvLyAgICAgdGhpcy5fc2V0TmV3SW5saW5lTW8oZm9ybU1vKTtcclxuICAgIC8vICAgICB0aGlzLl9zZWxlY3QoZm9ybU1vLCAtMSk7XHJcbiAgICAvLyB9XHJcbiAgICBwcm90ZWN0ZWQgX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0PzogTWV0YW9iamVjdERhdGFNb2RlbFtdKSB7XHJcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UucmVTZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9nZXRXaWR0aChsYWJlbDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBsYWJlbFdpdGhQYWRkaW5nID0gbWVhc3VyZVRleHQobGFiZWwpO1xyXG4gICAgICAgIGlmIChsYWJlbFdpdGhQYWRkaW5nIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChsYWJlbFdpdGhQYWRkaW5nKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2V0UGFyZW50SGVpZ2h0KCkge1xyXG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0ID0gZ2V0UGFyZW50SGVpZ2h0KHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX21hcENhcnRhYmxlTW8oaXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSkge1xyXG4gICAgICAgIGlmICghdGhpcy52aWV3U2V0dGluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHsgTmFtZVNlcmlhbGl6ZU1vLCBDYXJ0YWJsZU9iamVjdE5hbWUgfSA9IHRoaXMudmlld1NldHRpbmc7XHJcbiAgICAgICAgaWYgKCFOYW1lU2VyaWFsaXplTW8gfHwgIUNhcnRhYmxlT2JqZWN0TmFtZSB8fCAhaXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGMpID0+IChjW0NhcnRhYmxlT2JqZWN0TmFtZV0gPSBCYXJzYUFwaS5FeHQuZGVjb2RlKCd7JyArIGNbTmFtZVNlcmlhbGl6ZU1vXSArICd9JykpKTtcclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ub29sYmFyQ3JlYXRlTmV3SW5saW5lTW8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8oKTtcclxuICAgIH1cclxuICAgIG9uQ3JlYXRlTmV3TW8oKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8odHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBvbk1hbmRhdG9yeShpc01hbmRhdG9yOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnTWFuZGF0b3J5JywgaXNNYW5kYXRvcik7XHJcbiAgICB9XHJcbiAgICBvblVwZGF0ZU1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcclxuICAgICAgICBjb25zdCBtb0luZGV4ID0gbW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcclxuICAgICAgICBpZiAobW9JbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIG1vRGF0YUxpc3RbbW9JbmRleF0gPSBtbztcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG1vRGF0YUxpc3QpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChtb0RhdGFMaXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvbkhhc0RldGFpbHNJblJvdyh2YWx1ZTogYm9vbGVhbiwgZGV2aWNlU2l6ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGFzRGV0YWlsc0luUm93ID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5fZGV2aWNlU2l6ZUNoYW5nZWQoZGV2aWNlU2l6ZSk7XHJcbiAgICB9XHJcbiAgICBvbkVzY2FwZUtleShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2hhbmRsZUNhbmNlbElubGluZUVkaXQobW8pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ2FuY2VsSW5saW5lRWRpdChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XHJcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IG1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XHJcbiAgICAgICAgaWYgKG1vSW5kZXggPCAwIHx8ICFtby4kTmV3SW5saW5lTW8pIHtcclxuICAgICAgICAgICAgdGhpcy5fZG9DaGVja2VkQWxsKGZhbHNlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gbW9EYXRhTGlzdC5maWx0ZXIoKGMpID0+IGMuSWQgIT09IG1vLklkKTtcclxuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9jcmVhdGVOZXdJbmxpbmVNbyhzZXRDaGFuZ2VkID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBtb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xyXG4gICAgICAgIGNvbnN0IGV4aXN0SW5saW5lTW8gPSBtb0RhdGFMaXN0LmZpbmQoKGMpID0+IGMuJE5ld0lubGluZU1vKTtcclxuICAgICAgICBpZiAoZXhpc3RJbmxpbmVNbykge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmxpbmVFZGl0U2F2ZUZvcm1QYW5lbChleGlzdElubGluZU1vKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW8gPSB0aGlzLl9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyh0cnVlKTtcclxuICAgICAgICBpZiAoc2V0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICBtby4kSW5saW5lTW9DaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb0RhdGFMaXN0LmZvckVhY2goKGMpID0+IChjLiRJc0NoZWNrZWQgPSBmYWxzZSkpO1xyXG4gICAgICAgIHRoaXMuX2FkZElubGluZU1vVG9Nb2RhdGFMaXN0KG1vLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2lubGluZVJlcG9ydENyZWF0ZU5ld01vKGlzQ2hlY2tlZDogYm9vbGVhbik6IE1ldGFvYmplY3REYXRhTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91bHZNYWluU2VydmljZS5jcmVhdGVOZXdJbmxpbmVNbyhpc0NoZWNrZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5saW5lRm9ybVBhbmVsVmFsdWVDaGFuZ2UobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xyXG4gICAgICAgIGNvbnN0IGV4aXN0TW9JbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XHJcbiAgICAgICAgaWYgKGV4aXN0TW9JbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNJbmRleCA9IG5ld01vRGF0YUxpc3RbZXhpc3RNb0luZGV4XS4kU3R5bGVJbmRleDtcclxuICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdE1vSW5kZXhdID0gQmFyc2FBcGkuQ29tbW9uLk1ldGFPYmplY3RXZWIuQ3JlYXRlTW8obW8pO1xyXG4gICAgICAgICAgICBuZXdNb0RhdGFMaXN0W2V4aXN0TW9JbmRleF0uJFN0eWxlSW5kZXggPSBzSW5kZXg7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zZWxlY3ROZXh0SW5saW5lUmVjb3JkKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcclxuICAgICAgICBpZiAoIW1vLiROZXdJbmxpbmVNbykge1xyXG4gICAgICAgICAgICAvLyBzZWxlY3QgbmV4dCByZWNvcmRcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xyXG4gICAgICAgICAgICBpZiAoZXhpc3RzSW5kZXggPiAtMSAmJiBleGlzdHNJbmRleCArIDEgPCBuZXdNb0RhdGFMaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleCArIDFdLiRJc0NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Jvd0NoZWNrKG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXggKyAxXSwgZXhpc3RzSW5kZXggKyAxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld01vRGF0YUxpc3QubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYy4kTmV3SW5saW5lTW8gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYy4kSXNDaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fYWNjZXNzLkFkZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QodGhpcy5faW5saW5lUmVwb3J0Q3JlYXRlTmV3TW8odHJ1ZSksIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVNbygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfaW5saW5lRWRpdFNhdmVGb3JtUGFuZWwobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xyXG4gICAgICAgIGlmICghbW8uJE5ld0lubGluZU1vKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xyXG4gICAgICAgIGlmIChleGlzdHNJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXhdID0gbW87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNhbkFkZCA9IHRoaXMuX2FjY2Vzcy5BZGQ7XHJcbiAgICAgICAgaWYgKCFjYW5BZGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbmV3TW9EYXRhTGlzdC5tYXAoKGMpID0+IHtcclxuICAgICAgICAgICAgYy4kTmV3SW5saW5lTW8gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGMuJElzQ2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB0aGlzLl91bHZNYWluU2VydmljZS5jcmVhdGVOZXdJbmxpbmVNbygpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zZXREZWZhdWx0QWNjZXNzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2FjY2VzcyA9IHtcclxuICAgICAgICAgICAgQWRkOiBmYWxzZSxcclxuICAgICAgICAgICAgQWRkVG9MaXN0OiBmYWxzZSxcclxuICAgICAgICAgICAgRGVsZXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgRWRpdDogZmFsc2UsXHJcbiAgICAgICAgICAgIEV4cG9ydDogZmFsc2UsXHJcbiAgICAgICAgICAgIFByaW50OiBmYWxzZSxcclxuICAgICAgICAgICAgUmVmcmVzaDogZmFsc2UsXHJcbiAgICAgICAgICAgIFJlbW92ZUZyb21MaXN0OiBmYWxzZSxcclxuICAgICAgICAgICAgVmlldzogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9leHBhbmRNbyhzZWxlY3RlZE1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBleHBhbmQpOiB2b2lkIHtcclxuICAgICAgICBzZWxlY3RlZE1vLiRFeHBhbmRlZCA9IGV4cGFuZDtcclxuICAgICAgICBzZWxlY3RlZE1vLiRDaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fZXhwYW5kTW8oY2hpbGQsIGV4cGFuZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2luZGV4T2ZJZChpZCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBpZCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2luZGV4T2ZNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2luZGV4T2ZTZWxlY3RlZCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZpbmRJbmRleCgoYykgPT4gYy4kSXNDaGVja2VkKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZ2V0SW5kZXgobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldElubGluZUVkaXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5zZXRJbmxpbmVFZGl0KHZhbHVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfcmVhZFZpZXdTZXR0aW5nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1NldHRpbmcgPSB0aGlzLmNvbnRleHQuU2V0dGluZy5DbGFzc05hbWVzLkN1c3RvbVVpPy5QYXJhbWV0ZXJzO1xyXG4gICAgfVxyXG4gICAgLy8gcHJvdGVjdGVkIF9tb0RhdGFMaXN0Q2hhbmdlZChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcclxuICAgIC8vICAgICBzdXBlci5fbW9EYXRhTGlzdENoYW5nZWQobW9EYXRhTGlzdCk7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGNoZWNrZWRNb0luZGV4ID0gbW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuJElzQ2hlY2tlZCk7XHJcblxyXG4gICAgLy8gICAgICAgICBpZiAoY2hlY2tlZE1vSW5kZXggPiAtMSkge1xyXG4gICAgLy8gICAgICAgICAgICAgY29uc3QgY2hlY2tlZE1vID0gbW9EYXRhTGlzdFtjaGVja2VkTW9JbmRleF07XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoY2hlY2tlZE1vLklkICE9PSB0aGlzLmZvcm1QYW5lbEN0cmxyLk1vLklkKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdG9yRGVzdHJveUZvcm1QYW5lbEN0cmxyKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdENyZWF0ZUZvcm1QYW5lbEN0cmxyKGNoZWNrZWRNbywgY2hlY2tlZE1vSW5kZXgpO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2V0VmlzaWJpbGl0eShcclxuICAgICAgICBleHBhbmQ6IGJvb2xlYW4sXHJcbiAgICAgICAgbW86IGFueSAvL01ldGFvYmplY3REYXRhTW9kZWxcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIG1vLiRDaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICAgICAgY2hpbGQuJFZpc2liaWxpdHkgPSBleHBhbmQ7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC4kQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldFZpc2liaWxpdHkoZXhwYW5kLCBjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwcm90ZWN0ZWQgX3NldE5ld0lubGluZU1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgLy8gICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnNldE5ld0lubGluZU1vKG1vKTtcclxuICAgIC8vIH1cclxuICAgIC8vIHByb3RlY3RlZCBfaW5saW5lRWRpdFByZXBhcmVOZXdNbygpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcclxuICAgIC8vIGNvbnN0IG5ld01vID0gZ2V0TmV3TW9HcmlkRWRpdG9yKHRoaXMuZm9ybVNldHRpbmcsIHRoaXMuX3R5cGVEZWZJZCk7XHJcbiAgICAvLyBuZXdNby5JZCA9IGdldFVuaXF1ZUlkKDMpO1xyXG4gICAgLy8gaWYgKHRoaXMuX2lzQ29tcG9zaXRlKCkpIHtcclxuICAgIC8vICAgICBjb25zdCByZWxhdGlvbiA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKHRoaXMuY29udGV4dC5TZXR0aW5nLCAnRXh0cmEuUmVsYXRpb24nKTtcclxuICAgIC8vICAgICBuZXdNb1tyZWxhdGlvbi5QYXJlbnRGZE5hbWVdID0gcmVsYXRpb24uUGFyZW50TW9JZDtcclxuICAgIC8vIH1cclxuICAgIC8vICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gWy4uLnRoaXMubW9EYXRhTGlzdCwgbmV3TW8gYXMgTWV0YW9iamVjdERhdGFNb2RlbF07XHJcbiAgICAvLyAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5yZVNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XHJcbiAgICAvLyBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLmZpcmVFdmVudChcclxuICAgIC8vICAgQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5FdmVudEVudW0uR2xvYmFsUmVwb3J0TW9BZGQsXHJcbiAgICAvLyAgIHRoaXMuY29udGV4dCxcclxuICAgIC8vICAgcmVwb3J0RXZlbnRNb0FkZFxyXG4gICAgLy8gKTtcclxuICAgIC8vICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ1JlZnJlc2hDb250ZXh0TW9EYXRhTGlzdCcsIG5ld01vRGF0YUxpc3QpO1xyXG4gICAgLy8gICAgcmV0dXJuIG5ld01vIGFzIE1ldGFvYmplY3REYXRhTW9kZWw7XHJcbiAgICAvLyB9XHJcbiAgICBwcm90ZWN0ZWQgX2FkZElubGluZU1vVG9Nb2RhdGFMaXN0KG5ld0lubGluZU1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSBbLi4udGhpcy5tb0RhdGFMaXN0LCB7IC4uLm5ld0lubGluZU1vLCAkSXNDaGVja2VkOiBzZWxlY3QgfV07XHJcbiAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcm93Q2hlY2sobW86IE1ldGFvYmplY3REYXRhTW9kZWwsIGluZGV4OiBudW1iZXIsIHNlbGVjdGVkID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBlZGl0TW9kZSA9IHRoaXMuX2lubGluZUVkaXRNb2RlICYmIHRoaXMuX2FsbG93SW5saW5lRWRpdDtcclxuICAgICAgICBpZiAobW8uJElzQ2hlY2tlZCAmJiAhdGhpcy5pc0NoZWNrTGlzdCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3Rpb25Nb2RlO1xyXG4gICAgICAgIGlmIChlZGl0TW9kZSkge1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5TSU5HTEU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAhbW8uJElzQ2hlY2tlZCB8fCBzZWxlY3RlZDtcclxuICAgICAgICB0aGlzLnJvd0hvdmVyYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChzZWxlY3Rpb25Nb2RlID09PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScgJiYgY2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9DaGVja2VkQWxsKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLl9zZXROZXdJbmxpbmVNbyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldFZhbHVlSW5saW5lTW8obW8pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0KG1vLCBpbmRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgdGhpcy5fZGVzZWxlY3QobW8sIGluZGV4KTtcclxuICAgIH1cclxuICAgIC8vIHByb3RlY3RlZCBfc2V0VmFsdWVJbmxpbmVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgLy8gICAgIC8vIHRoaXMuZm9ybVBhbmVsQ3RybHIuU2V0VmFsdWUoeyAuLi5tbywgJFR5cGVEZWZJZDogdGhpcy5fdHlwZURlZklkIH0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5saW5lRWRpdG9yRGVzdHJveUZvcm1QYW5lbEN0cmxyKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGlmICh0aGlzLmZvcm1QYW5lbEN0cmxyKSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuX2Zvcm1QYW5lbFNlcnZpY2UuZGVzdHJveSgpO1xyXG4gICAgICAgIC8vICAgICB0aGlzLmZvcm1QYW5lbEN0cmxyLkRlc3Ryb3koKTtcclxuICAgICAgICAvLyAgICAgdGhpcy5mb3JtUGFuZWxDdHJsciA9IG51bGw7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF93aW5kb3dSZXNpemVkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NldENvbnRhaW5lcldpZHRoKCk7XHJcbiAgICAgICAgdGhpcy5fc2V0UGFyZW50SGVpZ2h0KCk7XHJcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2V0Q29udGFpbmVyV2lkdGgoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aFNvdXJjZSQubmV4dChlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZXZpY2VTaXplQ2hhbmdlZChkZXZpY2VTaXplKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxOYXRpdmVFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmICh0aGlzLl9pbmxpbmVFZGl0TW9kZSB8fCBkZXZpY2VTaXplID09PSAnbCcgfHwgZGV2aWNlU2l6ZSA9PT0gJ3hsJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UubmV4dChbXSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyaWRTaXplID0gZ2V0Q29udHJvbFNpemVNb2RlKGVsTmF0aXZlRWxlbWVudCwgZGV2aWNlU2l6ZSk7XHJcbiAgICAgICAgbGV0IGRldmljZU5hbWU6IERldmljZVNpemUgPSAnZGVza3RvcCc7XHJcbiAgICAgICAgdGhpcy5hbGxDb2x1bW5zXHJcbiAgICAgICAgICAgID8uZmlsdGVyKChjKSA9PiAhYy5IaWRkZW4pXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChjKSA9PiAoYy4kVGV4dFdpZHRoID0gYy4kVGV4dFdpZHRoID8gYy4kVGV4dFdpZHRoIDogdGhpcy5fZ2V0V2lkdGgoYy5BbGlhcykgKyAxMCkpO1xyXG5cclxuICAgICAgICBjb25zdCBhbGxDb2x1bW5zV2lkdGggPSB0aGlzLmFsbENvbHVtbnMubWFwKChjb2x1bW4pID0+XHJcbiAgICAgICAgICAgIGNvbHVtbi4kVGV4dFdpZHRoICYmIGNvbHVtbi5XaWR0aCA+IGNvbHVtbi4kVGV4dFdpZHRoID8gY29sdW1uLldpZHRoIDogY29sdW1uLiRUZXh0V2lkdGggfHwgY29sdW1uLldpZHRoXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCB2aXNpYmxlQ29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdID0gdGhpcy5fdmlzaWJsZUNvbHVtbnNTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgICAgICBpZiAodmlzaWJsZUNvbHVtbnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5uZXh0KFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNvbHVtbnNDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBncmlkU2V0dGluZ3MgPSB0aGlzLmdyaWRTZXR0aW5nU291cmNlLmdldFZhbHVlKCk7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSBncmlkU2V0dGluZ3MuU29ydFNldHRpbmdMaXN0LmZpbHRlcigoZCkgPT4gZC5Jc0dyb3VwZWQpO1xyXG4gICAgICAgIGNvbnN0IG5hbWVHcm91cGVkQ29sdW1ucyA9IGdyb3VwZWRDb2x1bW5zLm1hcCgoYykgPT4gYy5OYW1lKTtcclxuICAgICAgICBjb25zdCBjb2xXaWR0aFNldHRpbmdzID0gZ3JpZFNldHRpbmdzPy5Db2xTZXR0aW5nTGlzdD8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoYykgPT4gbmFtZUdyb3VwZWRDb2x1bW5zLmluZGV4T2YoYy5OYW1lKSA9PT0gLTFcclxuICAgICAgICApLm1hcCgoYykgPT4gYy5XaWR0aCk7XHJcbiAgICAgICAgY29uc3QgY29sdW1uc1dpZHRoOiBudW1iZXJbXSA9IGNvbFdpZHRoU2V0dGluZ3M/Lmxlbmd0aCA/IGNvbFdpZHRoU2V0dGluZ3MgOiBhbGxDb2x1bW5zV2lkdGg7XHJcbiAgICAgICAgbGV0IHN1bUNvbFdpZHRoID0gMDtcclxuICAgICAgICBpZiAodGhpcy5jb250ZXh0LlZpZXdTZXR0aW5nPy5Jc0NoZWNrTGlzdCkge1xyXG4gICAgICAgICAgICBzdW1Db2xXaWR0aCArPSAxNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5TZXR0aW5nPy5FeHRyYT8uRGVmYXVsdENvbW1hbmRzQWNjZXNzPy5WaWV3KSB7XHJcbiAgICAgICAgICAgIHN1bUNvbFdpZHRoICs9IDMyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5oYXNEZXRhaWxzSW5Sb3cpIHtcclxuICAgICAgICAgICAgc3VtQ29sV2lkdGggKz0gMjEwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsTmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgICAgICBzd2l0Y2ggKGdyaWRTaXplKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2wnOlxyXG4gICAgICAgICAgICBjYXNlICd4bCc6XHJcbiAgICAgICAgICAgICAgICBkZXZpY2VOYW1lID0gJ2Rlc2t0b3AnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxyXG4gICAgICAgICAgICAgICAgZGV2aWNlTmFtZSA9ICdtb2JpbGUnO1xyXG4gICAgICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtJzpcclxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAndGFibGV0JztcclxuICAgICAgICAgICAgICAgIGNvbHVtbnNDb3VudCA9IDQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGV2aWNlTmFtZVNvdXJjZS5uZXh0KGRldmljZU5hbWUpO1xyXG5cclxuICAgICAgICBpZiAoY29sdW1uc1dpZHRoLmxlbmd0aCA+IDAgJiYgY29udGFpbmVyV2lkdGggPiAwICYmIGRldmljZVNpemUgIT09ICdzJykge1xyXG4gICAgICAgICAgICBjb2x1bW5zQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbHVtbnNXaWR0aC5mb3JFYWNoKCh3aWR0aDogbnVtYmVyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1bUNvbFdpZHRoICsgd2lkdGggPiBjb250YWluZXJXaWR0aCAmJiBjb2x1bW5zQ291bnQgPT09IHZpc2libGVDb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNDb3VudCA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3VtQ29sV2lkdGggKz0gd2lkdGg7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzZWNDb2x1bW5zID0gdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHZpc2libGVDb2x1bW5zLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNEaXNhYmxlUmVzcG9uc2l2ZUluRGVza3RvcCgpIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0Rpc2FibGVSZXNwb25zaXZlSW5Nb2JpbGUoKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNEaXNhYmxlUmVzcG9uc2l2ZUluVGFibGV0KClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VjQ29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UubmV4dChbXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbHVtbnNDb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5uZXh0KHZpc2libGVDb2x1bW5zLnNsaWNlKGNvbHVtbnNDb3VudCwgdmlzaWJsZUNvbHVtbnMubGVuZ3RoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9pc0Rpc2FibGVSZXNwb25zaXZlSW5EZXNrdG9wKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGlzRGVza3RvcCA9IGdldERldmljZUlzRGVza3RvcCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdTZXR0aW5nPy5EaXNhYmxlUmVzcG9uc2l2ZUluRGVza3RvcCAmJiBpc0Rlc2t0b3A7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2lzRGlzYWJsZVJlc3BvbnNpdmVJblRhYmxldCgpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBpc1RhYmxldCA9IGdldERldmljZUlzVGFibGV0KCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1NldHRpbmc/LkRpc2FibGVSZXNwb25zaXZlSW5UYWJsZXQgJiYgaXNUYWJsZXQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2lzRGlzYWJsZVJlc3BvbnNpdmVJbk1vYmlsZSgpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBpc01vYmlsZSA9IGdldERldmljZUlzTW9iaWxlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1NldHRpbmc/LkRpc2FibGVSZXNwb25zaXZlSW5Nb2JpbGUgJiYgaXNNb2JpbGU7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX29wZW5TZXR0aW5ncyhuYW1lLCBkZXZpY2U6IERldmljZVNpemUpOiB2b2lkIHtcclxuICAgICAgICBsZXQgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT4gfCBudWxsID0gbnVsbDtcclxuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAnY29sdW1ucyc6XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBVbHZDb2x1bW5TZXR0aW5nc0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzb3J0JzpcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdlNvcnRTZXR0aW5nc0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdncm91cGJ5JzpcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdkdyb3VwYnlTZXR0aW5nc0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb25maWc6IERpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5kaWFsb2dDb25maWcsXHJcbiAgICAgICAgICAgIGRhdGE6IHsgY29udGV4dDogdGhpcy5jb250ZXh0IH0sXHJcbiAgICAgICAgICAgIG1vYmlsZTogZGV2aWNlID09PSAnbW9iaWxlJyxcclxuICAgICAgICAgICAgbWluV2lkdGg6IGRldmljZSA9PT0gJ21vYmlsZScgPyAnYXV0bycgOiB0aGlzLmRpYWxvZ0NvbmZpZy5taW5XaWR0aCxcclxuICAgICAgICAgICAgbWluSGVpZ2h0OiBkZXZpY2UgPT09ICdtb2JpbGUnID8gJ2F1dG8nIDogdGhpcy5kaWFsb2dDb25maWcubWluSGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IGRldmljZSA9PT0gJ21vYmlsZScgPyAnMTAwJScgOiB0aGlzLmRpYWxvZ0NvbmZpZy5tYXhIZWlnaHQsXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiBkZXZpY2UgPT09ICdtb2JpbGUnID8gJzEwMCUnIDogdGhpcy5kaWFsb2dDb25maWcubWF4V2lkdGhcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKGNvbXBvbmVudCwgY29uZmlnKTtcclxuICAgICAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKHNldHRpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTb3J0Q2hhbmdlZCA9IG5hbWUgPT09ICdzb3J0JyB8fCBuYW1lID09PSAnZ3JvdXBieSc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHcmlkU2V0dGluZyhzZXR0aW5nLCBpc1NvcnRDaGFuZ2VkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQubW9EYXRhTGlzdCA9IHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2hvd0ZpbHRlclNldHRpbmcoc2VsZWN0ZWRDb2x1bW46IFJlcG9ydFZpZXdDb2x1bW4pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0eXBlRGVmSWQgPSB0aGlzLl90eXBlRGVmSWQ7XHJcbiAgICAgICAgY29uc3QgY29udHJvbHNJbmZvJCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmxvYWRNZXRhQ29uZGl0aW9uc0NvbnRyb2xJbmZvcyhcclxuICAgICAgICAgICAgdHlwZURlZklkLFxyXG4gICAgICAgICAgICB0aGlzLmFsbENvbHVtbnMubWFwKChjKSA9PiBjLk5hbWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sc0luZm8kLFxyXG4gICAgICAgICAgICAgICAgdHlwZURlZklkLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5OYW1lOiBzZWxlY3RlZENvbHVtbi5OYW1lLFxyXG4gICAgICAgICAgICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbihVbHZGaWx0ZXJTZXR0aW5nc0NvbXBvbmVudCwgY29uZmlnKTtcclxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoc2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZykge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2FkZFNvcnRDb2x1bW4obmFtZTogYW55LCBzb3J0RGlyZWN0aW9uOiBzdHJpbmcsIGlzR3JvdXBlZCA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc29ydEl0ZW0gPSB7XHJcbiAgICAgICAgICAgIE5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgIFNvcnREaXJlY3Rpb246IHNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICAgIElzR3JvdXBlZDogaXNHcm91cGVkXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IGdldEdyaWRTZXR0aW5ncyh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0U29ydEl0ZW1JbmRleCA9IHNldHRpbmdzLlNvcnRTZXR0aW5nTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuTmFtZSA9PT0gbmFtZSk7XHJcbiAgICAgICAgaWYgKGV4aXN0U29ydEl0ZW1JbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzLlNvcnRTZXR0aW5nTGlzdCA9IFtzb3J0SXRlbSwgLi4uc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0XTtcclxuICAgICAgICAgICAgc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0LnNwbGljZShleGlzdFNvcnRJdGVtSW5kZXggKyAxLCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXR0aW5ncy5Tb3J0U2V0dGluZ0xpc3QucHVzaChzb3J0SXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZFNldHRpbmcoc2V0dGluZ3MsIHRydWUpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|