@openmrs/ngx-formentry 3.0.0
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/abstract-controls-extension/afe-control-type.d.ts +6 -0
- package/abstract-controls-extension/afe-form-array.d.ts +43 -0
- package/abstract-controls-extension/afe-form-control.d.ts +46 -0
- package/abstract-controls-extension/afe-form-group.d.ts +38 -0
- package/abstract-controls-extension/control-extensions.d.ts +4 -0
- package/abstract-controls-extension/index.d.ts +4 -0
- package/abstract-controls-extension/value-change.listener.d.ts +4 -0
- package/bundles/openmrs-ngx-formentry.umd.js +16104 -0
- package/bundles/openmrs-ngx-formentry.umd.js.map +1 -0
- package/change-tracking/control-relation.d.ts +12 -0
- package/change-tracking/control-relations.d.ts +12 -0
- package/components/afe-ng-select.component.d.ts +28 -0
- package/components/appointments-overview/appointments-overview.component.d.ts +17 -0
- package/components/check-box/checkbox.component.d.ts +19 -0
- package/components/check-box/checkbox.module.d.ts +9 -0
- package/components/custom-component-wrapper/custom-component-wrapper..module.d.ts +9 -0
- package/components/custom-component-wrapper/custom-component-wrapper.component.d.ts +12 -0
- package/components/custom-control-wrapper/custom-control-wrapper..module.d.ts +10 -0
- package/components/custom-control-wrapper/custom-control-wrapper.component.d.ts +28 -0
- package/components/date-time-picker/date-picker/date-picker.component.d.ts +45 -0
- package/components/date-time-picker/date-time-picker.component.d.ts +28 -0
- package/components/date-time-picker/date-time-picker.module.d.ts +13 -0
- package/components/date-time-picker/index.d.ts +8 -0
- package/components/date-time-picker/picker-modal/modal.component.d.ts +12 -0
- package/components/date-time-picker/pipes/moment.pipe.d.ts +11 -0
- package/components/date-time-picker/time-picker/time-picker.component.d.ts +32 -0
- package/components/file-upload/file-upload.component.d.ts +29 -0
- package/components/file-upload/file-upload.module.d.ts +12 -0
- package/components/file-upload/secure.pipe.d.ts +26 -0
- package/components/input/input.directive.d.ts +31 -0
- package/components/input/input.module.d.ts +11 -0
- package/components/input/label.component.d.ts +90 -0
- package/components/input/text-area.directive.d.ts +24 -0
- package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +21 -0
- package/components/ngx-datetime-picker/ngx-datetime-picker.module.d.ts +11 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.d.ts +189 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.d.ts +15 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.d.ts +73 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.d.ts +5 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.d.ts +12 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +76 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +139 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +108 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +120 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +137 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +92 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +121 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +149 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.d.ts +51 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +20 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.d.ts +8 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +156 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +89 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +23 -0
- package/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +10 -0
- package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +35 -0
- package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +128 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-config.class.d.ts +93 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-container.component.d.ts +58 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.d.ts +49 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog.module.d.ts +11 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +73 -0
- package/components/ngx-pick-datetime/lib/utils/index.d.ts +4 -0
- package/components/ngx-pick-datetime/lib/utils/object.utils.d.ts +11 -0
- package/components/ngx-remote-select/ngx-remote-select.component.d.ts +40 -0
- package/components/ngx-remote-select/ngx-remote-select.module.d.ts +10 -0
- package/components/ngx-tabset/components/ngx-tab-set.component.d.ts +19 -0
- package/components/ngx-tabset/components/tab.component.d.ts +13 -0
- package/components/ngx-tabset/directives/hover-class.directive.d.ts +11 -0
- package/components/ngx-tabset/modules/ngx-tabset.module.d.ts +19 -0
- package/components/number-input/number-input.component.d.ts +151 -0
- package/components/number-input/number-input.module.d.ts +9 -0
- package/components/radio-button/radio.component.d.ts +22 -0
- package/components/radio-button/radio.module.d.ts +9 -0
- package/components/select/optgroup.directive.d.ts +6 -0
- package/components/select/option.directive.d.ts +6 -0
- package/components/select/select.component.d.ts +115 -0
- package/components/select/select.module.d.ts +11 -0
- package/esm2015/abstract-controls-extension/afe-control-type.js +8 -0
- package/esm2015/abstract-controls-extension/afe-form-array.js +85 -0
- package/esm2015/abstract-controls-extension/afe-form-control.js +88 -0
- package/esm2015/abstract-controls-extension/afe-form-group.js +61 -0
- package/esm2015/abstract-controls-extension/control-extensions.js +5 -0
- package/esm2015/abstract-controls-extension/index.js +5 -0
- package/esm2015/abstract-controls-extension/value-change.listener.js +2 -0
- package/esm2015/change-tracking/control-relation.js +44 -0
- package/esm2015/change-tracking/control-relations.js +32 -0
- package/esm2015/components/afe-ng-select.component.js +101 -0
- package/esm2015/components/appointments-overview/appointments-overview.component.js +121 -0
- package/esm2015/components/check-box/checkbox.component.js +90 -0
- package/esm2015/components/check-box/checkbox.module.js +19 -0
- package/esm2015/components/custom-component-wrapper/custom-component-wrapper..module.js +21 -0
- package/esm2015/components/custom-component-wrapper/custom-component-wrapper.component.js +23 -0
- package/esm2015/components/custom-control-wrapper/custom-control-wrapper..module.js +22 -0
- package/esm2015/components/custom-control-wrapper/custom-control-wrapper.component.js +73 -0
- package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +192 -0
- package/esm2015/components/date-time-picker/date-time-picker.component.js +119 -0
- package/esm2015/components/date-time-picker/date-time-picker.module.js +47 -0
- package/esm2015/components/date-time-picker/index.js +9 -0
- package/esm2015/components/date-time-picker/picker-modal/modal.component.js +31 -0
- package/esm2015/components/date-time-picker/pipes/moment.pipe.js +17 -0
- package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +125 -0
- package/esm2015/components/file-upload/file-upload.component.js +122 -0
- package/esm2015/components/file-upload/file-upload.module.js +39 -0
- package/esm2015/components/file-upload/secure.pipe.js +101 -0
- package/esm2015/components/input/input.directive.js +78 -0
- package/esm2015/components/input/input.module.js +23 -0
- package/esm2015/components/input/label.component.js +263 -0
- package/esm2015/components/input/text-area.directive.js +54 -0
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +80 -0
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js +38 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.js +114 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.js +7 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js +347 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js +16 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.js +39 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-body.component.js +149 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.js +445 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +378 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js +373 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +348 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js +265 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +399 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js +614 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js +62 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js +70 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.js +21 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.js +528 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js +166 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js +83 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js +28 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +96 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +298 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-config.class.js +56 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-container.component.js +247 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.js +119 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.module.js +27 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js +233 -0
- package/esm2015/components/ngx-pick-datetime/lib/utils/index.js +5 -0
- package/esm2015/components/ngx-pick-datetime/lib/utils/object.utils.js +26 -0
- package/esm2015/components/ngx-remote-select/ngx-remote-select.component.js +135 -0
- package/esm2015/components/ngx-remote-select/ngx-remote-select.module.js +21 -0
- package/esm2015/components/ngx-tabset/components/ngx-tab-set.component.js +76 -0
- package/esm2015/components/ngx-tabset/components/tab.component.js +37 -0
- package/esm2015/components/ngx-tabset/directives/hover-class.directive.js +30 -0
- package/esm2015/components/ngx-tabset/modules/ngx-tabset.module.js +38 -0
- package/esm2015/components/number-input/number-input.component.js +233 -0
- package/esm2015/components/number-input/number-input.module.js +20 -0
- package/esm2015/components/radio-button/radio.component.js +87 -0
- package/esm2015/components/radio-button/radio.module.js +19 -0
- package/esm2015/components/select/optgroup.directive.js +19 -0
- package/esm2015/components/select/option.directive.js +19 -0
- package/esm2015/components/select/select.component.js +187 -0
- package/esm2015/components/select/select.module.js +23 -0
- package/esm2015/form-entry/control-alerts/alert-helpers.js +40 -0
- package/esm2015/form-entry/control-alerts/can-generate-alert.js +2 -0
- package/esm2015/form-entry/control-calculators/can-calculate.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/can-disable.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/can-hide.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +32 -0
- package/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +40 -0
- package/esm2015/form-entry/data-sources/data-sources.js +30 -0
- package/esm2015/form-entry/data-sources/dummy-data-source.js +104 -0
- package/esm2015/form-entry/directives/collapse-animations.js +11 -0
- package/esm2015/form-entry/directives/collapse.directive.js +172 -0
- package/esm2015/form-entry/directives/historical-value.directive.js +67 -0
- package/esm2015/form-entry/error-renderer/error-renderer.component.js +56 -0
- package/esm2015/form-entry/expression-runner/expression-runner.js +170 -0
- package/esm2015/form-entry/form-entry.module.js +187 -0
- package/esm2015/form-entry/form-factory/control-relations.factory.js +238 -0
- package/esm2015/form-entry/form-factory/form-control.service.js +119 -0
- package/esm2015/form-entry/form-factory/form-node.js +96 -0
- package/esm2015/form-entry/form-factory/form.factory.js +141 -0
- package/esm2015/form-entry/form-factory/form.js +189 -0
- package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +67 -0
- package/esm2015/form-entry/form-factory/question.factory.js +942 -0
- package/esm2015/form-entry/form-factory/show-messages.factory.js +31 -0
- package/esm2015/form-entry/form-factory/validation.factory.js +147 -0
- package/esm2015/form-entry/form-renderer/form-renderer.component.js +268 -0
- package/esm2015/form-entry/helpers/historical-expression-helper-service.js +42 -0
- package/esm2015/form-entry/helpers/historical-field-helper-service.js +39 -0
- package/esm2015/form-entry/helpers/js-expression-helper.js +275 -0
- package/esm2015/form-entry/helpers/risk-dataset-table.js +247 -0
- package/esm2015/form-entry/pipes/time-ago.pipe.js +107 -0
- package/esm2015/form-entry/question-models/checkbox.model.js +11 -0
- package/esm2015/form-entry/question-models/conditional-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/custom-control-question.model.js +10 -0
- package/esm2015/form-entry/question-models/date-question.js +12 -0
- package/esm2015/form-entry/question-models/date-validation.model.js +10 -0
- package/esm2015/form-entry/question-models/file-upload-question.js +13 -0
- package/esm2015/form-entry/question-models/group-question.js +12 -0
- package/esm2015/form-entry/question-models/interfaces/base-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/data-source.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/date-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/group-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/nested-questions.js +7 -0
- package/esm2015/form-entry/question-models/interfaces/radio-button-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/select-option.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/select-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/text-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +2 -0
- package/esm2015/form-entry/question-models/js-expression-validation.model.js +8 -0
- package/esm2015/form-entry/question-models/max-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/min-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/models.js +13 -0
- package/esm2015/form-entry/question-models/multi-select-question.js +11 -0
- package/esm2015/form-entry/question-models/pair.model.js +7 -0
- package/esm2015/form-entry/question-models/question-base.js +26 -0
- package/esm2015/form-entry/question-models/radio-button.model.js +12 -0
- package/esm2015/form-entry/question-models/rendering-type.js +9 -0
- package/esm2015/form-entry/question-models/repeating-question.js +11 -0
- package/esm2015/form-entry/question-models/select-option.js +7 -0
- package/esm2015/form-entry/question-models/select-question.js +12 -0
- package/esm2015/form-entry/question-models/test-order-question.js +15 -0
- package/esm2015/form-entry/question-models/text-area-input-question.js +13 -0
- package/esm2015/form-entry/question-models/text-input-question.js +10 -0
- package/esm2015/form-entry/question-models/ui-select-question.js +11 -0
- package/esm2015/form-entry/question-models/validation.model.js +7 -0
- package/esm2015/form-entry/services/debug-mode.service.js +24 -0
- package/esm2015/form-entry/services/form-errors.service.js +21 -0
- package/esm2015/form-entry/services/form-schema-compiler.service.js +248 -0
- package/esm2015/form-entry/services/historical-encounter-data.service.js +172 -0
- package/esm2015/form-entry/utils/messages.js +12 -0
- package/esm2015/form-entry/validators/conditional-answered.validator.js +46 -0
- package/esm2015/form-entry/validators/conditional-required.validator.js +40 -0
- package/esm2015/form-entry/validators/date.validator.js +18 -0
- package/esm2015/form-entry/validators/future-date-restriction.validator.js +21 -0
- package/esm2015/form-entry/validators/js-expression.validator.js +26 -0
- package/esm2015/form-entry/validators/max-date.validator.js +23 -0
- package/esm2015/form-entry/validators/max.validator.js +17 -0
- package/esm2015/form-entry/validators/min-date.validator.js +23 -0
- package/esm2015/form-entry/validators/min.validator.js +17 -0
- package/esm2015/form-entry/validators/required.validator.js +11 -0
- package/esm2015/form-entry/validators/validations.js +5 -0
- package/esm2015/form-entry/value-adapters/encounter.adapter.js +171 -0
- package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +512 -0
- package/esm2015/form-entry/value-adapters/obs.adapter.js +542 -0
- package/esm2015/form-entry/value-adapters/order.adapter.js +186 -0
- package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +88 -0
- package/esm2015/form-entry/value-adapters/value.adapter.js +2 -0
- package/esm2015/lib/index.js +58 -0
- package/esm2015/openmrs-ngx-formentry.js +5 -0
- package/esm2015/public_api.js +2 -0
- package/esm2015/shared.module.js +21 -0
- package/fesm2015/openmrs-ngx-formentry.js +14323 -0
- package/fesm2015/openmrs-ngx-formentry.js.map +1 -0
- package/form-entry/control-alerts/alert-helpers.d.ts +9 -0
- package/form-entry/control-alerts/can-generate-alert.d.ts +18 -0
- package/form-entry/control-calculators/can-calculate.d.ts +5 -0
- package/form-entry/control-hiders-disablers/can-disable.d.ts +19 -0
- package/form-entry/control-hiders-disablers/can-hide.d.ts +20 -0
- package/form-entry/control-hiders-disablers/disabler-helper.d.ts +7 -0
- package/form-entry/control-hiders-disablers/hider-helpers.d.ts +9 -0
- package/form-entry/data-sources/data-sources.d.ts +10 -0
- package/form-entry/data-sources/dummy-data-source.d.ts +18 -0
- package/form-entry/directives/collapse-animations.d.ts +4 -0
- package/form-entry/directives/collapse.directive.d.ts +45 -0
- package/form-entry/directives/historical-value.directive.d.ts +16 -0
- package/form-entry/error-renderer/error-renderer.component.d.ts +18 -0
- package/form-entry/expression-runner/expression-runner.d.ts +18 -0
- package/form-entry/form-entry.module.d.ts +30 -0
- package/form-entry/form-factory/control-relations.factory.d.ts +18 -0
- package/form-entry/form-factory/form-control.service.d.ts +25 -0
- package/form-entry/form-factory/form-node.d.ts +52 -0
- package/form-entry/form-factory/form.d.ts +28 -0
- package/form-entry/form-factory/form.factory.d.ts +27 -0
- package/form-entry/form-factory/hiders-disablers.factory.d.ts +20 -0
- package/form-entry/form-factory/question.factory.d.ts +62 -0
- package/form-entry/form-factory/show-messages.factory.d.ts +15 -0
- package/form-entry/form-factory/validation.factory.d.ts +25 -0
- package/form-entry/form-renderer/form-renderer.component.d.ts +63 -0
- package/form-entry/helpers/historical-expression-helper-service.d.ts +8 -0
- package/form-entry/helpers/historical-field-helper-service.d.ts +7 -0
- package/form-entry/helpers/js-expression-helper.d.ts +37 -0
- package/form-entry/helpers/risk-dataset-table.d.ts +1 -0
- package/form-entry/pipes/time-ago.pipe.d.ts +14 -0
- package/form-entry/question-models/checkbox.model.d.ts +9 -0
- package/form-entry/question-models/conditional-validation.model.d.ts +6 -0
- package/form-entry/question-models/custom-control-question.model.d.ts +6 -0
- package/form-entry/question-models/date-question.d.ts +7 -0
- package/form-entry/question-models/date-validation.model.d.ts +5 -0
- package/form-entry/question-models/file-upload-question.d.ts +8 -0
- package/form-entry/question-models/group-question.d.ts +8 -0
- package/form-entry/question-models/interfaces/base-options.d.ts +30 -0
- package/form-entry/question-models/interfaces/checkbox-options.d.ts +7 -0
- package/form-entry/question-models/interfaces/data-source.d.ts +10 -0
- package/form-entry/question-models/interfaces/date-question-options.d.ts +3 -0
- package/form-entry/question-models/interfaces/file-upload-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/group-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/multi-select-options.d.ts +4 -0
- package/form-entry/question-models/interfaces/nested-questions.d.ts +6 -0
- package/form-entry/question-models/interfaces/radio-button-options.d.ts +8 -0
- package/form-entry/question-models/interfaces/repeating-question-options.d.ts +7 -0
- package/form-entry/question-models/interfaces/select-option.d.ts +4 -0
- package/form-entry/question-models/interfaces/select-question-options.d.ts +9 -0
- package/form-entry/question-models/interfaces/test-order-question-options.d.ts +14 -0
- package/form-entry/question-models/interfaces/text-area-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/text-question-options.d.ts +4 -0
- package/form-entry/question-models/interfaces/ui-select-question-options.d.ts +9 -0
- package/form-entry/question-models/js-expression-validation.model.d.ts +5 -0
- package/form-entry/question-models/max-validation.model.d.ts +5 -0
- package/form-entry/question-models/min-validation.model.d.ts +5 -0
- package/form-entry/question-models/models.d.ts +16 -0
- package/form-entry/question-models/multi-select-question.d.ts +9 -0
- package/form-entry/question-models/pair.model.d.ts +5 -0
- package/form-entry/question-models/question-base.d.ts +45 -0
- package/form-entry/question-models/radio-button.model.d.ts +7 -0
- package/form-entry/question-models/rendering-type.d.ts +7 -0
- package/form-entry/question-models/repeating-question.d.ts +7 -0
- package/form-entry/question-models/select-option.d.ts +6 -0
- package/form-entry/question-models/select-question.d.ts +10 -0
- package/form-entry/question-models/test-order-question.d.ts +13 -0
- package/form-entry/question-models/text-area-input-question.d.ts +7 -0
- package/form-entry/question-models/text-input-question.d.ts +6 -0
- package/form-entry/question-models/ui-select-question.d.ts +11 -0
- package/form-entry/question-models/validation.model.d.ts +5 -0
- package/form-entry/services/debug-mode.service.d.ts +8 -0
- package/form-entry/services/form-errors.service.d.ts +13 -0
- package/form-entry/services/form-schema-compiler.service.d.ts +23 -0
- package/form-entry/services/historical-encounter-data.service.d.ts +15 -0
- package/form-entry/utils/messages.d.ts +11 -0
- package/form-entry/validators/conditional-answered.validator.d.ts +8 -0
- package/form-entry/validators/conditional-required.validator.d.ts +8 -0
- package/form-entry/validators/date.validator.d.ts +7 -0
- package/form-entry/validators/future-date-restriction.validator.d.ts +7 -0
- package/form-entry/validators/js-expression.validator.d.ts +8 -0
- package/form-entry/validators/max-date.validator.d.ts +6 -0
- package/form-entry/validators/max.validator.d.ts +6 -0
- package/form-entry/validators/min-date.validator.d.ts +6 -0
- package/form-entry/validators/min.validator.d.ts +6 -0
- package/form-entry/validators/required.validator.d.ts +6 -0
- package/form-entry/validators/validations.d.ts +4 -0
- package/form-entry/value-adapters/encounter.adapter.d.ts +26 -0
- package/form-entry/value-adapters/obs-adapter-helper.d.ts +34 -0
- package/form-entry/value-adapters/obs.adapter.d.ts +38 -0
- package/form-entry/value-adapters/order.adapter.d.ts +20 -0
- package/form-entry/value-adapters/person-attribute.adapter.d.ts +15 -0
- package/form-entry/value-adapters/value.adapter.d.ts +5 -0
- package/lib/index.d.ts +58 -0
- package/openmrs-ngx-formentry.d.ts +5 -0
- package/package.json +34 -0
- package/public_api.d.ts +1 -0
- package/shared.module.d.ts +9 -0
- package/styles/ngx-formentry.css +374 -0
- package/styles/picker.min.css +770 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import * as _ from 'lodash';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { southEastAsiaCvdRiskTables } from './risk-dataset-table';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class JsExpressionHelper {
|
|
6
|
+
calcBMI(height, weight) {
|
|
7
|
+
let r;
|
|
8
|
+
if (height && weight) {
|
|
9
|
+
r = (weight / (((height / 100) * height) / 100)).toFixed(1);
|
|
10
|
+
}
|
|
11
|
+
return height && weight ? parseFloat(r) : null;
|
|
12
|
+
}
|
|
13
|
+
calcBSA(height, weight) {
|
|
14
|
+
let result;
|
|
15
|
+
if (height && weight) {
|
|
16
|
+
result = Math.sqrt((height * weight) / 3600).toFixed(2);
|
|
17
|
+
}
|
|
18
|
+
return height && weight ? parseFloat(result) : null;
|
|
19
|
+
}
|
|
20
|
+
calcBMIForAgeZscore(bmiForAgeRef, height, weight) {
|
|
21
|
+
let bmi;
|
|
22
|
+
const maxAgeInDays = 1856;
|
|
23
|
+
if (height && weight) {
|
|
24
|
+
bmi = (weight / (((height / 100) * height) / 100)).toFixed(1);
|
|
25
|
+
}
|
|
26
|
+
const refSectionObject = _.first(bmiForAgeRef);
|
|
27
|
+
let formattedSDValue;
|
|
28
|
+
if (refSectionObject) {
|
|
29
|
+
const refObjectValues = Object.keys(refSectionObject)
|
|
30
|
+
.map((key) => refSectionObject[key])
|
|
31
|
+
.map((x) => x);
|
|
32
|
+
const refObjectKeys = Object.keys(refSectionObject);
|
|
33
|
+
const minimumValue = refObjectValues[1];
|
|
34
|
+
const minReferencePoint = [];
|
|
35
|
+
if (bmi < minimumValue) {
|
|
36
|
+
minReferencePoint.push(minimumValue);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
_.forEach(refObjectValues, (value) => {
|
|
40
|
+
if (value <= bmi) {
|
|
41
|
+
minReferencePoint.push(value);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const lastReferenceValue = _.last(minReferencePoint);
|
|
46
|
+
const lastValueIndex = _.findIndex(refObjectValues, (o) => {
|
|
47
|
+
return o === lastReferenceValue;
|
|
48
|
+
});
|
|
49
|
+
const SDValue = refObjectKeys[lastValueIndex];
|
|
50
|
+
formattedSDValue = SDValue.replace('SD', '');
|
|
51
|
+
if (formattedSDValue.includes('neg')) {
|
|
52
|
+
formattedSDValue = formattedSDValue.substring(1, 0);
|
|
53
|
+
formattedSDValue = '-' + formattedSDValue;
|
|
54
|
+
}
|
|
55
|
+
if (formattedSDValue === 'S' ||
|
|
56
|
+
formattedSDValue === 'L' ||
|
|
57
|
+
formattedSDValue === 'M' ||
|
|
58
|
+
formattedSDValue === '-5') {
|
|
59
|
+
formattedSDValue = '-4';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return bmi && refSectionObject ? formattedSDValue : null;
|
|
63
|
+
}
|
|
64
|
+
calcWeightForHeightZscore(weightForHeightRef, height, weight) {
|
|
65
|
+
let refSection;
|
|
66
|
+
let formattedSDValue;
|
|
67
|
+
if (height && weight) {
|
|
68
|
+
height = parseFloat(height).toFixed(1);
|
|
69
|
+
}
|
|
70
|
+
const standardHeightMin = 45;
|
|
71
|
+
const standardMaxHeight = 110;
|
|
72
|
+
if (height < standardHeightMin || height > standardMaxHeight) {
|
|
73
|
+
formattedSDValue = -4;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
refSection = _.filter(weightForHeightRef, (refObject) => {
|
|
77
|
+
return parseFloat(refObject['Length']).toFixed(1) === height;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
const refSectionObject = _.first(refSection);
|
|
81
|
+
if (refSectionObject) {
|
|
82
|
+
const refObjectValues = Object.keys(refSectionObject)
|
|
83
|
+
.map((key) => refSectionObject[key])
|
|
84
|
+
.map((x) => x);
|
|
85
|
+
const refObjectKeys = Object.keys(refSectionObject);
|
|
86
|
+
const minimumValue = refObjectValues[1];
|
|
87
|
+
const minReferencePoint = [];
|
|
88
|
+
if (weight < minimumValue) {
|
|
89
|
+
minReferencePoint.push(minimumValue);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
_.forEach(refObjectValues, (value) => {
|
|
93
|
+
if (value <= weight) {
|
|
94
|
+
minReferencePoint.push(value);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
const lastReferenceValue = _.last(minReferencePoint);
|
|
99
|
+
const lastValueIndex = _.findIndex(refObjectValues, (o) => {
|
|
100
|
+
return o === lastReferenceValue;
|
|
101
|
+
});
|
|
102
|
+
const SDValue = refObjectKeys[lastValueIndex];
|
|
103
|
+
formattedSDValue = SDValue.replace('SD', '');
|
|
104
|
+
if (formattedSDValue.includes('neg')) {
|
|
105
|
+
formattedSDValue = formattedSDValue.substring(1, 0);
|
|
106
|
+
formattedSDValue = '-' + formattedSDValue;
|
|
107
|
+
}
|
|
108
|
+
if (formattedSDValue === 'S' ||
|
|
109
|
+
formattedSDValue === 'L' ||
|
|
110
|
+
formattedSDValue === 'M' ||
|
|
111
|
+
formattedSDValue === '-5') {
|
|
112
|
+
formattedSDValue = '-4';
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return height && weight ? formattedSDValue : null;
|
|
116
|
+
}
|
|
117
|
+
calcHeightForAgeZscore(heightForAgeRef, height, weight) {
|
|
118
|
+
const refSectionObject = _.first(heightForAgeRef);
|
|
119
|
+
let formattedSDValue;
|
|
120
|
+
if (refSectionObject) {
|
|
121
|
+
const refObjectValues = Object.keys(refSectionObject)
|
|
122
|
+
.map((key) => refSectionObject[key])
|
|
123
|
+
.map((x) => x);
|
|
124
|
+
const refObjectKeys = Object.keys(refSectionObject);
|
|
125
|
+
const minimumValue = refObjectValues[1];
|
|
126
|
+
const minReferencePoint = [];
|
|
127
|
+
if (height < minimumValue) {
|
|
128
|
+
minReferencePoint.push(minimumValue);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
_.forEach(refObjectValues, (value) => {
|
|
132
|
+
if (value <= height) {
|
|
133
|
+
minReferencePoint.push(value);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
const lastReferenceValue = _.last(minReferencePoint);
|
|
138
|
+
const lastValueIndex = _.findIndex(refObjectValues, (o) => {
|
|
139
|
+
return o === lastReferenceValue;
|
|
140
|
+
});
|
|
141
|
+
const SDValue = refObjectKeys[lastValueIndex];
|
|
142
|
+
formattedSDValue = SDValue.replace('SD', '');
|
|
143
|
+
if (formattedSDValue.includes('neg')) {
|
|
144
|
+
formattedSDValue = formattedSDValue.substring(1, 0);
|
|
145
|
+
formattedSDValue = '-' + formattedSDValue;
|
|
146
|
+
}
|
|
147
|
+
if (formattedSDValue === 'S' ||
|
|
148
|
+
formattedSDValue === 'L' ||
|
|
149
|
+
formattedSDValue === 'M' ||
|
|
150
|
+
formattedSDValue === '-5') {
|
|
151
|
+
formattedSDValue = '-4';
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return height && weight && refSectionObject ? formattedSDValue : null;
|
|
155
|
+
}
|
|
156
|
+
calcSouthEastAsiaNonLabCVDRisk(sex, smoker, age, sbp, bmi) {
|
|
157
|
+
// Bin functions
|
|
158
|
+
const getAgeBin = (age) => Math.floor((Math.min(Math.max(40, age), 74) - 40) / 5);
|
|
159
|
+
const getSbpBin = (sbp) => Math.max(0, Math.floor((Math.min(sbp, 180) - 120) / 20) + 1);
|
|
160
|
+
const getBmiBin = (bmi) => Math.max(0, Math.floor((Math.min(bmi, 35) - 20) / 5) + 1);
|
|
161
|
+
// Variables
|
|
162
|
+
const sexIdx = sex === 'M' ? 0 : 1;
|
|
163
|
+
const smokerIdx = smoker ? 1 : 0;
|
|
164
|
+
const ageIdx = 6 - getAgeBin(age);
|
|
165
|
+
const bmiIdx = getBmiBin(bmi);
|
|
166
|
+
const sbpIdx = 4 - getSbpBin(sbp);
|
|
167
|
+
return southEastAsiaCvdRiskTables[sexIdx][smokerIdx][ageIdx][sbpIdx][bmiIdx];
|
|
168
|
+
}
|
|
169
|
+
isEmpty(val) {
|
|
170
|
+
if (val === undefined ||
|
|
171
|
+
val === null ||
|
|
172
|
+
val === '' ||
|
|
173
|
+
val === 'null' ||
|
|
174
|
+
val === 'undefined') {
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
if (Array.isArray(val) && val.length === 0) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
arrayContains(array, members) {
|
|
183
|
+
if (Array.isArray(members)) {
|
|
184
|
+
if (members.length === 0) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
let contains = true;
|
|
188
|
+
for (let i = 0; i < members.length; i++) {
|
|
189
|
+
const val = members[i];
|
|
190
|
+
if (array.indexOf(val) === -1) {
|
|
191
|
+
contains = false;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return contains;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
return array.indexOf(members) !== -1;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
extractRepeatingGroupValues(key, array) {
|
|
201
|
+
const values = array.map(function (item) {
|
|
202
|
+
return item[key];
|
|
203
|
+
});
|
|
204
|
+
return values;
|
|
205
|
+
}
|
|
206
|
+
formatDate(value, format, offset) {
|
|
207
|
+
format = format || 'yyyy-MM-dd';
|
|
208
|
+
offset = offset || '+0300';
|
|
209
|
+
if (!(value instanceof Date)) {
|
|
210
|
+
value = new Date(value);
|
|
211
|
+
if (value === null || value === undefined) {
|
|
212
|
+
throw new Error('DateFormatException: value passed ' + 'is not a valid date');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return value; // TODO implement this
|
|
216
|
+
// return $filter('date')(value, format, offset);
|
|
217
|
+
}
|
|
218
|
+
arrayContainsAny(array, members) {
|
|
219
|
+
if (Array.isArray(members)) {
|
|
220
|
+
if (members.length === 0) {
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
let contains = false;
|
|
224
|
+
for (let i = 0; i < members.length; i++) {
|
|
225
|
+
const val = members[i];
|
|
226
|
+
if (array.indexOf(val) !== -1) {
|
|
227
|
+
contains = true;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return contains;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
return array.indexOf(members) !== -1;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Takes a target control, an encounter and concept uuid. If the target control has a value it returns it
|
|
238
|
+
* otherwise it tries to find it in the encounter. Finally it returns null of it can't find either of them.
|
|
239
|
+
* @param targetControl
|
|
240
|
+
* @param rawEncounter
|
|
241
|
+
* @param uuid
|
|
242
|
+
* @returns
|
|
243
|
+
*/
|
|
244
|
+
getObsFromControlOrEncounter(targetControl, rawEncounter, uuid) {
|
|
245
|
+
var _a;
|
|
246
|
+
const findObs = (obs, uuid) => {
|
|
247
|
+
let result;
|
|
248
|
+
obs === null || obs === void 0 ? void 0 : obs.some(o => { var _a; return result = ((_a = o === null || o === void 0 ? void 0 : o.concept) === null || _a === void 0 ? void 0 : _a.uuid) === uuid ? o : findObs(o.groupMembers || [], uuid); });
|
|
249
|
+
return result;
|
|
250
|
+
};
|
|
251
|
+
const obsValue = (_a = findObs(rawEncounter === null || rawEncounter === void 0 ? void 0 : rawEncounter.obs, uuid)) === null || _a === void 0 ? void 0 : _a.value;
|
|
252
|
+
return !!targetControl ? targetControl : typeof obsValue === 'object' ? obsValue.uuid : !!obsValue ? obsValue : null;
|
|
253
|
+
}
|
|
254
|
+
get helperFunctions() {
|
|
255
|
+
const helper = this;
|
|
256
|
+
return {
|
|
257
|
+
arrayContainsAny: helper.arrayContainsAny,
|
|
258
|
+
calcBMI: helper.calcBMI,
|
|
259
|
+
calcBMIForAgeZscore: helper.calcBMIForAgeZscore,
|
|
260
|
+
calcWeightForHeightZscore: helper.calcWeightForHeightZscore,
|
|
261
|
+
calcHeightForAgeZscore: helper.calcHeightForAgeZscore,
|
|
262
|
+
calcSouthEastAsiaNonLabCVDRisk: helper.calcSouthEastAsiaNonLabCVDRisk,
|
|
263
|
+
isEmpty: helper.isEmpty,
|
|
264
|
+
arrayContains: helper.arrayContains,
|
|
265
|
+
extractRepeatingGroupValues: helper.extractRepeatingGroupValues,
|
|
266
|
+
getObsFromControlOrEncounter: helper.getObsFromControlOrEncounter
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
JsExpressionHelper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: JsExpressionHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
271
|
+
JsExpressionHelper.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: JsExpressionHelper });
|
|
272
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: JsExpressionHelper, decorators: [{
|
|
273
|
+
type: Injectable
|
|
274
|
+
}] });
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMtZXhwcmVzc2lvbi1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L2hlbHBlcnMvanMtZXhwcmVzc2lvbi1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFHbEUsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU07UUFDcEIsSUFBSSxDQUFDLENBQUM7UUFDTixJQUFJLE1BQU0sSUFBSSxNQUFNLEVBQUU7WUFDcEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RDtRQUNELE9BQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakQsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFjLEVBQUUsTUFBYztRQUNwQyxJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksTUFBTSxJQUFJLE1BQU0sRUFBRTtZQUNwQixNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekQ7UUFDRCxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FB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LGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc291dGhFYXN0QXNpYUN2ZFJpc2tUYWJsZXMgfSBmcm9tICcuL3Jpc2stZGF0YXNldC10YWJsZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBKc0V4cHJlc3Npb25IZWxwZXIge1xuICBjYWxjQk1JKGhlaWdodCwgd2VpZ2h0KSB7XG4gICAgbGV0IHI7XG4gICAgaWYgKGhlaWdodCAmJiB3ZWlnaHQpIHtcbiAgICAgIHIgPSAod2VpZ2h0IC8gKCgoaGVpZ2h0IC8gMTAwKSAqIGhlaWdodCkgLyAxMDApKS50b0ZpeGVkKDEpO1xuICAgIH1cbiAgICByZXR1cm4gaGVpZ2h0ICYmIHdlaWdodCA/IHBhcnNlRmxvYXQocikgOiBudWxsO1xuICB9XG5cbiAgY2FsY0JTQShoZWlnaHQ6IG51bWJlciwgd2VpZ2h0OiBudW1iZXIpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChoZWlnaHQgJiYgd2VpZ2h0KSB7XG4gICAgICByZXN1bHQgPSBNYXRoLnNxcnQoKGhlaWdodCAqIHdlaWdodCkgLyAzNjAwKS50b0ZpeGVkKDIpO1xuICAgIH1cbiAgICByZXR1cm4gaGVpZ2h0ICYmIHdlaWdodCA/IHBhcnNlRmxvYXQocmVzdWx0KSA6IG51bGw7XG4gIH1cblxuICBjYWxjQk1JRm9yQWdlWnNjb3JlKGJtaUZvckFnZVJlZiwgaGVpZ2h0LCB3ZWlnaHQpIHtcbiAgICBsZXQgYm1pO1xuICAgIGNvbnN0IG1heEFnZUluRGF5cyA9IDE4NTY7XG4gICAgaWYgKGhlaWdodCAmJiB3ZWlnaHQpIHtcbiAgICAgIGJtaSA9ICh3ZWlnaHQgLyAoKChoZWlnaHQgLyAxMDApICogaGVpZ2h0KSAvIDEwMCkpLnRvRml4ZWQoMSk7XG4gICAgfVxuICAgIGNvbnN0IHJlZlNlY3Rpb25PYmplY3QgPSBfLmZpcnN0KGJtaUZvckFnZVJlZik7XG4gICAgbGV0IGZvcm1hdHRlZFNEVmFsdWU7XG4gICAgaWYgKHJlZlNlY3Rpb25PYmplY3QpIHtcbiAgICAgIGNvbnN0IHJlZk9iamVjdFZhbHVlcyA9IE9iamVjdC5rZXlzKHJlZlNlY3Rpb25PYmplY3QpXG4gICAgICAgIC5tYXAoKGtleSkgPT4gcmVmU2VjdGlvbk9iamVjdFtrZXldKVxuICAgICAgICAubWFwKCh4KSA9PiB4KTtcbiAgICAgIGNvbnN0IHJlZk9iamVjdEtleXMgPSBPYmplY3Qua2V5cyhyZWZTZWN0aW9uT2JqZWN0KTtcbiAgICAgIGNvbnN0IG1pbmltdW1WYWx1ZSA9IHJlZk9iamVjdFZhbHVlc1sxXTtcbiAgICAgIGNvbnN0IG1pblJlZmVyZW5jZVBvaW50ID0gW107XG4gICAgICBpZiAoYm1pIDwgbWluaW11bVZhbHVlKSB7XG4gICAgICAgIG1pblJlZmVyZW5jZVBvaW50LnB1c2gobWluaW11bVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF8uZm9yRWFjaChyZWZPYmplY3RWYWx1ZXMsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZSA8PSBibWkpIHtcbiAgICAgICAgICAgIG1pblJlZmVyZW5jZVBvaW50LnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXN0UmVmZXJlbmNlVmFsdWUgPSBfLmxhc3QobWluUmVmZXJlbmNlUG9pbnQpO1xuICAgICAgY29uc3QgbGFzdFZhbHVlSW5kZXggPSBfLmZpbmRJbmRleChyZWZPYmplY3RWYWx1ZXMsIChvKSA9PiB7XG4gICAgICAgIHJldHVybiBvID09PSBsYXN0UmVmZXJlbmNlVmFsdWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IFNEVmFsdWUgPSByZWZPYmplY3RLZXlzW2xhc3RWYWx1ZUluZGV4XTtcbiAgICAgIGZvcm1hdHRlZFNEVmFsdWUgPSBTRFZhbHVlLnJlcGxhY2UoJ1NEJywgJycpO1xuICAgICAgaWYgKGZvcm1hdHRlZFNEVmFsdWUuaW5jbHVkZXMoJ25lZycpKSB7XG4gICAgICAgIGZvcm1hdHRlZFNEVmFsdWUgPSBmb3JtYXR0ZWRTRFZhbHVlLnN1YnN0cmluZygxLCAwKTtcbiAgICAgICAgZm9ybWF0dGVkU0RWYWx1ZSA9ICctJyArIGZvcm1hdHRlZFNEVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZm9ybWF0dGVkU0RWYWx1ZSA9PT0gJ1MnIHx8XG4gICAgICAgIGZvcm1hdHRlZFNEVmFsdWUgPT09ICdMJyB8fFxuICAgICAgICBmb3JtYXR0ZWRTRFZhbHVlID09PSAnTScgfHxcbiAgICAgICAgZm9ybWF0dGVkU0RWYWx1ZSA9PT0gJy01J1xuICAgICAgKSB7XG4gICAgICAgIGZvcm1hdHRlZFNEVmFsdWUgPSAnLTQnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBibWkgJiYgcmVmU2VjdGlvbk9iamVjdCA/IGZvcm1hdHRlZFNEVmFsdWUgOiBudWxsO1xuICB9XG4gIGNhbGNXZWlnaHRGb3JIZWlnaHRac2NvcmUod2VpZ2h0Rm9ySGVpZ2h0UmVmLCBoZWlnaHQsIHdlaWdodCkge1xuICAgIGxldCByZWZTZWN0aW9uO1xuICAgIGxldCBmb3JtYXR0ZWRTRFZhbHVlO1xuICAgIGlmIChoZWlnaHQgJiYgd2VpZ2h0KSB7XG4gICAgICBoZWlnaHQgPSBwYXJzZUZsb2F0KGhlaWdodCkudG9GaXhlZCgxKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhbmRhcmRIZWlnaHRNaW4gPSA0NTtcbiAgICBjb25zdCBzdGFuZGFyZE1heEhlaWdodCA9IDExMDtcbiAgICBpZiAoaGVpZ2h0IDwgc3RhbmRhcmRIZWlnaHRNaW4gfHwgaGVpZ2h0ID4gc3RhbmRhcmRNYXhIZWlnaHQpIHtcbiAgICAgIGZvcm1hdHRlZFNEVmFsdWUgPSAtNDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVmU2VjdGlvbiA9IF8uZmlsdGVyKHdlaWdodEZvckhlaWdodFJlZiwgKHJlZk9iamVjdCkgPT4ge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZWZPYmplY3RbJ0xlbmd0aCddKS50b0ZpeGVkKDEpID09PSBoZWlnaHQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZWZTZWN0aW9uT2JqZWN0ID0gXy5maXJzdChyZWZTZWN0aW9uKTtcbiAgICBpZiAocmVmU2VjdGlvbk9iamVjdCkge1xuICAgICAgY29uc3QgcmVmT2JqZWN0VmFsdWVzID0gT2JqZWN0LmtleXMocmVmU2VjdGlvbk9iamVjdClcbiAgICAgICAgLm1hcCgoa2V5KSA9PiByZWZTZWN0aW9uT2JqZWN0W2tleV0pXG4gICAgICAgIC5tYXAoKHgpID0+IHgpO1xuICAgICAgY29uc3QgcmVmT2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzKHJlZlNlY3Rpb25PYmplY3QpO1xuICAgICAgY29uc3QgbWluaW11bVZhbHVlID0gcmVmT2JqZWN0VmFsdWVzWzFdO1xuICAgICAgY29uc3QgbWluUmVmZXJlbmNlUG9pbnQgPSBbXTtcbiAgICAgIGlmICh3ZWlnaHQgPCBtaW5pbXVtVmFsdWUpIHtcbiAgICAgICAgbWluUmVmZXJlbmNlUG9pbnQucHVzaChtaW5pbXVtVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgXy5mb3JFYWNoKHJlZk9iamVjdFZhbHVlcywgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlIDw9IHdlaWdodCkge1xuICAgICAgICAgICAgbWluUmVmZXJlbmNlUG9pbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhc3RSZWZlcmVuY2VWYWx1ZSA9IF8ubGFzdChtaW5SZWZlcmVuY2VQb2ludCk7XG4gICAgICBjb25zdCBsYXN0VmFsdWVJbmRleCA9IF8uZmluZEluZGV4KHJlZk9iamVjdFZhbHVlcywgKG8pID0+IHtcbiAgICAgICAgcmV0dXJuIG8gPT09IGxhc3RSZWZlcmVuY2VWYWx1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgU0RWYWx1ZSA9IHJlZk9iamVjdEtleXNbbGFzdFZhbHVlSW5kZXhdO1xuICAgICAgZm9ybWF0dGVkU0RWYWx1ZSA9IFNEVmFsdWUucmVwbGFjZSgnU0QnLCAnJyk7XG4gICAgICBpZiAoZm9ybWF0dGVkU0RWYWx1ZS5pbmNsdWRlcygnbmVnJykpIHtcbiAgICAgICAgZm9ybWF0dGVkU0RWYWx1ZSA9IGZvcm1hdHRlZFNEVmFsdWUuc3Vic3RyaW5nKDEsIDApO1xuICAgICAgICBmb3JtYXR0ZWRTRFZhbHVlID0gJy0nICsgZm9ybWF0dGVkU0RWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgZm9ybWF0dGVkU0RWYWx1ZSA9PT0gJ1MnIHx8XG4gICAgICAgIGZvcm1hdHRlZFNEVmFsdWUgPT09ICdMJyB8fFxuICAgICAgICBmb3JtYXR0ZWRTRFZhbHVlID09PSAnTScgfHxcbiAgICAgICAgZm9ybWF0dGVkU0RWYWx1ZSA9PT0gJy01J1xuICAgICAgKSB7XG4gICAgICAgIGZvcm1hdHRlZFNEVmFsdWUgPSAnLTQnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoZWlnaHQgJiYgd2VpZ2h0ID8gZm9ybWF0dGVkU0RWYWx1ZSA6IG51bGw7XG4gIH1cblxuICBjYWxjSGVpZ2h0Rm9yQWdlWnNjb3JlKGhlaWdodEZvckFnZVJlZiwgaGVpZ2h0LCB3ZWlnaHQpIHtcbiAgICBjb25zdCByZWZTZWN0aW9uT2JqZWN0ID0gXy5maXJzdChoZWlnaHRGb3JBZ2VSZWYpO1xuICAgIGxldCBmb3JtYXR0ZWRTRFZhbHVlO1xuICAgIGlmIChyZWZTZWN0aW9uT2JqZWN0KSB7XG4gICAgICBjb25zdCByZWZPYmplY3RWYWx1ZXMgPSBPYmplY3Qua2V5cyhyZWZTZWN0aW9uT2JqZWN0KVxuICAgICAgICAubWFwKChrZXkpID0+IHJlZlNlY3Rpb25PYmplY3Rba2V5XSlcbiAgICAgICAgLm1hcCgoeCkgPT4geCk7XG4gICAgICBjb25zdCByZWZPYmplY3RLZXlzID0gT2JqZWN0LmtleXMocmVmU2VjdGlvbk9iamVjdCk7XG4gICAgICBjb25zdCBtaW5pbXVtVmFsdWUgPSByZWZPYmplY3RWYWx1ZXNbMV07XG4gICAgICBjb25zdCBtaW5SZWZlcmVuY2VQb2ludCA9IFtdO1xuICAgICAgaWYgKGhlaWdodCA8IG1pbmltdW1WYWx1ZSkge1xuICAgICAgICBtaW5SZWZlcmVuY2VQb2ludC5wdXNoKG1pbmltdW1WYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfLmZvckVhY2gocmVmT2JqZWN0VmFsdWVzLCAodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAodmFsdWUgPD0gaGVpZ2h0KSB7XG4gICAgICAgICAgICBtaW5SZWZlcmVuY2VQb2ludC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFzdFJlZmVyZW5jZVZhbHVlID0gXy5sYXN0KG1pblJlZmVyZW5jZVBvaW50KTtcbiAgICAgIGNvbnN0IGxhc3RWYWx1ZUluZGV4ID0gXy5maW5kSW5kZXgocmVmT2JqZWN0VmFsdWVzLCAobykgPT4ge1xuICAgICAgICByZXR1cm4gbyA9PT0gbGFzdFJlZmVyZW5jZVZhbHVlO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBTRFZhbHVlID0gcmVmT2JqZWN0S2V5c1tsYXN0VmFsdWVJbmRleF07XG4gICAgICBmb3JtYXR0ZWRTRFZhbHVlID0gU0RWYWx1ZS5yZXBsYWNlKCdTRCcsICcnKTtcbiAgICAgIGlmIChmb3JtYXR0ZWRTRFZhbHVlLmluY2x1ZGVzKCduZWcnKSkge1xuICAgICAgICBmb3JtYXR0ZWRTRFZhbHVlID0gZm9ybWF0dGVkU0RWYWx1ZS5zdWJzdHJpbmcoMSwgMCk7XG4gICAgICAgIGZvcm1hdHRlZFNEVmFsdWUgPSAnLScgKyBmb3JtYXR0ZWRTRFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZvcm1hdHRlZFNEVmFsdWUgPT09ICdTJyB8fFxuICAgICAgICBmb3JtYXR0ZWRTRFZhbHVlID09PSAnTCcgfHxcbiAgICAgICAgZm9ybWF0dGVkU0RWYWx1ZSA9PT0gJ00nIHx8XG4gICAgICAgIGZvcm1hdHRlZFNEVmFsdWUgPT09ICctNSdcbiAgICAgICkge1xuICAgICAgICBmb3JtYXR0ZWRTRFZhbHVlID0gJy00JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVpZ2h0ICYmIHdlaWdodCAmJiByZWZTZWN0aW9uT2JqZWN0ID8gZm9ybWF0dGVkU0RWYWx1ZSA6IG51bGw7XG4gIH1cblxuXG5cbiAgY2FsY1NvdXRoRWFzdEFzaWFOb25MYWJDVkRSaXNrKHNleDogJ00nIHwgJ0YnLCBzbW9rZXI6IGJvb2xlYW4sIGFnZTogbnVtYmVyLCBzYnA6IG51bWJlciwgYm1pOiBudW1iZXIpIHtcbiAgICAvLyBCaW4gZnVuY3Rpb25zXG4gICAgY29uc3QgZ2V0QWdlQmluID0gKGFnZSkgPT4gTWF0aC5mbG9vcigoTWF0aC5taW4oTWF0aC5tYXgoNDAsIGFnZSksIDc0KSAtIDQwKSAvIDUpO1xuICAgIGNvbnN0IGdldFNicEJpbiA9IChzYnApID0+IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKE1hdGgubWluKHNicCwgMTgwKSAtIDEyMCkgLyAyMCkgKyAxKTtcbiAgICBjb25zdCBnZXRCbWlCaW4gPSAoYm1pKSA9PiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChNYXRoLm1pbihibWksIDM1KSAtIDIwKSAvIDUpICsgMSk7XG5cbiAgICAvLyBWYXJpYWJsZXNcbiAgICBjb25zdCBzZXhJZHggPSBzZXggPT09ICdNJyA/IDAgOiAxO1xuICAgIGNvbnN0IHNtb2tlcklkeCA9IHNtb2tlciA/IDEgOiAwO1xuICAgIGNvbnN0IGFnZUlkeCA9IDYgLSBnZXRBZ2VCaW4oYWdlKTtcbiAgICBjb25zdCBibWlJZHggPSBnZXRCbWlCaW4oYm1pKTtcbiAgICBjb25zdCBzYnBJZHggPSA0IC0gZ2V0U2JwQmluKHNicCk7XG5cbiAgICByZXR1cm4gc291dGhFYXN0QXNpYUN2ZFJpc2tUYWJsZXNbc2V4SWR4XVtzbW9rZXJJZHhdW2FnZUlkeF1bc2JwSWR4XVtibWlJZHhdO1xuICB9XG5cbiAgaXNFbXB0eSh2YWwpIHtcbiAgICBpZiAoXG4gICAgICB2YWwgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdmFsID09PSBudWxsIHx8XG4gICAgICB2YWwgPT09ICcnIHx8XG4gICAgICB2YWwgPT09ICdudWxsJyB8fFxuICAgICAgdmFsID09PSAndW5kZWZpbmVkJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXJyYXlDb250YWlucyhhcnJheSwgbWVtYmVycykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG1lbWJlcnMpKSB7XG4gICAgICBpZiAobWVtYmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBjb250YWlucyA9IHRydWU7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVtYmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB2YWwgPSBtZW1iZXJzW2ldO1xuICAgICAgICBpZiAoYXJyYXkuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICAgIGNvbnRhaW5zID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRhaW5zO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihtZW1iZXJzKSAhPT0gLTE7XG4gICAgfVxuICB9XG4gIGV4dHJhY3RSZXBlYXRpbmdHcm91cFZhbHVlcyhrZXksIGFycmF5KSB7XG4gICAgY29uc3QgdmFsdWVzID0gYXJyYXkubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbVtrZXldO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbiAgZm9ybWF0RGF0ZSh2YWx1ZSwgZm9ybWF0LCBvZmZzZXQpIHtcbiAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJ3l5eXktTU0tZGQnO1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAnKzAzMDAnO1xuXG4gICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0RhdGVGb3JtYXRFeGNlcHRpb246IHZhbHVlIHBhc3NlZCAnICsgJ2lzIG5vdCBhIHZhbGlkIGRhdGUnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlOyAvLyBUT0RPIGltcGxlbWVudCB0aGlzXG4gICAgLy8gcmV0dXJuICRmaWx0ZXIoJ2RhdGUnKSh2YWx1ZSwgZm9ybWF0LCBvZmZzZXQpO1xuICB9XG5cbiAgYXJyYXlDb250YWluc0FueShhcnJheSwgbWVtYmVycykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG1lbWJlcnMpKSB7XG4gICAgICBpZiAobWVtYmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBsZXQgY29udGFpbnMgPSBmYWxzZTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW1iZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IG1lbWJlcnNbaV07XG4gICAgICAgIGlmIChhcnJheS5pbmRleE9mKHZhbCkgIT09IC0xKSB7XG4gICAgICAgICAgY29udGFpbnMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhcnJheS5pbmRleE9mKG1lbWJlcnMpICE9PSAtMTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgYSB0YXJnZXQgY29udHJvbCwgYW4gZW5jb3VudGVyIGFuZCBjb25jZXB0IHV1aWQuIElmIHRoZSB0YXJnZXQgY29udHJvbCBoYXMgYSB2YWx1ZSBpdCByZXR1cm5zIGl0XG4gICAqIG90aGVyd2lzZSBpdCB0cmllcyB0byBmaW5kIGl0IGluIHRoZSBlbmNvdW50ZXIuIEZpbmFsbHkgaXQgcmV0dXJucyBudWxsIG9mIGl0IGNhbid0IGZpbmQgZWl0aGVyIG9mIHRoZW0uXG4gICAqIEBwYXJhbSB0YXJnZXRDb250cm9sIFxuICAgKiBAcGFyYW0gcmF3RW5jb3VudGVyIFxuICAgKiBAcGFyYW0gdXVpZCBcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldE9ic0Zyb21Db250cm9sT3JFbmNvdW50ZXIodGFyZ2V0Q29udHJvbCxyYXdFbmNvdW50ZXIsdXVpZCk6IGFueSB7XG4gICAgY29uc3QgZmluZE9icyA9IChvYnMsIHV1aWQpID0+IHtcbiAgICAgIGxldCByZXN1bHQ7XG4gICAgICBvYnM/LnNvbWUobyA9PiByZXN1bHQgPSBvPy5jb25jZXB0Py51dWlkID09PSB1dWlkID8gbyA6IGZpbmRPYnMoby5ncm91cE1lbWJlcnMgfHwgW10sIHV1aWQpKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IG9ic1ZhbHVlID0gZmluZE9icyhyYXdFbmNvdW50ZXI/Lm9icywgdXVpZCk/LnZhbHVlO1xuICAgIHJldHVybiAhIXRhcmdldENvbnRyb2wgPyB0YXJnZXRDb250cm9sIDogdHlwZW9mIG9ic1ZhbHVlID09PSAnb2JqZWN0JyA/IG9ic1ZhbHVlLnV1aWQgOiAhIW9ic1ZhbHVlID8gb2JzVmFsdWUgOiBudWxsXG4gIH1cblxuICBnZXQgaGVscGVyRnVuY3Rpb25zKCkge1xuICAgIGNvbnN0IGhlbHBlciA9IHRoaXM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFycmF5Q29udGFpbnNBbnk6IGhlbHBlci5hcnJheUNvbnRhaW5zQW55LFxuICAgICAgY2FsY0JNSTogaGVscGVyLmNhbGNCTUksXG4gICAgICBjYWxjQk1JRm9yQWdlWnNjb3JlOiBoZWxwZXIuY2FsY0JNSUZvckFnZVpzY29yZSxcbiAgICAgIGNhbGNXZWlnaHRGb3JIZWlnaHRac2NvcmU6IGhlbHBlci5jYWxjV2VpZ2h0Rm9ySGVpZ2h0WnNjb3JlLFxuICAgICAgY2FsY0hlaWdodEZvckFnZVpzY29yZTogaGVscGVyLmNhbGNIZWlnaHRGb3JBZ2Vac2NvcmUsXG4gICAgICBjYWxjU291dGhFYXN0QXNpYU5vbkxhYkNWRFJpc2s6IGhlbHBlci5jYWxjU291dGhFYXN0QXNpYU5vbkxhYkNWRFJpc2ssXG4gICAgICBpc0VtcHR5OiBoZWxwZXIuaXNFbXB0eSxcbiAgICAgIGFycmF5Q29udGFpbnM6IGhlbHBlci5hcnJheUNvbnRhaW5zLFxuICAgICAgZXh0cmFjdFJlcGVhdGluZ0dyb3VwVmFsdWVzOiBoZWxwZXIuZXh0cmFjdFJlcGVhdGluZ0dyb3VwVmFsdWVzLFxuICAgICAgZ2V0T2JzRnJvbUNvbnRyb2xPckVuY291bnRlcjogaGVscGVyLmdldE9ic0Zyb21Db250cm9sT3JFbmNvdW50ZXJcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
// South East Asia Non Laboratory CVD Risk Array of Arrays
|
|
2
|
+
// Vertically we have the BMI value eg for the first array [26(bmi < 20), 28(bmi 20 - 24), 30(bmi 25 - 29), 32(bmi 30 - 35), 34(bmi >= 35)]
|
|
3
|
+
export const southEastAsiaCvdRiskTables = [
|
|
4
|
+
// Men
|
|
5
|
+
[
|
|
6
|
+
// Non smoker
|
|
7
|
+
[
|
|
8
|
+
// Age 70 - 74
|
|
9
|
+
[
|
|
10
|
+
[26, 28, 30, 32, 34],
|
|
11
|
+
[21, 23, 25, 26, 28],
|
|
12
|
+
[17, 19, 20, 21, 23],
|
|
13
|
+
[14, 15, 16, 17, 18],
|
|
14
|
+
[11, 12, 13, 14, 15], // sbp < 120
|
|
15
|
+
],
|
|
16
|
+
// Age 65 - 69
|
|
17
|
+
[
|
|
18
|
+
[20, 22, 24, 26, 28],
|
|
19
|
+
[16, 17, 19, 21, 22],
|
|
20
|
+
[12, 14, 15, 16, 18],
|
|
21
|
+
[10, 11, 12, 13, 14],
|
|
22
|
+
[8, 8, 9, 10, 11], // < 120
|
|
23
|
+
],
|
|
24
|
+
// Age 60 - 64
|
|
25
|
+
[
|
|
26
|
+
[15, 17, 19, 21, 23],
|
|
27
|
+
[12, 13, 14, 16, 18],
|
|
28
|
+
[9, 10, 11, 12, 14],
|
|
29
|
+
[7, 8, 8, 9, 10],
|
|
30
|
+
[5, 6, 6, 7, 8], // sbp < 120
|
|
31
|
+
],
|
|
32
|
+
// Age 55 - 59
|
|
33
|
+
[
|
|
34
|
+
[12, 13, 15, 16, 18],
|
|
35
|
+
[9, 10, 11, 12, 14],
|
|
36
|
+
[7, 7, 8, 9, 10],
|
|
37
|
+
[5, 5, 6, 7, 8],
|
|
38
|
+
[4, 4, 4, 5, 6], // sbp < 120
|
|
39
|
+
],
|
|
40
|
+
// Age 50 - 54
|
|
41
|
+
[
|
|
42
|
+
[9, 10, 11, 13, 15],
|
|
43
|
+
[7, 7, 8, 9, 11],
|
|
44
|
+
[5, 5, 6, 7, 8],
|
|
45
|
+
[3, 4, 4, 5, 6],
|
|
46
|
+
[2, 3, 3, 4, 4], // sbp < 120
|
|
47
|
+
],
|
|
48
|
+
// Age 45 - 49
|
|
49
|
+
[
|
|
50
|
+
[7, 8, 9, 10, 12],
|
|
51
|
+
[5, 6, 6, 7, 8],
|
|
52
|
+
[3, 4, 4, 5, 6],
|
|
53
|
+
[2, 3, 3, 4, 4],
|
|
54
|
+
[2, 2, 2, 2, 3], // < 120
|
|
55
|
+
],
|
|
56
|
+
// Age 40 - 44
|
|
57
|
+
[
|
|
58
|
+
[5, 6, 7, 8, 10],
|
|
59
|
+
[4, 4, 5, 6, 7],
|
|
60
|
+
[2, 3, 3, 4, 4],
|
|
61
|
+
[2, 2, 2, 3, 3],
|
|
62
|
+
[1, 1, 2, 2, 2],
|
|
63
|
+
],
|
|
64
|
+
],
|
|
65
|
+
// Smoker
|
|
66
|
+
[
|
|
67
|
+
// Age 70 - 74
|
|
68
|
+
[
|
|
69
|
+
[34, 36, 39, 41, 44],
|
|
70
|
+
[28, 30, 32, 34, 36],
|
|
71
|
+
[23, 24, 26, 28, 30],
|
|
72
|
+
[18, 20, 21, 23, 24],
|
|
73
|
+
[15, 16, 17, 18, 20], // < 120
|
|
74
|
+
],
|
|
75
|
+
// Age 65 - 69
|
|
76
|
+
[
|
|
77
|
+
[28, 30, 33, 36, 39],
|
|
78
|
+
[22, 24, 26, 29, 31],
|
|
79
|
+
[18, 19, 21, 23, 25],
|
|
80
|
+
[14, 15, 16, 18, 20],
|
|
81
|
+
[11, 12, 13, 14, 16], // < 120
|
|
82
|
+
],
|
|
83
|
+
// Age 60 - 64
|
|
84
|
+
[
|
|
85
|
+
[23, 25, 28, 31, 34],
|
|
86
|
+
[18, 18, 20, 22, 24],
|
|
87
|
+
[14, 15, 17, 19, 21],
|
|
88
|
+
[10, 12, 13, 14, 16],
|
|
89
|
+
[8, 9, 10, 11, 12], // < 120
|
|
90
|
+
],
|
|
91
|
+
// Age 55 - 59
|
|
92
|
+
[
|
|
93
|
+
[19, 21, 24, 27, 30],
|
|
94
|
+
[14, 16, 18, 20, 23],
|
|
95
|
+
[11, 12, 13, 15, 17],
|
|
96
|
+
[8, 9, 10, 11, 13],
|
|
97
|
+
[6, 7, 7, 8, 10],
|
|
98
|
+
],
|
|
99
|
+
// Age 50 - 54
|
|
100
|
+
[
|
|
101
|
+
[15, 18, 20, 23, 27],
|
|
102
|
+
[11, 13, 15, 17, 20],
|
|
103
|
+
[8, 9, 11, 12, 14],
|
|
104
|
+
[6, 7, 8, 9, 11],
|
|
105
|
+
[4, 5, 6, 7, 8],
|
|
106
|
+
],
|
|
107
|
+
// Age 45 - 49
|
|
108
|
+
[
|
|
109
|
+
[13, 15, 17, 20, 23],
|
|
110
|
+
[9, 10, 12, 14, 17],
|
|
111
|
+
[6, 7, 9, 10, 12],
|
|
112
|
+
[4, 5, 6, 7, 8],
|
|
113
|
+
[3, 4, 4, 5, 6],
|
|
114
|
+
],
|
|
115
|
+
// Age 40 - 44
|
|
116
|
+
[
|
|
117
|
+
[10, 12, 14, 17, 20],
|
|
118
|
+
[7, 8, 10, 12, 14],
|
|
119
|
+
[5, 6, 7, 8, 10],
|
|
120
|
+
[3, 4, 5, 6, 7],
|
|
121
|
+
[2, 3, 3, 4, 5],
|
|
122
|
+
],
|
|
123
|
+
],
|
|
124
|
+
],
|
|
125
|
+
// Women
|
|
126
|
+
[
|
|
127
|
+
// Non smoker
|
|
128
|
+
[
|
|
129
|
+
// Age 70 -74
|
|
130
|
+
[
|
|
131
|
+
[21, 22, 22, 23, 24],
|
|
132
|
+
[17, 18, 19, 19, 20],
|
|
133
|
+
[15, 15, 16, 16, 17],
|
|
134
|
+
[12, 12, 13, 13, 14],
|
|
135
|
+
[10, 10, 11, 11, 11], // < 120
|
|
136
|
+
],
|
|
137
|
+
// Age 65 - 69
|
|
138
|
+
[
|
|
139
|
+
[16, 17, 18, 18, 19],
|
|
140
|
+
[13, 14, 14, 15, 15],
|
|
141
|
+
[11, 11, 11, 12, 12],
|
|
142
|
+
[9, 9, 9, 10, 10],
|
|
143
|
+
[7, 7, 7, 8, 8],
|
|
144
|
+
],
|
|
145
|
+
// Age 60 - 64
|
|
146
|
+
[
|
|
147
|
+
[13, 13, 14, 14, 15],
|
|
148
|
+
[10, 10, 11, 11, 12],
|
|
149
|
+
[8, 8, 8, 9, 9],
|
|
150
|
+
[6, 6, 7, 7, 7],
|
|
151
|
+
[5, 5, 5, 5, 6],
|
|
152
|
+
],
|
|
153
|
+
// Age 55 - 59
|
|
154
|
+
[
|
|
155
|
+
[10, 10, 11, 11, 12],
|
|
156
|
+
[8, 8, 8, 9, 9],
|
|
157
|
+
[6, 6, 6, 7, 7],
|
|
158
|
+
[4, 5, 5, 5, 5],
|
|
159
|
+
[3, 3, 4, 4, 4],
|
|
160
|
+
],
|
|
161
|
+
// Age 50 - 54
|
|
162
|
+
[
|
|
163
|
+
[8, 8, 8, 9, 9],
|
|
164
|
+
[6, 6, 6, 7, 7],
|
|
165
|
+
[4, 4, 5, 5, 5],
|
|
166
|
+
[3, 3, 3, 4, 4],
|
|
167
|
+
[2, 2, 3, 3, 3],
|
|
168
|
+
],
|
|
169
|
+
// Age 45 - 49
|
|
170
|
+
[
|
|
171
|
+
[6, 6, 7, 7, 7],
|
|
172
|
+
[4, 5, 5, 5, 5],
|
|
173
|
+
[3, 3, 3, 4, 4],
|
|
174
|
+
[2, 2, 2, 3, 3],
|
|
175
|
+
[2, 2, 2, 2, 2],
|
|
176
|
+
],
|
|
177
|
+
// Age 40 - 44
|
|
178
|
+
[
|
|
179
|
+
[5, 5, 5, 5, 6],
|
|
180
|
+
[3, 3, 4, 4, 4],
|
|
181
|
+
[2, 2, 3, 3, 3],
|
|
182
|
+
[2, 2, 2, 2, 2],
|
|
183
|
+
[1, 1, 1, 1, 1],
|
|
184
|
+
],
|
|
185
|
+
],
|
|
186
|
+
// Smoker
|
|
187
|
+
[
|
|
188
|
+
// Age 70 - 74
|
|
189
|
+
[
|
|
190
|
+
[30, 31, 32, 33, 34],
|
|
191
|
+
[25, 26, 27, 28, 29],
|
|
192
|
+
[21, 22, 22, 23, 24],
|
|
193
|
+
[17, 18, 19, 19, 20],
|
|
194
|
+
[14, 15, 15, 16, 17],
|
|
195
|
+
],
|
|
196
|
+
// Age 65 - 69
|
|
197
|
+
[
|
|
198
|
+
[25, 26, 27, 29, 30],
|
|
199
|
+
[21, 22, 22, 23, 24],
|
|
200
|
+
[17, 18, 18, 19, 20],
|
|
201
|
+
[14, 14, 15, 15, 16],
|
|
202
|
+
[11, 11, 12, 12, 13],
|
|
203
|
+
],
|
|
204
|
+
// Age 60 - 64
|
|
205
|
+
[
|
|
206
|
+
[21, 22, 23, 25, 26],
|
|
207
|
+
[17, 18, 19, 20, 21],
|
|
208
|
+
[13, 14, 15, 16, 16],
|
|
209
|
+
[11, 11, 12, 12, 13],
|
|
210
|
+
[8, 9, 9, 10, 10],
|
|
211
|
+
],
|
|
212
|
+
// Age 55 - 59
|
|
213
|
+
[
|
|
214
|
+
[18, 19, 20, 21, 22],
|
|
215
|
+
[14, 15, 15, 16, 17],
|
|
216
|
+
[11, 11, 12, 13, 13],
|
|
217
|
+
[8, 9, 9, 10, 10],
|
|
218
|
+
[6, 7, 7, 7, 8],
|
|
219
|
+
],
|
|
220
|
+
// Age 50 - 54
|
|
221
|
+
[
|
|
222
|
+
[15, 16, 17, 18, 19],
|
|
223
|
+
[11, 12, 13, 14, 14],
|
|
224
|
+
[9, 9, 10, 10, 11],
|
|
225
|
+
[6, 7, 7, 8, 8],
|
|
226
|
+
[5, 5, 5, 6, 6],
|
|
227
|
+
],
|
|
228
|
+
// Age 45 - 49
|
|
229
|
+
[
|
|
230
|
+
[13, 14, 14, 15, 16],
|
|
231
|
+
[9, 10, 11, 11, 12],
|
|
232
|
+
[7, 7, 8, 8, 9],
|
|
233
|
+
[5, 5, 6, 6, 6],
|
|
234
|
+
[4, 4, 4, 4, 5],
|
|
235
|
+
],
|
|
236
|
+
// Age 40 - 44
|
|
237
|
+
[
|
|
238
|
+
[11, 11, 12, 13, 14],
|
|
239
|
+
[8, 8, 9, 9, 10],
|
|
240
|
+
[5, 6, 6, 7, 7],
|
|
241
|
+
[4, 4, 4, 5, 5],
|
|
242
|
+
[3, 3, 3, 3, 4],
|
|
243
|
+
],
|
|
244
|
+
],
|
|
245
|
+
],
|
|
246
|
+
];
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlzay1kYXRhc2V0LXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvZm9ybS1lbnRyeS9oZWxwZXJzL3Jpc2stZGF0YXNldC10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFFMUQsMklBQTJJO0FBRTNJLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHO0lBQ3hDLE1BQU07SUFDTjtRQUNFLGFBQWE7UUFDYjtZQUNFLGNBQWM7WUFDZDtnQkFDRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVk7YUFDbkM7WUFDRCxjQUFjO1lBQ2Q7Z0JBQ0UsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLENBQUMsRUFBRSxDQUFDLEVB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LEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUTthQUMvQjtZQUNELGNBQWM7WUFDZDtnQkFDRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVE7YUFDL0I7WUFDRCxjQUFjO1lBQ2Q7Z0JBQ0UsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixD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QyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNoQjtZQUNELGNBQWM7WUFDZDtnQkFDRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2hCO1lBQ0QsY0FBYztZQUNkO2dCQUNFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDaEI7WUFDRCxjQUFjO1lBQ2Q7Z0JBQ0UsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNoQjtTQUNGO1FBRUQsU0FBUztRQUNUO1lBQ0UsY0FBYztZQUNkO2dCQUNFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3JCO1lBQ0QsY0FBYztZQUNkO2dCQUNFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3JCO1lBQ0QsY0FBYztZQUNkO2dCQUNFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ2xCO1lBQ0QsY0FBYztZQUNkO2dCQUNFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2hCO1lBQ0QsY0FBYztZQUNkO2dCQUNFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDaEI7WUFDRCxjQUFjO1lBQ2Q7Z0JBQ0UsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2hCO1lBQ0QsY0FBYztZQUNkO2dCQUNFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNoQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNoQjtTQUNGO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU291dGggRWFzdCBBc2lhIE5vbiBMYWJvcmF0b3J5IENWRCBSaXNrIEFycmF5IG9mIEFycmF5c1xuXG4vLyBWZXJ0aWNhbGx5IHdlIGhhdmUgdGhlIEJNSSB2YWx1ZSBlZyBmb3IgdGhlIGZpcnN0IGFycmF5IFsyNihibWkgPCAyMCksIDI4KGJtaSAyMCAtIDI0KSwgMzAoYm1pIDI1IC0gMjkpLCAzMihibWkgMzAgLSAzNSksIDM0KGJtaSA+PSAzNSldXG5cbmV4cG9ydCBjb25zdCBzb3V0aEVhc3RBc2lhQ3ZkUmlza1RhYmxlcyA9IFtcbiAgLy8gTWVuXG4gIFtcbiAgICAvLyBOb24gc21va2VyXG4gICAgW1xuICAgICAgLy8gQWdlIDcwIC0gNzRcbiAgICAgIFtcbiAgICAgICAgWzI2LCAyOCwgMzAsIDMyLCAzNF0sIC8vIFNCUCDiiaUxODBcbiAgICAgICAgWzIxLCAyMywgMjUsIDI2LCAyOF0sIC8vIFNCUCAxNjAtMTc5XG4gICAgICAgIFsxNywgMTksIDIwLCAyMSwgMjNdLCAvLyBTQlAgMTQwLTE1OVxuICAgICAgICBbMTQsIDE1LCAxNiwgMTcsIDE4XSwgLy8gU0JQIDEyMC0xMzlcbiAgICAgICAgWzExLCAxMiwgMTMsIDE0LCAxNV0sIC8vIHNicCA8IDEyMFxuICAgICAgXSxcbiAgICAgIC8vIEFnZSA2NSAtIDY5XG4gICAgICBbXG4gICAgICAgIFsyMCwgMjIsIDI0LCAyNiwgMjhdLCAvLyBzYnAg4omlMTgwXG4gICAgICAgIFsxNiwgMTcsIDE5LCAyMSwgMjJdLCAvLyBzYnAgMTYwLTE3OVxuICAgICAgICBbMTIsIDE0LCAxNSwgMTYsIDE4XSwgLy8gc2JwIDE0MC0xNTlcbiAgICAgICAgWzEwLCAxMSwgMTIsIDEzLCAxNF0sIC8vIHNicCAxMjAtMTM5XG4gICAgICAgIFs4LCA4LCA5LCAxMCwgMTFdLCAvLyA8IDEyMFxuICAgICAgXSxcbiAgICAgIC8vIEFnZSA2MCAtIDY0XG4gICAgICBbXG4gICAgICAgIFsxNSwgMTcsIDE5LCAyMSwgMjNdLCAvLyBzYnAg4omlMTgwXG4gICAgICAgIFsxMiwgMTMsIDE0LCAxNiwgMThdLCAvLyBzYnAgMTYwLTE3OVxuICAgICAgICBbOSwgMTAsIDExLCAxMiwgMTRdLCAvLyBzYnAgMTQwLTE1OVxuICAgICAgICBbNywgOCwgOCwgOSwgMTBdLCAvLyBzYnAgMTIwLTEzOVxuICAgICAgICBbNSwgNiwgNiwgNywgOF0sIC8vIHNicCA8IDEyMFxuICAgICAgXSxcbiAgICAgIC8vIEFnZSA1NSAtIDU5XG4gICAgICBbXG4gICAgICAgIFsxMiwgMTMsIDE1LCAxNiwgMThdLCAvLyBzYnAg4omlMTgwXG4gICAgICAgIFs5LCAxMCwgMTEsIDEyLCAxNF0sIC8vIHNicCAxNjAtMTc5XG4gICAgICAgIFs3LCA3LCA4LCA5LCAxMF0sIC8vIHNicCAxNDAtMTU5XG4gICAgICAgIFs1LCA1LCA2LCA3LCA4XSwgLy8gc2JwIDEyMC0xMzlcbiAgICAgICAgWzQsIDQsIDQsIDUsIDZdLCAvLyBzYnAgPCAxMjBcbiAgICAgIF0sXG4gICAgICAvLyBBZ2UgNTAgLSA1NFxuICAgICAgW1xuICAgICAgICBbOSwgMTAsIDExLCAxMywgMTVdLCAvLyBzYnAg4omlMTgwXG4gICAgICAgIFs3LCA3LCA4LCA5LCAxMV0sIC8vIHNicCAxNjAtMTc5XG4gICAgICAgIFs1LCA1LCA2LCA3LCA4XSwgLy8gc2JwIDE0MC0xNTlcbiAgICAgICAgWzMsIDQsIDQsIDUsIDZdLCAvLyBzYnAgMTIwLTEzOVxuICAgICAgICBbMiwgMywgMywgNCwgNF0sIC8vIHNicCA8IDEyMFxuICAgICAgXSxcbiAgICAgIC8vIEFnZSA0NSAtIDQ5XG4gICAgICBbXG4gICAgICAgIFs3LCA4LCA5LCAxMCwgMTJdLCAvLyDiiaUxODBcbiAgICAgICAgWzUsIDYsIDYsIDcsIDhdLCAvLyAxNjAtMTc5XG4gICAgICAgIFszLCA0LCA0LCA1LCA2XSwgLy8gMTQwLTE1OVxuICAgICAgICBbMiwgMywgMywgNCwgNF0sIC8vIDEyMC0xMzlcbiAgICAgICAgWzIsIDIsIDIsIDIsIDNdLCAvLyA8IDEyMFxuICAgICAgXSxcbiAgICAgIC8vIEFnZSA0MCAtIDQ0XG4gICAgICBbXG4gICAgICAgIFs1LCA2LCA3LCA4LCAxMF0sIC8vIOKJpTE4MFxuICAgICAgICBbNCwgNCwgNSwgNiwgN10sIC8vIDE2MC0xNzlcbiAgICAgICAgWzIsIDMsIDMsIDQsIDRdLCAvLyAxNDAtMTU5XG4gICAgICAgIFsyLCAyLCAyLCAzLCAzXSwgLy8gMTIwLTEzOVxuICAgICAgICBbMSwgMSwgMiwgMiwgMl0sXG4gICAgICBdLFxuICAgIF0sXG5cbiAgICAvLyBTbW9rZXJcbiAgICBbXG4gICAgICAvLyBBZ2UgNzAgLSA3NFxuICAgICAgW1xuICAgICAgICBbMzQsIDM2LCAzOSwgNDEsIDQ0XSwgLy8g4omlMTgwXG4gICAgICAgIFsyOCwgMzAsIDMyLCAzNCwgMzZdLCAvLyAxNjAtMTc5XG4gICAgICAgIFsyMywgMjQsIDI2LCAyOCwgMzBdLCAvLyAxNDAtMTU5XG4gICAgICAgIFsxOCwgMjAsIDIxLCAyMywgMjRdLCAvLyAxMjAtMTM5XG4gICAgICAgIFsxNSwgMTYsIDE3LCAxOCwgMjBdLCAvLyA8IDEyMFxuICAgICAgXSxcbiAgICAgIC8vIEFnZSA2NSAtIDY5XG4gICAgICBbXG4gICAgICAgIFsyOCwgMzAsIDMzLCAzNiwgMzldLCAvLyDiiaUxODBcbiAgICAgICAgWzIyLCAyNCwgMjYsIDI5LCAzMV0sIC8vIDE2MC0xNzlcbiAgICAgICAgWzE4LCAxOSwgMjEsIDIzLCAyNV0sIC8vIDE0MC0xNTlcbiAgICAgICAgWzE0LCAxNSwgMTYsIDE4LCAyMF0sIC8vIDEyMC0xMzlcbiAgICAgICAgWzExLCAxMiwgMTMsIDE0LCAxNl0sIC8vIDwgMTIwXG4gICAgICBdLFxuICAgICAgLy8gQWdlIDYwIC0gNjRcbiAgICAgIFtcbiAgICAgICAgWzIzLCAyNSwgMjgsIDMxLCAzNF0sIC8vIOKJpTE4MFxuICAgICAgICBbMTgsIDE4LCAyMCwgMjIsIDI0XSwgLy8gMTYwLTE3OVxuICAgICAgICBbMTQsIDE1LCAxNywgMTksIDIxXSwgLy8gMTQwLTE1OVxuICAgICAgICBbMTAsIDEyLCAxMywgMTQsIDE2XSwgLy8gMTIwLTEzOVxuICAgICAgICBbOCwgOSwgMTAsIDExLCAxMl0sIC8vIDwgMTIwXG4gICAgICBdLFxuICAgICAgLy8gQWdlIDU1IC0gNTlcbiAgICAgIFtcbiAgICAgICAgWzE5LCAyMSwgMjQsIDI3LCAzMF0sIC8vIOKJpTE4MFxuICAgICAgICBbMTQsIDE2LCAxOCwgMjAsIDIzXSwgLy8gMTYwLTE3OVxuICAgICAgICBbMTEsIDEyLCAxMywgMTUsIDE3XSwgLy8gMTQwLTE1OVxuICAgICAgICBbOCwgOSwgMTAsIDExLCAxM10sIC8vIDEyMC0xMzlcbiAgICAgICAgWzYsIDcsIDcsIDgsIDEwXSxcbiAgICAgIF0sXG4gICAgICAvLyBBZ2UgNTAgLSA1NFxuICAgICAgW1xuICAgICAgICBbMTUsIDE4LCAyMCwgMjMsIDI3XSwgLy8g4omlMTgwXG4gICAgICAgIFsxMSwgMTMsIDE1LCAxNywgMjBdLCAvLyAxNjAtMTc5XG4gICAgICAgIFs4LCA5LCAxMSwgMTIsIDE0XSwgLy8gMTQwLTE1OVxuICAgICAgICBbNiwgNywgOCwgOSwgMTFdLCAvLyAxMjAtMTM5XG4gICAgICAgIFs0LCA1LCA2LCA3LCA4XSxcbiAgICAgIF0sXG4gICAgICAvLyBBZ2UgNDUgLSA0OVxuICAgICAgW1xuICAgICAgICBbMTMsIDE1LCAxNywgMjAsIDIzXSwgLy8g4omlMTgwXG4gICAgICAgIFs5LCAxMCwgMTIsIDE0LCAxN10sIC8vIDE2MC0xNzlcbiAgICAgICAgWzYsIDcsIDksIDEwLCAxMl0sIC8vIDE0MC0xNTlcbiAgICAgICAgWzQsIDUsIDYsIDcsIDhdLCAvLyAxMjAtMTM5XG4gICAgICAgIFszLCA0LCA0LCA1LCA2XSxcbiAgICAgIF0sXG4gICAgICAvLyBBZ2UgNDAgLSA0NFxuICAgICAgW1xuICAgICAgICBbMTAsIDEyLCAxNCwgMTcsIDIwXSwgLy8g4omlMTgwXG4gICAgICAgIFs3LCA4LCAxMCwgMTIsIDE0XSwgLy8gMTYwLTE3OVxuICAgICAgICBbNSwgNiwgNywgOCwgMTBdLCAvLyAxNDAtMTU5XG4gICAgICAgIFszLCA0LCA1LCA2LCA3XSwgLy8gMTIwLTEzOVxuICAgICAgICBbMiwgMywgMywgNCwgNV0sXG4gICAgICBdLFxuICAgIF0sXG4gIF0sXG5cbiAgLy8gV29tZW5cbiAgW1xuICAgIC8vIE5vbiBzbW9rZXJcbiAgICBbXG4gICAgICAvLyBBZ2UgNzAgLTc0XG4gICAgICBbXG4gICAgICAgIFsyMSwgMjIsIDIyLCAyMywgMjRdLCAvLyDiiaUxODBcbiAgICAgICAgWzE3LCAxOCwgMTksIDE5LCAyMF0sIC8vIDE2MC0xNzlcbiAgICAgICAgWzE1LCAxNSwgMTYsIDE2LCAxN10sIC8vIDE0MC0xNTlcbiAgICAgICAgWzEyLCAxMiwgMTMsIDEzLCAxNF0sIC8vIDEyMC0xMzlcbiAgICAgICAgWzEwLCAxMCwgMTEsIDExLCAxMV0sIC8vIDwgMTIwXG4gICAgICBdLFxuICAgICAgLy8gQWdlIDY1IC0gNjlcbiAgICAgIFtcbiAgICAgICAgWzE2LCAxNywgMTgsIDE4LCAxOV0sIC8vIOKJpTE4MFxuICAgICAgICBbMTMsIDE0LCAxNCwgMTUsIDE1XSwgLy8gMTYwLTE3OVxuICAgICAgICBbMTEsIDExLCAxMSwgMTIsIDEyXSwgLy8gMTQwLTE1OVxuICAgICAgICBbOSwgOSwgOSwgMTAsIDEwXSwgLy8gMTIwLTEzOVxuICAgICAgICBbNywgNywgNywgOCwgOF0sXG4gICAgICBdLFxuICAgICAgLy8gQWdlIDYwIC0gNjRcbiAgICAgIFtcbiAgICAgICAgWzEzLCAxMywgMTQsIDE0LCAxNV0sIC8vIOKJpTE4MFxuICAgICAgICBbMTAsIDEwLCAxMSwgMTEsIDEyXSwgLy8gMTYwLTE3OVxuICAgICAgICBbOCwgOCwgOCwgOSwgOV0sIC8vIDE0MC0xNTlcbiAgICAgICAgWzYsIDYsIDcsIDcsIDddLCAvLyAxMjAtMTM5XG4gICAgICAgIFs1LCA1LCA1LCA1LCA2XSxcbiAgICAgIF0sXG4gICAgICAvLyBBZ2UgNTUgLSA1OVxuICAgICAgW1xuICAgICAgICBbMTAsIDEwLCAxMSwgMTEsIDEyXSwgLy8g4omlMTgwXG4gICAgICAgIFs4LCA4LCA4LCA5LCA5XSwgLy8gMTYwLTE3OVxuICAgICAgICBbNiwgNiwgNiwgNywgN10sIC8vIDE0MC0xNTlcbiAgICAgICAgWzQsIDUsIDUsIDUsIDVdLCAvLyAxMjAtMTM5XG4gICAgICAgIFszLCAzLCA0LCA0LCA0XSxcbiAgICAgIF0sXG4gICAgICAvLyBBZ2UgNTAgLSA1NFxuICAgICAgW1xuICAgICAgICBbOCwgOCwgOCwgOSwgOV0sIC8vIOKJpTE4MFxuICAgICAgICBbNiwgNiwgNiwgNywgN10sIC8vIDE2MC0xNzlcbiAgICAgICAgWzQsIDQsIDUsIDUsIDVdLCAvLyAxNDAtMTU5XG4gICAgICAgIFszLCAzLCAzLCA0LCA0XSwgLy8gMTIwLTEzOVxuICAgICAgICBbMiwgMiwgMywgMywgM10sXG4gICAgICBdLFxuICAgICAgLy8gQWdlIDQ1IC0gNDlcbiAgICAgIFtcbiAgICAgICAgWzYsIDYsIDcsIDcsIDddLCAvLyDiiaUxODBcbiAgICAgICAgWzQsIDUsIDUsIDUsIDVdLCAvLyAxNjAtMTc5XG4gICAgICAgIFszLCAzLCAzLCA0LCA0XSwgLy8gMTQwLTE1OVxuICAgICAgICBbMiwgMiwgMiwgMywgM10sIC8vIDEyMC0xMzlcbiAgICAgICAgWzIsIDIsIDIsIDIsIDJdLFxuICAgICAgXSxcbiAgICAgIC8vIEFnZSA0MCAtIDQ0XG4gICAgICBbXG4gICAgICAgIFs1LCA1LCA1LCA1LCA2XSwgLy8g4omlMTgwXG4gICAgICAgIFszLCAzLCA0LCA0LCA0XSwgLy8gMTYwLTE3OVxuICAgICAgICBbMiwgMiwgMywgMywgM10sIC8vIDE0MC0xNTlcbiAgICAgICAgWzIsIDIsIDIsIDIsIDJdLCAvLyAxMjAtMTM5XG4gICAgICAgIFsxLCAxLCAxLCAxLCAxXSxcbiAgICAgIF0sXG4gICAgXSxcblxuICAgIC8vIFNtb2tlclxuICAgIFtcbiAgICAgIC8vIEFnZSA3MCAtIDc0XG4gICAgICBbXG4gICAgICAgIFszMCwgMzEsIDMyLCAzMywgMzRdLCAvLyDiiaUxODBcbiAgICAgICAgWzI1LCAyNiwgMjcsIDI4LCAyOV0sIC8vIDE2MC0xNzlcbiAgICAgICAgWzIxLCAyMiwgMjIsIDIzLCAyNF0sIC8vIDE0MC0xNTlcbiAgICAgICAgWzE3LCAxOCwgMTksIDE5LCAyMF0sIC8vIDEyMC0xMzlcbiAgICAgICAgWzE0LCAxNSwgMTUsIDE2LCAxN10sXG4gICAgICBdLFxuICAgICAgLy8gQWdlIDY1IC0gNjlcbiAgICAgIFtcbiAgICAgICAgWzI1LCAyNiwgMjcsIDI5LCAzMF0sIC8vIOKJpTE4MFxuICAgICAgICBbMjEsIDIyLCAyMiwgMjMsIDI0XSwgLy8gMTYwLTE3OVxuICAgICAgICBbMTcsIDE4LCAxOCwgMTksIDIwXSwgLy8gMTQwLTE1OVxuICAgICAgICBbMTQsIDE0LCAxNSwgMTUsIDE2XSwgLy8gMTIwLTEzOVxuICAgICAgICBbMTEsIDExLCAxMiwgMTIsIDEzXSxcbiAgICAgIF0sXG4gICAgICAvLyBBZ2UgNjAgLSA2NFxuICAgICAgW1xuICAgICAgICBbMjEsIDIyLCAyMywgMjUsIDI2XSwgLy8g4omlMTgwXG4gICAgICAgIFsxNywgMTgsIDE5LCAyMCwgMjFdLCAvLyAxNjAtMTc5XG4gICAgICAgIFsxMywgMTQsIDE1LCAxNiwgMTZdLCAvLyAxNDAtMTU5XG4gICAgICAgIFsxMSwgMTEsIDEyLCAxMiwgMTNdLCAvLyAxMjAtMTM5XG4gICAgICAgIFs4LCA5LCA5LCAxMCwgMTBdLFxuICAgICAgXSxcbiAgICAgIC8vIEFnZSA1NSAtIDU5XG4gICAgICBbXG4gICAgICAgIFsxOCwgMTksIDIwLCAyMSwgMjJdLCAvLyDiiaUxODBcbiAgICAgICAgWzE0LCAxNSwgMTUsIDE2LCAxN10sIC8vIDE2MC0xNzlcbiAgICAgICAgWzExLCAxMSwgMTIsIDEzLCAxM10sIC8vIDE0MC0xNTlcbiAgICAgICAgWzgsIDksIDksIDEwLCAxMF0sIC8vIDEyMC0xMzlcbiAgICAgICAgWzYsIDcsIDcsIDcsIDhdLFxuICAgICAgXSxcbiAgICAgIC8vIEFnZSA1MCAtIDU0XG4gICAgICBbXG4gICAgICAgIFsxNSwgMTYsIDE3LCAxOCwgMTldLCAvLyDiiaUxODBcbiAgICAgICAgWzExLCAxMiwgMTMsIDE0LCAxNF0sIC8vIDE2MC0xNzlcbiAgICAgICAgWzksIDksIDEwLCAxMCwgMTFdLCAvLyAxNDAtMTU5XG4gICAgICAgIFs2LCA3LCA3LCA4LCA4XSwgLy8gMTIwLTEzOVxuICAgICAgICBbNSwgNSwgNSwgNiwgNl0sXG4gICAgICBdLFxuICAgICAgLy8gQWdlIDQ1IC0gNDlcbiAgICAgIFtcbiAgICAgICAgWzEzLCAxNCwgMTQsIDE1LCAxNl0sIC8vIOKJpTE4MFxuICAgICAgICBbOSwgMTAsIDExLCAxMSwgMTJdLCAvLyAxNjAtMTc5XG4gICAgICAgIFs3LCA3LCA4LCA4LCA5XSwgLy8gMTQwLTE1OVxuICAgICAgICBbNSwgNSwgNiwgNiwgNl0sIC8vIDEyMC0xMzlcbiAgICAgICAgWzQsIDQsIDQsIDQsIDVdLFxuICAgICAgXSxcbiAgICAgIC8vIEFnZSA0MCAtIDQ0XG4gICAgICBbXG4gICAgICAgIFsxMSwgMTEsIDEyLCAxMywgMTRdLCAvLyDiiaUxODBcbiAgICAgICAgWzgsIDgsIDksIDksIDEwXSwgLy8gMTYwLTE3OVxuICAgICAgICBbNSwgNiwgNiwgNywgN10sIC8vIDE0MC0xNTlcbiAgICAgICAgWzQsIDQsIDQsIDUsIDVdLCAvLyAxMjAtMTM5XG4gICAgICAgIFszLCAzLCAzLCAzLCA0XSxcbiAgICAgIF0sXG4gICAgXSxcbiAgXSxcbl07XG4iXX0=
|