tango-app-ui-analyse-trax 3.9.2 → 3.9.3
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/.eslintrc.json +37 -0
- package/ng-package.json +7 -0
- package/package.json +12 -25
- package/src/lib/components/action-centre/action-centre.component.html +607 -0
- package/src/lib/components/action-centre/action-centre.component.scss +185 -0
- package/src/lib/components/action-centre/action-centre.component.spec.ts +23 -0
- package/src/lib/components/action-centre/action-centre.component.ts +279 -0
- package/src/lib/components/activity-log/activity-log.component.html +84 -0
- package/src/lib/components/activity-log/activity-log.component.scss +33 -0
- package/src/lib/components/activity-log/activity-log.component.spec.ts +23 -0
- package/src/lib/components/activity-log/activity-log.component.ts +137 -0
- package/src/lib/components/activity-log-v2/activity-log-v2.component.html +189 -0
- package/src/lib/components/activity-log-v2/activity-log-v2.component.scss +162 -0
- package/src/lib/components/activity-log-v2/activity-log-v2.component.spec.ts +23 -0
- package/src/lib/components/activity-log-v2/activity-log-v2.component.ts +517 -0
- package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.html +19 -0
- package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.scss +148 -0
- package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.spec.ts +23 -0
- package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.ts +141 -0
- package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.html +42 -0
- package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.scss +49 -0
- package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.spec.ts +23 -0
- package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.ts +22 -0
- package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.html +724 -0
- package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.scss +217 -0
- package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.spec.ts +23 -0
- package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.ts +122 -0
- package/src/lib/components/add-checklist/add-checklist.component.html +1459 -0
- package/src/lib/components/add-checklist/add-checklist.component.scss +1205 -0
- package/src/lib/components/add-checklist/add-checklist.component.spec.ts +23 -0
- package/src/lib/components/add-checklist/add-checklist.component.ts +2460 -0
- package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.html +207 -0
- package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.scss +213 -0
- package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.spec.ts +23 -0
- package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.ts +621 -0
- package/src/lib/components/add-checklist/counter/counter.component.html +43 -0
- package/src/lib/components/add-checklist/counter/counter.component.scss +49 -0
- package/src/lib/components/add-checklist/counter/counter.component.spec.ts +23 -0
- package/src/lib/components/add-checklist/counter/counter.component.ts +123 -0
- package/src/lib/components/add-multitask/add-multitask.component.html +705 -0
- package/src/lib/components/add-multitask/add-multitask.component.scss +296 -0
- package/src/lib/components/add-multitask/add-multitask.component.spec.ts +23 -0
- package/src/lib/components/add-multitask/add-multitask.component.ts +611 -0
- package/src/lib/components/add-multitask/ascending-validator.ts +13 -0
- package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.html +197 -0
- package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.scss +31 -0
- package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.spec.ts +23 -0
- package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.ts +285 -0
- package/src/lib/components/add-multitask/create-task.data.ts +374 -0
- package/src/lib/components/add-multitask/create-task.interface.ts +177 -0
- package/src/lib/components/add-multitask/unique-string-validator.ts +13 -0
- package/src/lib/components/add-multitask/whitespace-validator.ts +11 -0
- package/src/lib/components/add-task/add-task.component.html +654 -0
- package/src/lib/components/add-task/add-task.component.scss +536 -0
- package/src/lib/components/add-task/add-task.component.spec.ts +23 -0
- package/src/lib/components/add-task/add-task.component.ts +569 -0
- package/src/lib/components/add-task/ascending-validator.ts +13 -0
- package/src/lib/components/add-task/create-task.data.ts +374 -0
- package/src/lib/components/add-task/create-task.interface.ts +192 -0
- package/src/lib/components/add-task/unique-string-validator.ts +13 -0
- package/src/lib/components/add-task/whitespace-validator.ts +11 -0
- package/src/lib/components/approval-popup/approval-popup.component.html +25 -0
- package/src/lib/components/approval-popup/approval-popup.component.scss +3 -0
- package/src/lib/components/approval-popup/approval-popup.component.spec.ts +23 -0
- package/src/lib/components/approval-popup/approval-popup.component.ts +26 -0
- package/src/lib/components/checklist/checklist.component.html +330 -0
- package/src/lib/components/checklist/checklist.component.scss +112 -0
- package/src/lib/components/checklist/checklist.component.spec.ts +23 -0
- package/src/lib/components/checklist/checklist.component.ts +344 -0
- package/src/lib/components/checklist-configure/assign/assign.component.html +665 -0
- package/src/lib/components/checklist-configure/assign/assign.component.scss +219 -0
- package/src/lib/components/checklist-configure/assign/assign.component.spec.ts +23 -0
- package/src/lib/components/checklist-configure/assign/assign.component.ts +932 -0
- package/src/lib/components/checklist-configure/checklist-configure.component.html +4340 -0
- package/src/lib/components/checklist-configure/checklist-configure.component.scss +2338 -0
- package/src/lib/components/checklist-configure/checklist-configure.component.spec.ts +23 -0
- package/src/lib/components/checklist-configure/checklist-configure.component.ts +4659 -0
- package/src/lib/components/checklistlayout/checklistlayout.component.html +30 -0
- package/src/lib/components/checklistlayout/checklistlayout.component.scss +15 -0
- package/src/lib/components/checklistlayout/checklistlayout.component.spec.ts +23 -0
- package/src/lib/components/checklistlayout/checklistlayout.component.ts +47 -0
- package/src/lib/components/chip-dropdown/chip-dropdown.component.html +36 -0
- package/src/lib/components/chip-dropdown/chip-dropdown.component.scss +97 -0
- package/src/lib/components/chip-dropdown/chip-dropdown.component.spec.ts +23 -0
- package/src/lib/components/chip-dropdown/chip-dropdown.component.ts +125 -0
- package/src/lib/components/create-task/create-task.component.html +2003 -0
- package/src/lib/components/create-task/create-task.component.scss +272 -0
- package/src/lib/components/create-task/create-task.component.spec.ts +23 -0
- package/src/lib/components/create-task/create-task.component.ts +614 -0
- package/src/lib/components/create-task/create-task.data.ts +372 -0
- package/src/lib/components/create-task/create-task.interface.ts +182 -0
- package/src/lib/components/create-task/validators/ascending-validator.ts +13 -0
- package/src/lib/components/create-task/validators/unique-string-validator.ts +13 -0
- package/src/lib/components/create-task/validators/whitespace-validator.ts +11 -0
- package/src/lib/components/custom-select/custom-select.component.html +44 -0
- package/src/lib/components/custom-select/custom-select.component.scss +144 -0
- package/src/lib/components/custom-select/custom-select.component.spec.ts +23 -0
- package/src/lib/components/custom-select/custom-select.component.ts +265 -0
- package/src/lib/components/dashboard/dashboard.component.html +1076 -0
- package/src/lib/components/dashboard/dashboard.component.scss +237 -0
- package/src/lib/components/dashboard/dashboard.component.spec.ts +23 -0
- package/src/lib/components/dashboard/dashboard.component.ts +539 -0
- package/src/lib/components/dashboard-info/dashboard-info.component.html +1420 -0
- package/src/lib/components/dashboard-info/dashboard-info.component.scss +409 -0
- package/src/lib/components/dashboard-info/dashboard-info.component.spec.ts +23 -0
- package/src/lib/components/dashboard-info/dashboard-info.component.ts +772 -0
- package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.html +110 -0
- package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.scss +260 -0
- package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.spec.ts +23 -0
- package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.ts +143 -0
- package/src/lib/components/dashboard-layout/dashboard-layout.component.html +1 -0
- package/src/lib/components/dashboard-layout/dashboard-layout.component.scss +0 -0
- package/src/lib/components/dashboard-layout/dashboard-layout.component.spec.ts +23 -0
- package/src/lib/components/dashboard-layout/dashboard-layout.component.ts +10 -0
- package/src/lib/components/disabled-select/disabled-select.component.html +44 -0
- package/src/lib/components/disabled-select/disabled-select.component.scss +149 -0
- package/src/lib/components/disabled-select/disabled-select.component.spec.ts +23 -0
- package/src/lib/components/disabled-select/disabled-select.component.ts +146 -0
- package/src/lib/components/export-gallery/export-gallery.component.html +175 -0
- package/src/lib/components/export-gallery/export-gallery.component.scss +200 -0
- package/src/lib/components/export-gallery/export-gallery.component.spec.ts +23 -0
- package/src/lib/components/export-gallery/export-gallery.component.ts +263 -0
- package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.html +36 -0
- package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.scss +97 -0
- package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.spec.ts +23 -0
- package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.ts +104 -0
- package/src/lib/components/eye-test-audit/custom-select/custom-select.component.html +44 -0
- package/src/lib/components/eye-test-audit/custom-select/custom-select.component.scss +144 -0
- package/src/lib/components/eye-test-audit/custom-select/custom-select.component.spec.ts +23 -0
- package/src/lib/components/eye-test-audit/custom-select/custom-select.component.ts +265 -0
- package/src/lib/components/eye-test-audit/eye-test/eye-test.component.html +1804 -0
- package/src/lib/components/eye-test-audit/eye-test/eye-test.component.scss +806 -0
- package/src/lib/components/eye-test-audit/eye-test/eye-test.component.spec.ts +23 -0
- package/src/lib/components/eye-test-audit/eye-test/eye-test.component.ts +1890 -0
- package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.html +25 -0
- package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.scss +0 -0
- package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.spec.ts +23 -0
- package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.ts +20 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit-routing.module.ts +26 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.html +1 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.scss +0 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.spec.ts +23 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.ts +24 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.module.ts +44 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.html +490 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.scss +721 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.spec.ts +23 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.ts +1017 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.html +708 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.scss +247 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.spec.ts +23 -0
- package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.ts +446 -0
- package/src/lib/components/eye-test-audit/group-select/group-select.component.html +44 -0
- package/src/lib/components/eye-test-audit/group-select/group-select.component.scss +144 -0
- package/src/lib/components/eye-test-audit/group-select/group-select.component.spec.ts +23 -0
- package/src/lib/components/eye-test-audit/group-select/group-select.component.ts +147 -0
- package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.html +18 -0
- package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.scss +49 -0
- package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.spec.ts +23 -0
- package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.ts +104 -0
- package/src/lib/components/eye-test-audit/select-drop/select-drop.component.html +44 -0
- package/src/lib/components/eye-test-audit/select-drop/select-drop.component.scss +144 -0
- package/src/lib/components/eye-test-audit/select-drop/select-drop.component.spec.ts +23 -0
- package/src/lib/components/eye-test-audit/select-drop/select-drop.component.ts +152 -0
- package/src/lib/components/eye-test-audit/services/eye-test-audit.service.spec.ts +16 -0
- package/src/lib/components/eye-test-audit/services/eye-test-audit.service.ts +190 -0
- package/src/lib/components/flag-layout/flag-layout.component.html +1 -0
- package/src/lib/components/flag-layout/flag-layout.component.scss +0 -0
- package/src/lib/components/flag-layout/flag-layout.component.spec.ts +23 -0
- package/src/lib/components/flag-layout/flag-layout.component.ts +10 -0
- package/src/lib/components/flags/flags.component.html +473 -0
- package/src/lib/components/flags/flags.component.scss +86 -0
- package/src/lib/components/flags/flags.component.spec.ts +23 -0
- package/src/lib/components/flags/flags.component.ts +280 -0
- package/{lib/components/flags/flags.interface.d.ts → src/lib/components/flags/flags.interface.ts} +73 -65
- package/src/lib/components/flags-info/flags-info.component.html +6012 -0
- package/src/lib/components/flags-info/flags-info.component.scss +278 -0
- package/src/lib/components/flags-info/flags-info.component.spec.ts +23 -0
- package/src/lib/components/flags-info/flags-info.component.ts +490 -0
- package/src/lib/components/flags-info/flags-info.interface.ts +441 -0
- package/src/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.html +1 -0
- package/src/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.scss +4 -0
- package/src/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.ts +78 -0
- package/src/lib/components/flags-new/flags-new.component.html +904 -0
- package/src/lib/components/flags-new/flags-new.component.scss +121 -0
- package/src/lib/components/flags-new/flags-new.component.spec.ts +23 -0
- package/src/lib/components/flags-new/flags-new.component.ts +357 -0
- package/{lib/components/flags-new/flags-new.interface.d.ts → src/lib/components/flags-new/flags-new.interface.ts} +90 -81
- package/src/lib/components/gallery/gallery.component.html +3660 -0
- package/src/lib/components/gallery/gallery.component.scss +930 -0
- package/src/lib/components/gallery/gallery.component.ts +3527 -0
- package/src/lib/components/group-select/group-select.component.html +44 -0
- package/src/lib/components/group-select/group-select.component.scss +144 -0
- package/src/lib/components/group-select/group-select.component.spec.ts +23 -0
- package/src/lib/components/group-select/group-select.component.ts +145 -0
- package/src/lib/components/image-popup/image-popup.component.html +11 -0
- package/src/lib/components/image-popup/image-popup.component.scss +5 -0
- package/src/lib/components/image-popup/image-popup.component.ts +18 -0
- package/src/lib/components/lib/custom-select/custom-select.component.html +42 -0
- package/src/lib/components/lib/custom-select/custom-select.component.scss +131 -0
- package/src/lib/components/lib/custom-select/custom-select.component.spec.ts +23 -0
- package/src/lib/components/lib/custom-select/custom-select.component.ts +151 -0
- package/src/lib/components/manage-task/manage-task.component.html +265 -0
- package/src/lib/components/manage-task/manage-task.component.scss +69 -0
- package/src/lib/components/manage-task/manage-task.component.spec.ts +23 -0
- package/src/lib/components/manage-task/manage-task.component.ts +267 -0
- package/src/lib/components/managechecklist/managechecklist.component.html +176 -0
- package/src/lib/components/managechecklist/managechecklist.component.scss +43 -0
- package/src/lib/components/managechecklist/managechecklist.component.spec.ts +23 -0
- package/src/lib/components/managechecklist/managechecklist.component.ts +176 -0
- package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.html +46 -0
- package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.scss +181 -0
- package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.spec.ts +23 -0
- package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.ts +221 -0
- package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.html +36 -0
- package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.scss +89 -0
- package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.spec.ts +23 -0
- package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.ts +118 -0
- package/src/lib/components/orders/orders.component.html +203 -0
- package/src/lib/components/orders/orders.component.scss +180 -0
- package/src/lib/components/orders/orders.component.spec.ts +25 -0
- package/src/lib/components/orders/orders.component.ts +197 -0
- package/src/lib/components/pagination/pagination.component.html +28 -0
- package/src/lib/components/pagination/pagination.component.scss +6 -0
- package/src/lib/components/pagination/pagination.component.spec.ts +23 -0
- package/src/lib/components/pagination/pagination.component.ts +54 -0
- package/src/lib/components/reactive-select/reactive-select.component.html +18 -0
- package/src/lib/components/reactive-select/reactive-select.component.scss +48 -0
- package/src/lib/components/reactive-select/reactive-select.component.spec.ts +23 -0
- package/src/lib/components/reactive-select/reactive-select.component.ts +104 -0
- package/src/lib/components/reports/date-picker/date-picker.component.html +54 -0
- package/src/lib/components/reports/date-picker/date-picker.component.scss +156 -0
- package/src/lib/components/reports/date-picker/date-picker.component.spec.ts +23 -0
- package/src/lib/components/reports/date-picker/date-picker.component.ts +60 -0
- package/src/lib/components/reports/reports.component.html +225 -0
- package/src/lib/components/reports/reports.component.scss +69 -0
- package/src/lib/components/reports/reports.component.spec.ts +23 -0
- package/src/lib/components/reports/reports.component.ts +334 -0
- package/{lib/components/reports/reports.interface.d.ts → src/lib/components/reports/reports.interface.ts} +50 -46
- package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.html +1 -0
- package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.scss +15 -0
- package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.spec.ts +23 -0
- package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.ts +31 -0
- package/src/lib/components/task/task.component.html +322 -0
- package/src/lib/components/task/task.component.scss +169 -0
- package/src/lib/components/task/task.component.spec.ts +23 -0
- package/src/lib/components/task/task.component.ts +340 -0
- package/src/lib/components/task-configure/task-configure.component.html +737 -0
- package/src/lib/components/task-configure/task-configure.component.scss +569 -0
- package/src/lib/components/task-configure/task-configure.component.spec.ts +23 -0
- package/src/lib/components/task-configure/task-configure.component.ts +1603 -0
- package/src/lib/components/task-configure/task-configure.interface.ts +138 -0
- package/src/lib/components/task-info/task-info.component.html +390 -0
- package/src/lib/components/task-info/task-info.component.scss +56 -0
- package/src/lib/components/task-info/task-info.component.spec.ts +23 -0
- package/src/lib/components/task-info/task-info.component.ts +400 -0
- package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.html +141 -0
- package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.scss +460 -0
- package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.spec.ts +23 -0
- package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.ts +202 -0
- package/src/lib/components/task-layout/task-layout.component.html +1 -0
- package/src/lib/components/task-layout/task-layout.component.scss +0 -0
- package/src/lib/components/task-layout/task-layout.component.spec.ts +23 -0
- package/src/lib/components/task-layout/task-layout.component.ts +10 -0
- package/src/lib/components/task-logs/task-logs.component.html +97 -0
- package/src/lib/components/task-logs/task-logs.component.scss +301 -0
- package/src/lib/components/task-logs/task-logs.component.spec.ts +23 -0
- package/src/lib/components/task-logs/task-logs.component.ts +80 -0
- package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.html +84 -0
- package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.scss +229 -0
- package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.spec.ts +23 -0
- package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.ts +111 -0
- package/src/lib/components/trax-store/trax-store.component.html +78 -0
- package/src/lib/components/trax-store/trax-store.component.scss +134 -0
- package/src/lib/components/trax-store/trax-store.component.spec.ts +23 -0
- package/src/lib/components/trax-store/trax-store.component.ts +172 -0
- package/src/lib/components/traxpopup/traxpopup.component.html +130 -0
- package/src/lib/components/traxpopup/traxpopup.component.scss +225 -0
- package/src/lib/components/traxpopup/traxpopup.component.spec.ts +23 -0
- package/src/lib/components/traxpopup/traxpopup.component.ts +71 -0
- package/src/lib/services/trax.service.spec.ts +16 -0
- package/src/lib/services/trax.service.ts +789 -0
- package/src/lib/tango-analyse-trax-routing.module.ts +151 -0
- package/src/lib/tango-analyse-trax.module.ts +140 -0
- package/{public-api.d.ts → src/public-api.ts} +6 -2
- package/tsconfig.lib.json +14 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +14 -0
- package/esm2022/lib/components/action-centre/action-centre.component.mjs +0 -288
- package/esm2022/lib/components/activity-log/activity-log.component.mjs +0 -150
- package/esm2022/lib/components/activity-log-v2/activity-log-v2.component.mjs +0 -502
- package/esm2022/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.mjs +0 -114
- package/esm2022/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.mjs +0 -24
- package/esm2022/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.mjs +0 -126
- package/esm2022/lib/components/add-checklist/add-checklist.component.mjs +0 -2352
- package/esm2022/lib/components/add-checklist/checklist-popup/checklist-popup.component.mjs +0 -612
- package/esm2022/lib/components/add-checklist/counter/counter.component.mjs +0 -138
- package/esm2022/lib/components/add-multitask/add-multitask.component.mjs +0 -604
- package/esm2022/lib/components/add-multitask/ascending-validator.mjs +0 -11
- package/esm2022/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.mjs +0 -297
- package/esm2022/lib/components/add-multitask/create-task.data.mjs +0 -372
- package/esm2022/lib/components/add-multitask/create-task.interface.mjs +0 -2
- package/esm2022/lib/components/add-multitask/unique-string-validator.mjs +0 -10
- package/esm2022/lib/components/add-multitask/whitespace-validator.mjs +0 -10
- package/esm2022/lib/components/add-task/add-task.component.mjs +0 -561
- package/esm2022/lib/components/add-task/ascending-validator.mjs +0 -11
- package/esm2022/lib/components/add-task/create-task.data.mjs +0 -372
- package/esm2022/lib/components/add-task/create-task.interface.mjs +0 -2
- package/esm2022/lib/components/add-task/unique-string-validator.mjs +0 -10
- package/esm2022/lib/components/add-task/whitespace-validator.mjs +0 -10
- package/esm2022/lib/components/approval-popup/approval-popup.component.mjs +0 -30
- package/esm2022/lib/components/checklist/checklist.component.mjs +0 -327
- package/esm2022/lib/components/checklist-configure/assign/assign.component.mjs +0 -912
- package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +0 -4161
- package/esm2022/lib/components/checklistlayout/checklistlayout.component.mjs +0 -44
- package/esm2022/lib/components/chip-dropdown/chip-dropdown.component.mjs +0 -120
- package/esm2022/lib/components/create-task/create-task.component.mjs +0 -585
- package/esm2022/lib/components/create-task/create-task.data.mjs +0 -372
- package/esm2022/lib/components/create-task/create-task.interface.mjs +0 -2
- package/esm2022/lib/components/create-task/validators/ascending-validator.mjs +0 -11
- package/esm2022/lib/components/create-task/validators/unique-string-validator.mjs +0 -10
- package/esm2022/lib/components/create-task/validators/whitespace-validator.mjs +0 -10
- package/esm2022/lib/components/custom-select/custom-select.component.mjs +0 -240
- package/esm2022/lib/components/dashboard/dashboard.component.mjs +0 -532
- package/esm2022/lib/components/dashboard-info/dashboard-info.component.mjs +0 -741
- package/esm2022/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.mjs +0 -155
- package/esm2022/lib/components/dashboard-layout/dashboard-layout.component.mjs +0 -12
- package/esm2022/lib/components/disabled-select/disabled-select.component.mjs +0 -158
- package/esm2022/lib/components/export-gallery/export-gallery.component.mjs +0 -266
- package/esm2022/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.mjs +0 -105
- package/esm2022/lib/components/eye-test-audit/custom-select/custom-select.component.mjs +0 -240
- package/esm2022/lib/components/eye-test-audit/eye-test/eye-test.component.mjs +0 -1733
- package/esm2022/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.mjs +0 -24
- package/esm2022/lib/components/eye-test-audit/eye-test-audit/eye-test-audit-routing.module.mjs +0 -34
- package/esm2022/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.mjs +0 -27
- package/esm2022/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.module.mjs +0 -71
- package/esm2022/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.mjs +0 -823
- package/esm2022/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.mjs +0 -412
- package/esm2022/lib/components/eye-test-audit/group-select/group-select.component.mjs +0 -157
- package/esm2022/lib/components/eye-test-audit/reactive-select/reactive-select.component.mjs +0 -105
- package/esm2022/lib/components/eye-test-audit/select-drop/select-drop.component.mjs +0 -162
- package/esm2022/lib/components/eye-test-audit/services/eye-test-audit.service.mjs +0 -166
- package/esm2022/lib/components/flag-layout/flag-layout.component.mjs +0 -12
- package/esm2022/lib/components/flags/flags.component.mjs +0 -263
- package/esm2022/lib/components/flags/flags.interface.mjs +0 -2
- package/esm2022/lib/components/flags-info/flags-info.component.mjs +0 -452
- package/esm2022/lib/components/flags-info/flags-info.interface.mjs +0 -2
- package/esm2022/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.mjs +0 -71
- package/esm2022/lib/components/flags-new/flags-new.component.mjs +0 -335
- package/esm2022/lib/components/flags-new/flags-new.interface.mjs +0 -2
- package/esm2022/lib/components/gallery/gallery.component.mjs +0 -3402
- package/esm2022/lib/components/group-select/group-select.component.mjs +0 -155
- package/esm2022/lib/components/image-popup/image-popup.component.mjs +0 -25
- package/esm2022/lib/components/lib/custom-select/custom-select.component.mjs +0 -158
- package/esm2022/lib/components/manage-task/manage-task.component.mjs +0 -264
- package/esm2022/lib/components/managechecklist/managechecklist.component.mjs +0 -186
- package/esm2022/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.mjs +0 -229
- package/esm2022/lib/components/multi-date-datepicker/multi-date-datepicker.component.mjs +0 -124
- package/esm2022/lib/components/orders/orders.component.mjs +0 -171
- package/esm2022/lib/components/pagination/pagination.component.mjs +0 -62
- package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +0 -108
- package/esm2022/lib/components/reports/date-picker/date-picker.component.mjs +0 -60
- package/esm2022/lib/components/reports/reports.component.mjs +0 -300
- package/esm2022/lib/components/reports/reports.interface.mjs +0 -2
- package/esm2022/lib/components/tango-analyse-trax/tango-analyse-trax.component.mjs +0 -32
- package/esm2022/lib/components/task/task.component.mjs +0 -341
- package/esm2022/lib/components/task-configure/task-configure.component.mjs +0 -1532
- package/esm2022/lib/components/task-configure/task-configure.interface.mjs +0 -2
- package/esm2022/lib/components/task-info/task-info.component.mjs +0 -375
- package/esm2022/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.mjs +0 -208
- package/esm2022/lib/components/task-layout/task-layout.component.mjs +0 -12
- package/esm2022/lib/components/task-logs/task-logs.component.mjs +0 -104
- package/esm2022/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.mjs +0 -107
- package/esm2022/lib/components/trax-store/trax-store.component.mjs +0 -179
- package/esm2022/lib/components/traxpopup/traxpopup.component.mjs +0 -70
- package/esm2022/lib/services/trax.service.mjs +0 -559
- package/esm2022/lib/tango-analyse-trax-routing.module.mjs +0 -153
- package/esm2022/lib/tango-analyse-trax.module.mjs +0 -221
- package/esm2022/public-api.mjs +0 -6
- package/esm2022/tango-app-ui-analyse-trax.mjs +0 -5
- package/fesm2022/tango-app-ui-analyse-trax.mjs +0 -28896
- package/fesm2022/tango-app-ui-analyse-trax.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/components/action-centre/action-centre.component.d.ts +0 -68
- package/lib/components/activity-log/activity-log.component.d.ts +0 -39
- package/lib/components/activity-log-v2/activity-log-v2.component.d.ts +0 -78
- package/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.d.ts +0 -24
- package/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.d.ts +0 -9
- package/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.d.ts +0 -34
- package/lib/components/add-checklist/add-checklist.component.d.ts +0 -121
- package/lib/components/add-checklist/checklist-popup/checklist-popup.component.d.ts +0 -45
- package/lib/components/add-checklist/counter/counter.component.d.ts +0 -29
- package/lib/components/add-multitask/add-multitask.component.d.ts +0 -102
- package/lib/components/add-multitask/ascending-validator.d.ts +0 -2
- package/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.d.ts +0 -45
- package/lib/components/add-multitask/create-task.data.d.ts +0 -293
- package/lib/components/add-multitask/create-task.interface.d.ts +0 -159
- package/lib/components/add-multitask/unique-string-validator.d.ts +0 -2
- package/lib/components/add-multitask/whitespace-validator.d.ts +0 -2
- package/lib/components/add-task/add-task.component.d.ts +0 -89
- package/lib/components/add-task/ascending-validator.d.ts +0 -2
- package/lib/components/add-task/create-task.data.d.ts +0 -293
- package/lib/components/add-task/create-task.interface.d.ts +0 -161
- package/lib/components/add-task/unique-string-validator.d.ts +0 -2
- package/lib/components/add-task/whitespace-validator.d.ts +0 -2
- package/lib/components/approval-popup/approval-popup.component.d.ts +0 -14
- package/lib/components/checklist/checklist.component.d.ts +0 -40
- package/lib/components/checklist-configure/assign/assign.component.d.ts +0 -105
- package/lib/components/checklist-configure/checklist-configure.component.d.ts +0 -325
- package/lib/components/checklistlayout/checklistlayout.component.d.ts +0 -15
- package/lib/components/chip-dropdown/chip-dropdown.component.d.ts +0 -28
- package/lib/components/create-task/create-task.component.d.ts +0 -76
- package/lib/components/create-task/create-task.data.d.ts +0 -293
- package/lib/components/create-task/create-task.interface.d.ts +0 -163
- package/lib/components/create-task/validators/ascending-validator.d.ts +0 -2
- package/lib/components/create-task/validators/unique-string-validator.d.ts +0 -2
- package/lib/components/create-task/validators/whitespace-validator.d.ts +0 -2
- package/lib/components/custom-select/custom-select.component.d.ts +0 -35
- package/lib/components/dashboard/dashboard.component.d.ts +0 -80
- package/lib/components/dashboard-info/dashboard-info.component.d.ts +0 -117
- package/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.d.ts +0 -41
- package/lib/components/dashboard-layout/dashboard-layout.component.d.ts +0 -5
- package/lib/components/disabled-select/disabled-select.component.d.ts +0 -34
- package/lib/components/export-gallery/export-gallery.component.d.ts +0 -44
- package/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.d.ts +0 -26
- package/lib/components/eye-test-audit/custom-select/custom-select.component.d.ts +0 -35
- package/lib/components/eye-test-audit/eye-test/eye-test.component.d.ts +0 -218
- package/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.d.ts +0 -12
- package/lib/components/eye-test-audit/eye-test-audit/eye-test-audit-routing.module.d.ts +0 -7
- package/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.d.ts +0 -11
- package/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.module.d.ts +0 -21
- package/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.d.ts +0 -129
- package/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.d.ts +0 -86
- package/lib/components/eye-test-audit/group-select/group-select.component.d.ts +0 -33
- package/lib/components/eye-test-audit/reactive-select/reactive-select.component.d.ts +0 -32
- package/lib/components/eye-test-audit/select-drop/select-drop.component.d.ts +0 -33
- package/lib/components/eye-test-audit/services/eye-test-audit.service.d.ts +0 -47
- package/lib/components/flag-layout/flag-layout.component.d.ts +0 -5
- package/lib/components/flags/flags.component.d.ts +0 -52
- package/lib/components/flags-info/flags-info.component.d.ts +0 -73
- package/lib/components/flags-info/flags-info.interface.d.ts +0 -430
- package/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.d.ts +0 -13
- package/lib/components/flags-new/flags-new.component.d.ts +0 -60
- package/lib/components/gallery/gallery.component.d.ts +0 -261
- package/lib/components/group-select/group-select.component.d.ts +0 -33
- package/lib/components/image-popup/image-popup.component.d.ts +0 -11
- package/lib/components/lib/custom-select/custom-select.component.d.ts +0 -33
- package/lib/components/manage-task/manage-task.component.d.ts +0 -47
- package/lib/components/managechecklist/managechecklist.component.d.ts +0 -33
- package/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.d.ts +0 -40
- package/lib/components/multi-date-datepicker/multi-date-datepicker.component.d.ts +0 -27
- package/lib/components/orders/orders.component.d.ts +0 -38
- package/lib/components/pagination/pagination.component.d.ts +0 -16
- package/lib/components/reactive-select/reactive-select.component.d.ts +0 -32
- package/lib/components/reports/date-picker/date-picker.component.d.ts +0 -23
- package/lib/components/reports/reports.component.d.ts +0 -55
- package/lib/components/tango-analyse-trax/tango-analyse-trax.component.d.ts +0 -14
- package/lib/components/task/task.component.d.ts +0 -70
- package/lib/components/task-configure/task-configure.component.d.ts +0 -142
- package/lib/components/task-configure/task-configure.interface.d.ts +0 -128
- package/lib/components/task-info/task-info.component.d.ts +0 -76
- package/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.d.ts +0 -61
- package/lib/components/task-layout/task-layout.component.d.ts +0 -5
- package/lib/components/task-logs/task-logs.component.d.ts +0 -27
- package/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.d.ts +0 -26
- package/lib/components/trax-store/trax-store.component.d.ts +0 -45
- package/lib/components/traxpopup/traxpopup.component.d.ts +0 -24
- package/lib/services/trax.service.d.ts +0 -175
- package/lib/tango-analyse-trax-routing.module.d.ts +0 -7
- package/lib/tango-analyse-trax.module.d.ts +0 -68
|
@@ -1,612 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ViewChild } from "@angular/core";
|
|
2
|
-
import * as XLSX from 'xlsx';
|
|
3
|
-
import { takeUntil, Subject } from 'rxjs';
|
|
4
|
-
import dayjs from 'dayjs';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/forms";
|
|
7
|
-
import * as i2 from "tango-app-ui-shared";
|
|
8
|
-
import * as i3 from "../../../services/trax.service";
|
|
9
|
-
import * as i4 from "@angular/router";
|
|
10
|
-
import * as i5 from "@ng-bootstrap/ng-bootstrap";
|
|
11
|
-
import * as i6 from "@angular/common";
|
|
12
|
-
export class ChecklistPopupComponent {
|
|
13
|
-
fb;
|
|
14
|
-
toast;
|
|
15
|
-
sopService;
|
|
16
|
-
router;
|
|
17
|
-
dialogRef;
|
|
18
|
-
dialog;
|
|
19
|
-
cd;
|
|
20
|
-
checklistForm;
|
|
21
|
-
clientId;
|
|
22
|
-
type;
|
|
23
|
-
checklistData;
|
|
24
|
-
afterValidation;
|
|
25
|
-
fileInput;
|
|
26
|
-
fileInput1;
|
|
27
|
-
fileName;
|
|
28
|
-
fileSize;
|
|
29
|
-
sectionDetails = [
|
|
30
|
-
{
|
|
31
|
-
name: "Section 1",
|
|
32
|
-
sectionNumber: 1,
|
|
33
|
-
questions: [],
|
|
34
|
-
},
|
|
35
|
-
];
|
|
36
|
-
detach = new Subject();
|
|
37
|
-
excelData = [];
|
|
38
|
-
excelError;
|
|
39
|
-
dayjs = dayjs;
|
|
40
|
-
constructor(fb, toast, sopService, router, dialogRef, dialog, cd) {
|
|
41
|
-
this.fb = fb;
|
|
42
|
-
this.toast = toast;
|
|
43
|
-
this.sopService = sopService;
|
|
44
|
-
this.router = router;
|
|
45
|
-
this.dialogRef = dialogRef;
|
|
46
|
-
this.dialog = dialog;
|
|
47
|
-
this.cd = cd;
|
|
48
|
-
this.checklistForm = this.fb.group({
|
|
49
|
-
name: [""],
|
|
50
|
-
description: [""],
|
|
51
|
-
mode: ["individual"],
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
ngOnInit() {
|
|
55
|
-
if (this.type != "create") {
|
|
56
|
-
this.checklistForm.get("mode")?.setValue("bulk");
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
get mode() {
|
|
60
|
-
return this.checklistForm.value.mode;
|
|
61
|
-
}
|
|
62
|
-
selectMode(mode) {
|
|
63
|
-
this.checklistForm.patchValue({ mode });
|
|
64
|
-
}
|
|
65
|
-
onFileSelected(event) {
|
|
66
|
-
this.excelData = [];
|
|
67
|
-
this.excelError = null;
|
|
68
|
-
this.sectionDetails = [];
|
|
69
|
-
const file = event.target.files[0];
|
|
70
|
-
const target = event.target;
|
|
71
|
-
let isExcelFile = !!target.files[0].name.match(/(.xls|.xlsx)/);
|
|
72
|
-
if (!isExcelFile) {
|
|
73
|
-
this.toast.getErrorToast("Please Upload a valid xlsx file");
|
|
74
|
-
}
|
|
75
|
-
if (isExcelFile) {
|
|
76
|
-
const reader = new FileReader();
|
|
77
|
-
reader.readAsBinaryString(target.files[0]);
|
|
78
|
-
reader.onload = (e) => {
|
|
79
|
-
const bstr = e.target.result;
|
|
80
|
-
const wb = XLSX.read(bstr, { type: "binary" });
|
|
81
|
-
const wsname = wb.SheetNames[0];
|
|
82
|
-
const ws = wb.Sheets[wsname];
|
|
83
|
-
let data = XLSX.utils.sheet_to_json(ws, { defval: "" });
|
|
84
|
-
if (!data.length) {
|
|
85
|
-
this.toast.getErrorToast("Please upload a valid file");
|
|
86
|
-
}
|
|
87
|
-
this.excelData = data;
|
|
88
|
-
let error = [];
|
|
89
|
-
let questionList = [];
|
|
90
|
-
this.excelData.forEach((ele, index) => {
|
|
91
|
-
if (!ele?.["Section Name"]?.toString()?.trim()) {
|
|
92
|
-
error.push(`Invalid Section Name - A${index + 2}`);
|
|
93
|
-
}
|
|
94
|
-
if (!ele?.["Question"]?.toString()?.trim()) {
|
|
95
|
-
error.push(`Invalid Question Name - B${index + 2}`);
|
|
96
|
-
}
|
|
97
|
-
if (!ele?.["Answer Type"]?.trim()) {
|
|
98
|
-
error.push(`Invalid Answer Type - C${index + 2}`);
|
|
99
|
-
}
|
|
100
|
-
if (ele?.["Answer Type"]?.trim() &&
|
|
101
|
-
[
|
|
102
|
-
"Multiple Choice Single",
|
|
103
|
-
"Multiple Choice Multiple",
|
|
104
|
-
"Dropdown",
|
|
105
|
-
].includes(ele?.["Answer Type"]) &&
|
|
106
|
-
!ele?.["Answer Options"]?.toString()?.trim()) {
|
|
107
|
-
error.push(`Invalid Answer Options - D${index + 2}`);
|
|
108
|
-
}
|
|
109
|
-
let qName = ele?.["Section Name"]?.toString()?.trim().toLowerCase() +
|
|
110
|
-
ele?.["Question"]?.toString()?.trim().toLowerCase();
|
|
111
|
-
if (!questionList.includes(qName)) {
|
|
112
|
-
questionList.push(qName);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
error.push(`${ele?.["Question"]?.trim()} question is Duplicated`);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
if (error.length) {
|
|
119
|
-
const popupcontent = {
|
|
120
|
-
displayprop: false,
|
|
121
|
-
imagesrc: `<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>`,
|
|
122
|
-
title: `Invalid details!`,
|
|
123
|
-
content: `Please provide correct and complete store information.`,
|
|
124
|
-
buttontype: "error",
|
|
125
|
-
error: error,
|
|
126
|
-
};
|
|
127
|
-
this.excelError = popupcontent;
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
let sectionNumber = 0;
|
|
131
|
-
let answerType = {
|
|
132
|
-
"Descriptive Answer": "descriptive",
|
|
133
|
-
"A/B Question": "yes/no",
|
|
134
|
-
"Multiple Choice Single": "multiplechoicesingle",
|
|
135
|
-
"Multiple Choice Multiple": "multiplechoicemultiple",
|
|
136
|
-
"Capture Image with Description": "descriptiveImage",
|
|
137
|
-
"Capture Image as answer": "image",
|
|
138
|
-
"Capture video as answer": "video",
|
|
139
|
-
"Capture Multiple Image": "multipleImage",
|
|
140
|
-
Date: "date",
|
|
141
|
-
"Linear Scale": "linearscale",
|
|
142
|
-
"Capture Image/Video as Answer": "image/video",
|
|
143
|
-
Time: "time",
|
|
144
|
-
Dropdown: "dropdown",
|
|
145
|
-
};
|
|
146
|
-
let secDetails = data.reduce((acc, ele) => {
|
|
147
|
-
let sectionName = ele["Section Name"]?.toString()?.trim().toLowerCase();
|
|
148
|
-
if (!acc?.[sectionName]) {
|
|
149
|
-
sectionNumber++;
|
|
150
|
-
acc[`${sectionName}`] = {
|
|
151
|
-
name: ele["Section Name"]?.toString()?.trim(),
|
|
152
|
-
sectionNumber: sectionNumber,
|
|
153
|
-
questions: [
|
|
154
|
-
{
|
|
155
|
-
qno: 1,
|
|
156
|
-
qname: ele["Question"]?.toString()?.trim(),
|
|
157
|
-
oldQname: ele["Question"]?.toString()?.trim(),
|
|
158
|
-
answerType: answerType[`${ele["Answer Type"]}`],
|
|
159
|
-
answers: this.findAnswer(answerType[`${ele["Answer Type"]}`], ele["Answer Options"]),
|
|
160
|
-
runAI: false,
|
|
161
|
-
runAIDefault: false,
|
|
162
|
-
allowUploadfromGallery: false,
|
|
163
|
-
linkType: false,
|
|
164
|
-
multiQuestionReferenceImage: [],
|
|
165
|
-
questionReferenceImage: "",
|
|
166
|
-
runAIFeatures: [],
|
|
167
|
-
disableRunAI: false,
|
|
168
|
-
runAIDescription: "",
|
|
169
|
-
allowMultiple: false,
|
|
170
|
-
compliance: false,
|
|
171
|
-
descriptivetype: "text",
|
|
172
|
-
},
|
|
173
|
-
],
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
acc[`${sectionName}`].questions.push({
|
|
178
|
-
qno: acc[`${sectionName}`].questions.length + 1,
|
|
179
|
-
qname: ele["Question"]?.toString()?.trim(),
|
|
180
|
-
oldQname: ele["Question"]?.toString()?.trim(),
|
|
181
|
-
answerType: answerType[`${ele["Answer Type"]}`],
|
|
182
|
-
answers: this.findAnswer(answerType[`${ele["Answer Type"]}`], ele["Answer Options"]),
|
|
183
|
-
runAI: false,
|
|
184
|
-
runAIDefault: false,
|
|
185
|
-
allowUploadfromGallery: false,
|
|
186
|
-
linkType: false,
|
|
187
|
-
multiQuestionReferenceImage: [],
|
|
188
|
-
questionReferenceImage: "",
|
|
189
|
-
runAIFeatures: [],
|
|
190
|
-
disableRunAI: false,
|
|
191
|
-
runAIDescription: "",
|
|
192
|
-
allowMultiple: false,
|
|
193
|
-
compliance: false,
|
|
194
|
-
descriptivetype: "text",
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
return acc;
|
|
198
|
-
}, {});
|
|
199
|
-
this.sectionDetails = Object.values(secDetails);
|
|
200
|
-
if (this.fileInput) {
|
|
201
|
-
this.fileInput.nativeElement.value = "";
|
|
202
|
-
}
|
|
203
|
-
if (this.fileInput1) {
|
|
204
|
-
this.fileInput1.nativeElement.value = "";
|
|
205
|
-
}
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
if (file) {
|
|
209
|
-
this.fileName = file.name;
|
|
210
|
-
this.fileSize = Math.round(file.size / 1024);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
onDragOver(event) {
|
|
214
|
-
event.preventDefault();
|
|
215
|
-
}
|
|
216
|
-
onDrop(event) {
|
|
217
|
-
event.preventDefault();
|
|
218
|
-
const file = event.dataTransfer.files[0];
|
|
219
|
-
if (file) {
|
|
220
|
-
this.fileName = file.name;
|
|
221
|
-
this.fileSize = Math.round(file.size / 1024);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
Reupload() {
|
|
225
|
-
if (this.fileInput) {
|
|
226
|
-
this.fileInput.nativeElement.value = "";
|
|
227
|
-
}
|
|
228
|
-
if (this.fileInput1) {
|
|
229
|
-
this.fileInput1.nativeElement.value = "";
|
|
230
|
-
}
|
|
231
|
-
let ele = document.getElementById("kt_account_team_size_select_2");
|
|
232
|
-
ele?.click();
|
|
233
|
-
this.cd.detectChanges();
|
|
234
|
-
}
|
|
235
|
-
createChecklist() {
|
|
236
|
-
if (!this.checklistForm.value.name) {
|
|
237
|
-
this.toast.getErrorToast("Checklist Name is missing");
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
if (!this.excelData.length && this.mode == "bulk") {
|
|
241
|
-
this.toast.getErrorToast("Please upload a valid file");
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
let params = {
|
|
245
|
-
checklistName: this.checklistForm.value.name?.trim(),
|
|
246
|
-
checklistDescription: this.checklistForm.value.description?.trim(),
|
|
247
|
-
sections: this.sectionDetails,
|
|
248
|
-
clientId: this.clientId,
|
|
249
|
-
submitType: "save",
|
|
250
|
-
};
|
|
251
|
-
this.sopService
|
|
252
|
-
.createChecklist(params)
|
|
253
|
-
.pipe(takeUntil(this.detach))
|
|
254
|
-
.subscribe((res) => {
|
|
255
|
-
if (res) {
|
|
256
|
-
if (res?.code == 200) {
|
|
257
|
-
this.toast.getSuccessToast("Checklist created successfully");
|
|
258
|
-
this.router.navigateByUrl(`/manage/trax/createChecklist?checklistId=${res.data.checklistId}`);
|
|
259
|
-
this.dialogRef.dismiss();
|
|
260
|
-
}
|
|
261
|
-
else {
|
|
262
|
-
this.toast.getErrorToast("Unable to create checklist!");
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
this.toast.getErrorToast("Unable to create checklist!");
|
|
267
|
-
}
|
|
268
|
-
}, (error) => {
|
|
269
|
-
let err = error?.error?.error?.message ||
|
|
270
|
-
"Unable to create checklist!Server Error!";
|
|
271
|
-
this.toast.getErrorToast(err);
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
findAnswer(type, options) {
|
|
275
|
-
let answer = [];
|
|
276
|
-
switch (type) {
|
|
277
|
-
case "yes/no":
|
|
278
|
-
answer = [
|
|
279
|
-
{
|
|
280
|
-
answer: "Yes",
|
|
281
|
-
answeroptionNumber: 1,
|
|
282
|
-
sopFlag: false,
|
|
283
|
-
validation: false,
|
|
284
|
-
validationType: "Capture Image",
|
|
285
|
-
linkedQuestion: 0,
|
|
286
|
-
showLinked: false,
|
|
287
|
-
referenceImage: "",
|
|
288
|
-
runAI: false,
|
|
289
|
-
allowUploadfromGallery: false,
|
|
290
|
-
complianceScore: 0,
|
|
291
|
-
},
|
|
292
|
-
{
|
|
293
|
-
answer: "No",
|
|
294
|
-
answeroptionNumber: 2,
|
|
295
|
-
sopFlag: false,
|
|
296
|
-
validation: false,
|
|
297
|
-
validationType: "Capture Image",
|
|
298
|
-
linkedQuestion: 0,
|
|
299
|
-
showLinked: false,
|
|
300
|
-
referenceImage: "",
|
|
301
|
-
runAI: false,
|
|
302
|
-
allowUploadfromGallery: false,
|
|
303
|
-
complianceScore: 0,
|
|
304
|
-
},
|
|
305
|
-
];
|
|
306
|
-
return answer;
|
|
307
|
-
break;
|
|
308
|
-
case "descriptive":
|
|
309
|
-
answer = [
|
|
310
|
-
{
|
|
311
|
-
answer: "",
|
|
312
|
-
sopFlag: false,
|
|
313
|
-
validation: false,
|
|
314
|
-
validationType: "",
|
|
315
|
-
validationAnswer: "",
|
|
316
|
-
referenceImage: [],
|
|
317
|
-
showLinked: false,
|
|
318
|
-
linkedQuestion: 0,
|
|
319
|
-
nestedQuestion: [],
|
|
320
|
-
descriptivetype: "text",
|
|
321
|
-
},
|
|
322
|
-
];
|
|
323
|
-
return answer;
|
|
324
|
-
break;
|
|
325
|
-
case "multiplechoicesingle":
|
|
326
|
-
answer = [];
|
|
327
|
-
options.split(",").forEach((ele) => {
|
|
328
|
-
if (ele.trim()) {
|
|
329
|
-
answer.push({
|
|
330
|
-
answer: ele,
|
|
331
|
-
sopFlag: false,
|
|
332
|
-
validation: false,
|
|
333
|
-
validationType: "Capture Image",
|
|
334
|
-
linkedQuestion: 0,
|
|
335
|
-
showLinked: false,
|
|
336
|
-
referenceImage: [],
|
|
337
|
-
runAI: false,
|
|
338
|
-
allowUploadfromGallery: false,
|
|
339
|
-
nestedQuestion: [],
|
|
340
|
-
complianceScore: 0,
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
});
|
|
344
|
-
return answer;
|
|
345
|
-
break;
|
|
346
|
-
case "multiplechoicemultiple":
|
|
347
|
-
answer = [];
|
|
348
|
-
options.split(",").forEach((ele) => {
|
|
349
|
-
if (ele?.trim()) {
|
|
350
|
-
answer.push({
|
|
351
|
-
answer: ele,
|
|
352
|
-
sopFlag: false,
|
|
353
|
-
validation: false,
|
|
354
|
-
validationType: "Capture Image",
|
|
355
|
-
linkedQuestion: 0,
|
|
356
|
-
showLinked: false,
|
|
357
|
-
referenceImage: [],
|
|
358
|
-
runAI: false,
|
|
359
|
-
allowUploadfromGallery: false,
|
|
360
|
-
nestedQuestion: [],
|
|
361
|
-
complianceScore: 0,
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
});
|
|
365
|
-
return answer;
|
|
366
|
-
break;
|
|
367
|
-
case "descriptiveImage":
|
|
368
|
-
answer = [
|
|
369
|
-
{
|
|
370
|
-
answer: "",
|
|
371
|
-
sopFlag: false,
|
|
372
|
-
validation: false,
|
|
373
|
-
validationType: "",
|
|
374
|
-
validationAnswer: "",
|
|
375
|
-
referenceImage: [],
|
|
376
|
-
showLinked: false,
|
|
377
|
-
linkedQuestion: 0,
|
|
378
|
-
nestedQuestion: [],
|
|
379
|
-
},
|
|
380
|
-
];
|
|
381
|
-
return answer;
|
|
382
|
-
break;
|
|
383
|
-
case "image":
|
|
384
|
-
answer = [
|
|
385
|
-
{
|
|
386
|
-
answer: "",
|
|
387
|
-
sopFlag: false,
|
|
388
|
-
validation: false,
|
|
389
|
-
validationType: "",
|
|
390
|
-
validationAnswer: "",
|
|
391
|
-
referenceImage: [],
|
|
392
|
-
showLinked: false,
|
|
393
|
-
linkedQuestion: 0,
|
|
394
|
-
nestedQuestion: [],
|
|
395
|
-
matchedCount: 0,
|
|
396
|
-
notMatchedCount: 0,
|
|
397
|
-
},
|
|
398
|
-
];
|
|
399
|
-
return answer;
|
|
400
|
-
break;
|
|
401
|
-
case "video":
|
|
402
|
-
answer = [
|
|
403
|
-
{
|
|
404
|
-
answer: "",
|
|
405
|
-
sopFlag: false,
|
|
406
|
-
validation: false,
|
|
407
|
-
validationType: "",
|
|
408
|
-
validationAnswer: "",
|
|
409
|
-
referenceImage: [],
|
|
410
|
-
showLinked: false,
|
|
411
|
-
linkedQuestion: 0,
|
|
412
|
-
nestedQuestion: [],
|
|
413
|
-
},
|
|
414
|
-
];
|
|
415
|
-
return answer;
|
|
416
|
-
break;
|
|
417
|
-
case "multipleImage":
|
|
418
|
-
answer = [
|
|
419
|
-
{
|
|
420
|
-
answer: "",
|
|
421
|
-
sopFlag: false,
|
|
422
|
-
validation: false,
|
|
423
|
-
validationType: "",
|
|
424
|
-
validationAnswer: "",
|
|
425
|
-
referenceImage: [],
|
|
426
|
-
showLinked: false,
|
|
427
|
-
linkedQuestion: 0,
|
|
428
|
-
nestedQuestion: [],
|
|
429
|
-
},
|
|
430
|
-
];
|
|
431
|
-
return answer;
|
|
432
|
-
break;
|
|
433
|
-
case "date":
|
|
434
|
-
answer = [
|
|
435
|
-
{
|
|
436
|
-
answer: "",
|
|
437
|
-
sopFlag: false,
|
|
438
|
-
validation: false,
|
|
439
|
-
validationType: "",
|
|
440
|
-
validationAnswer: "",
|
|
441
|
-
referenceImage: [],
|
|
442
|
-
showLinked: false,
|
|
443
|
-
linkedQuestion: 0,
|
|
444
|
-
nestedQuestion: [],
|
|
445
|
-
historicDate: false,
|
|
446
|
-
startDate: this.dayjs().format("DD-MM-YYYY"),
|
|
447
|
-
endDate: this.dayjs().format("DD-MM-YYYY"),
|
|
448
|
-
matchedCount: 0,
|
|
449
|
-
notMatchedCount: 0,
|
|
450
|
-
},
|
|
451
|
-
];
|
|
452
|
-
return answer;
|
|
453
|
-
break;
|
|
454
|
-
case "linearscale":
|
|
455
|
-
answer = [
|
|
456
|
-
{
|
|
457
|
-
answer: "",
|
|
458
|
-
sopFlag: false,
|
|
459
|
-
validation: false,
|
|
460
|
-
validationType: "",
|
|
461
|
-
validationAnswer: "",
|
|
462
|
-
referenceImage: [],
|
|
463
|
-
showLinked: false,
|
|
464
|
-
linkedQuestion: 0,
|
|
465
|
-
rangeStart: 0,
|
|
466
|
-
rangeEnd: 100,
|
|
467
|
-
nestedQuestion: [],
|
|
468
|
-
linearType: "number",
|
|
469
|
-
minValue: 0,
|
|
470
|
-
maxValue: 100,
|
|
471
|
-
matchedCount: 0,
|
|
472
|
-
notMatchedCount: 0,
|
|
473
|
-
},
|
|
474
|
-
];
|
|
475
|
-
return answer;
|
|
476
|
-
break;
|
|
477
|
-
case "time":
|
|
478
|
-
answer = [
|
|
479
|
-
{
|
|
480
|
-
answer: "",
|
|
481
|
-
sopFlag: false,
|
|
482
|
-
validation: false,
|
|
483
|
-
validationType: "",
|
|
484
|
-
validationAnswer: "",
|
|
485
|
-
referenceImage: [],
|
|
486
|
-
showLinked: false,
|
|
487
|
-
linkedQuestion: 0,
|
|
488
|
-
nestedQuestion: [],
|
|
489
|
-
},
|
|
490
|
-
];
|
|
491
|
-
return answer;
|
|
492
|
-
break;
|
|
493
|
-
case "image/video":
|
|
494
|
-
answer = [
|
|
495
|
-
{
|
|
496
|
-
answer: "",
|
|
497
|
-
sopFlag: false,
|
|
498
|
-
validation: false,
|
|
499
|
-
validationType: "",
|
|
500
|
-
validationAnswer: "",
|
|
501
|
-
referenceImage: [],
|
|
502
|
-
showLinked: false,
|
|
503
|
-
linkedQuestion: 0,
|
|
504
|
-
nestedQuestion: [],
|
|
505
|
-
limit: false,
|
|
506
|
-
videoLimit: 0,
|
|
507
|
-
imageLimit: 0,
|
|
508
|
-
},
|
|
509
|
-
];
|
|
510
|
-
return answer;
|
|
511
|
-
break;
|
|
512
|
-
case "dropdown":
|
|
513
|
-
answer = [];
|
|
514
|
-
options.split(",").forEach((ele) => {
|
|
515
|
-
if (ele?.trim()) {
|
|
516
|
-
answer.push({
|
|
517
|
-
answer: ele,
|
|
518
|
-
sopFlag: false,
|
|
519
|
-
validation: false,
|
|
520
|
-
validationType: "Capture Image",
|
|
521
|
-
linkedQuestion: 0,
|
|
522
|
-
showLinked: false,
|
|
523
|
-
referenceImage: [],
|
|
524
|
-
runAI: false,
|
|
525
|
-
allowUploadfromGallery: false,
|
|
526
|
-
nestedQuestion: [],
|
|
527
|
-
complianceScore: 0,
|
|
528
|
-
});
|
|
529
|
-
}
|
|
530
|
-
});
|
|
531
|
-
return answer;
|
|
532
|
-
break;
|
|
533
|
-
default:
|
|
534
|
-
return [];
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
downloadTemplate() {
|
|
538
|
-
this.sopService
|
|
539
|
-
.downloadQuestion(this.checklistData.checklistId)
|
|
540
|
-
.pipe(takeUntil(this.detach))
|
|
541
|
-
.subscribe((res) => {
|
|
542
|
-
if (res) {
|
|
543
|
-
this.sopService.saveAsExcelFile(res, "Checklist Question");
|
|
544
|
-
}
|
|
545
|
-
else {
|
|
546
|
-
this.toast.getErrorToast("Unable to download template!");
|
|
547
|
-
}
|
|
548
|
-
}, (error) => {
|
|
549
|
-
this.toast.getErrorToast("Unable to download template!");
|
|
550
|
-
});
|
|
551
|
-
}
|
|
552
|
-
updateChecklist() {
|
|
553
|
-
if (!this.checklistData.checkListName) {
|
|
554
|
-
this.toast.getErrorToast("Checklist Name is missing");
|
|
555
|
-
return;
|
|
556
|
-
}
|
|
557
|
-
if (!this.excelData.length) {
|
|
558
|
-
this.toast.getErrorToast("Please upload a valid file");
|
|
559
|
-
return;
|
|
560
|
-
}
|
|
561
|
-
let params = {
|
|
562
|
-
checklistName: this.checklistData.checkListName?.trim(),
|
|
563
|
-
checklistDescription: this.checklistData.checkListDescription?.trim(),
|
|
564
|
-
sections: this.sectionDetails,
|
|
565
|
-
clientId: this.checklistData.clientId,
|
|
566
|
-
submitType: "save",
|
|
567
|
-
};
|
|
568
|
-
this.sopService
|
|
569
|
-
.getUpdateChecklist(this.checklistData.checklistId, params)
|
|
570
|
-
.pipe(takeUntil(this.detach))
|
|
571
|
-
.subscribe((res) => {
|
|
572
|
-
if (res) {
|
|
573
|
-
if (res?.code == 200) {
|
|
574
|
-
this.dialogRef.close("reload");
|
|
575
|
-
this.toast.getSuccessToast("Checklist updated successfully");
|
|
576
|
-
}
|
|
577
|
-
else {
|
|
578
|
-
this.toast.getErrorToast("Unable to update checklist!");
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
else {
|
|
582
|
-
this.toast.getErrorToast("Unable to update checklist!");
|
|
583
|
-
}
|
|
584
|
-
}, (error) => {
|
|
585
|
-
let err = error?.error?.error?.message ||
|
|
586
|
-
"Unable to update checklist!Server Error!";
|
|
587
|
-
this.toast.getErrorToast(err);
|
|
588
|
-
});
|
|
589
|
-
}
|
|
590
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChecklistPopupComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ToastService }, { token: i3.TraxService }, { token: i4.Router }, { token: i5.NgbActiveModal }, { token: i5.NgbModal }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
591
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ChecklistPopupComponent, selector: "lib-checklist-popup", inputs: { clientId: "clientId", type: "type", checklistData: "checklistData" }, viewQueries: [{ propertyName: "afterValidation", first: true, predicate: ["afterValidation"], descendants: true }, { propertyName: "fileInput", first: true, predicate: ["file"], descendants: true }, { propertyName: "fileInput1", first: true, predicate: ["file1"], descendants: true }], ngImport: i0, template: "<div class=\"checklist-card\">\r\n\r\n <!-- Header -->\r\n <div *ngIf=\"!excelData.length\">\r\n <div class=\"d-flex align-items-center mb-3\">\r\n <div class=\"title-icon me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M28 21V35M21 28H35\" stroke=\"#009BF3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"mb-0 titleText\">{{type == 'create' ? 'Create Checklist' : 'Bulk Upload'}}</div>\r\n </div>\r\n \r\n <form [formGroup]=\"checklistForm\">\r\n \r\n <!-- Checklist Name -->\r\n <div class=\"mb-3\" *ngIf=\"type == 'create'\">\r\n <label class=\"form-label\">Checklist Name</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"name\">\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"mb-3\" *ngIf=\"type == 'create'\">\r\n <label class=\"form-label\">Description</label>\r\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"></textarea>\r\n </div>\r\n \r\n <!-- Mode Selection -->\r\n <div class=\"row g-2 my-3\" *ngIf=\"type == 'create'\">\r\n \r\n <div class=\"col-md-6\">\r\n <div\r\n class=\"option-box\"\r\n [class.option-active]=\"mode==='individual'\"\r\n (click)=\"selectMode('individual')\">\r\n \r\n <span>Add questions individually</span>\r\n <input type=\"radio\" value=\"individual\" formControlName=\"mode\" style=\"width:15px;height:15px\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-md-6\">\r\n <div\r\n class=\"option-box\"\r\n [class.option-active]=\"mode==='bulk'\"\r\n (click)=\"selectMode('bulk')\">\r\n \r\n <span>Add questions in bulk</span>\r\n <input type=\"radio\" value=\"bulk\" formControlName=\"mode\" style=\"width:15px;height:15px\">\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <!-- Bulk Upload Section -->\r\n <div *ngIf=\"mode === 'bulk'\" class=\"bulkText\">\r\n \r\n <div class=\"my-5\">\r\n \r\n <div class=\"mb-2\">1. Use the template to upload multiple questions at once</div>\r\n \r\n <div class=\"mb-2\">\r\n 2. Download the template here -\r\n @if(type == 'create') {\r\n <a class=\"download-link\" href=\"/assets/files/checklistQuestion.xlsx\" download>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n <path d=\"M15.8359 10.8359V14.1693C15.8359 14.6113 15.6603 15.0352 15.3478 15.3478C15.0352 15.6603 14.6113 15.8359 14.1693 15.8359H2.5026C2.06058 15.8359 1.63665 15.6603 1.32409 15.3478C1.01153 15.0352 0.835938 14.6113 0.835938 14.1693V10.8359M4.16927 6.66927L8.33594 10.8359M8.33594 10.8359L12.5026 6.66927M8.33594 10.8359V0.835938\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Download Template\r\n </a>\r\n }\r\n @else {\r\n <span class=\"download-link\" (click)=\"downloadTemplate()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n <path d=\"M15.8359 10.8359V14.1693C15.8359 14.6113 15.6603 15.0352 15.3478 15.3478C15.0352 15.6603 14.6113 15.8359 14.1693 15.8359H2.5026C2.06058 15.8359 1.63665 15.6603 1.32409 15.3478C1.01153 15.0352 0.835938 14.6113 0.835938 14.1693V10.8359M4.16927 6.66927L8.33594 10.8359M8.33594 10.8359L12.5026 6.66927M8.33594 10.8359V0.835938\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Download Template\r\n </span>\r\n }\r\n </div>\r\n \r\n <div class=\"mb-2\">3. Add your data to the template</div>\r\n <div class=\"mb-2\">4. Upload it for processing</div>\r\n \r\n </div>\r\n \r\n <!-- Upload Area -->\r\n <div class=\"upload-box cursor-pointer\" (click)=\"fileInput.click()\">\r\n \r\n <div class=\"upload-icon mb-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#EAF8FF\" stroke-width=\"6\"/>\r\n <g clip-path=\"url(#clip0_19034_66996)\">\r\n <path d=\"M26.3326 26.3313L22.9992 22.998M22.9992 22.998L19.6659 26.3313M22.9992 22.998V30.498M29.9909 28.323C30.8037 27.8798 31.4458 27.1787 31.8158 26.3301C32.1858 25.4816 32.2627 24.534 32.0344 23.6369C31.8061 22.7397 31.2855 21.9442 30.5548 21.3758C29.8241 20.8074 28.925 20.4986 27.9992 20.498H26.9492C26.697 19.5223 26.2269 18.6166 25.5742 17.8488C24.9215 17.081 24.1033 16.4712 23.181 16.0651C22.2587 15.6591 21.2564 15.4674 20.2493 15.5045C19.2423 15.5416 18.2568 15.8065 17.3669 16.2793C16.477 16.7521 15.7058 17.4205 15.1114 18.2343C14.517 19.048 14.1148 19.9859 13.9351 20.9774C13.7553 21.969 13.8027 22.9884 14.0736 23.959C14.3445 24.9296 14.8319 25.8262 15.4992 26.5813\" stroke=\"#009BF3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_19034_66996\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(13 13)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n \r\n <div class=\"text-primary fw-semibold uploadText\">Click To Upload</div>\r\n \r\n <!-- Hidden File Input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n hidden\r\n (change)=\"onFileSelected($event)\"\r\n >\r\n \r\n </div>\r\n \r\n <!-- Uploaded File -->\r\n <div *ngIf=\"fileName\" class=\"upload-file\">\r\n \r\n <div class=\"d-flex align-items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\">\r\n <rect x=\"2\" y=\"2\" width=\"32\" height=\"32\" rx=\"16\" fill=\"#DAF1FF\"/>\r\n <rect x=\"2\" y=\"2\" width=\"32\" height=\"32\" rx=\"16\" stroke=\"#EAF8FF\" stroke-width=\"4\"/>\r\n <path d=\"M18.668 11.3359H14.0013C13.6477 11.3359 13.3085 11.4764 13.0585 11.7265C12.8084 11.9765 12.668 12.3156 12.668 12.6693V23.3359C12.668 23.6896 12.8084 24.0287 13.0585 24.2787C13.3085 24.5288 13.6477 24.6693 14.0013 24.6693H22.0013C22.3549 24.6693 22.6941 24.5288 22.9441 24.2787C23.1942 24.0287 23.3346 23.6896 23.3346 23.3359V16.0026M18.668 11.3359L23.3346 16.0026M18.668 11.3359V16.0026H23.3346\" stroke=\"#00A3FF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n <div class=\"d-flex flex-column align-items-start ms-5\">\r\n <div>{{fileName}}</div>\r\n <div class=\"successText\">\r\n {{fileSize}} KB \u2013 Uploaded\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\r\n <path d=\"M29.3346 14.7705V15.9972C29.333 18.8724 28.402 21.6701 26.6804 23.973C24.9589 26.2758 22.539 27.9605 19.7818 28.7757C17.0245 29.591 14.0776 29.4931 11.3806 28.4967C8.68354 27.5002 6.38084 25.6587 4.81592 23.2466C3.25099 20.8346 2.50769 17.9813 2.69687 15.1123C2.88605 12.2433 3.99758 9.51232 5.86568 7.32665C7.73377 5.14097 10.2583 3.61772 13.0629 2.98408C15.8674 2.35043 18.8017 2.64033 21.428 3.81055M29.3346 5.33055L16.0013 18.6772L12.0013 14.6772\" stroke=\"#12B76A\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n <!-- Buttons -->\r\n <div class=\"d-flex justify-content-end mt-4\">\r\n \r\n <button type=\"button\" class=\"btn btn-light me-2\" (click)=\"dialogRef.close()\">\r\n Cancel\r\n </button>\r\n \r\n <button class=\"btn btn-primary\" (click)=\"type == 'create' ? createChecklist() : updateChecklist()\">\r\n Proceed\r\n </button>\r\n \r\n </div>\r\n \r\n </form>\r\n </div>\r\n\r\n <div class=\"border-0 validateBox\" *ngIf=\"excelData.length\">\r\n <div class=\"card-header border-0 mt-0\">\r\n <div class=\"card-title mt-3\"><span class=\"config-heading fw-semibold w-auto\">Assign Stores</span></div>\r\n </div>\r\n <div class=\"card-body pt-0\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Total Records</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Rows processed</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div [ngClass]=\"excelError ? 'error-heading':''\" class=\"fw-semibold config-heading w-100\">{{excelError?.error?.length || 0}}</div>\r\n <div [ngClass]=\"excelError ? 'excel-error':''\" class=\"fw-semibold subtitle mt-1\">Error</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!excelError\" class=\"table-header mt-5\" style=\"font-weight: 400;\">\r\n <div>You're about to assign {{excelData?.length}} stores to the checklist. Are you sure want to proceed?</div>\r\n </div>\r\n <div *ngIf=\"excelError\" class=\"flex-column mt-5\">\r\n <div class=\"config-heading fw-bold\">Invalid Details !</div>\r\n <div class=\"subtitle mt-5\">Please provide correct and complete layout information.</div>\r\n <div class=\"p-5 w-100 rounded-3 border-error mt-5 flex-column\">\r\n <div *ngFor=\"let error of excelError?.error; let i = index; let last = last\" [ngClass]=\"!last ? 'mb-2' : ''\" class=\"text-error\">{{i + 1}}) {{error}}</div>\r\n </div>\r\n </div>\r\n\r\n <input style=\"visibility: hidden;\" #fileInput1 type=\"file\" id=\"kt_account_team_size_select_2\" (change)=\"onFileSelected($event)\" />\r\n </div>\r\n \r\n <div class=\"d-flex justify-content-end mt-4\">\r\n <button type=\"button\" class=\"btn btn-light me-2\" (click)=\"dialogRef.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!excelError\" (click)=\"type == 'create' ? createChecklist() : updateChecklist()\">\r\n Proceed\r\n </button>\r\n <button type=\"button\" *ngIf=\"excelError\" class=\"btn py-3 ms-3 btn-danger\" (click)=\"Reupload();\">Reupload</button>\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [".checklist-card{margin:auto;background:#fff;padding:25px}.titleText{font-family:Inter;font-weight:600;font-size:18px;line-height:28px;letter-spacing:0%;color:#101828}.option-box{border:1px solid #dee2e6;border-radius:8px;padding:20px;display:flex;justify-content:space-between;align-items:center;cursor:pointer;font-family:Inter;font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%}.option-active{border:1px solid #6BCAFF;background:#eaf8ff;color:#009bf3}.upload-box{border:2px dashed #dee2e6;border-radius:10px;padding:35px;text-align:center;background:#fafafa}.bulkText{font-family:Inter;font-weight:400!important;font-size:14px!important;line-height:20px!important;letter-spacing:0%!important;color:#344054!important;text-align:center!important}.upload-icon{width:50px;height:50px;border-radius:50%;background:#eaf3ff;display:flex;align-items:center;justify-content:center;margin:auto;color:#0d6efd;font-size:22px}.upload-file{border:1px solid #e4e4e4;border-radius:8px;padding:10px 15px;margin-top:15px;display:flex;justify-content:space-between;align-items:center}.download-link{color:#009bf3;cursor:pointer;font-family:Inter;font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize}.uploadText{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize;text-decoration:underline;text-decoration-style:solid;text-decoration-thickness:0%;color:#009bf3}::ng-deep .validateBox .successText{font-family:Inter;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#667085}::ng-deep .validateBox .text-light-primary{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;text-transform:capitalize}::ng-deep .validateBox .bg-light-primary{border-radius:8px!important;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}::ng-deep .validateBox .selectstore{color:var(--primary-700, #009BF3);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}::ng-deep .validateBox .headeralign{color:var(--gray-500, #667085);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .validateBox .assignpadding{padding:0 40px}::ng-deep .validateBox .uploadpadding{padding:0 20% 9px}::ng-deep .validateBox .subtext{color:var(--gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px;align-items:center;gap:8px;align-self:stretch}::ng-deep .validateBox .text-primary{color:var(--primary-700, #009BF3)!important}::ng-deep .validateBox .border-primary{border:1px dashed var(--Primary-500, #33B5FF)!important;background:var(--Primary-25, #F6FCFF)!important}::ng-deep .validateBox .bg-light{background:var(--Primary-25, #F6FCFF)!important}::ng-deep .validateBox .table-header{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:600;line-height:24px}::ng-deep .validateBox .text-error{color:var(--Error-700, #B42318)!important;font-size:14px;font-weight:500;line-height:20px}::ng-deep .validateBox .excel-error{color:var(--Error-600, #D92D20);font-size:14px;font-weight:500;line-height:20px}::ng-deep .validateBox .error-heading{color:var(--Error-600, #D92D20);font-size:20px;font-weight:500;line-height:30px}::ng-deep .validateBox .border-error{border:1px solid var(--Error-300, #FDA29B)!important;background:var(--Error-25, #FFFBFA)!important}::ng-deep .validateBox .popup-card{border-radius:6px;border:1px solid var(--Gray-300, #D0D5DD);background:#fff;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
592
|
-
}
|
|
593
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChecklistPopupComponent, decorators: [{
|
|
594
|
-
type: Component,
|
|
595
|
-
args: [{ selector: "lib-checklist-popup", template: "<div class=\"checklist-card\">\r\n\r\n <!-- Header -->\r\n <div *ngIf=\"!excelData.length\">\r\n <div class=\"d-flex align-items-center mb-3\">\r\n <div class=\"title-icon me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M28 21V35M21 28H35\" stroke=\"#009BF3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"mb-0 titleText\">{{type == 'create' ? 'Create Checklist' : 'Bulk Upload'}}</div>\r\n </div>\r\n \r\n <form [formGroup]=\"checklistForm\">\r\n \r\n <!-- Checklist Name -->\r\n <div class=\"mb-3\" *ngIf=\"type == 'create'\">\r\n <label class=\"form-label\">Checklist Name</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"name\">\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"mb-3\" *ngIf=\"type == 'create'\">\r\n <label class=\"form-label\">Description</label>\r\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"></textarea>\r\n </div>\r\n \r\n <!-- Mode Selection -->\r\n <div class=\"row g-2 my-3\" *ngIf=\"type == 'create'\">\r\n \r\n <div class=\"col-md-6\">\r\n <div\r\n class=\"option-box\"\r\n [class.option-active]=\"mode==='individual'\"\r\n (click)=\"selectMode('individual')\">\r\n \r\n <span>Add questions individually</span>\r\n <input type=\"radio\" value=\"individual\" formControlName=\"mode\" style=\"width:15px;height:15px\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-md-6\">\r\n <div\r\n class=\"option-box\"\r\n [class.option-active]=\"mode==='bulk'\"\r\n (click)=\"selectMode('bulk')\">\r\n \r\n <span>Add questions in bulk</span>\r\n <input type=\"radio\" value=\"bulk\" formControlName=\"mode\" style=\"width:15px;height:15px\">\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <!-- Bulk Upload Section -->\r\n <div *ngIf=\"mode === 'bulk'\" class=\"bulkText\">\r\n \r\n <div class=\"my-5\">\r\n \r\n <div class=\"mb-2\">1. Use the template to upload multiple questions at once</div>\r\n \r\n <div class=\"mb-2\">\r\n 2. Download the template here -\r\n @if(type == 'create') {\r\n <a class=\"download-link\" href=\"/assets/files/checklistQuestion.xlsx\" download>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n <path d=\"M15.8359 10.8359V14.1693C15.8359 14.6113 15.6603 15.0352 15.3478 15.3478C15.0352 15.6603 14.6113 15.8359 14.1693 15.8359H2.5026C2.06058 15.8359 1.63665 15.6603 1.32409 15.3478C1.01153 15.0352 0.835938 14.6113 0.835938 14.1693V10.8359M4.16927 6.66927L8.33594 10.8359M8.33594 10.8359L12.5026 6.66927M8.33594 10.8359V0.835938\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Download Template\r\n </a>\r\n }\r\n @else {\r\n <span class=\"download-link\" (click)=\"downloadTemplate()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n <path d=\"M15.8359 10.8359V14.1693C15.8359 14.6113 15.6603 15.0352 15.3478 15.3478C15.0352 15.6603 14.6113 15.8359 14.1693 15.8359H2.5026C2.06058 15.8359 1.63665 15.6603 1.32409 15.3478C1.01153 15.0352 0.835938 14.6113 0.835938 14.1693V10.8359M4.16927 6.66927L8.33594 10.8359M8.33594 10.8359L12.5026 6.66927M8.33594 10.8359V0.835938\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Download Template\r\n </span>\r\n }\r\n </div>\r\n \r\n <div class=\"mb-2\">3. Add your data to the template</div>\r\n <div class=\"mb-2\">4. Upload it for processing</div>\r\n \r\n </div>\r\n \r\n <!-- Upload Area -->\r\n <div class=\"upload-box cursor-pointer\" (click)=\"fileInput.click()\">\r\n \r\n <div class=\"upload-icon mb-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#EAF8FF\" stroke-width=\"6\"/>\r\n <g clip-path=\"url(#clip0_19034_66996)\">\r\n <path d=\"M26.3326 26.3313L22.9992 22.998M22.9992 22.998L19.6659 26.3313M22.9992 22.998V30.498M29.9909 28.323C30.8037 27.8798 31.4458 27.1787 31.8158 26.3301C32.1858 25.4816 32.2627 24.534 32.0344 23.6369C31.8061 22.7397 31.2855 21.9442 30.5548 21.3758C29.8241 20.8074 28.925 20.4986 27.9992 20.498H26.9492C26.697 19.5223 26.2269 18.6166 25.5742 17.8488C24.9215 17.081 24.1033 16.4712 23.181 16.0651C22.2587 15.6591 21.2564 15.4674 20.2493 15.5045C19.2423 15.5416 18.2568 15.8065 17.3669 16.2793C16.477 16.7521 15.7058 17.4205 15.1114 18.2343C14.517 19.048 14.1148 19.9859 13.9351 20.9774C13.7553 21.969 13.8027 22.9884 14.0736 23.959C14.3445 24.9296 14.8319 25.8262 15.4992 26.5813\" stroke=\"#009BF3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_19034_66996\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(13 13)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n \r\n <div class=\"text-primary fw-semibold uploadText\">Click To Upload</div>\r\n \r\n <!-- Hidden File Input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n hidden\r\n (change)=\"onFileSelected($event)\"\r\n >\r\n \r\n </div>\r\n \r\n <!-- Uploaded File -->\r\n <div *ngIf=\"fileName\" class=\"upload-file\">\r\n \r\n <div class=\"d-flex align-items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\">\r\n <rect x=\"2\" y=\"2\" width=\"32\" height=\"32\" rx=\"16\" fill=\"#DAF1FF\"/>\r\n <rect x=\"2\" y=\"2\" width=\"32\" height=\"32\" rx=\"16\" stroke=\"#EAF8FF\" stroke-width=\"4\"/>\r\n <path d=\"M18.668 11.3359H14.0013C13.6477 11.3359 13.3085 11.4764 13.0585 11.7265C12.8084 11.9765 12.668 12.3156 12.668 12.6693V23.3359C12.668 23.6896 12.8084 24.0287 13.0585 24.2787C13.3085 24.5288 13.6477 24.6693 14.0013 24.6693H22.0013C22.3549 24.6693 22.6941 24.5288 22.9441 24.2787C23.1942 24.0287 23.3346 23.6896 23.3346 23.3359V16.0026M18.668 11.3359L23.3346 16.0026M18.668 11.3359V16.0026H23.3346\" stroke=\"#00A3FF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n <div class=\"d-flex flex-column align-items-start ms-5\">\r\n <div>{{fileName}}</div>\r\n <div class=\"successText\">\r\n {{fileSize}} KB \u2013 Uploaded\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\r\n <path d=\"M29.3346 14.7705V15.9972C29.333 18.8724 28.402 21.6701 26.6804 23.973C24.9589 26.2758 22.539 27.9605 19.7818 28.7757C17.0245 29.591 14.0776 29.4931 11.3806 28.4967C8.68354 27.5002 6.38084 25.6587 4.81592 23.2466C3.25099 20.8346 2.50769 17.9813 2.69687 15.1123C2.88605 12.2433 3.99758 9.51232 5.86568 7.32665C7.73377 5.14097 10.2583 3.61772 13.0629 2.98408C15.8674 2.35043 18.8017 2.64033 21.428 3.81055M29.3346 5.33055L16.0013 18.6772L12.0013 14.6772\" stroke=\"#12B76A\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n <!-- Buttons -->\r\n <div class=\"d-flex justify-content-end mt-4\">\r\n \r\n <button type=\"button\" class=\"btn btn-light me-2\" (click)=\"dialogRef.close()\">\r\n Cancel\r\n </button>\r\n \r\n <button class=\"btn btn-primary\" (click)=\"type == 'create' ? createChecklist() : updateChecklist()\">\r\n Proceed\r\n </button>\r\n \r\n </div>\r\n \r\n </form>\r\n </div>\r\n\r\n <div class=\"border-0 validateBox\" *ngIf=\"excelData.length\">\r\n <div class=\"card-header border-0 mt-0\">\r\n <div class=\"card-title mt-3\"><span class=\"config-heading fw-semibold w-auto\">Assign Stores</span></div>\r\n </div>\r\n <div class=\"card-body pt-0\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Total Records</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Rows processed</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div [ngClass]=\"excelError ? 'error-heading':''\" class=\"fw-semibold config-heading w-100\">{{excelError?.error?.length || 0}}</div>\r\n <div [ngClass]=\"excelError ? 'excel-error':''\" class=\"fw-semibold subtitle mt-1\">Error</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!excelError\" class=\"table-header mt-5\" style=\"font-weight: 400;\">\r\n <div>You're about to assign {{excelData?.length}} stores to the checklist. Are you sure want to proceed?</div>\r\n </div>\r\n <div *ngIf=\"excelError\" class=\"flex-column mt-5\">\r\n <div class=\"config-heading fw-bold\">Invalid Details !</div>\r\n <div class=\"subtitle mt-5\">Please provide correct and complete layout information.</div>\r\n <div class=\"p-5 w-100 rounded-3 border-error mt-5 flex-column\">\r\n <div *ngFor=\"let error of excelError?.error; let i = index; let last = last\" [ngClass]=\"!last ? 'mb-2' : ''\" class=\"text-error\">{{i + 1}}) {{error}}</div>\r\n </div>\r\n </div>\r\n\r\n <input style=\"visibility: hidden;\" #fileInput1 type=\"file\" id=\"kt_account_team_size_select_2\" (change)=\"onFileSelected($event)\" />\r\n </div>\r\n \r\n <div class=\"d-flex justify-content-end mt-4\">\r\n <button type=\"button\" class=\"btn btn-light me-2\" (click)=\"dialogRef.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!excelError\" (click)=\"type == 'create' ? createChecklist() : updateChecklist()\">\r\n Proceed\r\n </button>\r\n <button type=\"button\" *ngIf=\"excelError\" class=\"btn py-3 ms-3 btn-danger\" (click)=\"Reupload();\">Reupload</button>\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [".checklist-card{margin:auto;background:#fff;padding:25px}.titleText{font-family:Inter;font-weight:600;font-size:18px;line-height:28px;letter-spacing:0%;color:#101828}.option-box{border:1px solid #dee2e6;border-radius:8px;padding:20px;display:flex;justify-content:space-between;align-items:center;cursor:pointer;font-family:Inter;font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%}.option-active{border:1px solid #6BCAFF;background:#eaf8ff;color:#009bf3}.upload-box{border:2px dashed #dee2e6;border-radius:10px;padding:35px;text-align:center;background:#fafafa}.bulkText{font-family:Inter;font-weight:400!important;font-size:14px!important;line-height:20px!important;letter-spacing:0%!important;color:#344054!important;text-align:center!important}.upload-icon{width:50px;height:50px;border-radius:50%;background:#eaf3ff;display:flex;align-items:center;justify-content:center;margin:auto;color:#0d6efd;font-size:22px}.upload-file{border:1px solid #e4e4e4;border-radius:8px;padding:10px 15px;margin-top:15px;display:flex;justify-content:space-between;align-items:center}.download-link{color:#009bf3;cursor:pointer;font-family:Inter;font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize}.uploadText{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize;text-decoration:underline;text-decoration-style:solid;text-decoration-thickness:0%;color:#009bf3}::ng-deep .validateBox .successText{font-family:Inter;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#667085}::ng-deep .validateBox .text-light-primary{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;text-transform:capitalize}::ng-deep .validateBox .bg-light-primary{border-radius:8px!important;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}::ng-deep .validateBox .selectstore{color:var(--primary-700, #009BF3);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}::ng-deep .validateBox .headeralign{color:var(--gray-500, #667085);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .validateBox .assignpadding{padding:0 40px}::ng-deep .validateBox .uploadpadding{padding:0 20% 9px}::ng-deep .validateBox .subtext{color:var(--gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px;align-items:center;gap:8px;align-self:stretch}::ng-deep .validateBox .text-primary{color:var(--primary-700, #009BF3)!important}::ng-deep .validateBox .border-primary{border:1px dashed var(--Primary-500, #33B5FF)!important;background:var(--Primary-25, #F6FCFF)!important}::ng-deep .validateBox .bg-light{background:var(--Primary-25, #F6FCFF)!important}::ng-deep .validateBox .table-header{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:600;line-height:24px}::ng-deep .validateBox .text-error{color:var(--Error-700, #B42318)!important;font-size:14px;font-weight:500;line-height:20px}::ng-deep .validateBox .excel-error{color:var(--Error-600, #D92D20);font-size:14px;font-weight:500;line-height:20px}::ng-deep .validateBox .error-heading{color:var(--Error-600, #D92D20);font-size:20px;font-weight:500;line-height:30px}::ng-deep .validateBox .border-error{border:1px solid var(--Error-300, #FDA29B)!important;background:var(--Error-25, #FFFBFA)!important}::ng-deep .validateBox .popup-card{border-radius:6px;border:1px solid var(--Gray-300, #D0D5DD);background:#fff;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}\n"] }]
|
|
596
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ToastService }, { type: i3.TraxService }, { type: i4.Router }, { type: i5.NgbActiveModal }, { type: i5.NgbModal }, { type: i0.ChangeDetectorRef }], propDecorators: { clientId: [{
|
|
597
|
-
type: Input
|
|
598
|
-
}], type: [{
|
|
599
|
-
type: Input
|
|
600
|
-
}], checklistData: [{
|
|
601
|
-
type: Input
|
|
602
|
-
}], afterValidation: [{
|
|
603
|
-
type: ViewChild,
|
|
604
|
-
args: ["afterValidation"]
|
|
605
|
-
}], fileInput: [{
|
|
606
|
-
type: ViewChild,
|
|
607
|
-
args: ["file"]
|
|
608
|
-
}], fileInput1: [{
|
|
609
|
-
type: ViewChild,
|
|
610
|
-
args: ["file1"]
|
|
611
|
-
}] } });
|
|
612
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tsaXN0LXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtdHJheC9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWNoZWNrbGlzdC9jaGVja2xpc3QtcG9wdXAvY2hlY2tsaXN0LXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtdHJheC9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWNoZWNrbGlzdC9jaGVja2xpc3QtcG9wdXAvY2hlY2tsaXN0LXBvcHVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBbUUsTUFBTSxlQUFlLENBQUM7QUFHN0gsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFFLFNBQVMsRUFBQyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHekMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDOzs7Ozs7OztBQU8xQixNQUFNLE9BQU8sdUJBQXVCO0lBd0J4QjtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFDQTtJQTdCVixhQUFhLENBQVk7SUFDaEIsUUFBUSxDQUFTO0lBQ2pCLElBQUksQ0FBUztJQUNiLGFBQWEsQ0FBTTtJQUNFLGVBQWUsQ0FBTTtJQUNoQyxTQUFTLENBQWM7SUFDdEIsVUFBVSxDQUFjO0lBRTVDLFFBQVEsQ0FBTTtJQUNkLFFBQVEsQ0FBTTtJQUNkLGNBQWMsR0FBUTtRQUNwQjtZQUNFLElBQUksRUFBRSxXQUFXO1lBQ2pCLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLFNBQVMsRUFBRSxFQUFFO1NBQ2Q7S0FDRixDQUFDO0lBQ00sTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDL0IsU0FBUyxHQUFRLEVBQUUsQ0FBQztJQUNwQixVQUFVLENBQU07SUFDaEIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUVkLFlBQ1UsRUFBZSxFQUNmLEtBQW1CLEVBQ25CLFVBQXVCLEVBQ3ZCLE1BQWMsRUFDZixTQUF5QixFQUN4QixNQUFnQixFQUNoQixFQUFxQjtRQU5yQixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFhO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBQ2hCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBRTdCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDakMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ1YsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2pCLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUU7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBWTtRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUErQixLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3hELElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1NBQzdEO1FBQ0QsSUFBSSxXQUFXLEVBQUU7WUFDZixNQUFNLE1BQU0sR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUN6QixNQUFNLElBQUksR0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDckMsTUFBTSxFQUFFLEdBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQzlELE1BQU0sTUFBTSxHQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sRUFBRSxHQUFtQixFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLENBQUM7aUJBQ3hEO2dCQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixJQUFJLEtBQUssR0FBUSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksWUFBWSxHQUFRLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsS0FBYSxFQUFFLEVBQUU7b0JBQ2pELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRTt3QkFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQywyQkFBMkIsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ3BEO29CQUNELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRTt3QkFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ3JEO29CQUNELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRTt3QkFDakMsS0FBSyxDQUFDLElBQUksQ0FBQywwQkFBMEIsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ25EO29CQUNELElBQ0UsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxFQUFFO3dCQUM1Qjs0QkFDRSx3QkFBd0I7NEJBQ3hCLDBCQUEwQjs0QkFDMUIsVUFBVTt5QkFDWCxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFDaEMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxFQUM1Qzt3QkFDQSxLQUFLLENBQUMsSUFBSSxDQUFDLDZCQUE2QixLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDdEQ7b0JBRUQsSUFBSSxLQUFLLEdBQ1AsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO3dCQUN2RCxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ2pDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQzFCO3lCQUFNO3dCQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQXlCLENBQUMsQ0FBQztxQkFDbkU7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO29CQUNoQixNQUFNLFlBQVksR0FBRzt3QkFDbkIsV0FBVyxFQUFFLEtBQUs7d0JBQ2xCLFFBQVEsRUFBRSwwL0JBQTAvQjt3QkFDcGdDLEtBQUssRUFBRSxrQkFBa0I7d0JBQ3pCLE9BQU8sRUFBRSx3REFBd0Q7d0JBQ2pFLFVBQVUsRUFBRSxPQUFPO3dCQUNuQixLQUFLLEVBQUUsS0FBSztxQkFDYixDQUFDO29CQUNGLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO29CQUMvQixPQUFPO2lCQUNSO2dCQUNELElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxVQUFVLEdBQVE7b0JBQ3BCLG9CQUFvQixFQUFFLGFBQWE7b0JBQ25DLGNBQWMsRUFBRSxRQUFRO29CQUN4Qix3QkFBd0IsRUFBRSxzQkFBc0I7b0JBQ2hELDBCQUEwQixFQUFFLHdCQUF3QjtvQkFDcEQsZ0NBQWdDLEVBQUUsa0JBQWtCO29CQUNwRCx5QkFBeUIsRUFBRSxPQUFPO29CQUNsQyx5QkFBeUIsRUFBRSxPQUFPO29CQUNsQyx3QkFBd0IsRUFBRSxlQUFlO29CQUN6QyxJQUFJLEVBQUUsTUFBTTtvQkFDWixjQUFjLEVBQUUsYUFBYTtvQkFDN0IsK0JBQStCLEVBQUUsYUFBYTtvQkFDOUMsSUFBSSxFQUFFLE1BQU07b0JBQ1osUUFBUSxFQUFFLFVBQVU7aUJBQ3JCLENBQUM7Z0JBQ0YsSUFBSSxVQUFVLEdBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxHQUFRLEVBQUUsRUFBRTtvQkFDdkQsSUFBSSxXQUFXLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUN4RSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUU7d0JBQ3ZCLGFBQWEsRUFBRSxDQUFDO3dCQUNoQixHQUFHLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxHQUFHOzRCQUN0QixJQUFJLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRTs0QkFDN0MsYUFBYSxFQUFFLGFBQWE7NEJBQzVCLFNBQVMsRUFBRTtnQ0FDVDtvQ0FDRSxHQUFHLEVBQUUsQ0FBQztvQ0FDTixLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRTtvQ0FDMUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUU7b0NBQzdDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztvQ0FDL0MsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQ3RCLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEVBQ25DLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUN0QjtvQ0FDRCxLQUFLLEVBQUUsS0FBSztvQ0FDWixZQUFZLEVBQUUsS0FBSztvQ0FDbkIsc0JBQXNCLEVBQUUsS0FBSztvQ0FDN0IsUUFBUSxFQUFFLEtBQUs7b0NBQ2YsMkJBQTJCLEVBQUUsRUFBRTtvQ0FDL0Isc0JBQXNCLEVBQUUsRUFBRTtvQ0FDMUIsYUFBYSxFQUFFLEVBQUU7b0NBQ2pCLFlBQVksRUFBRSxLQUFLO29DQUNuQixnQkFBZ0IsRUFBRSxFQUFFO29DQUNwQixhQUFhLEVBQUUsS0FBSztvQ0FDcEIsVUFBVSxFQUFFLEtBQUs7b0NBQ2pCLGVBQWUsRUFBRSxNQUFNO2lDQUN4Qjs2QkFDRjt5QkFDRixDQUFDO3FCQUNIO3lCQUFNO3dCQUNMLEdBQUcsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQzs0QkFDbkMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDOzRCQUMvQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRTs0QkFDMUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUU7NEJBQzdDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQzs0QkFDL0MsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQ3RCLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEVBQ25DLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUN0Qjs0QkFDRCxLQUFLLEVBQUUsS0FBSzs0QkFDWixZQUFZLEVBQUUsS0FBSzs0QkFDbkIsc0JBQXNCLEVBQUUsS0FBSzs0QkFDN0IsUUFBUSxFQUFFLEtBQUs7NEJBQ2YsMkJBQTJCLEVBQUUsRUFBRTs0QkFDL0Isc0JBQXNCLEVBQUUsRUFBRTs0QkFDMUIsYUFBYSxFQUFFLEVBQUU7NEJBQ2pCLFlBQVksRUFBRSxLQUFLOzRCQUNuQixnQkFBZ0IsRUFBRSxFQUFFOzRCQUNwQixhQUFhLEVBQUUsS0FBSzs0QkFDcEIsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLGVBQWUsRUFBRSxNQUFNO3lCQUN4QixDQUFDLENBQUM7cUJBQ0o7b0JBQ0QsT0FBTyxHQUFHLENBQUM7Z0JBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNQLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2lCQUN6QztnQkFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7aUJBQzFDO1lBQ0gsQ0FBQyxDQUFDO1NBQ0g7UUFFRCxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNuQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFVO1FBQ2YsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpDLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztTQUN6QztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25FLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDdEQsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFO1lBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFDdkQsT0FBTztTQUNSO1FBQ0QsSUFBSSxNQUFNLEdBQUc7WUFDWCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUNwRCxvQkFBb0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFO1lBQ2xFLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsVUFBVSxFQUFFLE1BQU07U0FDbkIsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVO2FBQ1osZUFBZSxDQUFDLE1BQU0sQ0FBQzthQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM1QixTQUFTLENBQ1IsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNYLElBQUksR0FBRyxFQUFFO2dCQUNQLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7b0JBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUN2Qiw0Q0FBNEMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDbkUsQ0FBQztvQkFDRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUMxQjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2lCQUN6RDthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDZCQUE2QixDQUFDLENBQUM7YUFDekQ7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNiLElBQUksR0FBRyxHQUNMLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU87Z0JBQzVCLDBDQUEwQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFZLEVBQUUsT0FBZTtRQUN0QyxJQUFJLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFFckIsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLFFBQVE7Z0JBQ1gsTUFBTSxHQUFHO29CQUNQO3dCQUNFLE1BQU0sRUFBRSxLQUFLO3dCQUNiLGtCQUFrQixFQUFFLENBQUM7d0JBQ3JCLE9BQU8sRUFBRSxLQUFLO3dCQUNkLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsZUFBZTt3QkFDL0IsY0FBYyxFQUFFLENBQUM7d0JBQ2pCLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsS0FBSyxFQUFFLEtBQUs7d0JBQ1osc0JBQXNCLEVBQUUsS0FBSzt3QkFDN0IsZUFBZSxFQUFFLENBQUM7cUJBQ25CO29CQUNEO3dCQUNFLE1BQU0sRUFBRSxJQUFJO3dCQUNaLGtCQUFrQixFQUFFLENBQUM7d0JBQ3JCLE9BQU8sRUFBRSxLQUFLO3dCQUNkLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsZUFBZTt3QkFDL0IsY0FBYyxFQUFFLENBQUM7d0JBQ2pCLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsS0FBSyxFQUFFLEtBQUs7d0JBQ1osc0JBQXNCLEVBQUUsS0FBSzt3QkFDN0IsZUFBZSxFQUFFLENBQUM7cUJBQ25CO2lCQUNGLENBQUM7Z0JBQ0YsT0FBTyxNQUFNLENBQUM7Z0JBQ2QsTUFBTTtZQUNSLEtBQUssYUFBYTtnQkFDaEIsTUFBTSxHQUFHO29CQUNQO3dCQUNFLE1BQU0sRUFBRSxFQUFFO3dCQUNWLE9BQU8sRUFBRSxLQUFLO3dCQUNkLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsZ0JBQWdCLEVBQUUsRUFBRTt3QkFDcEIsY0FBYyxFQUFFLEVBQUU7d0JBQ2xCLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsQ0FBQzt3QkFDakIsY0FBYyxFQUFFLEVBQUU7d0JBQ2xCLGVBQWUsRUFBRSxNQUFNO3FCQUN4QjtpQkFDRixDQUFDO2dCQUNGLE9BQU8sTUFBTSxDQUFDO2dCQUNkLE1BQU07WUFDUixLQUFLLHNCQUFzQjtnQkFDekIsTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDWixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUN0QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDOzRCQUNWLE1BQU0sRUFBRSxHQUFHOzRCQUNYLE9BQU8sRUFBRSxLQUFLOzRCQUNkLFVBQVUsRUFBRSxLQUFLOzRCQUNqQixjQUFjLEVBQUUsZUFBZTs0QkFDL0IsY0FBYyxFQUFFLENBQUM7NEJBQ2pCLFVBQVUsRUFBRSxLQUFLOzRCQUNqQixjQUFjLEVBQUUsRUFBRTs0QkFDbEIsS0FBSyxFQUFFLEtBQUs7NEJBQ1osc0JBQXNCLEVBQUUsS0FBSzs0QkFDN0IsY0FBYyxFQUFFLEVBQUU7NEJBQ2xCLGVBQWUsRUFBRSxDQUFDO3lCQUNuQixDQUFDLENBQUM7cUJBQ0o7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxNQUFNLENBQUM7Z0JBQ2QsTUFBTTtZQUNSLEtBQUssd0JBQXdCO2dCQUMzQixNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ3RDLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO3dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUM7NEJBQ1YsTUFBTSxFQUFFLEdBQUc7NEJBQ1gsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLGNBQWMsRUFBRSxlQUFlOzRCQUMvQixjQUFjLEVBQUUsQ0FBQzs0QkFDakIsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLGNBQWMsRUFBRSxFQUFFOzRCQUNsQixLQUFLLEVBQUUsS0FBSzs0QkFDWixzQkFBc0IsRUFBRSxLQUFLOzRCQUM3QixjQUFjLEVBQUUsRUFBRTs0QkFDbEIsZUFBZSxFQUFFLENBQUM7eUJBQ25CLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLE1BQU0sQ0FBQztnQkFDZCxNQUFNO1lBQ1IsS0FBSyxrQkFBa0I7Z0JBQ3JCLE1BQU0sR0FBRztvQkFDUDt3QkFDRSxNQUFNLEVBQUUsRUFBRTt3QkFDVixPQUFPLEVBQUUsS0FBSzt3QkFDZCxVQUFVLEVBQUUsS0FBSzt3QkFDakIsY0FBYyxFQUFFLEVBQUU7d0JBQ2xCLGdCQUFnQixFQUFFLEVBQUU7d0JBQ3BCLGNBQWMsRUFBRSxFQUFFO3dCQUNsQixVQUFVLEVBQUUsS0FBSzt3QkFDakIsY0FBYyxFQUFFLENBQUM7d0JBQ2pCLGNBQWMsRUFBRSxFQUFFO3FCQUNuQjtpQkFDRixDQUFDO2dCQUNGLE9BQU8sTUFBTSxDQUFDO2dCQUNkLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsTUFBTSxHQUFHO29CQUNQO3dCQUNFLE1BQU0sRUFBRSxFQUFFO3dCQUNWLE9BQU8sRUFBRSxLQUFLO3dCQUNkLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsZ0JBQWdCLEVBQUUsRUFBRTt3QkFDcEIsY0FBYyxFQUFFLEVBQUU7d0JBQ2xCLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsQ0FBQzt3QkFDakIsY0FBYyxFQUFFLEVBQUU7d0JBQ2xCLFlBQVksRUFBRSxDQUFDO3dCQUNmLGVBQWUsRUFBRSxDQUFDO3FCQUNuQjtpQkFDRixDQUFDO2dCQUNGLE9BQU8sTUFBTSxDQUFDO2dCQUNkLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsTUFBTSxHQUFHO29CQUNQO3dCQUNFLE1BQU0sRUFBRSxFQUFFO3dCQUNWLE9BQU8sRUFBRSxLQUFLO3dCQUNkLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsZ0JBQWdCLEVBQUUsRUFBRTt3QkFDcEIsY0FBYyxFQUFFLEVBQUU7d0JBQ2xCLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsQ0FBQzt3QkFDakIsY0FBYyxFQUFFLEVBQUU7cUJBQ25CO2lCQUNGLENBQUM7Z0JBQ0YsT0FBTyxNQUFNLENBQUM7Z0JBQ2QsTUFBTTtZQUNSLEtBQUssZUFBZTtnQkFDbEIsTUFBTSxHQUFHO29CQUNQO3dCQUNFLE1BQU0sRUFBRSxFQUFFO3dCQUNWLE9BQU8sRUFBRSxLQUFLO3dCQUNkLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsZ0JBQWdCLEVBQUUsRUFBRTt3QkFDcEIsY0FBYyxFQUFFLEVBQUU7d0JBQ2xCLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsQ0FBQzt3QkFDakIsY0FBYyxFQUFFLEVBQUU7cUJBQ25CO2lCQUNGLENBQUM7Z0JBQ0YsT0FBTyxNQUFNLENBQUM7Z0JBQ2QsTUFBTTtZQUNSLEtBQUssTUFBTTtnQkFDVCxNQUFNLEdBQUc7b0JBQ1A7d0JBQ0UsTUFBTSxFQUFFLEVBQUU7d0JBQ1YsT0FBTyxFQUFFLEtBQUs7d0JBQ2QsVUFBVSxFQUFFLEtBQUs7d0JBQ2pCLGNBQWMsRUFBRSxFQUFFO3dCQUNsQixnQkFBZ0IsRUFBRSxFQUFFO3dCQUNwQixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsVUFBVSxFQUFFLEtBQUs7d0JBQ2pCLGNBQWMsRUFBRSxDQUFDO3dCQUNqQixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsWUFBWSxFQUFFLEtBQUs7d0JBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQzt3QkFDNUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO3dCQUMxQyxZQUFZLEVBQUUsQ0FBQzt3QkFDZixlQUFlLEVBQUUsQ0FBQztxQkFDbkI7aUJBQ0YsQ0FBQztnQkFDRixPQUFPLE1BQU0sQ0FBQztnQkFDZCxNQUFNO1lBQ1IsS0FBSyxhQUFhO2dCQUNoQixNQUFNLEdBQUc7b0JBQ1A7d0JBQ0UsTUFBTSxFQUFFLEVBQUU7d0JBQ1YsT0FBTyxFQUFFLEtBQUs7d0JBQ2QsVUFBVSxFQUFFLEtBQUs7d0JBQ2pCLGNBQWMsRUFBRSxFQUFFO3dCQUNsQixnQkFBZ0IsRUFBRSxFQUFFO3dCQUNwQixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsVUFBVSxFQUFFLEtBQUs7d0JBQ2pCLGNBQWMsRUFBRSxDQUFDO3dCQUNqQixVQUFVLEVBQUUsQ0FBQzt3QkFDYixRQUFRLEVBQUUsR0FBRzt3QkFDYixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsVUFBVSxFQUFFLFFBQVE7d0JBQ3BCLFFBQVEsRUFBRSxDQUFDO3dCQUNYLFFBQVEsRUFBRSxHQUFHO3dCQUNiLFlBQVksRUFBRSxDQUFDO3dCQUNmLGVBQWUsRUFBRSxDQUFDO3FCQUNuQjtpQkFDRixDQUFDO2dCQUNGLE9BQU8sTUFBTSxDQUFDO2dCQUNkLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsTUFBTSxHQUFHO29CQUNQO3dCQUNFLE1BQU0sRUFBRSxFQUFFO3dCQUNWLE9BQU8sRUFBRSxLQUFLO3dCQUNkLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsZ0JBQWdCLEVBQUUsRUFBRTt3QkFDcEIsY0FBYyxFQUFFLEVBQUU7d0JBQ2xCLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsQ0FBQzt3QkFDakIsY0FBYyxFQUFFLEVBQUU7cUJBQ25CO2lCQUNGLENBQUM7Z0JBQ0YsT0FBTyxNQUFNLENBQUM7Z0JBQ2QsTUFBTTtZQUNSLEtBQUssYUFBYTtnQkFDaEIsTUFBTSxHQUFHO29CQUNQO3dCQUNFLE1BQU0sRUFBRSxFQUFFO3dCQUNWLE9BQU8sRUFBRSxLQUFLO3dCQUNkLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsRUFBRTt3QkFDbEIsZ0JBQWdCLEVBQUUsRUFBRTt3QkFDcEIsY0FBYyxFQUFFLEVBQUU7d0JBQ2xCLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsQ0FBQzt3QkFDakIsY0FBYyxFQUFFLEVBQUU7d0JBQ2xCLEtBQUssRUFBRSxLQUFLO3dCQUNaLFVBQVUsRUFBRSxDQUFDO3dCQUNiLFVBQVUsRUFBRSxDQUFDO3FCQUNkO2lCQUNGLENBQUM7Z0JBQ0YsT0FBTyxNQUFNLENBQUM7Z0JBQ2QsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ3RDLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO3dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUM7NEJBQ1YsTUFBTSxFQUFFLEdBQUc7NEJBQ1gsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLGNBQWMsRUFBRSxlQUFlOzRCQUMvQixjQUFjLEVBQUUsQ0FBQzs0QkFDakIsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLGNBQWMsRUFBRSxFQUFFOzRCQUNsQixLQUFLLEVBQUUsS0FBSzs0QkFDWixzQkFBc0IsRUFBRSxLQUFLOzRCQUM3QixjQUFjLEVBQUUsRUFBRTs0QkFDbEIsZUFBZSxFQUFFLENBQUM7eUJBQ25CLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLE1BQU0sQ0FBQztnQkFDZCxNQUFNO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsVUFBVTthQUNaLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO2FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzVCLFNBQVMsQ0FDUixDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLENBQUM7YUFDNUQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsQ0FBQzthQUMxRDtRQUNILENBQUMsRUFDRCxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDdEQsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFDdkQsT0FBTztTQUNSO1FBQ0QsSUFBSSxNQUFNLEdBQUc7WUFDWCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFO1lBQ3ZELG9CQUFvQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxFQUFFO1lBQ3JFLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRO1lBQ3JDLFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVTthQUNaLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQzthQUMxRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM1QixTQUFTLENBQ1IsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNYLElBQUksR0FBRyxFQUFFO2dCQUNQLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO2lCQUM5RDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2lCQUN6RDthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDZCQUE2QixDQUFDLENBQUM7YUFDekQ7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLElBQUksR0FBRyxHQUNMLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU87Z0JBQzVCLDBDQUEwQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FDRixDQUFDO0lBQ04sQ0FBQzt3R0E1bEJVLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLHlhQ2ZwQyxnMFlBOE1NOzs0RkQvTE8sdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjs4T0FNdEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDd0IsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ1QsU0FBUztzQkFBM0IsU0FBUzt1QkFBQyxNQUFNO2dCQUNHLFVBQVU7c0JBQTdCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3RyYXguc2VydmljZVwiO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi1jaGVja2xpc3QtcG9wdXBcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2NoZWNrbGlzdC1wb3B1cC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vY2hlY2tsaXN0LXBvcHVwLmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGVja2xpc3RQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY2hlY2tsaXN0Rm9ybTogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdHlwZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNoZWNrbGlzdERhdGE6IGFueTtcclxuICBAVmlld0NoaWxkKFwiYWZ0ZXJWYWxpZGF0aW9uXCIpIGFmdGVyVmFsaWRhdGlvbjogYW55O1xyXG4gIEBWaWV3Q2hpbGQoXCJmaWxlXCIpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcImZpbGUxXCIpIGZpbGVJbnB1dDEhOiBFbGVtZW50UmVmO1xyXG5cclxuICBmaWxlTmFtZTogYW55O1xyXG4gIGZpbGVTaXplOiBhbnk7XHJcbiAgc2VjdGlvbkRldGFpbHM6IGFueSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogXCJTZWN0aW9uIDFcIixcclxuICAgICAgc2VjdGlvbk51bWJlcjogMSxcclxuICAgICAgcXVlc3Rpb25zOiBbXSxcclxuICAgIH0sXHJcbiAgXTtcclxuICBwcml2YXRlIGRldGFjaCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZXhjZWxEYXRhOiBhbnkgPSBbXTtcclxuICBleGNlbEVycm9yOiBhbnk7XHJcbiAgZGF5anMgPSBkYXlqcztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgc29wU2VydmljZTogVHJheFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHtcclxuICAgIHRoaXMuY2hlY2tsaXN0Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lOiBbXCJcIl0sXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBbXCJcIl0sXHJcbiAgICAgIG1vZGU6IFtcImluZGl2aWR1YWxcIl0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudHlwZSAhPSBcImNyZWF0ZVwiKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tsaXN0Rm9ybS5nZXQoXCJtb2RlXCIpPy5zZXRWYWx1ZShcImJ1bGtcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrbGlzdEZvcm0udmFsdWUubW9kZTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE1vZGUobW9kZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNoZWNrbGlzdEZvcm0ucGF0Y2hWYWx1ZSh7IG1vZGUgfSk7XHJcbiAgfVxyXG5cclxuICBvbkZpbGVTZWxlY3RlZChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV4Y2VsRGF0YSA9IFtdO1xyXG4gICAgdGhpcy5leGNlbEVycm9yID0gbnVsbDtcclxuICAgIHRoaXMuc2VjdGlvbkRldGFpbHMgPSBbXTtcclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IDxEYXRhVHJhbnNmZXI+ZXZlbnQudGFyZ2V0O1xyXG4gICAgbGV0IGlzRXhjZWxGaWxlID0gISF0YXJnZXQuZmlsZXNbMF0ubmFtZS5tYXRjaCgvKC54bHN8Lnhsc3gpLyk7XHJcbiAgICBpZiAoIWlzRXhjZWxGaWxlKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIlBsZWFzZSBVcGxvYWQgYSB2YWxpZCB4bHN4IGZpbGVcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNFeGNlbEZpbGUpIHtcclxuICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJzdHI6IHN0cmluZyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6IFwiYmluYXJ5XCIgfSk7XHJcbiAgICAgICAgY29uc3Qgd3NuYW1lOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgIGxldCBkYXRhID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHdzLCB7IGRlZnZhbDogXCJcIiB9KTtcclxuICAgICAgICBpZiAoIWRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJQbGVhc2UgdXBsb2FkIGEgdmFsaWQgZmlsZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5leGNlbERhdGEgPSBkYXRhO1xyXG4gICAgICAgIGxldCBlcnJvcjogYW55ID0gW107XHJcbiAgICAgICAgbGV0IHF1ZXN0aW9uTGlzdDogYW55ID0gW107XHJcbiAgICAgICAgdGhpcy5leGNlbERhdGEuZm9yRWFjaCgoZWxlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGlmICghZWxlPy5bXCJTZWN0aW9uIE5hbWVcIl0/LnRvU3RyaW5nKCk/LnRyaW0oKSkge1xyXG4gICAgICAgICAgICBlcnJvci5wdXNoKGBJbnZhbGlkIFNlY3Rpb24gTmFtZSAtIEEke2luZGV4ICsgMn1gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghZWxlPy5bXCJRdWVzdGlvblwiXT8udG9TdHJpbmcoKT8udHJpbSgpKSB7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgUXVlc3Rpb24gTmFtZSAtIEIke2luZGV4ICsgMn1gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghZWxlPy5bXCJBbnN3ZXIgVHlwZVwiXT8udHJpbSgpKSB7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgQW5zd2VyIFR5cGUgLSBDJHtpbmRleCArIDJ9YCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGVsZT8uW1wiQW5zd2VyIFR5cGVcIl0/LnRyaW0oKSAmJlxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgXCJNdWx0aXBsZSBDaG9pY2UgU2luZ2xlXCIsXHJcbiAgICAgICAgICAgICAgXCJNdWx0aXBsZSBDaG9pY2UgTXVsdGlwbGVcIixcclxuICAgICAgICAgICAgICBcIkRyb3Bkb3duXCIsXHJcbiAgICAgICAgICAgIF0uaW5jbHVkZXMoZWxlPy5bXCJBbnN3ZXIgVHlwZVwiXSkgJiZcclxuICAgICAgICAgICAgIWVsZT8uW1wiQW5zd2VyIE9wdGlvbnNcIl0/LnRvU3RyaW5nKCk/LnRyaW0oKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgQW5zd2VyIE9wdGlvbnMgLSBEJHtpbmRleCArIDJ9YCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IHFOYW1lOiBzdHJpbmcgPVxyXG4gICAgICAgICAgICBlbGU/LltcIlNlY3Rpb24gTmFtZVwiXT8udG9TdHJpbmcoKT8udHJpbSgpLnRvTG93ZXJDYXNlKCkgK1xyXG4gICAgICAgICAgICBlbGU/LltcIlF1ZXN0aW9uXCJdPy50b1N0cmluZygpPy50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGlmICghcXVlc3Rpb25MaXN0LmluY2x1ZGVzKHFOYW1lKSkge1xyXG4gICAgICAgICAgICBxdWVzdGlvbkxpc3QucHVzaChxTmFtZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlcnJvci5wdXNoKGAke2VsZT8uW1wiUXVlc3Rpb25cIl0/LnRyaW0oKX0gcXVlc3Rpb24gaXMgRHVwbGljYXRlZGApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChlcnJvci5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IHBvcHVwY29udGVudCA9IHtcclxuICAgICAgICAgICAgZGlzcGxheXByb3A6IGZhbHNlLFxyXG4gICAgICAgICAgICBpbWFnZXNyYzogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNGRUYwQzdcIi8+PHBhdGggZD1cIk0yNy45OTk4IDI0LjAwMTJWMjguMDAxMk0yNy45OTk4IDMyLjAwMTJIMjguMDA5OE0yNi4yODk4IDE4Ljg2MTJMMTcuODE5OCAzMy4wMDEyQzE3LjY0NTEgMzMuMzAzNiAxNy41NTI3IDMzLjY0NjUgMTcuNTUxOCAzMy45OTU3QzE3LjU1MDggMzQuMzQ0OSAxNy42NDEzIDM0LjY4ODMgMTcuODE0MiAzNC45OTE3QzE3Ljk4NzEgMzUuMjk1MSAxOC4yMzY1IDM1LjU0NzkgMTguNTM3NSAzNS43MjVDMTguODM4NSAzNS45MDIxIDE5LjE4MDYgMzUuOTk3MyAxOS41Mjk4IDM2LjAwMTJIMzYuNDY5OEMzNi44MTkgMzUuOTk3MyAzNy4xNjExIDM1LjkwMjEgMzcuNDYyMSAzNS43MjVDMzcuNzYzMSAzNS41NDc5IDM4LjAxMjQgMzUuMjk1MSAzOC4xODU0IDM0Ljk5MTdDMzguMzU4MyAzNC42ODgzIDM4LjQ0ODggMzQuMzQ0OSAzOC40NDc4IDMzLjk5NTdDMzguNDQ2OCAzMy42NDY1IDM4LjM1NDQgMzMuMzAzNiAzOC4xNzk4IDMzLjAwMTJMMjkuNzA5OCAxOC44NjEyQzI5LjUzMTUgMTguNTY3MyAyOS4yODA1IDE4LjMyNDMgMjguOTgxIDE4LjE1NTdDMjguNjgxNCAxNy45ODcgMjguMzQzNSAxNy44OTg0IDI3Ljk5OTggMTcuODk4NEMyNy42NTYgMTcuODk4NCAyNy4zMTgxIDE3Ljk4NyAyNy4wMTg2IDE4LjE1NTdDMjYuNzE5MSAxOC4zMjQzIDI2LjQ2OCAxOC41NjczIDI2LjI4OTggMTguODYxMlpcIiBzdHJva2U9XCIjREM2ODAzXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNGRkZBRUJcIiBzdHJva2Utd2lkdGg9XCI4XCIvPjwvc3ZnPmAsXHJcbiAgICAgICAgICAgIHRpdGxlOiBgSW52YWxpZCBkZXRhaWxzIWAsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGBQbGVhc2UgcHJvdmlkZSBjb3JyZWN0IGFuZCBjb21wbGV0ZSBzdG9yZSBpbmZvcm1hdGlvbi5gLFxyXG4gICAgICAgICAgICBidXR0b250eXBlOiBcImVycm9yXCIsXHJcbiAgICAgICAgICAgIGVycm9yOiBlcnJvcixcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmV4Y2VsRXJyb3IgPSBwb3B1cGNvbnRlbnQ7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzZWN0aW9uTnVtYmVyID0gMDtcclxuICAgICAgICBsZXQgYW5zd2VyVHlwZTogYW55ID0ge1xyXG4gICAgICAgICAgXCJEZXNjcmlwdGl2ZSBBbnN3ZXJcIjogXCJkZXNjcmlwdGl2ZVwiLFxyXG4gICAgICAgICAgXCJBL0IgUXVlc3Rpb25cIjogXCJ5ZXMvbm9cIixcclxuICAgICAgICAgIFwiTXVsdGlwbGUgQ2hvaWNlIFNpbmdsZVwiOiBcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXHJcbiAgICAgICAgICBcIk11bHRpcGxlIENob2ljZSBNdWx0aXBsZVwiOiBcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcclxuICAgICAgICAgIFwiQ2FwdHVyZSBJbWFnZSB3aXRoIERlc2NyaXB0aW9uXCI6IFwiZGVzY3JpcHRpdmVJbWFnZVwiLFxyXG4gICAgICAgICAgXCJDYXB0dXJlIEltYWdlIGFzIGFuc3dlclwiOiBcImltYWdlXCIsXHJcbiAgICAgICAgICBcIkNhcHR1cmUgdmlkZW8gYXMgYW5zd2VyXCI6IFwidmlkZW9cIixcclxuICAgICAgICAgIFwiQ2FwdHVyZSBNdWx0aXBsZSBJbWFnZVwiOiBcIm11bHRpcGxlSW1hZ2VcIixcclxuICAgICAgICAgIERhdGU6IFwiZGF0ZVwiLFxyXG4gICAgICAgICAgXCJMaW5lYXIgU2NhbGVcIjogXCJsaW5lYXJzY2FsZVwiLFxyXG4gICAgICAgICAgXCJDYXB0dXJlIEltYWdlL1ZpZGVvIGFzIEFuc3dlclwiOiBcImltYWdlL3ZpZGVvXCIsXHJcbiAgICAgICAgICBUaW1lOiBcInRpbWVcIixcclxuICAgICAgICAgIERyb3Bkb3duOiBcImRyb3Bkb3duXCIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgc2VjRGV0YWlsczogYW55ID0gZGF0YS5yZWR1Y2UoKGFjYzogYW55LCBlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHNlY3Rpb25OYW1lID0gZWxlW1wiU2VjdGlvbiBOYW1lXCJdPy50b1N0cmluZygpPy50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGlmICghYWNjPy5bc2VjdGlvbk5hbWVdKSB7XHJcbiAgICAgICAgICAgIHNlY3Rpb25OdW1iZXIrKztcclxuICAgICAgICAgICAgYWNjW2Ake3NlY3Rpb25OYW1lfWBdID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IGVsZVtcIlNlY3Rpb24gTmFtZVwiXT8udG9TdHJpbmcoKT8udHJpbSgpLFxyXG4gICAgICAgICAgICAgIHNlY3Rpb25OdW1iZXI6IHNlY3Rpb25OdW1iZXIsXHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25zOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHFubzogMSxcclxuICAgICAgICAgICAgICAgICAgcW5hbWU6IGVsZVtcIlF1ZXN0aW9uXCJdPy50b1N0cmluZygpPy50cmltKCksXHJcbiAgICAgICAgICAgICAgICAgIG9sZFFuYW1lOiBlbGVbXCJRdWVzdGlvblwiXT8udG9TdHJpbmcoKT8udHJpbSgpLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXJUeXBlOiBhbnN3ZXJUeXBlW2Ake2VsZVtcIkFuc3dlciBUeXBlXCJdfWBdLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXJzOiB0aGlzLmZpbmRBbnN3ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgYW5zd2VyVHlwZVtgJHtlbGVbXCJBbnN3ZXIgVHlwZVwiXX1gXSxcclxuICAgICAgICAgICAgICAgICAgICBlbGVbXCJBbnN3ZXIgT3B0aW9uc1wiXSxcclxuICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgcnVuQUk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBydW5BSURlZmF1bHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBhbGxvd1VwbG9hZGZyb21HYWxsZXJ5OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgbGlua1R5cGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBtdWx0aVF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblJlZmVyZW5jZUltYWdlOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBydW5BSUZlYXR1cmVzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZVJ1bkFJOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgcnVuQUlEZXNjcmlwdGlvbjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgYWxsb3dNdWx0aXBsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBsaWFuY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGl2ZXR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYWNjW2Ake3NlY3Rpb25OYW1lfWBdLnF1ZXN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICBxbm86IGFjY1tgJHtzZWN0aW9uTmFtZX1gXS5xdWVzdGlvbnMubGVuZ3RoICsgMSxcclxuICAgICAgICAgICAgICBxbmFtZTogZWxlW1wiUXVlc3Rpb25cIl0/LnRvU3RyaW5nKCk/LnRyaW0oKSxcclxuICAgICAgICAgICAgICBvbGRRbmFtZTogZWxlW1wiUXVlc3Rpb25cIl0/LnRvU3RyaW5nKCk/LnRyaW0oKSxcclxuICAgICAgICAgICAgICBhbnN3ZXJUeXBlOiBhbnN3ZXJUeXBlW2Ake2VsZVtcIkFuc3dlciBUeXBlXCJdfWBdLFxyXG4gICAgICAgICAgICAgIGFuc3dlcnM6IHRoaXMuZmluZEFuc3dlcihcclxuICAgICAgICAgICAgICAgIGFuc3dlclR5cGVbYCR7ZWxlW1wiQW5zd2VyIFR5cGVcIl19YF0sXHJcbiAgICAgICAgICAgICAgICBlbGVbXCJBbnN3ZXIgT3B0aW9uc1wiXSxcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJ1bkFJOiBmYWxzZSxcclxuICAgICAgICAgICAgICBydW5BSURlZmF1bHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGFsbG93VXBsb2FkZnJvbUdhbGxlcnk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGxpbmtUeXBlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBtdWx0aVF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2U6IFwiXCIsXHJcbiAgICAgICAgICAgICAgcnVuQUlGZWF0dXJlczogW10sXHJcbiAgICAgICAgICAgICAgZGlzYWJsZVJ1bkFJOiBmYWxzZSxcclxuICAgICAgICAgICAgICBydW5BSURlc2NyaXB0aW9uOiBcIlwiLFxyXG4gICAgICAgICAgICAgIGFsbG93TXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGNvbXBsaWFuY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGRlc2NyaXB0aXZldHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uRGV0YWlscyA9IE9iamVjdC52YWx1ZXMoc2VjRGV0YWlscyk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlucHV0KSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlucHV0MSkge1xyXG4gICAgICAgICAgdGhpcy5maWxlSW5wdXQxLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICB0aGlzLmZpbGVOYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICB0aGlzLmZpbGVTaXplID0gTWF0aC5yb3VuZChmaWxlLnNpemUgLyAxMDI0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChldmVudDogYW55KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC5kYXRhVHJhbnNmZXIuZmlsZXNbMF07XHJcblxyXG4gICAgaWYgKGZpbGUpIHtcclxuICAgICAgdGhpcy5maWxlTmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgdGhpcy5maWxlU2l6ZSA9IE1hdGgucm91bmQoZmlsZS5zaXplIC8gMTAyNCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBSZXVwbG9hZCgpIHtcclxuICAgIGlmICh0aGlzLmZpbGVJbnB1dCkge1xyXG4gICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbGVJbnB1dDEpIHtcclxuICAgICAgdGhpcy5maWxlSW5wdXQxLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwia3RfYWNjb3VudF90ZWFtX3NpemVfc2VsZWN0XzJcIik7XHJcbiAgICBlbGU/LmNsaWNrKCk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUNoZWNrbGlzdCgpIHtcclxuICAgIGlmICghdGhpcy5jaGVja2xpc3RGb3JtLnZhbHVlLm5hbWUpIHtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiQ2hlY2tsaXN0IE5hbWUgaXMgbWlzc2luZ1wiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmV4Y2VsRGF0YS5sZW5ndGggJiYgdGhpcy5tb2RlID09IFwiYnVsa1wiKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIlBsZWFzZSB1cGxvYWQgYSB2YWxpZCBmaWxlXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBjaGVja2xpc3ROYW1lOiB0aGlzLmNoZWNrbGlzdEZvcm0udmFsdWUubmFtZT8udHJpbSgpLFxyXG4gICAgICBjaGVja2xpc3REZXNjcmlwdGlvbjogdGhpcy5jaGVja2xpc3RGb3JtLnZhbHVlLmRlc2NyaXB0aW9uPy50cmltKCksXHJcbiAgICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25EZXRhaWxzLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgc3VibWl0VHlwZTogXCJzYXZlXCIsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zb3BTZXJ2aWNlXHJcbiAgICAgIC5jcmVhdGVDaGVja2xpc3QocGFyYW1zKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICBpZiAocmVzPy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiQ2hlY2tsaXN0IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXHJcbiAgICAgICAgICAgICAgICBgL21hbmFnZS90cmF4L2NyZWF0ZUNoZWNrbGlzdD9jaGVja2xpc3RJZD0ke3Jlcy5kYXRhLmNoZWNrbGlzdElkfWAsXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5kaXNtaXNzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiVW5hYmxlIHRvIGNyZWF0ZSBjaGVja2xpc3QhXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gY3JlYXRlIGNoZWNrbGlzdCFcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVyciA9XHJcbiAgICAgICAgICAgIGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgXCJVbmFibGUgdG8gY3JlYXRlIGNoZWNrbGlzdCFTZXJ2ZXIgRXJyb3IhXCI7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyKTtcclxuICAgICAgICB9LFxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZmluZEFuc3dlcih0eXBlOiBzdHJpbmcsIG9wdGlvbnM6IHN0cmluZykge1xyXG4gICAgbGV0IGFuc3dlcjogYW55ID0gW107XHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJ5ZXMvbm9cIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuc3dlcjogXCJZZXNcIixcclxuICAgICAgICAgICAgYW5zd2Vyb3B0aW9uTnVtYmVyOiAxLFxyXG4gICAgICAgICAgICBzb3BGbGFnOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25UeXBlOiBcIkNhcHR1cmUgSW1hZ2VcIixcclxuICAgICAgICAgICAgbGlua2VkUXVlc3Rpb246IDAsXHJcbiAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VJbWFnZTogXCJcIixcclxuICAgICAgICAgICAgcnVuQUk6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbGxvd1VwbG9hZGZyb21HYWxsZXJ5OiBmYWxzZSxcclxuICAgICAgICAgICAgY29tcGxpYW5jZVNjb3JlOiAwLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYW5zd2VyOiBcIk5vXCIsXHJcbiAgICAgICAgICAgIGFuc3dlcm9wdGlvbk51bWJlcjogMixcclxuICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uVHlwZTogXCJDYXB0dXJlIEltYWdlXCIsXHJcbiAgICAgICAgICAgIGxpbmtlZFF1ZXN0aW9uOiAwLFxyXG4gICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVmZXJlbmNlSW1hZ2U6IFwiXCIsXHJcbiAgICAgICAgICAgIHJ1bkFJOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dVcGxvYWRmcm9tR2FsbGVyeTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbXBsaWFuY2VTY29yZTogMCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiZGVzY3JpcHRpdmVcIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uVHlwZTogXCJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGlvbkFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgcmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgbGlua2VkUXVlc3Rpb246IDAsXHJcbiAgICAgICAgICAgIG5lc3RlZFF1ZXN0aW9uOiBbXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpdmV0eXBlOiBcInRleHRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXTtcclxuICAgICAgICBvcHRpb25zLnNwbGl0KFwiLFwiKS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsZS50cmltKCkpIHtcclxuICAgICAgICAgICAgYW5zd2VyLnB1c2goe1xyXG4gICAgICAgICAgICAgIGFuc3dlcjogZWxlLFxyXG4gICAgICAgICAgICAgIHNvcEZsYWc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb25UeXBlOiBcIkNhcHR1cmUgSW1hZ2VcIixcclxuICAgICAgICAgICAgICBsaW5rZWRRdWVzdGlvbjogMCxcclxuICAgICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgICByZWZlcmVuY2VJbWFnZTogW10sXHJcbiAgICAgICAgICAgICAgcnVuQUk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGFsbG93VXBsb2FkZnJvbUdhbGxlcnk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIG5lc3RlZFF1ZXN0aW9uOiBbXSxcclxuICAgICAgICAgICAgICBjb21wbGlhbmNlU2NvcmU6IDAsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCI6XHJcbiAgICAgICAgYW5zd2VyID0gW107XHJcbiAgICAgICAgb3B0aW9ucy5zcGxpdChcIixcIikuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChlbGU/LnRyaW0oKSkge1xyXG4gICAgICAgICAgICBhbnN3ZXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgYW5zd2VyOiBlbGUsXHJcbiAgICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvblR5cGU6IFwiQ2FwdHVyZSBJbWFnZVwiLFxyXG4gICAgICAgICAgICAgIGxpbmtlZFF1ZXN0aW9uOiAwLFxyXG4gICAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHJlZmVyZW5jZUltYWdlOiBbXSxcclxuICAgICAgICAgICAgICBydW5BSTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgYWxsb3dVcGxvYWRmcm9tR2FsbGVyeTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgbmVzdGVkUXVlc3Rpb246IFtdLFxyXG4gICAgICAgICAgICAgIGNvbXBsaWFuY2VTY29yZTogMCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImRlc2NyaXB0aXZlSW1hZ2VcIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uVHlwZTogXCJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGlvbkFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgcmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgbGlua2VkUXVlc3Rpb246IDAsXHJcbiAgICAgICAgICAgIG5lc3RlZFF1ZXN0aW9uOiBbXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiaW1hZ2VcIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uVHlwZTogXCJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGlvbkFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgcmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgbGlua2VkUXVlc3Rpb246IDAsXHJcbiAgICAgICAgICAgIG5lc3RlZFF1ZXN0aW9uOiBbXSxcclxuICAgICAgICAgICAgbWF0Y2hlZENvdW50OiAwLFxyXG4gICAgICAgICAgICBub3RNYXRjaGVkQ291bnQ6IDAsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInZpZGVvXCI6XHJcbiAgICAgICAgYW5zd2VyID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhbnN3ZXI6IFwiXCIsXHJcbiAgICAgICAgICAgIHNvcEZsYWc6IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvblR5cGU6IFwiXCIsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25BbnN3ZXI6IFwiXCIsXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZUltYWdlOiBbXSxcclxuICAgICAgICAgICAgc2hvd0xpbmtlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGxpbmtlZFF1ZXN0aW9uOiAwLFxyXG4gICAgICAgICAgICBuZXN0ZWRRdWVzdGlvbjogW10sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIm11bHRpcGxlSW1hZ2VcIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uVHlwZTogXCJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGlvbkFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgcmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgbGlua2VkUXVlc3Rpb246IDAsXHJcbiAgICAgICAgICAgIG5lc3RlZFF1ZXN0aW9uOiBbXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiZGF0ZVwiOlxyXG4gICAgICAgIGFuc3dlciA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICBzb3BGbGFnOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25UeXBlOiBcIlwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VJbWFnZTogW10sXHJcbiAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBsaW5rZWRRdWVzdGlvbjogMCxcclxuICAgICAgICAgICAgbmVzdGVkUXVlc3Rpb246IFtdLFxyXG4gICAgICAgICAgICBoaXN0b3JpY0RhdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBzdGFydERhdGU6IHRoaXMuZGF5anMoKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpLFxyXG4gICAgICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKCkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSxcclxuICAgICAgICAgICAgbWF0Y2hlZENvdW50OiAwLFxyXG4gICAgICAgICAgICBub3RNYXRjaGVkQ291bnQ6IDAsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImxpbmVhcnNjYWxlXCI6XHJcbiAgICAgICAgYW5zd2VyID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhbnN3ZXI6IFwiXCIsXHJcbiAgICAgICAgICAgIHNvcEZsYWc6IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvblR5cGU6IFwiXCIsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25BbnN3ZXI6IFwiXCIsXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZUltYWdlOiBbXSxcclxuICAgICAgICAgICAgc2hvd0xpbmtlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGxpbmtlZFF1ZXN0aW9uOiAwLFxyXG4gICAgICAgICAgICByYW5nZVN0YXJ0OiAwLFxyXG4gICAgICAgICAgICByYW5nZUVuZDogMTAwLFxyXG4gICAgICAgICAgICBuZXN0ZWRRdWVzdGlvbjogW10sXHJcbiAgICAgICAgICAgIGxpbmVhclR5cGU6IFwibnVtYmVyXCIsXHJcbiAgICAgICAgICAgIG1pblZhbHVlOiAwLFxyXG4gICAgICAgICAgICBtYXhWYWx1ZTogMTAwLFxyXG4gICAgICAgICAgICBtYXRjaGVkQ291bnQ6IDAsXHJcbiAgICAgICAgICAgIG5vdE1hdGNoZWRDb3VudDogMCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwidGltZVwiOlxyXG4gICAgICAgIGFuc3dlciA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICBzb3BGbGFnOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25UeXBlOiBcIlwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VJbWFnZTogW10sXHJcbiAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBsaW5rZWRRdWVzdGlvbjogMCxcclxuICAgICAgICAgICAgbmVzdGVkUXVlc3Rpb246IFtdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJpbWFnZS92aWRlb1wiOlxyXG4gICAgICAgIGFuc3dlciA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICBzb3BGbGFnOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25UeXBlOiBcIlwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VJbWFnZTogW10sXHJcbiAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBsaW5rZWRRdWVzdGlvbjogMCxcclxuICAgICAgICAgICAgbmVzdGVkUXVlc3Rpb246IFtdLFxyXG4gICAgICAgICAgICBsaW1pdDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpZGVvTGltaXQ6IDAsXHJcbiAgICAgICAgICAgIGltYWdlTGltaXQ6IDAsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImRyb3Bkb3duXCI6XHJcbiAgICAgICAgYW5zd2VyID0gW107XHJcbiAgICAgICAgb3B0aW9ucy5zcGxpdChcIixcIikuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChlbGU/LnRyaW0oKSkge1xyXG4gICAgICAgICAgICBhbnN3ZXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgYW5zd2VyOiBlbGUsXHJcbiAgICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvblR5cGU6IFwiQ2FwdHVyZSBJbWFnZVwiLFxyXG4gICAgICAgICAgICAgIGxpbmtlZFF1ZXN0aW9uOiAwLFxyXG4gICAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHJlZmVyZW5jZUltYWdlOiBbXSxcclxuICAgICAgICAgICAgICBydW5BSTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgYWxsb3dVcGxvYWRmcm9tR2FsbGVyeTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgbmVzdGVkUXVlc3Rpb246IFtdLFxyXG4gICAgICAgICAgICAgIGNvbXBsaWFuY2VTY29yZTogMCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFRlbXBsYXRlKCkge1xyXG4gICAgdGhpcy5zb3BTZXJ2aWNlXHJcbiAgICAgIC5kb3dubG9hZFF1ZXN0aW9uKHRoaXMuY2hlY2tsaXN0RGF0YS5jaGVja2xpc3RJZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSlcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3BTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsIFwiQ2hlY2tsaXN0IFF1ZXN0aW9uXCIpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiVW5hYmxlIHRvIGRvd25sb2FkIHRlbXBsYXRlIVwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gZG93bmxvYWQgdGVtcGxhdGUhXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDaGVja2xpc3QoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tsaXN0RGF0YS5jaGVja0xpc3ROYW1lKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIkNoZWNrbGlzdCBOYW1lIGlzIG1pc3NpbmdcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5leGNlbERhdGEubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIlBsZWFzZSB1cGxvYWQgYSB2YWxpZCBmaWxlXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBjaGVja2xpc3ROYW1lOiB0aGlzLmNoZWNrbGlzdERhdGEuY2hlY2tMaXN0TmFtZT8udHJpbSgpLFxyXG4gICAgICBjaGVja2xpc3REZXNjcmlwdGlvbjogdGhpcy5jaGVja2xpc3REYXRhLmNoZWNrTGlzdERlc2NyaXB0aW9uPy50cmltKCksXHJcbiAgICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25EZXRhaWxzLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5jaGVja2xpc3REYXRhLmNsaWVudElkLFxyXG4gICAgICBzdWJtaXRUeXBlOiBcInNhdmVcIixcclxuICAgIH07XHJcbiAgICB0aGlzLnNvcFNlcnZpY2VcclxuICAgICAgLmdldFVwZGF0ZUNoZWNrbGlzdCh0aGlzLmNoZWNrbGlzdERhdGEuY2hlY2tsaXN0SWQsIHBhcmFtcylcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSlcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShcInJlbG9hZFwiKTtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChcIkNoZWNrbGlzdCB1cGRhdGVkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gdXBkYXRlIGNoZWNrbGlzdCFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIlVuYWJsZSB0byB1cGRhdGUgY2hlY2tsaXN0IVwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgbGV0IGVyciA9XHJcbiAgICAgICAgICAgIGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgXCJVbmFibGUgdG8gdXBkYXRlIGNoZWNrbGlzdCFTZXJ2ZXIgRXJyb3IhXCI7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyKTtcclxuICAgICAgICB9LFxyXG4gICAgICApO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0LWNhcmRcIj5cclxuXHJcbiAgPCEtLSBIZWFkZXIgLS0+XHJcbiAgIDxkaXYgKm5nSWY9XCIhZXhjZWxEYXRhLmxlbmd0aFwiPlxyXG4gICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtaWNvbiBtZS0yXCI+XHJcbiAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjREFGMUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0VBRjhGRlwiIHN0cm9rZS13aWR0aD1cIjhcIi8+XHJcbiAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yOCAyMVYzNU0yMSAyOEgzNVwiIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwibWItMCB0aXRsZVRleHRcIj57e3R5cGUgPT0gJ2NyZWF0ZScgPyAnQ3JlYXRlIENoZWNrbGlzdCcgOiAnQnVsayBVcGxvYWQnfX08L2Rpdj5cclxuICAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjaGVja2xpc3RGb3JtXCI+XHJcbiAgICAgXHJcbiAgICAgICAgIDwhLS0gQ2hlY2tsaXN0IE5hbWUgLS0+XHJcbiAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCJ0eXBlID09ICdjcmVhdGUnXCI+XHJcbiAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNoZWNrbGlzdCBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cclxuICAgICAgICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICAgICAgIDwhLS0gRGVzY3JpcHRpb24gLS0+XHJcbiAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCJ0eXBlID09ICdjcmVhdGUnXCI+XHJcbiAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICAgICAgIDwhLS0gTW9kZSBTZWxlY3Rpb24gLS0+XHJcbiAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0yIG15LTNcIiAqbmdJZj1cInR5cGUgPT0gJ2NyZWF0ZSdcIj5cclxuICAgICBcclxuICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24tYm94XCJcclxuICAgICAgICAgICAgICAgW2NsYXNzLm9wdGlvbi1hY3RpdmVdPVwibW9kZT09PSdpbmRpdmlkdWFsJ1wiXHJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RNb2RlKCdpbmRpdmlkdWFsJylcIj5cclxuICAgICBcclxuICAgICAgICAgICAgICAgPHNwYW4+QWRkIHF1ZXN0aW9ucyBpbmRpdmlkdWFsbHk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiB2YWx1ZT1cImluZGl2aWR1YWxcIiBmb3JtQ29udHJvbE5hbWU9XCJtb2RlXCIgc3R5bGU9XCJ3aWR0aDoxNXB4O2hlaWdodDoxNXB4XCI+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICA8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24tYm94XCJcclxuICAgICAgICAgICAgICAgW2NsYXNzLm9wdGlvbi1hY3RpdmVdPVwibW9kZT09PSdidWxrJ1wiXHJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RNb2RlKCdidWxrJylcIj5cclxuICAgICBcclxuICAgICAgICAgICAgICAgPHNwYW4+QWRkIHF1ZXN0aW9ucyBpbiBidWxrPC9zcGFuPlxyXG4gICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJidWxrXCIgZm9ybUNvbnRyb2xOYW1lPVwibW9kZVwiIHN0eWxlPVwid2lkdGg6MTVweDtoZWlnaHQ6MTVweFwiPlxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgICA8IS0tIEJ1bGsgVXBsb2FkIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgIDxkaXYgKm5nSWY9XCJtb2RlID09PSAnYnVsaydcIiBjbGFzcz1cImJ1bGtUZXh0XCI+XHJcbiAgICAgXHJcbiAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTVcIj5cclxuICAgICBcclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+MS4gVXNlIHRoZSB0ZW1wbGF0ZSB0byB1cGxvYWQgbXVsdGlwbGUgcXVlc3Rpb25zIGF0IG9uY2U8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XHJcbiAgICAgICAgICAgICAgIDIuIERvd25sb2FkIHRoZSB0ZW1wbGF0ZSBoZXJlIC1cclxuICAgICAgICAgICAgICAgQGlmKHR5cGUgPT0gJ2NyZWF0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZG93bmxvYWQtbGlua1wiIGhyZWY9XCIvYXNzZXRzL2ZpbGVzL2NoZWNrbGlzdFF1ZXN0aW9uLnhsc3hcIiBkb3dubG9hZD5cclxuICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjE3XCIgdmlld0JveD1cIjAgMCAxNyAxN1wiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1LjgzNTkgMTAuODM1OVYxNC4xNjkzQzE1LjgzNTkgMTQuNjExMyAxNS42NjAzIDE1LjAzNTIgMTUuMzQ3OCAxNS4zNDc4QzE1LjAzNTIgMTUuNjYwMyAxNC42MTEzIDE1LjgzNTkgMTQuMTY5MyAxNS44MzU5SDIuNTAyNkMyLjA2MDU4IDE1LjgzNTkgMS42MzY2NSAxNS42NjAzIDEuMzI0MDkgMTUuMzQ3OEMxLjAxMTUzIDE1LjAzNTIgMC44MzU5MzggMTQuNjExMyAwLjgzNTkzOCAxNC4xNjkzVjEwLjgzNTlNNC4xNjkyNyA2LjY2OTI3TDguMzM1OTQgMTAuODM1OU04LjMzNTk0IDEwLjgzNTlMMTIuNTAyNiA2LjY2OTI3TTguMzM1OTQgMTAuODM1OVYwLjgzNTkzOFwiIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gRG93bmxvYWQgVGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3dubG9hZC1saW5rXCIgKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxN1wiIHZpZXdCb3g9XCIwIDAgMTcgMTdcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1LjgzNTkgMTAuODM1OVYxNC4xNjkzQzE1LjgzNTkgMTQuNjExMyAxNS42NjAzIDE1LjAzNTIgMTUuMzQ3OCAxNS4zNDc4QzE1LjAzNTIgMTUuNjYwMyAxNC42MTEzIDE1LjgzNTkgMTQuMTY5MyAxNS44MzU5SDIuNTAyNkMyLjA2MDU4IDE1LjgzNTkgMS42MzY2NSAxNS42NjAzIDEuMzI0MDkgMTUuMzQ3OEMxLjAxMTUzIDE1LjAzNTIgMC44MzU5MzggMTQuNjExMyAwLjgzNTkzOCAxNC4xNjkzVjEwLjgzNTlNNC4xNjkyNyA2LjY2OTI3TDguMzM1OTQgMTAuODM1OU04LjMzNTk0IDEwLjgzNTlMMTIuNTAyNiA2LjY2OTI3TTguMzM1OTQgMTAuODM1OVYwLjgzNTkzOFwiIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgIDwvc3ZnPiBEb3dubG9hZCBUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPjMuIEFkZCB5b3VyIGRhdGEgdG8gdGhlIHRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPjQuIFVwbG9hZCBpdCBmb3IgcHJvY2Vzc2luZzwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgICAgIDwhLS0gVXBsb2FkIEFyZWEgLS0+XHJcbiAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1ib3ggY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cclxuICAgICBcclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtaWNvbiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0NlwiIGhlaWdodD1cIjQ2XCIgdmlld0JveD1cIjAgMCA0NiA0NlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjNcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjIwXCIgZmlsbD1cIiNEQUYxRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjNcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjIwXCIgc3Ryb2tlPVwiI0VBRjhGRlwiIHN0cm9rZS13aWR0aD1cIjZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTkwMzRfNjY5OTYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjYuMzMyNiAyNi4zMzEzTDIyLjk5OTIgMjIuOTk4TTIyLjk5OTIgMjIuOTk4TDE5LjY2NTkgMjYuMzMxM00yMi45OTkyIDIyLjk5OFYzMC40OThNMjkuOTkwOSAyOC4zMjNDMzAuODAzNyAyNy44Nzk4IDMxLjQ0NTggMjcuMTc4NyAzMS44MTU4IDI2LjMzMDFDMzIuMTg1OCAyNS40ODE2IDMyLjI2MjcgMjQuNTM0IDMyLjAzNDQgMjMuNjM2OUMzMS44MDYxIDIyLjczOTcgMzEuMjg1NSAyMS45NDQyIDMwLjU1NDggMjEuMzc1OEMyOS44MjQxIDIwLjgwNzQgMjguOTI1IDIwLjQ5ODYgMjcuOTk5MiAyMC40OThIMjYuOTQ5MkMyNi42OTcgMTkuNTIyMyAyNi4yMjY5IDE4LjYxNjYgMjUuNTc0MiAxNy44NDg4QzI0LjkyMTUgMTcuMDgxIDI0LjEwMzMgMTYuNDcxMiAyMy4xODEgMTYuMDY1MUMyMi4yNTg3IDE1LjY1OTEgMjEuMjU2NCAxNS40Njc0IDIwLjI0OTMgMTUuNTA0NUMxOS4yNDIzIDE1LjU0MTYgMTguMjU2OCAxNS44MDY1IDE3LjM2NjkgMTYuMjc5M0MxNi40NzcgMTYuNzUyMSAxNS43MDU4IDE3LjQyMDUgMTUuMTExNCAxOC4yMzQzQzE0LjUxNyAxOS4wNDggMTQuMTE0OCAxOS45ODU5IDEzLjkzNTEgMjAuOTc3NEMxMy43NTUzIDIxLjk2OSAxMy44MDI3IDIyLjk4ODQgMTQuMDczNiAyMy45NTlDMTQuMzQ0NSAyNC45Mjk2IDE0LjgzMTkgMjUuODI2MiAxNS40OTkyIDI2LjU4MTNcIiBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTkwMzRfNjY5OTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEzIDEzKVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wcmltYXJ5IGZ3LXNlbWlib2xkIHVwbG9hZFRleHRcIj5DbGljayBUbyBVcGxvYWQ8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgICAgIDwhLS0gSGlkZGVuIEZpbGUgSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAjZmlsZUlucHV0XHJcbiAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgICAgICAgICAgIGhpZGRlblxyXG4gICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICA+XHJcbiAgICAgXHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgICA8IS0tIFVwbG9hZGVkIEZpbGUgLS0+XHJcbiAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbGVOYW1lXCIgY2xhc3M9XCJ1cGxvYWQtZmlsZVwiPlxyXG4gICAgIFxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMlwiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHJ4PVwiMTZcIiBmaWxsPVwiI0RBRjFGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMlwiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHJ4PVwiMTZcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiNFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOC42NjggMTEuMzM1OUgxNC4wMDEzQzEzLjY0NzcgMTEuMzM1OSAxMy4zMDg1IDExLjQ3NjQgMTMuMDU4NSAxMS43MjY1QzEyLjgwODQgMTEuOTc2NSAxMi42NjggMTIuMzE1NiAxMi42NjggMTIuNjY5M1YyMy4zMzU5QzEyLjY2OCAyMy42ODk2IDEyLjgwODQgMjQuMDI4NyAxMy4wNTg1IDI0LjI3ODdDMTMuMzA4NSAyNC41Mjg4IDEzLjY0NzcgMjQuNjY5MyAxNC4wMDEzIDI0LjY2OTNIMjIuMDAxM0MyMi4zNTQ5IDI0LjY2OTMgMjIuNjk0MSAyNC41Mjg4IDIyLjk0NDEgMjQuMjc4N0MyMy4xOTQyIDI0LjAyODcgMjMuMzM0NiAyMy42ODk2IDIzLjMzNDYgMjMuMzM1OVYxNi4wMDI2TTE4LjY2OCAxMS4zMzU5TDIzLjMzNDYgMTYuMDAyNk0xOC42NjggMTEuMzM1OVYxNi4wMDI2SDIzLjMzNDZcIiBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICBcclxuICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1zdGFydCBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgPGRpdj57e2ZpbGVOYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VjY2Vzc1RleHRcIj5cclxuICAgICAgICAgICAgICAgICAgIHt7ZmlsZVNpemV9fSBLQiDigJMgVXBsb2FkZWRcclxuICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjkuMzM0NiAxNC43NzA1VjE1Ljk5NzJDMjkuMzMzIDE4Ljg3MjQgMjguNDAyIDIxLjY3MDEgMjYuNjgwNCAyMy45NzNDMjQuOTU4OSAyNi4yNzU4IDIyLjUzOSAyNy45NjA1IDE5Ljc4MTggMjguNzc1N0MxNy4wMjQ1IDI5LjU5MSAxNC4wNzc2IDI5LjQ5MzEgMTEuMzgwNiAyOC40OTY3QzguNjgzNTQgMjcuNTAwMiA2LjM4MDg0IDI1LjY1ODcgNC44MTU5MiAyMy4yNDY2QzMuMjUwOTkgMjAuODM0NiAyLjUwNzY5IDE3Ljk4MTMgMi42OTY4NyAxNS4xMTIzQzIuODg2MDUgMTIuMjQzMyAzLjk5NzU4IDkuNTEyMzIgNS44NjU2OCA3LjMyNjY1QzcuNzMzNzcgNS4xNDA5NyAxMC4yNTgzIDMuNjE3NzIgMTMuMDYyOSAyLjk4NDA4QzE1Ljg2NzQgMi4zNTA0MyAxOC44MDE3IDIuNjQwMzMgMjEuNDI4IDMuODEwNTVNMjkuMzM0NiA1LjMzMDU1TDE2LjAwMTMgMTguNjc3MkwxMi4wMDEzIDE0LjY3NzJcIiBzdHJva2U9XCIjMTJCNzZBXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgIFxyXG4gICAgICAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgPCEtLSBCdXR0b25zIC0tPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtNFwiPlxyXG4gICAgIFxyXG4gICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0yXCIgKGNsaWNrKT1cImRpYWxvZ1JlZi5jbG9zZSgpXCI+XHJcbiAgICAgICAgICAgICBDYW5jZWxcclxuICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICBcclxuICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInR5cGUgPT0gJ2NyZWF0ZScgPyBjcmVhdGVDaGVja2xpc3QoKSA6IHVwZGF0ZUNoZWNrbGlzdCgpXCI+XHJcbiAgICAgICAgICAgICBQcm9jZWVkXHJcbiAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgXHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgPC9mb3JtPlxyXG4gICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLTAgdmFsaWRhdGVCb3hcIiAqbmdJZj1cImV4Y2VsRGF0YS5sZW5ndGhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgbXQtMFwiPlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgbXQtM1wiPjxzcGFuIGNsYXNzPVwiY29uZmlnLWhlYWRpbmcgZnctc2VtaWJvbGQgdy1hdXRvXCI+QXNzaWduIFN0b3Jlczwvc3Bhbj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB0LTBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY2FyZCByb3VuZGVkLTMgcC0zIGZsZXgtY29sdW1uIGgtODBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIGNvbmZpZy1oZWFkaW5nIHctMTAwXCI+e3tleGNlbERhdGE/Lmxlbmd0aH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgc3VidGl0bGUgbXQtMVwiPlRvdGFsIFJlY29yZHM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY2FyZCByb3VuZGVkLTMgcC0zIGZsZXgtY29sdW1uIGgtODBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgY29uZmlnLWhlYWRpbmcgdy0xMDBcIj57e2V4Y2VsRGF0YT8ubGVuZ3RofX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIHN1YnRpdGxlIG10LTFcIj5Sb3dzIHByb2Nlc3NlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNhcmQgcm91bmRlZC0zIHAtMyBmbGV4LWNvbHVtbiBoLTgwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJleGNlbEVycm9yID8gJ2Vycm9yLWhlYWRpbmcnOicnXCIgY2xhc3M9XCJmdy1zZW1pYm9sZCBjb25maWctaGVhZGluZyB3LTEwMFwiPnt7ZXhjZWxFcnJvcj8uZXJyb3I/Lmxlbmd0aCB8fCAwfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJleGNlbEVycm9yID8gJ2V4Y2VsLWVycm9yJzonJ1wiIGNsYXNzPVwiZnctc2VtaWJvbGQgc3VidGl0bGUgbXQtMVwiPkVycm9yPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWV4Y2VsRXJyb3JcIiBjbGFzcz1cInRhYmxlLWhlYWRlciBtdC01XCIgc3R5bGU9XCJmb250LXdlaWdodDogNDAwO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5Zb3UncmUgYWJvdXQgdG8gYXNzaWduIHt7ZXhjZWxEYXRhPy5sZW5ndGh9fSBzdG9yZXMgdG8gdGhlIGNoZWNrbGlzdC4gQXJlIHlvdSBzdXJlIHdhbnQgdG8gcHJvY2VlZD88L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJleGNlbEVycm9yXCIgY2xhc3M9XCJmbGV4LWNvbHVtbiBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWhlYWRpbmcgZnctYm9sZFwiPkludmFsaWQgRGV0YWlscyAhPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGUgbXQtNVwiPlBsZWFzZSBwcm92aWRlIGNvcnJlY3QgYW5kIGNvbXBsZXRlIGxheW91dCBpbmZvcm1hdGlvbi48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTUgdy0xMDAgcm91bmRlZC0zIGJvcmRlci1lcnJvciBtdC01IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlcnJvciBvZiBleGNlbEVycm9yPy5lcnJvcjsgbGV0IGkgPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0XCIgW25nQ2xhc3NdPVwiIWxhc3QgPyAnbWItMicgOiAnJ1wiIGNsYXNzPVwidGV4dC1lcnJvclwiPnt7aSArIDF9fSkge3tlcnJvcn19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIgI2ZpbGVJbnB1dDEgdHlwZT1cImZpbGVcIiBpZD1cImt0X2FjY291bnRfdGVhbV9zaXplX3NlbGVjdF8yXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtNFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMlwiIChjbGljayk9XCJkaWFsb2dSZWYuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKm5nSWY9XCIhZXhjZWxFcnJvclwiIChjbGljayk9XCJ0eXBlID09ICdjcmVhdGUnID8gY3JlYXRlQ2hlY2tsaXN0KCkgOiB1cGRhdGVDaGVja2xpc3QoKVwiPlxyXG4gICAgICAgIFByb2NlZWRcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJleGNlbEVycm9yXCIgY2xhc3M9XCJidG4gcHktMyBtcy0zIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwiUmV1cGxvYWQoKTtcIj5SZXVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj4iXX0=
|